diff options
Diffstat (limited to 'arch/ia64/kernel/process.c')
| -rw-r--r-- | arch/ia64/kernel/process.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index dd6fc144974..ee31fe9b310 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c @@ -29,6 +29,7 @@  #include <linux/kdebug.h>  #include <linux/utsname.h>  #include <linux/tracehook.h> +#include <linux/rcupdate.h>  #include <asm/cpu.h>  #include <asm/delay.h> @@ -196,8 +197,8 @@ do_notify_resume_user(sigset_t *unused, struct sigscratch *scr, long in_syscall)  		ia64_do_signal(scr, in_syscall);  	} -	if (test_thread_flag(TIF_NOTIFY_RESUME)) { -		clear_thread_flag(TIF_NOTIFY_RESUME); +	if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { +		local_irq_enable();	/* force interrupt enable */  		tracehook_notify_resume(&scr->pt);  	} @@ -279,6 +280,7 @@ cpu_idle (void)  	/* endless idle loop with no priority at all */  	while (1) { +		rcu_idle_enter();  		if (can_do_pal_halt) {  			current_thread_info()->status &= ~TS_POLLING;  			/* @@ -309,6 +311,7 @@ cpu_idle (void)  			normal_xtp();  #endif  		} +		rcu_idle_exit();  		schedule_preempt_disabled();  		check_pgt_cache();  		if (cpu_is_offline(cpu))  |