Module: xenomai-forge Branch: next Commit: c1b88fb9d0bcc08855820d3b8456036cfe68e503 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=c1b88fb9d0bcc08855820d3b8456036cfe68e503
Author: Philippe Gerum <r...@xenomai.org> Date: Fri Mar 14 11:14:04 2014 +0100 cobalt/shadow: group code depending on MMU availability --- kernel/cobalt/shadow.c | 71 ++++++++++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/kernel/cobalt/shadow.c b/kernel/cobalt/shadow.c index 1669bcf..eacf68b 100644 --- a/kernel/cobalt/shadow.c +++ b/kernel/cobalt/shadow.c @@ -834,6 +834,45 @@ static void pin_to_initial_cpu(struct xnthread *thread) xnlock_put_irqrestore(&nklock, s); } +#ifdef CONFIG_MMU + +static inline int disable_ondemand_memory(void) +{ + struct task_struct *p = current; + siginfo_t si; + + if ((p->mm->def_flags & VM_LOCKED) == 0) { + memset(&si, 0, sizeof(si)); + si.si_signo = SIGDEBUG; + si.si_code = SI_QUEUE; + si.si_int = SIGDEBUG_NOMLOCK; + send_sig_info(SIGDEBUG, &si, p); + return 0; + } + + return __ipipe_disable_ondemand_mappings(p); +} + +#define mayday_unmapped_area NULL + +#else /* !CONFIG_MMU */ + +static inline int disable_ondemand_memory(void) +{ + return 0; +} + +static unsigned long mayday_unmapped_area(struct file *file, + unsigned long addr, + unsigned long len, + unsigned long pgoff, + unsigned long flags) +{ + return (unsigned long)mayday_page; +} + +#endif /* !CONFIG_MMU */ + /** * @fn int xnshadow_map_user(struct xnthread *thread, unsigned long __user *u_window_offset) * @internal @@ -868,7 +907,6 @@ int xnshadow_map_user(struct xnthread *thread, unsigned long __user *u_window_offset) { struct xnthread_user_window *u_window; - struct task_struct *p = current; struct xnthread_start_attr attr; struct xnsys_ppd *sys_ppd; struct xnheap *sem_heap; @@ -883,21 +921,9 @@ int xnshadow_map_user(struct xnthread *thread, if (!access_wok(u_window_offset, sizeof(*u_window_offset))) return -EFAULT; -#ifdef CONFIG_MMU - if ((p->mm->def_flags & VM_LOCKED) == 0) { - siginfo_t si; - - memset(&si, 0, sizeof(si)); - si.si_signo = SIGDEBUG; - si.si_code = SI_QUEUE; - si.si_int = SIGDEBUG_NOMLOCK; - send_sig_info(SIGDEBUG, &si, p); - } else { - ret = __ipipe_disable_ondemand_mappings(p); - if (ret) - return ret; - } -#endif /* CONFIG_MMU */ + ret = disable_ondemand_memory(); + if (ret) + return ret; sys_ppd = xnsys_ppd_get(0); sem_heap = &sys_ppd->sem_heap; @@ -1151,19 +1177,6 @@ static int mayday_map(struct file *filp, struct vm_area_struct *vma) (unsigned long)mayday_page); } -#ifndef CONFIG_MMU -static unsigned long mayday_unmapped_area(struct file *file, - unsigned long addr, - unsigned long len, - unsigned long pgoff, - unsigned long flags) -{ - return (unsigned long)mayday_page; -} -#else -#define mayday_unmapped_area NULL -#endif - static struct file_operations mayday_fops = { .mmap = mayday_map, .get_unmapped_area = mayday_unmapped_area _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git