diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-09-13 14:47:33 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-09-13 14:47:33 -0700 |
commit | 0cb60efd03ed82d02f44a14594714367e59e8abc (patch) | |
tree | 23d9443331673a75e296781031f652e3e87687cc /drivers/pci/intel-iommu.c | |
parent | c19e80808b34b3de5c20884f11f58c3b6988daff (diff) | |
parent | 395a125c6237802b19bf22b41017c99ff57f1024 (diff) | |
download | op-kernel-dev-0cb60efd03ed82d02f44a14594714367e59e8abc.zip op-kernel-dev-0cb60efd03ed82d02f44a14594714367e59e8abc.tar.gz |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6:
PCI: re-add debug prints for unmodified BARs
PCI: fix pciehp_free_irq()
PCI Hotplug: fakephp: fix deadlock... again
PCI: Fix printk warnings in setup-bus.c
PCI: Fix printk warnings in probe.c
PCI/iommu: blacklist DMAR on Intel G31/G33 chipsets
Diffstat (limited to 'drivers/pci/intel-iommu.c')
-rw-r--r-- | drivers/pci/intel-iommu.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c index 8d0e60a..c3edcdc 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c @@ -2348,11 +2348,34 @@ static void __init iommu_exit_mempool(void) } +static int blacklist_iommu(const struct dmi_system_id *id) +{ + printk(KERN_INFO "%s detected; disabling IOMMU\n", + id->ident); + dmar_disabled = 1; + return 0; +} + +static struct dmi_system_id __initdata intel_iommu_dmi_table[] = { + { /* Some DG33BU BIOS revisions advertised non-existent VT-d */ + .callback = blacklist_iommu, + .ident = "Intel DG33BU", + { DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), + DMI_MATCH(DMI_BOARD_NAME, "DG33BU"), + } + }, + { } +}; + + void __init detect_intel_iommu(void) { if (swiotlb || no_iommu || iommu_detected || dmar_disabled) return; if (early_dmar_detect()) { + dmi_check_system(intel_iommu_dmi_table); + if (dmar_disabled) + return; iommu_detected = 1; } } |