- timer_call_cancel(&processor->quantum_timer);
- timer_switch(&kernel_timer[cpu]);
- processor->active_thread = processor->idle_thread;
- machine_thread_set_current(processor->active_thread);
- thread_dispatch(old_thread);
+ new_thread = processor->idle_thread;
+ processor->active_thread = new_thread;
+ processor->current_pri = IDLEPRI;
+ processor->current_thmode = TH_MODE_NONE;
+ processor->deadline = UINT64_MAX;
+ new_thread->last_processor = processor;
+
+ processor->last_dispatch = mach_absolute_time();
+ timer_stop(PROCESSOR_DATA(processor, thread_timer), processor->last_dispatch);
+
+ machine_set_current_thread(new_thread);
+
+ thread_dispatch(old_thread, new_thread);
+
+ PMAP_DEACTIVATE_KERNEL(processor->cpu_id);