Lines Matching refs:kptimer
72 struct kptimer { struct
95 struct kptimer *g_timers; argument
105 } kptimer = { variable
145 kptimer.g_cpu_deadlines[(cpuid * KPTIMER_MAX) + timerid] = in kptimer_set_cpu_deadline()
152 if (kptimer.g_setup) { in kptimer_setup()
158 const size_t timers_size = KPTIMER_MAX * sizeof(struct kptimer); in kptimer_setup()
159 kptimer.g_timers = zalloc_permanent_tag(timers_size, in kptimer_setup()
160 ZALIGN(struct kptimer), VM_KERN_MEMORY_DIAG); in kptimer_setup()
162 lck_spin_init(&kptimer.g_timers[i].kt_lock, &kptimer_lock_grp, in kptimer_setup()
167 sizeof(kptimer.g_cpu_deadlines[0]); in kptimer_setup()
168 kptimer.g_cpu_deadlines = zalloc_permanent_tag(deadlines_size, in kptimer_setup()
176 timer_call_setup(&kptimer.g_pet_timer, kptimer_pet_handler, NULL); in kptimer_setup()
178 kptimer.g_setup = true; in kptimer_setup()
187 for (unsigned int i = 0; i < kptimer.g_ntimers; i++) { in kptimer_reset()
188 kptimer.g_timers[i].kt_period_abs = 0; in kptimer_reset()
189 kptimer.g_timers[i].kt_actionid = 0; in kptimer_reset()
201 return kptimer.g_cpu_deadlines[(cpuid * KPTIMER_MAX) + timerid]; in kptimer_get_cpu_deadline()
232 kptimer_lock(struct kptimer *timer) in kptimer_lock()
238 kptimer_unlock(struct kptimer *timer) in kptimer_unlock()
259 kptimer_fire(struct kptimer *timer, unsigned int timerid, in kptimer_fire()
277 BUF_DATA(PERF_TM_FIRE, timerid, timerid == kptimer.g_pet_timerid, in kptimer_fire()
285 if (timerid == kptimer.g_pet_timerid && kppet_get_lightweight_pet()) { in kptimer_fire()
333 for (unsigned int i = 0; i < kptimer.g_ntimers; i++) { in kptimer_expire()
334 struct kptimer *timer = &kptimer.g_timers[i]; in kptimer_expire()
394 struct kptimer *timer = &kptimer.g_timers[kptimer.g_pet_timerid]; in kptimer_sample_pet_remote()
395 kptimer_sample_curcpu(timer->kt_actionid, kptimer.g_pet_timerid, 0); in kptimer_sample_pet_remote()
434 if (!kptimer.g_pet_active) { in kptimer_pet_handler()
438 struct kptimer *timer = &kptimer.g_timers[kptimer.g_pet_timerid]; in kptimer_pet_handler()
440 BUF_DATA(PERF_TM_FIRE, kptimer.g_pet_timerid, 1, timer->kt_period_abs, in kptimer_pet_handler()
460 kptimer_sample_curcpu(timer->kt_actionid, kptimer.g_pet_timerid, in kptimer_pet_handler()
477 uint64_t period_abs = kptimer.g_timers[kptimer.g_pet_timerid].kt_period_abs; in kptimer_pet_enter()
489 timer_call_enter(&kptimer.g_pet_timer, deadline_abs, TIMER_CALL_SYS_CRITICAL); in kptimer_pet_enter()
496 for (unsigned int i = 0; i < kptimer.g_ntimers; i++) { in kptimer_earliest_deadline()
497 struct kptimer *timer = &kptimer.g_timers[i]; in kptimer_earliest_deadline()
544 for (unsigned int i = 0; i < kptimer.g_ntimers; i++) { in kptimer_stop_cpu()
600 if (kptimer.g_started) { in kptimer_start()
606 kptimer.g_started = true; in kptimer_start()
607 for (unsigned int i = 0; i < kptimer.g_ntimers; i++) { in kptimer_start()
608 struct kptimer *timer = &kptimer.g_timers[i]; in kptimer_start()
615 i == kptimer.g_pet_timerid) { in kptimer_start()
616 kptimer.g_pet_active = true; in kptimer_start()
617 timer_call_enter(&kptimer.g_pet_timer, now + timer->kt_period_abs, in kptimer_start()
634 if (!kptimer.g_started) { in kptimer_stop()
640 if (kptimer.g_pet_active) { in kptimer_stop()
641 kptimer.g_pet_active = false; in kptimer_stop()
642 timer_call_cancel(&kptimer.g_pet_timer); in kptimer_stop()
644 kptimer.g_started = false; in kptimer_stop()
646 for (unsigned int i = 0; i < kptimer.g_ntimers; i++) { in kptimer_stop()
647 kptimer.g_timers[i].kt_cur_deadline = 0; in kptimer_stop()
658 if (timerid >= kptimer.g_ntimers) { in kptimer_get_period()
661 *period_abs = kptimer.g_timers[timerid].kt_period_abs; in kptimer_get_period()
668 if (timerid >= kptimer.g_ntimers) { in kptimer_set_period()
671 if (kptimer.g_started) { in kptimer_set_period()
675 bool pet = kptimer.g_pet_timerid == timerid; in kptimer_set_period()
681 kppet_config(kptimer.g_timers[timerid].kt_actionid); in kptimer_set_period()
684 kptimer.g_timers[timerid].kt_period_abs = period_abs; in kptimer_set_period()
691 if (timerid >= kptimer.g_ntimers) { in kptimer_get_action()
694 *actionid = kptimer.g_timers[timerid].kt_actionid; in kptimer_get_action()
701 if (timerid >= kptimer.g_ntimers) { in kptimer_set_action()
704 if (kptimer.g_started) { in kptimer_set_action()
708 kptimer.g_timers[timerid].kt_actionid = actionid; in kptimer_set_action()
709 if (kptimer.g_pet_timerid == timerid && !kppet_get_lightweight_pet()) { in kptimer_set_action()
718 return kptimer.g_ntimers; in kptimer_get_count()
725 if (kptimer.g_started) { in kptimer_set_count()
731 kptimer.g_ntimers = count; in kptimer_set_count()
750 return kptimer.g_pet_timerid; in kptimer_get_pet_timerid()
756 if (kptimer.g_started) { in kptimer_set_pet_timerid()
759 if (petid >= kptimer.g_ntimers) { in kptimer_set_pet_timerid()
762 kppet_config(kptimer.g_timers[petid].kt_actionid); in kptimer_set_pet_timerid()
764 kptimer.g_timers[petid].kt_period_abs); in kptimer_set_pet_timerid()
765 kptimer.g_timers[petid].kt_period_abs = period_abs; in kptimer_set_pet_timerid()
768 kptimer.g_pet_timerid = petid; in kptimer_set_pet_timerid()