Module: xenomai-jki Branch: for-forge Commit: ec8c168898e71c732b00b02501144c79ae4d947d URL: http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=ec8c168898e71c732b00b02501144c79ae4d947d
Author: Jan Kiszka <jan.kis...@siemens.com> Date: Tue Mar 7 18:30:22 2017 +0100 cobalt/posix: Provide compat version signal_copyinfo extension Enables compat-capable implementations of this extension. Signed-off-by: Jan Kiszka <jan.kis...@siemens.com> --- kernel/cobalt/posix/extension.h | 4 ++++ kernel/cobalt/posix/signal.c | 20 +++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/kernel/cobalt/posix/extension.h b/kernel/cobalt/posix/extension.h index b831a3a..ae365c7 100644 --- a/kernel/cobalt/posix/extension.h +++ b/kernel/cobalt/posix/extension.h @@ -54,6 +54,10 @@ struct cobalt_extension { void __user *u_si, const struct siginfo *si, int overrun); + int (*signal_copyinfo_compat)(struct cobalt_extref *refthread, + void __user *u_si, + const struct siginfo *si, + int overrun); int (*sched_yield)(struct cobalt_extref *curref); int (*thread_setsched)(struct cobalt_extref *refthread, /* nklocked, IRQs off. */ struct xnsched_class *sched_class, diff --git a/kernel/cobalt/posix/signal.c b/kernel/cobalt/posix/signal.c index 518a5c6..803d998 100644 --- a/kernel/cobalt/posix/signal.c +++ b/kernel/cobalt/posix/signal.c @@ -342,17 +342,23 @@ done: goto out; /* Return signo only. */ #ifdef CONFIG_XENO_ARCH_SYS3264 - if (compat) + if (compat) { ret = sys32_put_siginfo(u_si, sip, overrun); - else + if (!ret) + /* Allow an extended target to receive more data. */ + cobalt_call_extension(signal_copyinfo_compat, + &curr->extref, ret, u_si, sip, + overrun); + } else #endif + { ret = signal_put_siginfo(u_si, sip, overrun); - if (ret) - goto out; + if (!ret) + /* Allow an extended target to receive more data. */ + cobalt_call_extension(signal_copyinfo, &curr->extref, + ret, u_si, sip, overrun); + } - /* Allow an extended target to receive more data. */ - cobalt_call_extension(signal_copyinfo, &curr->extref, - ret, u_si, sip, overrun); out: /* * If we pulled the signal information from a sigpending _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org https://xenomai.org/mailman/listinfo/xenomai-git