Lines Matching refs:timer

54 	enum arch_timer timer;  member
85 typedef void (*sleep_method_t)(enum arch_timer timer, uint64_t usec);
87 static void sleep_poll(enum arch_timer timer, uint64_t usec);
88 static void sleep_sched_poll(enum arch_timer timer, uint64_t usec);
89 static void sleep_in_userspace(enum arch_timer timer, uint64_t usec);
90 static void sleep_migrate(enum arch_timer timer, uint64_t usec);
140 static void set_counter(enum arch_timer timer, uint64_t counter) in set_counter() argument
142 GUEST_SYNC_ARGS(SET_COUNTER_VALUE, counter, timer, 0, 0); in set_counter()
148 enum arch_timer timer; in guest_irq_handler() local
159 timer = PHYSICAL; in guest_irq_handler()
161 timer = VIRTUAL; in guest_irq_handler()
165 ctl = timer_get_ctl(timer); in guest_irq_handler()
166 cval = timer_get_cval(timer); in guest_irq_handler()
167 cnt = timer_get_cntct(timer); in guest_irq_handler()
173 timer_set_ctl(timer, CTL_IMASK); in guest_irq_handler()
181 static void set_cval_irq(enum arch_timer timer, uint64_t cval_cycles, in set_cval_irq() argument
186 timer_set_cval(timer, cval_cycles); in set_cval_irq()
187 timer_set_ctl(timer, ctl); in set_cval_irq()
190 static void set_tval_irq(enum arch_timer timer, uint64_t tval_cycles, in set_tval_irq() argument
195 timer_set_tval(timer, tval_cycles); in set_tval_irq()
196 timer_set_ctl(timer, ctl); in set_tval_irq()
199 static void set_xval_irq(enum arch_timer timer, uint64_t xval, uint32_t ctl, in set_xval_irq() argument
204 set_cval_irq(timer, xval, ctl); in set_xval_irq()
207 set_tval_irq(timer, xval, ctl); in set_xval_irq()
210 GUEST_FAIL("Could not get timer %d", timer); in set_xval_irq()
294 static void sleep_poll(enum arch_timer timer, uint64_t usec) in sleep_poll() argument
296 guest_poll(timer, usec, NO_USERSPACE_CMD); in sleep_poll()
299 static void sleep_sched_poll(enum arch_timer timer, uint64_t usec) in sleep_sched_poll() argument
301 guest_poll(timer, usec, USERSPACE_SCHED_YIELD); in sleep_sched_poll()
304 static void sleep_migrate(enum arch_timer timer, uint64_t usec) in sleep_migrate() argument
306 guest_poll(timer, usec, USERSPACE_MIGRATE_SELF); in sleep_migrate()
309 static void sleep_in_userspace(enum arch_timer timer, uint64_t usec) in sleep_in_userspace() argument
318 static void reset_timer_state(enum arch_timer timer, uint64_t cnt) in reset_timer_state() argument
320 set_counter(timer, cnt); in reset_timer_state()
321 timer_set_ctl(timer, CTL_IMASK); in reset_timer_state()
324 static void test_timer_xval(enum arch_timer timer, uint64_t xval, in test_timer_xval() argument
331 reset_timer_state(timer, reset_cnt); in test_timer_xval()
333 set_xval_irq(timer, xval, CTL_ENABLE, tv); in test_timer_xval()
351 static void test_timer_cval(enum arch_timer timer, uint64_t cval, in test_timer_cval() argument
355 test_timer_xval(timer, cval, TIMER_CVAL, wm, reset_state, reset_cnt); in test_timer_cval()
358 static void test_timer_tval(enum arch_timer timer, int32_t tval, in test_timer_tval() argument
362 test_timer_xval(timer, (uint64_t) tval, TIMER_TVAL, wm, reset_state, in test_timer_tval()
366 static void test_xval_check_no_irq(enum arch_timer timer, uint64_t xval, in test_xval_check_no_irq() argument
372 set_xval_irq(timer, xval, CTL_ENABLE | CTL_IMASK, timer_view); in test_xval_check_no_irq()
373 guest_sleep(timer, usec); in test_xval_check_no_irq()
382 static void test_cval_no_irq(enum arch_timer timer, uint64_t cval, in test_cval_no_irq() argument
385 test_xval_check_no_irq(timer, cval, usec, TIMER_CVAL, wm); in test_cval_no_irq()
388 static void test_tval_no_irq(enum arch_timer timer, int32_t tval, uint64_t usec, in test_tval_no_irq() argument
392 test_xval_check_no_irq(timer, (uint64_t) tval, usec, TIMER_TVAL, wm); in test_tval_no_irq()
396 static void test_timer_control_mask_then_unmask(enum arch_timer timer) in test_timer_control_mask_then_unmask() argument
398 reset_timer_state(timer, DEF_CNT); in test_timer_control_mask_then_unmask()
399 set_tval_irq(timer, -1, CTL_ENABLE | CTL_IMASK); in test_timer_control_mask_then_unmask()
403 timer_set_ctl(timer, CTL_ENABLE); in test_timer_control_mask_then_unmask()
412 static void test_timer_control_masks(enum arch_timer timer) in test_timer_control_masks() argument
414 reset_timer_state(timer, DEF_CNT); in test_timer_control_masks()
418 set_tval_irq(timer, -1, CTL_ENABLE | CTL_IMASK); in test_timer_control_masks()
421 sleep_poll(timer, TIMEOUT_NO_IRQ_US); in test_timer_control_masks()
424 timer_set_ctl(timer, CTL_IMASK); in test_timer_control_masks()
427 static void test_fire_a_timer_multiple_times(enum arch_timer timer, in test_fire_a_timer_multiple_times() argument
433 reset_timer_state(timer, DEF_CNT); in test_fire_a_timer_multiple_times()
435 set_tval_irq(timer, 0, CTL_ENABLE); in test_fire_a_timer_multiple_times()
444 timer_set_ctl(timer, CTL_ENABLE); in test_fire_a_timer_multiple_times()
452 static void test_timers_fired_multiple_times(enum arch_timer timer) in test_timers_fired_multiple_times() argument
457 test_fire_a_timer_multiple_times(timer, irq_wait_method[i], 10); in test_timers_fired_multiple_times()
465 static void test_reprogramming_timer(enum arch_timer timer, irq_wait_method_t wm, in test_reprogramming_timer() argument
469 reset_timer_state(timer, DEF_CNT); in test_reprogramming_timer()
472 set_tval_irq(timer, msec_to_cycles(delta_1_ms), CTL_ENABLE); in test_reprogramming_timer()
475 timer_set_tval(timer, msec_to_cycles(delta_2_ms)); in test_reprogramming_timer()
481 GUEST_ASSERT(timer_get_cntct(timer) >= in test_reprogramming_timer()
488 static void test_reprogram_timers(enum arch_timer timer) in test_reprogram_timers() argument
498 test_reprogramming_timer(timer, irq_wait_method[i], 2 * base_wait, in test_reprogram_timers()
500 test_reprogramming_timer(timer, irq_wait_method[i], base_wait, in test_reprogram_timers()
505 static void test_basic_functionality(enum arch_timer timer) in test_basic_functionality() argument
514 test_timer_cval(timer, cval, wm, true, DEF_CNT); in test_basic_functionality()
515 test_timer_tval(timer, tval, wm, true, DEF_CNT); in test_basic_functionality()
523 static void timers_sanity_checks(enum arch_timer timer, bool use_sched) in timers_sanity_checks() argument
525 reset_timer_state(timer, DEF_CNT); in timers_sanity_checks()
530 timer_set_cval(timer, in timers_sanity_checks()
531 timer_get_cntct(timer) - in timers_sanity_checks()
535 GUEST_ASSERT(timer_get_tval(timer) < 0); in timers_sanity_checks()
538 timer_set_tval(timer, -1); in timers_sanity_checks()
541 GUEST_ASSERT(timer_get_cval(timer) < timer_get_cntct(timer)); in timers_sanity_checks()
546 timer_set_cval(timer, in timers_sanity_checks()
547 timer_get_cntct(timer) + TVAL_MAX + in timers_sanity_checks()
551 GUEST_ASSERT(timer_get_tval(timer) <= 0); in timers_sanity_checks()
557 timer_set_cval(timer, in timers_sanity_checks()
558 timer_get_cntct(timer) + 2ULL * TVAL_MAX + in timers_sanity_checks()
562 GUEST_ASSERT(timer_get_tval(timer) <= in timers_sanity_checks()
566 set_counter(timer, msec_to_cycles(1)); in timers_sanity_checks()
567 timer_set_tval(timer, -1 * msec_to_cycles(test_args.wait_ms)); in timers_sanity_checks()
570 GUEST_ASSERT(timer_get_cval(timer) >= (CVAL_MAX - msec_to_cycles(test_args.wait_ms))); in timers_sanity_checks()
573 timer_set_tval(timer, 0); in timers_sanity_checks()
574 sleep_poll(timer, 1); in timers_sanity_checks()
575 GUEST_ASSERT(timer_get_tval(timer) < 0); in timers_sanity_checks()
580 timer_set_ctl(timer, CTL_IMASK); in timers_sanity_checks()
583 static void test_timers_sanity_checks(enum arch_timer timer) in test_timers_sanity_checks() argument
585 timers_sanity_checks(timer, false); in test_timers_sanity_checks()
587 timers_sanity_checks(timer, true); in test_timers_sanity_checks()
590 static void test_set_cnt_after_tval_max(enum arch_timer timer, irq_wait_method_t wm) in test_set_cnt_after_tval_max() argument
593 reset_timer_state(timer, DEF_CNT); in test_set_cnt_after_tval_max()
595 set_cval_irq(timer, in test_set_cnt_after_tval_max()
599 set_counter(timer, TVAL_MAX); in test_set_cnt_after_tval_max()
609 static void test_timers_above_tval_max(enum arch_timer timer) in test_timers_above_tval_max() argument
622 reset_timer_state(timer, DEF_CNT); in test_timers_above_tval_max()
623 cval = timer_get_cntct(timer) + TVAL_MAX + in test_timers_above_tval_max()
625 test_cval_no_irq(timer, cval, in test_timers_above_tval_max()
632 test_set_cnt_after_tval_max(timer, irq_wait_method[i]); in test_timers_above_tval_max()
641 static void test_set_cnt_after_xval(enum arch_timer timer, uint64_t cnt_1, in test_set_cnt_after_xval() argument
647 set_counter(timer, cnt_1); in test_set_cnt_after_xval()
648 timer_set_ctl(timer, CTL_IMASK); in test_set_cnt_after_xval()
650 set_xval_irq(timer, xval, CTL_ENABLE, tv); in test_set_cnt_after_xval()
651 set_counter(timer, cnt_2); in test_set_cnt_after_xval()
664 static void test_set_cnt_after_xval_no_irq(enum arch_timer timer, in test_set_cnt_after_xval_no_irq() argument
672 set_counter(timer, cnt_1); in test_set_cnt_after_xval_no_irq()
673 timer_set_ctl(timer, CTL_IMASK); in test_set_cnt_after_xval_no_irq()
675 set_xval_irq(timer, xval, CTL_ENABLE, tv); in test_set_cnt_after_xval_no_irq()
676 set_counter(timer, cnt_2); in test_set_cnt_after_xval_no_irq()
677 guest_sleep(timer, TIMEOUT_NO_IRQ_US); in test_set_cnt_after_xval_no_irq()
684 timer_set_ctl(timer, CTL_IMASK); in test_set_cnt_after_xval_no_irq()
687 static void test_set_cnt_after_tval(enum arch_timer timer, uint64_t cnt_1, in test_set_cnt_after_tval() argument
691 test_set_cnt_after_xval(timer, cnt_1, tval, cnt_2, wm, TIMER_TVAL); in test_set_cnt_after_tval()
694 static void test_set_cnt_after_cval(enum arch_timer timer, uint64_t cnt_1, in test_set_cnt_after_cval() argument
698 test_set_cnt_after_xval(timer, cnt_1, cval, cnt_2, wm, TIMER_CVAL); in test_set_cnt_after_cval()
701 static void test_set_cnt_after_tval_no_irq(enum arch_timer timer, in test_set_cnt_after_tval_no_irq() argument
705 test_set_cnt_after_xval_no_irq(timer, cnt_1, tval, cnt_2, wm, in test_set_cnt_after_tval_no_irq()
709 static void test_set_cnt_after_cval_no_irq(enum arch_timer timer, in test_set_cnt_after_cval_no_irq() argument
713 test_set_cnt_after_xval_no_irq(timer, cnt_1, cval, cnt_2, wm, in test_set_cnt_after_cval_no_irq()
718 static void test_move_counters_ahead_of_timers(enum arch_timer timer) in test_move_counters_ahead_of_timers() argument
726 test_set_cnt_after_cval(timer, 0, DEF_CNT, DEF_CNT + 1, wm); in test_move_counters_ahead_of_timers()
727 test_set_cnt_after_cval(timer, CVAL_MAX, 1, 2, wm); in test_move_counters_ahead_of_timers()
730 test_set_cnt_after_tval(timer, 0, -1, DEF_CNT + 1, wm); in test_move_counters_ahead_of_timers()
731 test_set_cnt_after_tval(timer, 0, -1, TVAL_MAX, wm); in test_move_counters_ahead_of_timers()
733 test_set_cnt_after_tval(timer, 0, tval, (uint64_t) tval + 1, in test_move_counters_ahead_of_timers()
742 static void test_move_counters_behind_timers(enum arch_timer timer) in test_move_counters_behind_timers() argument
749 test_set_cnt_after_cval_no_irq(timer, DEF_CNT, DEF_CNT - 1, 0, in test_move_counters_behind_timers()
751 test_set_cnt_after_tval_no_irq(timer, DEF_CNT, -1, 0, sm); in test_move_counters_behind_timers()
755 static void test_timers_in_the_past(enum arch_timer timer) in test_timers_in_the_past() argument
766 test_timer_cval(timer, cval, wm, true, DEF_CNT); in test_timers_in_the_past()
767 test_timer_tval(timer, tval, wm, true, DEF_CNT); in test_timers_in_the_past()
770 test_timer_cval(timer, 0, wm, true, DEF_CNT); in test_timers_in_the_past()
773 test_timer_tval(timer, 0, wm, true, DEF_CNT); in test_timers_in_the_past()
776 test_timer_tval(timer, TVAL_MIN, wm, true, DEF_CNT); in test_timers_in_the_past()
786 set_counter(timer, msec_to_cycles(test_args.wait_ms)); in test_timers_in_the_past()
787 test_tval_no_irq(timer, tval, TIMEOUT_NO_IRQ_US, sm); in test_timers_in_the_past()
791 static void test_long_timer_delays(enum arch_timer timer) in test_long_timer_delays() argument
800 test_timer_cval(timer, cval, wm, true, DEF_CNT); in test_long_timer_delays()
801 test_timer_tval(timer, tval, wm, true, DEF_CNT); in test_long_timer_delays()
805 static void guest_run_iteration(enum arch_timer timer) in guest_run_iteration() argument
807 test_basic_functionality(timer); in guest_run_iteration()
808 test_timers_sanity_checks(timer); in guest_run_iteration()
810 test_timers_above_tval_max(timer); in guest_run_iteration()
811 test_timers_in_the_past(timer); in guest_run_iteration()
813 test_move_counters_ahead_of_timers(timer); in guest_run_iteration()
814 test_move_counters_behind_timers(timer); in guest_run_iteration()
815 test_reprogram_timers(timer); in guest_run_iteration()
817 test_timers_fired_multiple_times(timer); in guest_run_iteration()
819 test_timer_control_mask_then_unmask(timer); in guest_run_iteration()
820 test_timer_control_masks(timer); in guest_run_iteration()
823 static void guest_code(enum arch_timer timer) in guest_code() argument
840 guest_run_iteration(timer); in guest_code()
843 test_long_timer_delays(timer); in guest_code()
866 enum arch_timer timer) in kvm_set_cntxct() argument
868 if (timer == PHYSICAL) in kvm_set_cntxct()
878 enum arch_timer timer = uc->args[3]; in handle_sync() local
882 kvm_set_cntxct(vcpu, val, timer); in handle_sync()
941 enum arch_timer timer) in test_vm_create() argument
951 vcpu_args_set(*vcpu, 1, timer); in test_vm_create()