On 23.05.22 16:04, Gunter Grau via Xenomai wrote:
> From: Gunter Grau <[email protected]>
> 
> 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 <[email protected]>
> ---
>  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)

Wow, that was likely broken by the refactoring in c8e9e166, long ago.

Applied to next

Thanks,
Jan

-- 
Siemens AG, Technology
Competence Center Embedded Linux

Reply via email to