return slots;
 }
 
+static inline int dca3_tag_map_invalid(u8 *tag_map)
+{
+       /*
+        * If the tag map is not programmed by the BIOS the default is:
+        * 0x80 0x80 0x80 0x80 0x80 0x00 0x00 0x00
+        *
+        * This an invalid map and will result in only 2 possible tags
+        * 0x1F and 0x00.  0x00 is an invalid DCA tag so we know that
+        * this entire definition is invalid.
+        */
+       return ((tag_map[0] == DCA_TAG_MAP_VALID) &&
+               (tag_map[1] == DCA_TAG_MAP_VALID) &&
+               (tag_map[2] == DCA_TAG_MAP_VALID) &&
+               (tag_map[3] == DCA_TAG_MAP_VALID) &&
+               (tag_map[4] == DCA_TAG_MAP_VALID));
+}
+
 struct dca_provider * __devinit
 ioat3_dca_init(struct pci_dev *pdev, void __iomem *iobase)
 {
                ioatdca->tag_map[i] = bit & DCA_TAG_MAP_MASK;
        }
 
+       if (dca3_tag_map_invalid(ioatdca->tag_map)) {
+               dev_err(&pdev->dev, "APICID_TAG_MAP set incorrectly by BIOS, disabling DCA\n");
+               free_dca_provider(dca);
+               return NULL;
+       }
+
        err = register_dca_provider(dca, &pdev->dev);
        if (err) {
                free_dca_provider(dca);