All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai] rtdm_iomap_to_user: fix caching and page fault issues
@ 2013-01-15 15:22 Wolfgang Grandegger
  2013-01-15 19:46 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 5+ messages in thread
From: Wolfgang Grandegger @ 2013-01-15 15:22 UTC (permalink / raw)
  To: Xenomai@xenomai.org

From: Wolfgang Grandegger <wg@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 <wg@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);	\
     /* 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));		\
     })
 #define wrap_remap_kmem_page_range(vma,from,to,size,prot)  ({		\
     /* Sets VM_RESERVED | VM_IO | VM_PFNMAP on the vma. */		\
diff --git a/ksrc/skins/rtdm/drvlib.c b/ksrc/skins/rtdm/drvlib.c
index e5c470c..391d45f 100644
--- a/ksrc/skins/rtdm/drvlib.c
+++ b/ksrc/skins/rtdm/drvlib.c
@@ -1858,10 +1858,12 @@ static int rtdm_mmap_buffer(struct file *filp, struct vm_area_struct *vma)
 #else
 	vma->vm_pgoff = paddr >> PAGE_SHIFT;
 #endif /* CONFIG_MMU */
-	if (mmap_data->src_paddr)
-	  	ret = xnarch_remap_io_page_range(filp, vma, maddr, paddr,
+	if (mmap_data->src_paddr) {
+		ret = xnarch_remap_io_page_range(filp, vma, maddr, paddr,
 						 size, PAGE_SHARED);
-	else {
+		if (!ret)
+			xnarch_fault_range(vma);
+	} else {
 		ret = xnarch_remap_kmem_page_range(vma, maddr, paddr,
 						   size, PAGE_SHARED);
 		if (!ret)
-- 
1.7.11.7



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-09-27  9:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-15 15:22 [Xenomai] rtdm_iomap_to_user: fix caching and page fault issues Wolfgang Grandegger
2013-01-15 19:46 ` Gilles Chanteperdrix
2013-01-16  7:37   ` Wolfgang Grandegger
2013-01-16  8:22     ` Gilles Chanteperdrix
2013-09-27  9:25       ` Henri Roosen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.