Index: include/asm-generic/system.h =================================================================== --- include/asm-generic/system.h (revision 4270) +++ include/asm-generic/system.h (working copy) @@ -409,13 +409,16 @@ return wrap_remap_vm_page(vma,from,to); } -static inline int xnarch_remap_io_page_range(struct vm_area_struct *vma, +static inline int xnarch_remap_io_page_range(struct file *filp, + struct vm_area_struct *vma, unsigned long from, unsigned long to, unsigned long size, pgprot_t prot) { - return wrap_remap_io_page_range(vma,from,to,size,prot); + return wrap_remap_io_page_range(vma,from,to,size, + wrap_phys_mem_prot(filp, (to) >> PAGE_SHIFT, + size, prot)); } static inline int xnarch_remap_kmem_page_range(struct vm_area_struct *vma, Index: include/asm-powerpc/wrappers.h =================================================================== --- include/asm-powerpc/wrappers.h (revision 4270) +++ include/asm-powerpc/wrappers.h (working copy) @@ -31,6 +31,9 @@ #define CONFIG_MMU 1 +#define wrap_phys_mem_prot(filp,pfn,size,prot) \ + __pgprot(pgprot_val(prot) | _PAGE_NO_CACHE | _PAGE_GUARDED) + #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0) #define show_stack(p,sp) print_backtrace(sp) /* Only works for current. */ @@ -51,6 +54,9 @@ #else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) */ +#define wrap_phys_mem_prot(filp,pfn,size,prot) \ + phys_mem_access_prot(filp, pfn, size, prot) + #ifdef CONFIG_PPC64 #define wrap_range_ok(task,addr,size) \ __access_ok(((__force unsigned long)(addr)),(size),(task->thread.fs)) Index: ksrc/skins/rtdm/drvlib.c =================================================================== --- ksrc/skins/rtdm/drvlib.c (revision 4270) +++ ksrc/skins/rtdm/drvlib.c (working copy) @@ -1807,7 +1807,7 @@ } else #endif /* CONFIG_MMU */ if (mmap_data->src_paddr) - return xnarch_remap_io_page_range(vma, maddr, paddr, + return xnarch_remap_io_page_range(filp, vma, maddr, paddr, size, PAGE_SHARED); else return xnarch_remap_kmem_page_range(vma, maddr, paddr, Index: ksrc/nucleus/heap.c =================================================================== --- ksrc/nucleus/heap.c (revision 4270) +++ ksrc/nucleus/heap.c (working copy) @@ -1053,7 +1053,7 @@ vaddr += PAGE_SIZE; size -= PAGE_SIZE; } - } else if (xnarch_remap_io_page_range(vma, + } else if (xnarch_remap_io_page_range(file,vma, vma->vm_start, virt_to_phys((void *)vaddr), size, PAGE_SHARED))