x86: MTRR workaround for system with stange var MTRRs
[pandora-kernel.git] / arch / x86 / kernel / cpu / mtrr / cleanup.c
index 58b58bb..f4f89fb 100644 (file)
@@ -189,6 +189,17 @@ x86_get_mtrr_mem_range(struct res_range *range, int nr_range,
                if (!size)
                        continue;
                base = range_state[i].base_pfn;
+               if (base < (1<<(20-PAGE_SHIFT)) && mtrr_state.have_fixed &&
+                   (mtrr_state.enabled & 1)) {
+                       /* Var MTRR contains UC entry below 1M? Skip it: */
+                       printk(KERN_WARNING "WARNING: BIOS bug: VAR MTRR %d "
+                               "contains strange UC entry under 1M, check "
+                               "with your system vendor!\n", i);
+                       if (base + size <= (1<<(20-PAGE_SHIFT)))
+                               continue;
+                       size -= (1<<(20-PAGE_SHIFT)) - base;
+                       base = 1<<(20-PAGE_SHIFT);
+               }
                subtract_range(range, base, base + size - 1);
        }
        if (extra_remove_size)