mirror of https://gitee.com/openkylin/linux.git
powerpc/signal: Call get_tm_stackpointer() from get_sigframe()
Instead of calling get_tm_stackpointer() from the caller, call it directly from get_sigframe(). This avoids a double call and allows get_tm_stackpointer() to become static and be inlined into get_sigframe() by GCC. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/abfdc105b8b28c4eb3ab9a26297d17f302b600ea.1597770847.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
0ecbc6ad18
commit
c180cb305c
|
@ -144,10 +144,13 @@ int show_unhandled_signals = 1;
|
|||
/*
|
||||
* Allocate space for the signal frame
|
||||
*/
|
||||
void __user *get_sigframe(struct ksignal *ksig, unsigned long sp,
|
||||
size_t frame_size, int is_32)
|
||||
static unsigned long get_tm_stackpointer(struct task_struct *tsk);
|
||||
|
||||
void __user *get_sigframe(struct ksignal *ksig, struct task_struct *tsk,
|
||||
size_t frame_size, int is_32)
|
||||
{
|
||||
unsigned long oldsp, newsp;
|
||||
unsigned long sp = get_tm_stackpointer(tsk);
|
||||
|
||||
/* Default to using normal stack */
|
||||
if (is_32)
|
||||
|
@ -300,7 +303,7 @@ void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags)
|
|||
user_enter();
|
||||
}
|
||||
|
||||
unsigned long get_tm_stackpointer(struct task_struct *tsk)
|
||||
static unsigned long get_tm_stackpointer(struct task_struct *tsk)
|
||||
{
|
||||
/* When in an active transaction that takes a signal, we need to be
|
||||
* careful with the stack. It's possible that the stack has moved back
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
#ifndef _POWERPC_ARCH_SIGNAL_H
|
||||
#define _POWERPC_ARCH_SIGNAL_H
|
||||
|
||||
extern void __user *get_sigframe(struct ksignal *ksig, unsigned long sp,
|
||||
size_t frame_size, int is_32);
|
||||
void __user *get_sigframe(struct ksignal *ksig, struct task_struct *tsk,
|
||||
size_t frame_size, int is_32);
|
||||
|
||||
extern int handle_signal32(struct ksignal *ksig, sigset_t *oldset,
|
||||
struct task_struct *tsk);
|
||||
|
@ -19,8 +19,6 @@ extern int handle_signal32(struct ksignal *ksig, sigset_t *oldset,
|
|||
extern int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
|
||||
struct task_struct *tsk);
|
||||
|
||||
extern unsigned long get_tm_stackpointer(struct task_struct *tsk);
|
||||
|
||||
#ifdef CONFIG_VSX
|
||||
extern unsigned long copy_vsx_to_user(void __user *to,
|
||||
struct task_struct *task);
|
||||
|
|
|
@ -766,7 +766,7 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
|
|||
|
||||
/* Set up Signal Frame */
|
||||
/* Put a Real Time Context onto stack */
|
||||
rt_sf = get_sigframe(ksig, get_tm_stackpointer(tsk), sizeof(*rt_sf), 1);
|
||||
rt_sf = get_sigframe(ksig, tsk, sizeof(*rt_sf), 1);
|
||||
addr = rt_sf;
|
||||
if (!access_ok(rt_sf, sizeof(*rt_sf)))
|
||||
goto badframe;
|
||||
|
@ -1226,7 +1226,7 @@ int handle_signal32(struct ksignal *ksig, sigset_t *oldset,
|
|||
#endif
|
||||
|
||||
/* Set up Signal Frame */
|
||||
frame = get_sigframe(ksig, get_tm_stackpointer(tsk), sizeof(*frame), 1);
|
||||
frame = get_sigframe(ksig, tsk, sizeof(*frame), 1);
|
||||
if (!access_ok(frame, sizeof(*frame)))
|
||||
goto badframe;
|
||||
sc = (struct sigcontext __user *) &frame->sctx;
|
||||
|
|
|
@ -822,7 +822,7 @@ int handle_rt_signal64(struct ksignal *ksig, sigset_t *set,
|
|||
unsigned long msr = regs->msr;
|
||||
#endif
|
||||
|
||||
frame = get_sigframe(ksig, get_tm_stackpointer(tsk), sizeof(*frame), 0);
|
||||
frame = get_sigframe(ksig, tsk, sizeof(*frame), 0);
|
||||
if (!access_ok(frame, sizeof(*frame)))
|
||||
goto badframe;
|
||||
|
||||
|
|
Loading…
Reference in New Issue