On Wed, Jan 16, 2013 at 9:22 AM, Gilles Chanteperdrix < gilles.chanteperd...@xenomai.org> wrote:
> On 01/16/2013 08:37 AM, Wolfgang Grandegger wrote: > > > On 01/15/2013 08:46 PM, Gilles Chanteperdrix wrote: > >> On 01/15/2013 04:22 PM, Wolfgang Grandegger wrote: > >> > >>> From: Wolfgang Grandegger <w...@denx.de> > >>> > >>> Pages mapped by rtdm_iomap_to_user() might be cached and may > >>> page fault on the first write. At least that's the behaviour > >>> we observed on an ARM mx6q system. This patch fixes these > >>> issues. > >>> > >>> Signed-off-by: Wolfgang Grandegger <w...@denx.de> > >>> --- > >>> include/asm-generic/wrappers.h | 2 +- > >>> ksrc/skins/rtdm/drvlib.c | 8 +++++--- > >>> 2 files changed, 6 insertions(+), 4 deletions(-) > >>> > >>> diff --git a/include/asm-generic/wrappers.h > b/include/asm-generic/wrappers.h > >>> index de1f0d7..e71bcc3 100644 > >>> --- a/include/asm-generic/wrappers.h > >>> +++ b/include/asm-generic/wrappers.h > >>> @@ -394,7 +394,7 @@ static inline void *kzalloc(size_t size, int flags) > >>> #define wrap_remap_io_page_range(vma,from,to,size,prot) ({ > \ > >>> (vma)->vm_page_prot = pgprot_noncached((vma)->vm_page_prot); \ > > > > Hm, here pgprot_noncached() is already used. > > > >>> /* Sets VM_RESERVED | VM_IO | VM_PFNMAP on the vma. */ \ > >>> - remap_pfn_range(vma,from,(to) >> PAGE_SHIFT,size,prot); > \ > >>> + remap_pfn_range(vma,from,(to) >> > PAGE_SHIFT,size,pgprot_noncached(prot)); \ > >> > >> > >> Should not this be decided in the upper layers? > > > > Upper layers? You mean calling xnarch_remap_io_page_range() with the > > protection argument "pgprot_noncached(PAGE_SHARED)" in > rtdm_mmap_buffer()? > > > I mean users could want to map i/o regions cacheable, but as you say, > the pgprot_noncached is already hardcoded in the vma, so, I will merge > your patch. > I used rtdm_iomap_to_user() to map the iMX6 EIM device into user space and still see caching behavior. Wolfgang, your patch didn't apply the pgprot_noncached(prot) to the #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) && defined(CONFIG_MMU) case. Was that intended? Were you using a non-mmu configuration or an old kernel? Anyway, when I apply that change to the >v2.6.15&mmu case, then the caching behavior is gone. I think that is correct, because my assumption is the >v2.6.15&mmu check should only switch the use of vm_insert_page(). Please comment on this assumption. If the assumption is correct, then select one of the attached patches. The first one just adds the pgprot_noncached(prot) to the >v2.6.15&mmu case, while version 2 removes removes the duplicate code for wrap_remap_io_page_range() and wrap_remap_kmem_page_range(). So NOTE to only select one of the patches. Thanks, Henri > > -- > Gilles. > > _______________________________________________ > Xenomai mailing list > Xenomai@xenomai.org > http://www.xenomai.org/mailman/listinfo/xenomai > -------------- next part -------------- A non-text attachment was scrubbed... Name: fix_wrap_remap_io_page_range_cached_mapping_v1.patch Type: application/octet-stream Size: 729 bytes Desc: not available URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20130927/03f29aad/attachment.obj> -------------- next part -------------- A non-text attachment was scrubbed... Name: fix_wrap_remap_io_page_range_cached_mapping_v2.patch Type: application/octet-stream Size: 2085 bytes Desc: not available URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20130927/03f29aad/attachment-0001.obj> _______________________________________________ Xenomai mailing list Xenomai@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai