1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00

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:
Linus Torvalds 2025-02-28 15:39:17 -08:00
commit 3d7dc86581
3 changed files with 10 additions and 5 deletions

View file

@ -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.

View file

@ -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;

View file

@ -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);
}