Module: xenomai-3 Branch: next Commit: fd14a3a3443aa4d71a5c0937e11020875a4246c4 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=fd14a3a3443aa4d71a5c0937e11020875a4246c4
Author: Jan Kiszka <jan.kis...@siemens.com> Date: Thu Feb 12 18:29:12 2015 +0100 cobalt/posix: Add support for return long values from syscalls So far, handle_head/root_syscall limited to width of return values to int, thus 32-bit. This was waiting to break, and it did over the rework of the mayday syscall which now passed a pointer back. But also I/O syscalls were vulnerable on 64-bit platforms, at least in principle. Signed-off-by: Jan Kiszka <jan.kis...@siemens.com> --- kernel/cobalt/arch/arm/include/asm/xenomai/syscall.h | 2 +- kernel/cobalt/arch/blackfin/include/asm/xenomai/syscall.h | 2 +- kernel/cobalt/arch/nios2/include/asm/xenomai/syscall.h | 2 +- kernel/cobalt/arch/powerpc/include/asm/xenomai/syscall.h | 2 +- kernel/cobalt/arch/sh/include/asm/xenomai/syscall.h | 2 +- kernel/cobalt/arch/x86/include/asm/xenomai/syscall.h | 2 +- kernel/cobalt/posix/syscall.c | 6 ++++-- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/kernel/cobalt/arch/arm/include/asm/xenomai/syscall.h b/kernel/cobalt/arch/arm/include/asm/xenomai/syscall.h index fec3c59..d80df77 100644 --- a/kernel/cobalt/arch/arm/include/asm/xenomai/syscall.h +++ b/kernel/cobalt/arch/arm/include/asm/xenomai/syscall.h @@ -57,7 +57,7 @@ static inline void __xn_error_return(struct pt_regs *regs, int v) __xn_reg_rval(regs) = v; } -static inline void __xn_status_return(struct pt_regs *regs, int v) +static inline void __xn_status_return(struct pt_regs *regs, long v) { __xn_reg_rval(regs) = v; } diff --git a/kernel/cobalt/arch/blackfin/include/asm/xenomai/syscall.h b/kernel/cobalt/arch/blackfin/include/asm/xenomai/syscall.h index e0fc958..12760a1 100644 --- a/kernel/cobalt/arch/blackfin/include/asm/xenomai/syscall.h +++ b/kernel/cobalt/arch/blackfin/include/asm/xenomai/syscall.h @@ -39,7 +39,7 @@ static inline void __xn_error_return(struct pt_regs *regs, int v) __xn_reg_rval(regs) = v; } -static inline void __xn_status_return(struct pt_regs *regs, int v) +static inline void __xn_status_return(struct pt_regs *regs, long v) { __xn_reg_rval(regs) = v; } diff --git a/kernel/cobalt/arch/nios2/include/asm/xenomai/syscall.h b/kernel/cobalt/arch/nios2/include/asm/xenomai/syscall.h index e226ddc..c329dc3 100644 --- a/kernel/cobalt/arch/nios2/include/asm/xenomai/syscall.h +++ b/kernel/cobalt/arch/nios2/include/asm/xenomai/syscall.h @@ -42,7 +42,7 @@ static inline void __xn_error_return(struct pt_regs *regs, int v) __xn_reg_rval(regs) = v; } -static inline void __xn_status_return(struct pt_regs *regs, int v) +static inline void __xn_status_return(struct pt_regs *regs, long v) { __xn_reg_rval(regs) = v; } diff --git a/kernel/cobalt/arch/powerpc/include/asm/xenomai/syscall.h b/kernel/cobalt/arch/powerpc/include/asm/xenomai/syscall.h index 5cfe49c..a0e6103 100644 --- a/kernel/cobalt/arch/powerpc/include/asm/xenomai/syscall.h +++ b/kernel/cobalt/arch/powerpc/include/asm/xenomai/syscall.h @@ -48,7 +48,7 @@ static inline void __xn_error_return(struct pt_regs *regs, int v) __xn_reg_rval(regs) = v; } -static inline void __xn_status_return(struct pt_regs *regs, int v) +static inline void __xn_status_return(struct pt_regs *regs, long v) { __xn_reg_rval(regs) = v; } diff --git a/kernel/cobalt/arch/sh/include/asm/xenomai/syscall.h b/kernel/cobalt/arch/sh/include/asm/xenomai/syscall.h index 74809e0..b84fb24 100644 --- a/kernel/cobalt/arch/sh/include/asm/xenomai/syscall.h +++ b/kernel/cobalt/arch/sh/include/asm/xenomai/syscall.h @@ -39,7 +39,7 @@ static inline void __xn_error_return(struct pt_regs *regs, int v) __xn_reg_rval(regs) = v; } -static inline void __xn_status_return(struct pt_regs *regs, int v) +static inline void __xn_status_return(struct pt_regs *regs, long v) { __xn_reg_rval(regs) = v; } diff --git a/kernel/cobalt/arch/x86/include/asm/xenomai/syscall.h b/kernel/cobalt/arch/x86/include/asm/xenomai/syscall.h index b9eea7a..018e348 100644 --- a/kernel/cobalt/arch/x86/include/asm/xenomai/syscall.h +++ b/kernel/cobalt/arch/x86/include/asm/xenomai/syscall.h @@ -54,7 +54,7 @@ static inline void __xn_error_return(struct pt_regs *regs, int v) __xn_reg_rval(regs) = v; } -static inline void __xn_status_return(struct pt_regs *regs, int v) +static inline void __xn_status_return(struct pt_regs *regs, long v) { __xn_reg_rval(regs) = v; } diff --git a/kernel/cobalt/posix/syscall.c b/kernel/cobalt/posix/syscall.c index 416e18f..9ad65e3 100644 --- a/kernel/cobalt/posix/syscall.c +++ b/kernel/cobalt/posix/syscall.c @@ -710,12 +710,13 @@ static const int cobalt_sysmodes[] = { static int handle_head_syscall(struct ipipe_domain *ipd, struct pt_regs *regs) { struct cobalt_process *process; - int switched, ret, sigs; + int switched, sigs; struct xnthread *thread; cobalt_syshand handler; struct task_struct *p; unsigned int nr, code; int sysflags; + long ret; if (!__xn_syscall_p(regs)) goto linux_syscall; @@ -890,11 +891,12 @@ bad_syscall: static int handle_root_syscall(struct ipipe_domain *ipd, struct pt_regs *regs) { - int sysflags, switched, ret, sigs; + int sysflags, switched, sigs; struct xnthread *thread; cobalt_syshand handler; struct task_struct *p; unsigned int nr, code; + long ret; /* * Catch cancellation requests pending for user shadows _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git