Commit 38df92b8cee936334f686c06df0e5fbb92e252df
Exists in
master
and in
7 other branches
Merge branch 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kern…
…el/git/tip/linux-2.6-tip * 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: NOHZ: Properly feed cpufreq ondemand governor
Showing 1 changed file Side-by-side Diff
kernel/time/tick-sched.c
... | ... | @@ -222,6 +222,15 @@ |
222 | 222 | |
223 | 223 | cpu = smp_processor_id(); |
224 | 224 | ts = &per_cpu(tick_cpu_sched, cpu); |
225 | + | |
226 | + /* | |
227 | + * Call to tick_nohz_start_idle stops the last_update_time from being | |
228 | + * updated. Thus, it must not be called in the event we are called from | |
229 | + * irq_exit() with the prior state different than idle. | |
230 | + */ | |
231 | + if (!inidle && !ts->inidle) | |
232 | + goto end; | |
233 | + | |
225 | 234 | now = tick_nohz_start_idle(ts); |
226 | 235 | |
227 | 236 | /* |
... | ... | @@ -237,9 +246,6 @@ |
237 | 246 | } |
238 | 247 | |
239 | 248 | if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE)) |
240 | - goto end; | |
241 | - | |
242 | - if (!inidle && !ts->inidle) | |
243 | 249 | goto end; |
244 | 250 | |
245 | 251 | ts->inidle = 1; |