--- drivers/video/fbmem.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) Index: linux/drivers/video/fbmem.c =================================================================== --- linux.orig/drivers/video/fbmem.c +++ linux/drivers/video/fbmem.c @@ -39,6 +39,10 @@ #include #endif +#ifdef CONFIG_X86 +#include +#endif + #include #include #include @@ -1190,15 +1194,19 @@ fb_mmap(struct file *file, struct vm_are vma->vm_page_prot); #elif defined(__alpha__) /* Caching is off in the I/O space quadrant by design. */ -#elif defined(__i386__) || defined(__x86_64__) - if (boot_cpu_data.x86 > 3) - pgprot_val(vma->vm_page_prot) |= _PAGE_PCD; #elif defined(__mips__) || defined(__sparc_v9__) vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); #elif defined(__hppa__) pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE; -#elif defined(__arm__) || defined(__sh__) || defined(__m32r__) +#elif defined(__arm__) || defined(__sh__) || defined(__m32r__) || defined(CONFIG_X86) vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); +#ifdef CONFIG_X86 + { + int err = reserve_mattr_vma(vma); + if (err) + return err; + } +#endif #elif defined(__ia64__) if (efi_range_is_wc(vma->vm_start, vma->vm_end - vma->vm_start)) vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);