intel-iommu: Set a more specific taint flag for invalid BIOS DMAR tables
authorBen Hutchings <ben@decadent.org.uk>
Sat, 3 Apr 2010 18:38:43 +0000 (19:38 +0100)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Wed, 19 May 2010 07:38:11 +0000 (08:38 +0100)
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>
drivers/pci/dmar.c

index 1959cdadad51dcc23633368f812d72343656de12..f4c51709d132db8fbd0316a257d1d603e3af0277 100644 (file)
@@ -360,12 +360,14 @@ dmar_parse_one_rhsa(struct acpi_dmar_header *header)
                        return 0;
                }
        }
-       WARN(1, "Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n"
-            "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
-            drhd->reg_base_addr,
-            dmi_get_system_info(DMI_BIOS_VENDOR),
-            dmi_get_system_info(DMI_BIOS_VERSION),
-            dmi_get_system_info(DMI_PRODUCT_VERSION));
+       WARN_TAINT(
+               1, TAINT_FIRMWARE_WORKAROUND,
+               "Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n"
+               "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
+               drhd->reg_base_addr,
+               dmi_get_system_info(DMI_BIOS_VENDOR),
+               dmi_get_system_info(DMI_BIOS_VERSION),
+               dmi_get_system_info(DMI_PRODUCT_VERSION));
 
        return 0;
 }
@@ -620,12 +622,14 @@ int __init dmar_table_init(void)
 
 static void warn_invalid_dmar(u64 addr, const char *message)
 {
-       WARN_ONCE(1, "Your BIOS is broken; DMAR reported at address %llx%s!\n"
-                 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
-                 addr, message,
-                 dmi_get_system_info(DMI_BIOS_VENDOR),
-                 dmi_get_system_info(DMI_BIOS_VERSION),
-                 dmi_get_system_info(DMI_PRODUCT_VERSION));
+       WARN_TAINT_ONCE(
+               1, TAINT_FIRMWARE_WORKAROUND,
+               "Your BIOS is broken; DMAR reported at address %llx%s!\n"
+               "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
+               addr, message,
+               dmi_get_system_info(DMI_BIOS_VENDOR),
+               dmi_get_system_info(DMI_BIOS_VERSION),
+               dmi_get_system_info(DMI_PRODUCT_VERSION));
 }
 
 int __init check_zero_address(void)