diff options
Diffstat (limited to 'kernel/sched/core.c')
| -rw-r--r-- | kernel/sched/core.c | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 7f12624a393c..af7a8c84b797 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3082,11 +3082,13 @@ EXPORT_SYMBOL(preempt_schedule);  asmlinkage void __sched preempt_schedule_irq(void)  {  	struct thread_info *ti = current_thread_info(); +	enum ctx_state prev_state;  	/* Catch callers which need to be fixed */  	BUG_ON(ti->preempt_count || !irqs_disabled()); -	user_exit(); +	prev_state = exception_enter(); +  	do {  		add_preempt_count(PREEMPT_ACTIVE);  		local_irq_enable(); @@ -3100,6 +3102,8 @@ asmlinkage void __sched preempt_schedule_irq(void)  		 */  		barrier();  	} while (need_resched()); + +	exception_exit(prev_state);  }  #endif /* CONFIG_PREEMPT */ | 
