diff options
| author | Ben Hutchings <ben@decadent.org.uk> | 2010-04-03 14:38:43 -0400 | 
|---|---|---|
| committer | David Woodhouse <David.Woodhouse@intel.com> | 2010-05-19 03:38:11 -0400 | 
| commit | fd0c8894893cba722bdea12de25b49f980795d06 (patch) | |
| tree | 1101c32f0c154df0255252ea8bfc1be3dbb74184 | |
| parent | 3a8663ee6171e1e61f5c139ed65aa0a769380f00 (diff) | |
intel-iommu: Set a more specific taint flag for invalid BIOS DMAR tables
We now know how to deal with these tables so that they are harmless.
Set TAINT_FIRMWARE_WORKAROUND instead of the default TAINT_WARN.
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
| -rw-r--r-- | drivers/pci/dmar.c | 28 | 
1 files changed, 16 insertions, 12 deletions
| diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c index 1959cdadad51..f4c51709d132 100644 --- a/drivers/pci/dmar.c +++ b/drivers/pci/dmar.c | |||
| @@ -360,12 +360,14 @@ dmar_parse_one_rhsa(struct acpi_dmar_header *header) | |||
| 360 | return 0; | 360 | return 0; | 
| 361 | } | 361 | } | 
| 362 | } | 362 | } | 
| 363 | WARN(1, "Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n" | 363 | WARN_TAINT( | 
| 364 | "BIOS vendor: %s; Ver: %s; Product Version: %s\n", | 364 | 1, TAINT_FIRMWARE_WORKAROUND, | 
| 365 | drhd->reg_base_addr, | 365 | "Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n" | 
| 366 | dmi_get_system_info(DMI_BIOS_VENDOR), | 366 | "BIOS vendor: %s; Ver: %s; Product Version: %s\n", | 
| 367 | dmi_get_system_info(DMI_BIOS_VERSION), | 367 | drhd->reg_base_addr, | 
| 368 | dmi_get_system_info(DMI_PRODUCT_VERSION)); | 368 | dmi_get_system_info(DMI_BIOS_VENDOR), | 
| 369 | dmi_get_system_info(DMI_BIOS_VERSION), | ||
| 370 | dmi_get_system_info(DMI_PRODUCT_VERSION)); | ||
| 369 | 371 | ||
| 370 | return 0; | 372 | return 0; | 
| 371 | } | 373 | } | 
| @@ -620,12 +622,14 @@ int __init dmar_table_init(void) | |||
| 620 | 622 | ||
| 621 | static void warn_invalid_dmar(u64 addr, const char *message) | 623 | static void warn_invalid_dmar(u64 addr, const char *message) | 
| 622 | { | 624 | { | 
| 623 | WARN_ONCE(1, "Your BIOS is broken; DMAR reported at address %llx%s!\n" | 625 | WARN_TAINT_ONCE( | 
| 624 | "BIOS vendor: %s; Ver: %s; Product Version: %s\n", | 626 | 1, TAINT_FIRMWARE_WORKAROUND, | 
| 625 | addr, message, | 627 | "Your BIOS is broken; DMAR reported at address %llx%s!\n" | 
| 626 | dmi_get_system_info(DMI_BIOS_VENDOR), | 628 | "BIOS vendor: %s; Ver: %s; Product Version: %s\n", | 
| 627 | dmi_get_system_info(DMI_BIOS_VERSION), | 629 | addr, message, | 
| 628 | dmi_get_system_info(DMI_PRODUCT_VERSION)); | 630 | dmi_get_system_info(DMI_BIOS_VENDOR), | 
| 631 | dmi_get_system_info(DMI_BIOS_VERSION), | ||
| 632 | dmi_get_system_info(DMI_PRODUCT_VERSION)); | ||
| 629 | } | 633 | } | 
| 630 | 634 | ||
| 631 | int __init check_zero_address(void) | 635 | int __init check_zero_address(void) | 
