]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iommu/amd: Fix alias device DTE setting
authorVasant Hegde <vasant.hegde@amd.com>
Thu, 11 Sep 2025 13:14:06 +0000 (13:14 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Sep 2025 09:16:51 +0000 (11:16 +0200)
[ Upstream commit a0c17ed907ac3326cf3c9d6007ea222a746f5cc2 ]

Commit 7bea695ada0 restructured DTE flag handling but inadvertently changed
the alias device configuration logic. This may cause incorrect DTE settings
for certain devices.

Add alias flag check before calling set_dev_entry_from_acpi(). Also move the
device iteration loop inside the alias check to restrict execution to cases
where alias devices are present.

Fixes: 7bea695ada0 ("iommu/amd: Introduce struct ivhd_dte_flags to store persistent DTE flags")
Cc: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Signed-off-by: Vasant Hegde <vasant.hegde@amd.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/iommu/amd/init.c

index 3a97cc667943ff7e504e1d5db3afb82234eed283..eef55aa4143c1f79f9ceec33c0e4d5c5afabca79 100644 (file)
@@ -1450,12 +1450,12 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,
                                    PCI_FUNC(e->devid));
 
                        devid = e->devid;
-                       for (dev_i = devid_start; dev_i <= devid; ++dev_i) {
-                               if (alias)
+                       if (alias) {
+                               for (dev_i = devid_start; dev_i <= devid; ++dev_i)
                                        pci_seg->alias_table[dev_i] = devid_to;
+                               set_dev_entry_from_acpi(iommu, devid_to, flags, ext_flags);
                        }
                        set_dev_entry_from_acpi_range(iommu, devid_start, devid, flags, ext_flags);
-                       set_dev_entry_from_acpi(iommu, devid_to, flags, ext_flags);
                        break;
                case IVHD_DEV_SPECIAL: {
                        u8 handle, type;