diff options
Diffstat (limited to 'arch/parisc/kernel/signal.c')
| -rw-r--r-- | arch/parisc/kernel/signal.c | 22 | 
1 files changed, 5 insertions, 17 deletions
diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index fd051705a40..940188d1942 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c @@ -143,7 +143,7 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)  			goto give_sigsegv;  		DBG(1,"sys_rt_sigreturn: usp %#08lx stack 0x%p\n",   				usp, &compat_frame->uc.uc_stack); -		if (do_sigaltstack32(&compat_frame->uc.uc_stack, NULL, usp) == -EFAULT) +		if (compat_restore_altstack(&compat_frame->uc.uc_stack))  			goto give_sigsegv;  	} else  #endif @@ -154,7 +154,7 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)  			goto give_sigsegv;  		DBG(1,"sys_rt_sigreturn: usp %#08lx stack 0x%p\n",   				usp, &frame->uc.uc_stack); -		if (do_sigaltstack(&frame->uc.uc_stack, NULL, usp) == -EFAULT) +		if (restore_altstack(&frame->uc.uc_stack))  			goto give_sigsegv;  	} @@ -242,7 +242,6 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  	unsigned long haddr, sigframe_size;  	int err = 0;  #ifdef CONFIG_64BIT -	compat_int_t compat_val;  	struct compat_rt_sigframe __user * compat_frame;  	compat_sigset_t compat_set;  #endif @@ -262,15 +261,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  	if (is_compat_task()) {  		DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info);  		err |= copy_siginfo_to_user32(&compat_frame->info, info); -		DBG(1,"SETUP_RT_FRAME: 1\n"); -		compat_val = (compat_int_t)current->sas_ss_sp; -		err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_sp); -		DBG(1,"SETUP_RT_FRAME: 2\n"); -		compat_val = (compat_int_t)current->sas_ss_size; -		err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_size); -		DBG(1,"SETUP_RT_FRAME: 3\n"); -		compat_val = sas_ss_flags(regs->gr[30]);		 -		err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_flags);		 +		err |= __compat_save_altstack( &compat_frame->uc.uc_stack, regs->gr[30]);  		DBG(1,"setup_rt_frame: frame->uc = 0x%p\n", &compat_frame->uc);  		DBG(1,"setup_rt_frame: frame->uc.uc_mcontext = 0x%p\n", &compat_frame->uc.uc_mcontext);  		err |= setup_sigcontext32(&compat_frame->uc.uc_mcontext,  @@ -282,10 +273,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  	{	  		DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &frame->info);  		err |= copy_siginfo_to_user(&frame->info, info); -		err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); -		err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); -		err |= __put_user(sas_ss_flags(regs->gr[30]), -				  &frame->uc.uc_stack.ss_flags); +		err |= __save_altstack(&frame->uc.uc_stack, regs->gr[30]);  		DBG(1,"setup_rt_frame: frame->uc = 0x%p\n", &frame->uc);  		DBG(1,"setup_rt_frame: frame->uc.uc_mcontext = 0x%p\n", &frame->uc.uc_mcontext);  		err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, in_syscall); @@ -312,7 +300,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  #if DEBUG_SIG  	/* Assert that we're flushing in the correct space... */  	{ -		int sid; +		unsigned long sid;  		asm ("mfsp %%sr3,%0" : "=r" (sid));  		DBG(1,"setup_rt_frame: Flushing 64 bytes at space %#x offset %p\n",  		       sid, frame->tramp);  |