static void xen_vcpu_notify_restore(void *data) { /* Boot processor notified via generic timekeeping_resume() */ if (smp_processor_id() == 0) return; tick_resume_local(); }
/** * tick_unfreeze - Resume the local tick and (possibly) timekeeping. * * Check if this is the first CPU executing the function and if so, resume * timekeeping. Otherwise resume the local tick. * * Call with interrupts disabled. Must be balanced with %tick_freeze(). * Interrupts must not be enabled after the preceding %tick_freeze(). */ void tick_unfreeze(void) { raw_spin_lock(&tick_freeze_lock); if (tick_freeze_depth == num_online_cpus()) { timekeeping_resume(); trace_suspend_resume(TPS("timekeeping_freeze"), smp_processor_id(), false); } else { tick_resume_local(); } tick_freeze_depth--; raw_spin_unlock(&tick_freeze_lock); }
/** * tick_resume - Resume the tick and the broadcast device * * Called from syscore_resume() via timekeeping_resume with only one * CPU online and interrupts disabled. * * No locks required. Nothing can change the per cpu device. */ void tick_resume(void) { tick_resume_broadcast(); tick_resume_local(); }