• jimyan's avatar
    iommu/vt-d: Don't reject Host Bridge due to scope mismatch · 53291622
    jimyan authored
    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: default avatarjimyan <jimyan@baidu.com>
    Reviewed-by: default avatarJerry Snitselaar <jsnitsel@redhat.com>
    Reviewed-by: default avatarRoland Dreier <roland@purestorage.com>
    Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    53291622
dmar.c 55.6 KB