diff options
Diffstat (limited to 'arch/x86/kernel/pci-gart_64.c')
| -rw-r--r-- | arch/x86/kernel/pci-gart_64.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c index 65f6acb025c8..faf3229f8fb3 100644 --- a/arch/x86/kernel/pci-gart_64.c +++ b/arch/x86/kernel/pci-gart_64.c | |||
| @@ -749,6 +749,15 @@ void __init gart_iommu_init(void) | |||
| 749 | */ | 749 | */ |
| 750 | set_memory_np((unsigned long)__va(iommu_bus_base), | 750 | set_memory_np((unsigned long)__va(iommu_bus_base), |
| 751 | iommu_size >> PAGE_SHIFT); | 751 | iommu_size >> PAGE_SHIFT); |
| 752 | /* | ||
| 753 | * Tricky. The GART table remaps the physical memory range, | ||
| 754 | * so the CPU wont notice potential aliases and if the memory | ||
| 755 | * is remapped to UC later on, we might surprise the PCI devices | ||
| 756 | * with a stray writeout of a cacheline. So play it sure and | ||
| 757 | * do an explicit, full-scale wbinvd() _after_ having marked all | ||
| 758 | * the pages as Not-Present: | ||
| 759 | */ | ||
| 760 | wbinvd(); | ||
| 752 | 761 | ||
| 753 | /* | 762 | /* |
| 754 | * Try to workaround a bug (thanks to BenH) | 763 | * Try to workaround a bug (thanks to BenH) |
