Hi Jan, I have just commited a modification of the nucleus heap which allows faulting newly mapped pages. However, I noticed that we should modify rtdm_mmap_to_user as in the attached patch.
At this chance, I also noticed that there is no way to ask for uncached memory to rtdm_mmap_to_user, how do you think we should change rtdm_mmap_to_user to allow this? Regards. Index: ksrc/skins/rtdm/drvlib.c =================================================================== --- ksrc/skins/rtdm/drvlib.c (revision 4390) +++ ksrc/skins/rtdm/drvlib.c (working copy) @@ -1781,6 +1781,7 @@ static int rtdm_mmap_buffer(struct file { struct rtdm_mmap_data *mmap_data = filp->private_data; unsigned long vaddr, paddr, maddr, size; + int ret; vma->vm_ops = mmap_data->vm_ops; vma->vm_private_data = mmap_data->vm_private_data; @@ -1810,15 +1811,25 @@ static int rtdm_mmap_buffer(struct file vaddr += PAGE_SIZE; mapped_size += PAGE_SIZE; } - return 0; +#ifdef xnarch_fault_range + xnarch_fault_range(vma); +#endif /* xnarch_fault_range */ + ret = 0; } else #endif /* CONFIG_MMU */ if (mmap_data->src_paddr) - return xnarch_remap_io_page_range(filp, vma, maddr, paddr, - size, PAGE_SHARED); - else - return xnarch_remap_kmem_page_range(vma, maddr, paddr, - size, PAGE_SHARED); + ret = xnarch_remap_io_page_range(filp, vma, maddr, paddr, + size, PAGE_SHARED); + else { + ret = xnarch_remap_kmem_page_range(vma, maddr, paddr, + size, PAGE_SHARED); +#ifdef xnarch_fault_range + if (!ret) + xnarch_fault_range(vma); +#endif /* xnarch_fault_range */ + } + + return ret; } static struct file_operations rtdm_mmap_fops = { -- Gilles. _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core