All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] rtdm/drvlib: Prevent pagefaults on arm on io mapping
@ 2022-05-23 14:04 Gunter Grau
  2022-06-14 18:02 ` Jan Kiszka
  0 siblings, 1 reply; 14+ messages in thread
From: Gunter Grau @ 2022-05-23 14:04 UTC (permalink / raw)
  To: xenomai

From: Gunter Grau <gunter.grau@philips.com>

When mapping io memory into userspace an extra simulated pagefault for all
pages is added to prevent later pagefaults because of copy on write
mechanisms. This happens only on architectures that have defined the
needed cobalt_machine.prefault function.

Signed-off-by: Gunter Grau <gunter.grau@philips.com>
---
 kernel/cobalt/rtdm/drvlib.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/kernel/cobalt/rtdm/drvlib.c b/kernel/cobalt/rtdm/drvlib.c
index 4eaf3a57c..db8431ee1 100644
--- a/kernel/cobalt/rtdm/drvlib.c
+++ b/kernel/cobalt/rtdm/drvlib.c
@@ -1761,6 +1761,7 @@ static int mmap_iomem_helper(struct vm_area_struct *vma, phys_addr_t pa)
 {
 	pgprot_t prot = PAGE_SHARED;
 	unsigned long len;
+	int ret;
 
 	len = vma->vm_end - vma->vm_start;
 #ifndef CONFIG_MMU
@@ -1774,8 +1775,15 @@ static int mmap_iomem_helper(struct vm_area_struct *vma, phys_addr_t pa)
 #endif
 	vma->vm_page_prot = pgprot_noncached(prot);
 
-	return remap_pfn_range(vma, vma->vm_start, pa >> PAGE_SHIFT,
+	ret = remap_pfn_range(vma, vma->vm_start, pa >> PAGE_SHIFT,
 			       len, vma->vm_page_prot);
+	if (ret)
+		return ret;
+
+	if (cobalt_machine.prefault)
+		cobalt_machine.prefault(vma);
+
+	return ret;
 }
 
 static int mmap_buffer_helper(struct rtdm_fd *fd, struct vm_area_struct *vma)
-- 
2.25.1



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

end of thread, other threads:[~2022-06-20 15:35 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-23 14:04 [PATCH] rtdm/drvlib: Prevent pagefaults on arm on io mapping Gunter Grau
2022-06-14 18:02 ` Jan Kiszka
2022-06-15  7:54   ` Philippe Gerum
2022-06-15  8:11     ` Jan Kiszka
2022-06-15  8:22       ` Grau, Gunter
2022-06-15  8:30       ` Philippe Gerum
2022-06-15  9:55         ` Jan Kiszka
     [not found]           ` <e876977a-4f17-d075-b9e7-1a096ea29949@siemens.com>
2022-06-20  6:40             ` Jan Kiszka
2022-06-20  7:54               ` Grau, Gunter
2022-06-20 10:44                 ` Grau, Gunter
2022-06-20 13:37                   ` Jan Kiszka
2022-06-20 13:58                     ` Philippe Gerum
2022-06-20 14:54                       ` Grau, Gunter
2022-06-20 15:35                         ` Jan Kiszka

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.