Message ID | 36b04bccb129087a78a068207fc71194a1064667.1567188299.git.msuchanek@suse.de (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Disable compat cruft on ppc64le v6 | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | Successfully applied on branch next (6ed37b3ef6aef8647b8dad925affa92c4c8cc8a3) |
snowpatch_ozlabs/checkpatch | warning | total: 0 errors, 0 warnings, 4 checks, 299 lines checked |
Le 30/08/2019 à 20:57, Michal Suchanek a écrit : > These functions are required for 64bit as well. > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> Reviewed-by: christophe.leroy@c-s.fr > --- > arch/powerpc/kernel/signal.c | 141 ++++++++++++++++++++++++++++++++ > arch/powerpc/kernel/signal_32.c | 140 ------------------------------- > 2 files changed, 141 insertions(+), 140 deletions(-) > > diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c > index e6c30cee6abf..60436432399f 100644 > --- a/arch/powerpc/kernel/signal.c > +++ b/arch/powerpc/kernel/signal.c > @@ -18,12 +18,153 @@ > #include <linux/syscalls.h> > #include <asm/hw_breakpoint.h> > #include <linux/uaccess.h> > +#include <asm/switch_to.h> > #include <asm/unistd.h> > #include <asm/debug.h> > #include <asm/tm.h> > > #include "signal.h" > > +#ifdef CONFIG_VSX > +unsigned long copy_fpr_to_user(void __user *to, > + struct task_struct *task) > +{ > + u64 buf[ELF_NFPREG]; > + int i; > + > + /* save FPR copy to local buffer then write to the thread_struct */ > + for (i = 0; i < (ELF_NFPREG - 1) ; i++) > + buf[i] = task->thread.TS_FPR(i); > + buf[i] = task->thread.fp_state.fpscr; > + return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double)); > +} > + > +unsigned long copy_fpr_from_user(struct task_struct *task, > + void __user *from) > +{ > + u64 buf[ELF_NFPREG]; > + int i; > + > + if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double))) > + return 1; > + for (i = 0; i < (ELF_NFPREG - 1) ; i++) > + task->thread.TS_FPR(i) = buf[i]; > + task->thread.fp_state.fpscr = buf[i]; > + > + return 0; > +} > + > +unsigned long copy_vsx_to_user(void __user *to, > + struct task_struct *task) > +{ > + u64 buf[ELF_NVSRHALFREG]; > + int i; > + > + /* save FPR copy to local buffer then write to the thread_struct */ > + for (i = 0; i < ELF_NVSRHALFREG; i++) > + buf[i] = task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET]; > + return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double)); > +} > + > +unsigned long copy_vsx_from_user(struct task_struct *task, > + void __user *from) > +{ > + u64 buf[ELF_NVSRHALFREG]; > + int i; > + > + if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double))) > + return 1; > + for (i = 0; i < ELF_NVSRHALFREG ; i++) > + task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i]; > + return 0; > +} > + > +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM > +unsigned long copy_ckfpr_to_user(void __user *to, > + struct task_struct *task) > +{ > + u64 buf[ELF_NFPREG]; > + int i; > + > + /* save FPR copy to local buffer then write to the thread_struct */ > + for (i = 0; i < (ELF_NFPREG - 1) ; i++) > + buf[i] = task->thread.TS_CKFPR(i); > + buf[i] = task->thread.ckfp_state.fpscr; > + return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double)); > +} > + > +unsigned long copy_ckfpr_from_user(struct task_struct *task, > + void __user *from) > +{ > + u64 buf[ELF_NFPREG]; > + int i; > + > + if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double))) > + return 1; > + for (i = 0; i < (ELF_NFPREG - 1) ; i++) > + task->thread.TS_CKFPR(i) = buf[i]; > + task->thread.ckfp_state.fpscr = buf[i]; > + > + return 0; > +} > + > +unsigned long copy_ckvsx_to_user(void __user *to, > + struct task_struct *task) > +{ > + u64 buf[ELF_NVSRHALFREG]; > + int i; > + > + /* save FPR copy to local buffer then write to the thread_struct */ > + for (i = 0; i < ELF_NVSRHALFREG; i++) > + buf[i] = task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET]; > + return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double)); > +} > + > +unsigned long copy_ckvsx_from_user(struct task_struct *task, > + void __user *from) > +{ > + u64 buf[ELF_NVSRHALFREG]; > + int i; > + > + if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double))) > + return 1; > + for (i = 0; i < ELF_NVSRHALFREG ; i++) > + task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i]; > + return 0; > +} > +#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */ > +#else > +inline unsigned long copy_fpr_to_user(void __user *to, > + struct task_struct *task) > +{ > + return __copy_to_user(to, task->thread.fp_state.fpr, > + ELF_NFPREG * sizeof(double)); > +} > + > +inline unsigned long copy_fpr_from_user(struct task_struct *task, > + void __user *from) > +{ > + return __copy_from_user(task->thread.fp_state.fpr, from, > + ELF_NFPREG * sizeof(double)); > +} > + > +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM > +inline unsigned long copy_ckfpr_to_user(void __user *to, > + struct task_struct *task) > +{ > + return __copy_to_user(to, task->thread.ckfp_state.fpr, > + ELF_NFPREG * sizeof(double)); > +} > + > +inline unsigned long copy_ckfpr_from_user(struct task_struct *task, > + void __user *from) > +{ > + return __copy_from_user(task->thread.ckfp_state.fpr, from, > + ELF_NFPREG * sizeof(double)); > +} > +#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */ > +#endif > + > /* Log an error when sending an unhandled signal to a process. Controlled > * through debug.exception-trace sysctl. > */ > diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c > index 98600b276f76..c93c937ea568 100644 > --- a/arch/powerpc/kernel/signal_32.c > +++ b/arch/powerpc/kernel/signal_32.c > @@ -235,146 +235,6 @@ struct rt_sigframe { > int abigap[56]; > }; > > -#ifdef CONFIG_VSX > -unsigned long copy_fpr_to_user(void __user *to, > - struct task_struct *task) > -{ > - u64 buf[ELF_NFPREG]; > - int i; > - > - /* save FPR copy to local buffer then write to the thread_struct */ > - for (i = 0; i < (ELF_NFPREG - 1) ; i++) > - buf[i] = task->thread.TS_FPR(i); > - buf[i] = task->thread.fp_state.fpscr; > - return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double)); > -} > - > -unsigned long copy_fpr_from_user(struct task_struct *task, > - void __user *from) > -{ > - u64 buf[ELF_NFPREG]; > - int i; > - > - if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double))) > - return 1; > - for (i = 0; i < (ELF_NFPREG - 1) ; i++) > - task->thread.TS_FPR(i) = buf[i]; > - task->thread.fp_state.fpscr = buf[i]; > - > - return 0; > -} > - > -unsigned long copy_vsx_to_user(void __user *to, > - struct task_struct *task) > -{ > - u64 buf[ELF_NVSRHALFREG]; > - int i; > - > - /* save FPR copy to local buffer then write to the thread_struct */ > - for (i = 0; i < ELF_NVSRHALFREG; i++) > - buf[i] = task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET]; > - return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double)); > -} > - > -unsigned long copy_vsx_from_user(struct task_struct *task, > - void __user *from) > -{ > - u64 buf[ELF_NVSRHALFREG]; > - int i; > - > - if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double))) > - return 1; > - for (i = 0; i < ELF_NVSRHALFREG ; i++) > - task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i]; > - return 0; > -} > - > -#ifdef CONFIG_PPC_TRANSACTIONAL_MEM > -unsigned long copy_ckfpr_to_user(void __user *to, > - struct task_struct *task) > -{ > - u64 buf[ELF_NFPREG]; > - int i; > - > - /* save FPR copy to local buffer then write to the thread_struct */ > - for (i = 0; i < (ELF_NFPREG - 1) ; i++) > - buf[i] = task->thread.TS_CKFPR(i); > - buf[i] = task->thread.ckfp_state.fpscr; > - return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double)); > -} > - > -unsigned long copy_ckfpr_from_user(struct task_struct *task, > - void __user *from) > -{ > - u64 buf[ELF_NFPREG]; > - int i; > - > - if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double))) > - return 1; > - for (i = 0; i < (ELF_NFPREG - 1) ; i++) > - task->thread.TS_CKFPR(i) = buf[i]; > - task->thread.ckfp_state.fpscr = buf[i]; > - > - return 0; > -} > - > -unsigned long copy_ckvsx_to_user(void __user *to, > - struct task_struct *task) > -{ > - u64 buf[ELF_NVSRHALFREG]; > - int i; > - > - /* save FPR copy to local buffer then write to the thread_struct */ > - for (i = 0; i < ELF_NVSRHALFREG; i++) > - buf[i] = task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET]; > - return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double)); > -} > - > -unsigned long copy_ckvsx_from_user(struct task_struct *task, > - void __user *from) > -{ > - u64 buf[ELF_NVSRHALFREG]; > - int i; > - > - if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double))) > - return 1; > - for (i = 0; i < ELF_NVSRHALFREG ; i++) > - task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i]; > - return 0; > -} > -#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */ > -#else > -inline unsigned long copy_fpr_to_user(void __user *to, > - struct task_struct *task) > -{ > - return __copy_to_user(to, task->thread.fp_state.fpr, > - ELF_NFPREG * sizeof(double)); > -} > - > -inline unsigned long copy_fpr_from_user(struct task_struct *task, > - void __user *from) > -{ > - return __copy_from_user(task->thread.fp_state.fpr, from, > - ELF_NFPREG * sizeof(double)); > -} > - > -#ifdef CONFIG_PPC_TRANSACTIONAL_MEM > -inline unsigned long copy_ckfpr_to_user(void __user *to, > - struct task_struct *task) > -{ > - return __copy_to_user(to, task->thread.ckfp_state.fpr, > - ELF_NFPREG * sizeof(double)); > -} > - > -inline unsigned long copy_ckfpr_from_user(struct task_struct *task, > - void __user *from) > -{ > - return __copy_from_user(task->thread.ckfp_state.fpr, from, > - ELF_NFPREG * sizeof(double)); > -} > -#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */ > -#endif > - > /* > * Save the current user registers on the user stack. > * We only save the altivec/spe registers if the process has used >
diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c index e6c30cee6abf..60436432399f 100644 --- a/arch/powerpc/kernel/signal.c +++ b/arch/powerpc/kernel/signal.c @@ -18,12 +18,153 @@ #include <linux/syscalls.h> #include <asm/hw_breakpoint.h> #include <linux/uaccess.h> +#include <asm/switch_to.h> #include <asm/unistd.h> #include <asm/debug.h> #include <asm/tm.h> #include "signal.h" +#ifdef CONFIG_VSX +unsigned long copy_fpr_to_user(void __user *to, + struct task_struct *task) +{ + u64 buf[ELF_NFPREG]; + int i; + + /* save FPR copy to local buffer then write to the thread_struct */ + for (i = 0; i < (ELF_NFPREG - 1) ; i++) + buf[i] = task->thread.TS_FPR(i); + buf[i] = task->thread.fp_state.fpscr; + return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double)); +} + +unsigned long copy_fpr_from_user(struct task_struct *task, + void __user *from) +{ + u64 buf[ELF_NFPREG]; + int i; + + if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double))) + return 1; + for (i = 0; i < (ELF_NFPREG - 1) ; i++) + task->thread.TS_FPR(i) = buf[i]; + task->thread.fp_state.fpscr = buf[i]; + + return 0; +} + +unsigned long copy_vsx_to_user(void __user *to, + struct task_struct *task) +{ + u64 buf[ELF_NVSRHALFREG]; + int i; + + /* save FPR copy to local buffer then write to the thread_struct */ + for (i = 0; i < ELF_NVSRHALFREG; i++) + buf[i] = task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET]; + return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double)); +} + +unsigned long copy_vsx_from_user(struct task_struct *task, + void __user *from) +{ + u64 buf[ELF_NVSRHALFREG]; + int i; + + if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double))) + return 1; + for (i = 0; i < ELF_NVSRHALFREG ; i++) + task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i]; + return 0; +} + +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM +unsigned long copy_ckfpr_to_user(void __user *to, + struct task_struct *task) +{ + u64 buf[ELF_NFPREG]; + int i; + + /* save FPR copy to local buffer then write to the thread_struct */ + for (i = 0; i < (ELF_NFPREG - 1) ; i++) + buf[i] = task->thread.TS_CKFPR(i); + buf[i] = task->thread.ckfp_state.fpscr; + return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double)); +} + +unsigned long copy_ckfpr_from_user(struct task_struct *task, + void __user *from) +{ + u64 buf[ELF_NFPREG]; + int i; + + if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double))) + return 1; + for (i = 0; i < (ELF_NFPREG - 1) ; i++) + task->thread.TS_CKFPR(i) = buf[i]; + task->thread.ckfp_state.fpscr = buf[i]; + + return 0; +} + +unsigned long copy_ckvsx_to_user(void __user *to, + struct task_struct *task) +{ + u64 buf[ELF_NVSRHALFREG]; + int i; + + /* save FPR copy to local buffer then write to the thread_struct */ + for (i = 0; i < ELF_NVSRHALFREG; i++) + buf[i] = task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET]; + return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double)); +} + +unsigned long copy_ckvsx_from_user(struct task_struct *task, + void __user *from) +{ + u64 buf[ELF_NVSRHALFREG]; + int i; + + if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double))) + return 1; + for (i = 0; i < ELF_NVSRHALFREG ; i++) + task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i]; + return 0; +} +#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */ +#else +inline unsigned long copy_fpr_to_user(void __user *to, + struct task_struct *task) +{ + return __copy_to_user(to, task->thread.fp_state.fpr, + ELF_NFPREG * sizeof(double)); +} + +inline unsigned long copy_fpr_from_user(struct task_struct *task, + void __user *from) +{ + return __copy_from_user(task->thread.fp_state.fpr, from, + ELF_NFPREG * sizeof(double)); +} + +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM +inline unsigned long copy_ckfpr_to_user(void __user *to, + struct task_struct *task) +{ + return __copy_to_user(to, task->thread.ckfp_state.fpr, + ELF_NFPREG * sizeof(double)); +} + +inline unsigned long copy_ckfpr_from_user(struct task_struct *task, + void __user *from) +{ + return __copy_from_user(task->thread.ckfp_state.fpr, from, + ELF_NFPREG * sizeof(double)); +} +#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */ +#endif + /* Log an error when sending an unhandled signal to a process. Controlled * through debug.exception-trace sysctl. */ diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index 98600b276f76..c93c937ea568 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c @@ -235,146 +235,6 @@ struct rt_sigframe { int abigap[56]; }; -#ifdef CONFIG_VSX -unsigned long copy_fpr_to_user(void __user *to, - struct task_struct *task) -{ - u64 buf[ELF_NFPREG]; - int i; - - /* save FPR copy to local buffer then write to the thread_struct */ - for (i = 0; i < (ELF_NFPREG - 1) ; i++) - buf[i] = task->thread.TS_FPR(i); - buf[i] = task->thread.fp_state.fpscr; - return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double)); -} - -unsigned long copy_fpr_from_user(struct task_struct *task, - void __user *from) -{ - u64 buf[ELF_NFPREG]; - int i; - - if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double))) - return 1; - for (i = 0; i < (ELF_NFPREG - 1) ; i++) - task->thread.TS_FPR(i) = buf[i]; - task->thread.fp_state.fpscr = buf[i]; - - return 0; -} - -unsigned long copy_vsx_to_user(void __user *to, - struct task_struct *task) -{ - u64 buf[ELF_NVSRHALFREG]; - int i; - - /* save FPR copy to local buffer then write to the thread_struct */ - for (i = 0; i < ELF_NVSRHALFREG; i++) - buf[i] = task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET]; - return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double)); -} - -unsigned long copy_vsx_from_user(struct task_struct *task, - void __user *from) -{ - u64 buf[ELF_NVSRHALFREG]; - int i; - - if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double))) - return 1; - for (i = 0; i < ELF_NVSRHALFREG ; i++) - task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i]; - return 0; -} - -#ifdef CONFIG_PPC_TRANSACTIONAL_MEM -unsigned long copy_ckfpr_to_user(void __user *to, - struct task_struct *task) -{ - u64 buf[ELF_NFPREG]; - int i; - - /* save FPR copy to local buffer then write to the thread_struct */ - for (i = 0; i < (ELF_NFPREG - 1) ; i++) - buf[i] = task->thread.TS_CKFPR(i); - buf[i] = task->thread.ckfp_state.fpscr; - return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double)); -} - -unsigned long copy_ckfpr_from_user(struct task_struct *task, - void __user *from) -{ - u64 buf[ELF_NFPREG]; - int i; - - if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double))) - return 1; - for (i = 0; i < (ELF_NFPREG - 1) ; i++) - task->thread.TS_CKFPR(i) = buf[i]; - task->thread.ckfp_state.fpscr = buf[i]; - - return 0; -} - -unsigned long copy_ckvsx_to_user(void __user *to, - struct task_struct *task) -{ - u64 buf[ELF_NVSRHALFREG]; - int i; - - /* save FPR copy to local buffer then write to the thread_struct */ - for (i = 0; i < ELF_NVSRHALFREG; i++) - buf[i] = task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET]; - return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double)); -} - -unsigned long copy_ckvsx_from_user(struct task_struct *task, - void __user *from) -{ - u64 buf[ELF_NVSRHALFREG]; - int i; - - if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double))) - return 1; - for (i = 0; i < ELF_NVSRHALFREG ; i++) - task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i]; - return 0; -} -#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */ -#else -inline unsigned long copy_fpr_to_user(void __user *to, - struct task_struct *task) -{ - return __copy_to_user(to, task->thread.fp_state.fpr, - ELF_NFPREG * sizeof(double)); -} - -inline unsigned long copy_fpr_from_user(struct task_struct *task, - void __user *from) -{ - return __copy_from_user(task->thread.fp_state.fpr, from, - ELF_NFPREG * sizeof(double)); -} - -#ifdef CONFIG_PPC_TRANSACTIONAL_MEM -inline unsigned long copy_ckfpr_to_user(void __user *to, - struct task_struct *task) -{ - return __copy_to_user(to, task->thread.ckfp_state.fpr, - ELF_NFPREG * sizeof(double)); -} - -inline unsigned long copy_ckfpr_from_user(struct task_struct *task, - void __user *from) -{ - return __copy_from_user(task->thread.ckfp_state.fpr, from, - ELF_NFPREG * sizeof(double)); -} -#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */ -#endif - /* * Save the current user registers on the user stack. * We only save the altivec/spe registers if the process has used
These functions are required for 64bit as well. Signed-off-by: Michal Suchanek <msuchanek@suse.de> --- arch/powerpc/kernel/signal.c | 141 ++++++++++++++++++++++++++++++++ arch/powerpc/kernel/signal_32.c | 140 ------------------------------- 2 files changed, 141 insertions(+), 140 deletions(-)