PCI/iommu: blacklist DMAR on Intel G31/G33 chipsets
Some BIOSes (the Intel DG33BU, for example) wrongly claim to have DMAR when they don't. Avoid the resulting crashes when it doesn't work as expected. Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
1941246dd9
commit
cbda1ba898
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user