ioat/dca: Update DCA BIOS workarounds to use TAINT_FIRMWARE_WORKAROUND
authorAlexander Duyck <alexander.h.duyck@intel.com>
Fri, 22 Mar 2013 06:01:59 +0000 (06:01 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 22 Mar 2013 16:55:38 +0000 (12:55 -0400)
This patch is meant to be a follow-up for a patch originally submitted under
the title "ioat: Do not enable DCA if tag map is invalid".  It was brought to
my attention that the preferred approach for BIOS workarounds is to set the
taint flag for TAINT_FIRMWARE_WORKAROUND for systems that require BIOS
workarounds.

This change makes it so that the DCA workarounds for broken BIOSes will now
use WARN_TAINT_ONCE(1, TAINT_FIRMWARE_WORKAROUND, ...) instead of just
printing a message via dev_err.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/dma/ioat/dca.c

index 9b041858d10dcb6bdc1fcbef9eab59006116c96d..9e84d5bc930779d4b8f60c98a68ac43108bd3660 100644 (file)
@@ -470,8 +470,10 @@ struct dca_provider *ioat2_dca_init(struct pci_dev *pdev, void __iomem *iobase)
        }
 
        if (!dca2_tag_map_valid(ioatdca->tag_map)) {
-               dev_err(&pdev->dev, "APICID_TAG_MAP set incorrectly by BIOS, "
-                       "disabling DCA\n");
+               WARN_TAINT_ONCE(1, TAINT_FIRMWARE_WORKAROUND,
+                               "%s %s: APICID_TAG_MAP set incorrectly by BIOS, disabling DCA\n",
+                               dev_driver_string(&pdev->dev),
+                               dev_name(&pdev->dev));
                free_dca_provider(dca);
                return NULL;
        }
@@ -689,7 +691,10 @@ struct dca_provider *ioat3_dca_init(struct pci_dev *pdev, void __iomem *iobase)
        }
 
        if (dca3_tag_map_invalid(ioatdca->tag_map)) {
-               dev_err(&pdev->dev, "APICID_TAG_MAP set incorrectly by BIOS, disabling DCA\n");
+               WARN_TAINT_ONCE(1, TAINT_FIRMWARE_WORKAROUND,
+                               "%s %s: APICID_TAG_MAP set incorrectly by BIOS, disabling DCA\n",
+                               dev_driver_string(&pdev->dev),
+                               dev_name(&pdev->dev));
                free_dca_provider(dca);
                return NULL;
        }