Skip to content

Commit 5329162

Browse files
jimyanjoergroedel
authored andcommitted
iommu/vt-d: Don't reject Host Bridge due to scope mismatch
On a system with two host bridges(0000:00:00.0,0000:80:00.0), iommu initialization fails with DMAR: Device scope type does not match for 0000:80:00.0 This is because the DMAR table reports this device as having scope 2 (ACPI_DMAR_SCOPE_TYPE_BRIDGE): but the device has a type 0 PCI header: 80:00.0 Class 0600: Device 8086:2020 (rev 06) 00: 86 80 20 20 47 05 10 00 06 00 00 06 10 00 00 00 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 86 80 00 00 30: 00 00 00 00 90 00 00 00 00 00 00 00 00 01 00 00 VT-d works perfectly on this system, so there's no reason to bail out on initialization due to this apparent scope mismatch. Add the class 0x06 ("PCI_BASE_CLASS_BRIDGE") as a heuristic for allowing DMAR initialization for non-bridge PCI devices listed with scope bridge. Signed-off-by: jimyan <[email protected]> Reviewed-by: Jerry Snitselaar <[email protected]> Reviewed-by: Roland Dreier <[email protected]> Signed-off-by: Lu Baolu <[email protected]> Signed-off-by: Joerg Roedel <[email protected]>
1 parent e2726da commit 5329162

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/iommu/dmar.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ int dmar_insert_dev_scope(struct dmar_pci_notify_info *info,
244244
info->dev->hdr_type != PCI_HEADER_TYPE_NORMAL) ||
245245
(scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE &&
246246
(info->dev->hdr_type == PCI_HEADER_TYPE_NORMAL &&
247-
info->dev->class >> 8 != PCI_CLASS_BRIDGE_OTHER))) {
247+
info->dev->class >> 16 != PCI_BASE_CLASS_BRIDGE))) {
248248
pr_warn("Device scope type does not match for %s\n",
249249
pci_name(info->dev));
250250
return -EINVAL;

0 commit comments

Comments
 (0)