APIC timer needs rearming before halting the cpu
- time stops if there is no activity and the timer expired before we halted the cpu - restart_local_timer() checks if the timer has expired and if so it restarts it - we do the same when switching back to userspace
This commit is contained in:
parent
f5a1e58f59
commit
bed9e48c12
|
@ -206,11 +206,19 @@ PRIVATE void idle(void)
|
||||||
switch_address_space_idle();
|
switch_address_space_idle();
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
|
get_cpulocal_var(cpu_is_idle) = 1;
|
||||||
/* we don't need to keep time on APs as it is handled on the BSP */
|
/* we don't need to keep time on APs as it is handled on the BSP */
|
||||||
if (cpuid != bsp_cpu_id)
|
if (cpuid != bsp_cpu_id)
|
||||||
stop_local_timer();
|
stop_local_timer();
|
||||||
get_cpulocal_var(cpu_is_idle) = 1;
|
else
|
||||||
#endif
|
#endif
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* If the timer has expired while in kernel we must
|
||||||
|
* rearm it before we go to sleep
|
||||||
|
*/
|
||||||
|
restart_local_timer();
|
||||||
|
}
|
||||||
|
|
||||||
/* start accounting for the idle time */
|
/* start accounting for the idle time */
|
||||||
context_stop(proc_addr(KERNEL));
|
context_stop(proc_addr(KERNEL));
|
||||||
|
|
Loading…
Reference in a new issue