IOMMU Fixes for Linux v6.14-rc4:
Including: - Intel VT-d fixes: - Fix suspicious RCU usage splat. - Fix passthrough for devices under PCIe-PCI bridge. - AMD-Vi fix: - Fix to preserve bits when updating device table entries. -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEr9jSbILcajRFYWYyK/BELZcBGuMFAmfB3IkACgkQK/BELZcB GuNcnQ/9ETPXq2qYDPpEyPRtPMlk0kPK6g0iEsyjo+Kwsxm79I0ApbLRvtwyxF0R ktDGWf1h5FD7xLd1daQWL7HMz+wS2mGea2NcPiQbegxPvVeAabAvtnZzkWWNI4Dd n22leOUvpEigrw8hPZ0WEkxLhKuy/AvE6uicXo9Ff9mrcoIzcsUgtKCQC7rAskLo PVOz4OHW0QmTi0Livkb40ZpfZM9oTUID9Kj6tTg0rBljlY1aHd486j+G62vbWxZw ZfiBIyn44hb51DWTITOhFuPrE6soeH7pfIyNDMWrUjCPmfL1GC0besjgwRnJRSPp w5UB0gYaji8VA2c02Ac797rQcH1y0UlGIWJpr+Ju9WkNQmPZmftApCCGRkpMgYOi +ZCDIDFEWEGeea7r/Gl62p+QSdUMROkOLJbA1Vv7uP8BB01Jk9BCqhCbO8oJaAFZ QOAEqztWqPwvsXrtwkrcIThIu1rEoHxLTHSwCEV+gRXtlQYGfVtNPRUwkMI04WpU aKGgAooK2EA2ayIrgD6wPlyJHDfXBNTLUqN8ml20RZd1RPD8GDvkmCVIp6yyYTBC ACelcb6JDK0MTk5AoLIor143QVIIXeNW49kZRbXamf8d/ZLelTmKxOerKrX32CzK E6H59M4Y4929GXLWK44OMVMxuHeIcbAJeIXRaQ8e6ecS22NvxFk= =3YIN -----END PGP SIGNATURE----- Merge tag 'iommu-fixes-v6.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux Pull iommu fixes from Joerg Roedel: - Intel VT-d fixes: - Fix suspicious RCU usage splat - Fix passthrough for devices under PCIe-PCI bridge - AMD-Vi fix: - Fix to preserve bits when updating device table entries * tag 'iommu-fixes-v6.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux: iommu/vt-d: Fix suspicious RCU usage iommu/vt-d: Remove device comparison in context_setup_pass_through_cb iommu/amd: Preserve default DTE fields when updating Host Page Table Root
This commit is contained in:
commit
3d7dc86581
3 changed files with 10 additions and 5 deletions
|
@ -2043,12 +2043,12 @@ static void set_dte_entry(struct amd_iommu *iommu,
|
|||
make_clear_dte(dev_data, dte, &new);
|
||||
|
||||
if (domain->iop.mode != PAGE_MODE_NONE)
|
||||
new.data[0] = iommu_virt_to_phys(domain->iop.root);
|
||||
new.data[0] |= iommu_virt_to_phys(domain->iop.root);
|
||||
|
||||
new.data[0] |= (domain->iop.mode & DEV_ENTRY_MODE_MASK)
|
||||
<< DEV_ENTRY_MODE_SHIFT;
|
||||
|
||||
new.data[0] |= DTE_FLAG_IR | DTE_FLAG_IW | DTE_FLAG_V;
|
||||
new.data[0] |= DTE_FLAG_IR | DTE_FLAG_IW;
|
||||
|
||||
/*
|
||||
* When SNP is enabled, we can only support TV=1 with non-zero domain ID.
|
||||
|
|
|
@ -2043,6 +2043,7 @@ int enable_drhd_fault_handling(unsigned int cpu)
|
|||
/*
|
||||
* Enable fault control interrupt.
|
||||
*/
|
||||
guard(rwsem_read)(&dmar_global_lock);
|
||||
for_each_iommu(iommu, drhd) {
|
||||
u32 fault_status;
|
||||
int ret;
|
||||
|
|
|
@ -3146,7 +3146,14 @@ int __init intel_iommu_init(void)
|
|||
iommu_device_sysfs_add(&iommu->iommu, NULL,
|
||||
intel_iommu_groups,
|
||||
"%s", iommu->name);
|
||||
/*
|
||||
* The iommu device probe is protected by the iommu_probe_device_lock.
|
||||
* Release the dmar_global_lock before entering the device probe path
|
||||
* to avoid unnecessary lock order splat.
|
||||
*/
|
||||
up_read(&dmar_global_lock);
|
||||
iommu_device_register(&iommu->iommu, &intel_iommu_ops, NULL);
|
||||
down_read(&dmar_global_lock);
|
||||
|
||||
iommu_pmu_register(iommu);
|
||||
}
|
||||
|
@ -4378,9 +4385,6 @@ static int context_setup_pass_through_cb(struct pci_dev *pdev, u16 alias, void *
|
|||
{
|
||||
struct device *dev = data;
|
||||
|
||||
if (dev != &pdev->dev)
|
||||
return 0;
|
||||
|
||||
return context_setup_pass_through(dev, PCI_BUS_NUM(alias), alias & 0xff);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue