Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+10 -5
+2 -2
drivers/iommu/amd/iommu.c
··· 2043 2043 make_clear_dte(dev_data, dte, &new); 2044 2044 2045 2045 if (domain->iop.mode != PAGE_MODE_NONE) 2046 - new.data[0] = iommu_virt_to_phys(domain->iop.root); 2046 + new.data[0] |= iommu_virt_to_phys(domain->iop.root); 2047 2047 2048 2048 new.data[0] |= (domain->iop.mode & DEV_ENTRY_MODE_MASK) 2049 2049 << DEV_ENTRY_MODE_SHIFT; 2050 2050 2051 - new.data[0] |= DTE_FLAG_IR | DTE_FLAG_IW | DTE_FLAG_V; 2051 + new.data[0] |= DTE_FLAG_IR | DTE_FLAG_IW; 2052 2052 2053 2053 /* 2054 2054 * When SNP is enabled, we can only support TV=1 with non-zero domain ID.
+1
drivers/iommu/intel/dmar.c
··· 2043 2043 /* 2044 2044 * Enable fault control interrupt. 2045 2045 */ 2046 + guard(rwsem_read)(&dmar_global_lock); 2046 2047 for_each_iommu(iommu, drhd) { 2047 2048 u32 fault_status; 2048 2049 int ret;
+7 -3
drivers/iommu/intel/iommu.c
··· 3146 3146 iommu_device_sysfs_add(&iommu->iommu, NULL, 3147 3147 intel_iommu_groups, 3148 3148 "%s", iommu->name); 3149 + /* 3150 + * The iommu device probe is protected by the iommu_probe_device_lock. 3151 + * Release the dmar_global_lock before entering the device probe path 3152 + * to avoid unnecessary lock order splat. 3153 + */ 3154 + up_read(&dmar_global_lock); 3149 3155 iommu_device_register(&iommu->iommu, &intel_iommu_ops, NULL); 3156 + down_read(&dmar_global_lock); 3150 3157 3151 3158 iommu_pmu_register(iommu); 3152 3159 } ··· 4384 4377 static int context_setup_pass_through_cb(struct pci_dev *pdev, u16 alias, void *data) 4385 4378 { 4386 4379 struct device *dev = data; 4387 - 4388 - if (dev != &pdev->dev) 4389 - return 0; 4390 4380 4391 4381 return context_setup_pass_through(dev, PCI_BUS_NUM(alias), alias & 0xff); 4392 4382 }