diff options
Diffstat (limited to 'kernel/cpu/idle.c')
| -rw-r--r-- | kernel/cpu/idle.c | 17 | 
1 files changed, 10 insertions, 7 deletions
diff --git a/kernel/cpu/idle.c b/kernel/cpu/idle.c index 988573a9a387..277f494c2a9a 100644 --- a/kernel/cpu/idle.c +++ b/kernel/cpu/idle.c @@ -105,14 +105,17 @@ static void cpu_idle_loop(void)  				__current_set_polling();  			}  			arch_cpu_idle_exit(); -			/* -			 * We need to test and propagate the TIF_NEED_RESCHED -			 * bit here because we might not have send the -			 * reschedule IPI to idle tasks. -			 */ -			if (tif_need_resched()) -				set_preempt_need_resched();  		} + +		/* +		 * Since we fell out of the loop above, we know +		 * TIF_NEED_RESCHED must be set, propagate it into +		 * PREEMPT_NEED_RESCHED. +		 * +		 * This is required because for polling idle loops we will +		 * not have had an IPI to fold the state for us. +		 */ +		preempt_set_need_resched();  		tick_nohz_idle_exit();  		schedule_preempt_disabled();  	}  |