]> asedeno.scripts.mit.edu Git - linux.git/commit
iommu/vt-d: Don't reject Host Bridge due to scope mismatch
authorjimyan <jimyan@baidu.com>
Wed, 15 Jan 2020 03:03:55 +0000 (11:03 +0800)
committerJoerg Roedel <jroedel@suse.de>
Fri, 17 Jan 2020 09:57:30 +0000 (10:57 +0100)
commit53291622e2607db53ded78b534874b8fb515ba57
treefa027e96de975922ee80e0677dbdf23461b58aa2
parente2726daea583d81e447b71e09b79e67f618d6152
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 <jimyan@baidu.com>
Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
Reviewed-by: Roland Dreier <roland@purestorage.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/dmar.c