- timer_grab(&PROCESSOR_DATA(processor, system_state)) / hz_tick_interval;
- cpu_load_info->cpu_ticks[CPU_STATE_IDLE] =
- timer_grab(&PROCESSOR_DATA(processor, idle_state)) / hz_tick_interval;
+ (uint32_t)(timer_grab(&PROCESSOR_DATA(processor, system_state)) / hz_tick_interval);
+ {
+ timer_data_t idle_temp;
+ timer_t idle_state;
+
+ idle_state = &PROCESSOR_DATA(processor, idle_state);
+ idle_temp = *idle_state;
+
+ if (PROCESSOR_DATA(processor, current_state) != idle_state ||
+ timer_grab(&idle_temp) != timer_grab(idle_state))
+ cpu_load_info->cpu_ticks[CPU_STATE_IDLE] =
+ (uint32_t)(timer_grab(&PROCESSOR_DATA(processor, idle_state)) / hz_tick_interval);
+ else {
+ timer_advance(&idle_temp, mach_absolute_time() - idle_temp.tstamp);
+
+ cpu_load_info->cpu_ticks[CPU_STATE_IDLE] =
+ (uint32_t)(timer_grab(&idle_temp) / hz_tick_interval);
+ }
+ }