u64 sched_clock_cpu(int cpu) { struct sched_clock_data *scd; u64 clock; WARN_ON_ONCE(!irqs_disabled()); if (sched_clock_stable) return sched_clock(); if (unlikely(!sched_clock_running)) return 0ull; scd = cpu_sdc(cpu); if (cpu != smp_processor_id()) clock = sched_clock_remote(scd); else clock = sched_clock_local(scd); return clock; }
/* * Similar to cpu_clock(), but requires local IRQs to be disabled. * * See cpu_clock(). */ u64 sched_clock_cpu(int cpu) { struct sched_clock_data *scd; u64 clock; if (sched_clock_stable()) return sched_clock(); if (unlikely(!sched_clock_running)) return 0ull; preempt_disable_notrace(); scd = cpu_sdc(cpu); if (cpu != smp_processor_id()) clock = sched_clock_remote(scd); else clock = sched_clock_local(scd); preempt_enable_notrace(); return clock; }