|
@@ -749,6 +749,15 @@ void __init gart_iommu_init(void)
|
|
|
*/
|
|
|
set_memory_np((unsigned long)__va(iommu_bus_base),
|
|
|
iommu_size >> PAGE_SHIFT);
|
|
|
+ /*
|
|
|
+ * Tricky. The GART table remaps the physical memory range,
|
|
|
+ * so the CPU wont notice potential aliases and if the memory
|
|
|
+ * is remapped to UC later on, we might surprise the PCI devices
|
|
|
+ * with a stray writeout of a cacheline. So play it sure and
|
|
|
+ * do an explicit, full-scale wbinvd() _after_ having marked all
|
|
|
+ * the pages as Not-Present:
|
|
|
+ */
|
|
|
+ wbinvd();
|
|
|
|
|
|
/*
|
|
|
* Try to workaround a bug (thanks to BenH)
|