diff options
| author | Richard Weinberger <richard@nod.at> | 2012-05-21 23:25:37 +0200 | 
|---|---|---|
| committer | Richard Weinberger <richard@nod.at> | 2012-05-21 23:25:37 +0200 | 
| commit | 2ccf62b36097aa88e0ea152d6ef0c0ca2d3884e6 (patch) | |
| tree | bc93e28e0e72fa0cc8c20f64f9e1f3657ad5e479 /arch/um/kernel | |
| parent | 875682648b89a3ebc06176d60dc280f810647839 (diff) | |
| parent | ffc51be82b17e1c515fdb2dd5b92605798216b30 (diff) | |
| download | olio-linux-3.10-2ccf62b36097aa88e0ea152d6ef0c0ca2d3884e6.tar.xz olio-linux-3.10-2ccf62b36097aa88e0ea152d6ef0c0ca2d3884e6.zip  | |
Merge branch 'for-um' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal into for-3.5
Diffstat (limited to 'arch/um/kernel')
| -rw-r--r-- | arch/um/kernel/process.c | 10 | ||||
| -rw-r--r-- | arch/um/kernel/signal.c | 14 | ||||
| -rw-r--r-- | arch/um/kernel/skas/syscall.c | 2 | 
3 files changed, 14 insertions, 12 deletions
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c index 2b73dedb44c..3a2235e0abc 100644 --- a/arch/um/kernel/process.c +++ b/arch/um/kernel/process.c @@ -18,6 +18,7 @@  #include <linux/seq_file.h>  #include <linux/tick.h>  #include <linux/threads.h> +#include <linux/tracehook.h>  #include <asm/current.h>  #include <asm/pgtable.h>  #include <asm/mmu_context.h> @@ -114,8 +115,13 @@ void interrupt_end(void)  {  	if (need_resched())  		schedule(); -	if (test_tsk_thread_flag(current, TIF_SIGPENDING)) +	if (test_thread_flag(TIF_SIGPENDING))  		do_signal(); +	if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { +		tracehook_notify_resume(¤t->thread.regs); +		if (current->replacement_session_keyring) +			key_replace_session_keyring(); +	}  }  void exit_thread(void) @@ -190,7 +196,7 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,  	if (current->thread.forking) {  	  	memcpy(&p->thread.regs.regs, ®s->regs,  		       sizeof(p->thread.regs.regs)); -		REGS_SET_SYSCALL_RETURN(p->thread.regs.regs.gp, 0); +		UPT_SET_SYSCALL_RETURN(&p->thread.regs.regs, 0);  		if (sp != 0)  			REGS_SP(p->thread.regs.regs.gp) = sp; diff --git a/arch/um/kernel/signal.c b/arch/um/kernel/signal.c index fb12f4c5e64..187118fbe1b 100644 --- a/arch/um/kernel/signal.c +++ b/arch/um/kernel/signal.c @@ -29,9 +29,6 @@ static int handle_signal(struct pt_regs *regs, unsigned long signr,  	unsigned long sp;  	int err; -	/* Always make any pending restarted system calls return -EINTR */ -	current_thread_info()->restart_block.fn = do_no_restart_syscall; -  	/* Did we come from a system call? */  	if (PT_REGS_SYSCALL_NR(regs) >= 0) {  		/* If so, check system call restarting.. */ @@ -77,15 +74,14 @@ static int kern_do_signal(struct pt_regs *regs)  {  	struct k_sigaction ka_copy;  	siginfo_t info; -	sigset_t *oldset;  	int sig, handled_sig = 0; -	if (test_thread_flag(TIF_RESTORE_SIGMASK)) -		oldset = ¤t->saved_sigmask; -	else -		oldset = ¤t->blocked; -  	while ((sig = get_signal_to_deliver(&info, &ka_copy, regs, NULL)) > 0) { +		sigset_t *oldset; +		if (test_thread_flag(TIF_RESTORE_SIGMASK)) +			oldset = ¤t->saved_sigmask; +		else +			oldset = ¤t->blocked;  		handled_sig = 1;  		/* Whee!  Actually deliver the signal.  */  		if (!handle_signal(regs, sig, &ka_copy, &info, oldset)) { diff --git a/arch/um/kernel/skas/syscall.c b/arch/um/kernel/skas/syscall.c index f5173e1ec3a..05fbeb480e0 100644 --- a/arch/um/kernel/skas/syscall.c +++ b/arch/um/kernel/skas/syscall.c @@ -34,7 +34,7 @@ void handle_syscall(struct uml_pt_regs *r)  		result = -ENOSYS;  	else result = EXECUTE_SYSCALL(syscall, regs); -	REGS_SET_SYSCALL_RETURN(r->gp, result); +	UPT_SET_SYSCALL_RETURN(r, result);  	syscall_trace(r, 1);  }  |