15b262bb6SDmitry Osipenko /* 25b262bb6SDmitry Osipenko * QTest testcase for the ptimer 35b262bb6SDmitry Osipenko * 45b262bb6SDmitry Osipenko * Author: Dmitry Osipenko <digetx@gmail.com> 55b262bb6SDmitry Osipenko * 65b262bb6SDmitry Osipenko * This work is licensed under the terms of the GNU GPL, version 2 or later. 75b262bb6SDmitry Osipenko * See the COPYING file in the top-level directory. 85b262bb6SDmitry Osipenko * 95b262bb6SDmitry Osipenko */ 105b262bb6SDmitry Osipenko 115b262bb6SDmitry Osipenko #include <glib/gprintf.h> 125b262bb6SDmitry Osipenko 135b262bb6SDmitry Osipenko #include "qemu/osdep.h" 145b262bb6SDmitry Osipenko #include "qemu/main-loop.h" 155b262bb6SDmitry Osipenko #include "hw/ptimer.h" 165b262bb6SDmitry Osipenko 175b262bb6SDmitry Osipenko #include "libqtest.h" 185b262bb6SDmitry Osipenko #include "ptimer-test.h" 195b262bb6SDmitry Osipenko 205b262bb6SDmitry Osipenko static bool triggered; 215b262bb6SDmitry Osipenko 225b262bb6SDmitry Osipenko static void ptimer_trigger(void *opaque) 235b262bb6SDmitry Osipenko { 245b262bb6SDmitry Osipenko triggered = true; 255b262bb6SDmitry Osipenko } 265b262bb6SDmitry Osipenko 275b262bb6SDmitry Osipenko static void ptimer_test_expire_qemu_timers(int64_t expire_time, 285b262bb6SDmitry Osipenko QEMUClockType type) 295b262bb6SDmitry Osipenko { 305b262bb6SDmitry Osipenko QEMUTimerList *timer_list = main_loop_tlg.tl[type]; 315b262bb6SDmitry Osipenko QEMUTimer *t = timer_list->active_timers.next; 325b262bb6SDmitry Osipenko 335b262bb6SDmitry Osipenko while (t != NULL) { 345b262bb6SDmitry Osipenko if (t->expire_time == expire_time) { 355b262bb6SDmitry Osipenko timer_del(t); 365b262bb6SDmitry Osipenko 375b262bb6SDmitry Osipenko if (t->cb != NULL) { 385b262bb6SDmitry Osipenko t->cb(t->opaque); 395b262bb6SDmitry Osipenko } 405b262bb6SDmitry Osipenko } 415b262bb6SDmitry Osipenko 425b262bb6SDmitry Osipenko t = t->next; 435b262bb6SDmitry Osipenko } 445b262bb6SDmitry Osipenko } 455b262bb6SDmitry Osipenko 465b262bb6SDmitry Osipenko static void ptimer_test_set_qemu_time_ns(int64_t ns) 475b262bb6SDmitry Osipenko { 485b262bb6SDmitry Osipenko ptimer_test_time_ns = ns; 495b262bb6SDmitry Osipenko } 505b262bb6SDmitry Osipenko 515b262bb6SDmitry Osipenko static void qemu_clock_step(uint64_t ns) 525b262bb6SDmitry Osipenko { 535b262bb6SDmitry Osipenko int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL); 545b262bb6SDmitry Osipenko int64_t advanced_time = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + ns; 555b262bb6SDmitry Osipenko 565b262bb6SDmitry Osipenko while (deadline != -1 && deadline <= advanced_time) { 575b262bb6SDmitry Osipenko ptimer_test_set_qemu_time_ns(deadline); 585b262bb6SDmitry Osipenko ptimer_test_expire_qemu_timers(deadline, QEMU_CLOCK_VIRTUAL); 595b262bb6SDmitry Osipenko deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL); 605b262bb6SDmitry Osipenko } 615b262bb6SDmitry Osipenko 625b262bb6SDmitry Osipenko ptimer_test_set_qemu_time_ns(advanced_time); 635b262bb6SDmitry Osipenko } 645b262bb6SDmitry Osipenko 655b262bb6SDmitry Osipenko static void check_set_count(gconstpointer arg) 665b262bb6SDmitry Osipenko { 675b262bb6SDmitry Osipenko const uint8_t *policy = arg; 685b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 695b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 705b262bb6SDmitry Osipenko 715b262bb6SDmitry Osipenko triggered = false; 725b262bb6SDmitry Osipenko 735b262bb6SDmitry Osipenko ptimer_set_count(ptimer, 1000); 745b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 1000); 755b262bb6SDmitry Osipenko g_assert_false(triggered); 765b262bb6SDmitry Osipenko } 775b262bb6SDmitry Osipenko 785b262bb6SDmitry Osipenko static void check_set_limit(gconstpointer arg) 795b262bb6SDmitry Osipenko { 805b262bb6SDmitry Osipenko const uint8_t *policy = arg; 815b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 825b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 835b262bb6SDmitry Osipenko 845b262bb6SDmitry Osipenko triggered = false; 855b262bb6SDmitry Osipenko 865b262bb6SDmitry Osipenko ptimer_set_limit(ptimer, 1000, 0); 875b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 885b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_limit(ptimer), ==, 1000); 895b262bb6SDmitry Osipenko g_assert_false(triggered); 905b262bb6SDmitry Osipenko 915b262bb6SDmitry Osipenko ptimer_set_limit(ptimer, 2000, 1); 925b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 2000); 935b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_limit(ptimer), ==, 2000); 945b262bb6SDmitry Osipenko g_assert_false(triggered); 955b262bb6SDmitry Osipenko } 965b262bb6SDmitry Osipenko 975b262bb6SDmitry Osipenko static void check_oneshot(gconstpointer arg) 985b262bb6SDmitry Osipenko { 995b262bb6SDmitry Osipenko const uint8_t *policy = arg; 1005b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 1015b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 1025b262bb6SDmitry Osipenko 1035b262bb6SDmitry Osipenko triggered = false; 1045b262bb6SDmitry Osipenko 1055b262bb6SDmitry Osipenko ptimer_set_period(ptimer, 2000000); 1065b262bb6SDmitry Osipenko ptimer_set_count(ptimer, 10); 1075b262bb6SDmitry Osipenko ptimer_run(ptimer, 1); 1085b262bb6SDmitry Osipenko 1095b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 2 + 100000); 1105b262bb6SDmitry Osipenko 1115b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 7); 1125b262bb6SDmitry Osipenko g_assert_false(triggered); 1135b262bb6SDmitry Osipenko 1145b262bb6SDmitry Osipenko ptimer_stop(ptimer); 1155b262bb6SDmitry Osipenko 1165b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 7); 1175b262bb6SDmitry Osipenko g_assert_false(triggered); 1185b262bb6SDmitry Osipenko 1195b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 11); 1205b262bb6SDmitry Osipenko 1215b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 7); 1225b262bb6SDmitry Osipenko g_assert_false(triggered); 1235b262bb6SDmitry Osipenko 1245b262bb6SDmitry Osipenko ptimer_run(ptimer, 1); 1255b262bb6SDmitry Osipenko 1265b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 7 + 100000); 1275b262bb6SDmitry Osipenko 1285b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 1295b262bb6SDmitry Osipenko g_assert_true(triggered); 1305b262bb6SDmitry Osipenko 1315b262bb6SDmitry Osipenko triggered = false; 1325b262bb6SDmitry Osipenko 1335b262bb6SDmitry Osipenko qemu_clock_step(2000000); 1345b262bb6SDmitry Osipenko 1355b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 1365b262bb6SDmitry Osipenko g_assert_false(triggered); 1375b262bb6SDmitry Osipenko 1385b262bb6SDmitry Osipenko qemu_clock_step(4000000); 1395b262bb6SDmitry Osipenko 1405b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 1415b262bb6SDmitry Osipenko g_assert_false(triggered); 1425b262bb6SDmitry Osipenko 1435b262bb6SDmitry Osipenko ptimer_set_count(ptimer, 10); 1445b262bb6SDmitry Osipenko 1455b262bb6SDmitry Osipenko qemu_clock_step(20000000 + 100000); 1465b262bb6SDmitry Osipenko 1475b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 10); 1485b262bb6SDmitry Osipenko g_assert_false(triggered); 1495b262bb6SDmitry Osipenko 1505b262bb6SDmitry Osipenko ptimer_set_limit(ptimer, 9, 1); 1515b262bb6SDmitry Osipenko 1525b262bb6SDmitry Osipenko qemu_clock_step(20000000 + 100000); 1535b262bb6SDmitry Osipenko 1545b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 9); 1555b262bb6SDmitry Osipenko g_assert_false(triggered); 1565b262bb6SDmitry Osipenko 1575b262bb6SDmitry Osipenko ptimer_run(ptimer, 1); 1585b262bb6SDmitry Osipenko 1595b262bb6SDmitry Osipenko qemu_clock_step(2000000 + 100000); 1605b262bb6SDmitry Osipenko 1615b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 7); 1625b262bb6SDmitry Osipenko g_assert_false(triggered); 1635b262bb6SDmitry Osipenko 1645b262bb6SDmitry Osipenko ptimer_set_count(ptimer, 20); 1655b262bb6SDmitry Osipenko 1665b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 19 + 100000); 1675b262bb6SDmitry Osipenko 1685b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 1695b262bb6SDmitry Osipenko g_assert_false(triggered); 1705b262bb6SDmitry Osipenko 1715b262bb6SDmitry Osipenko qemu_clock_step(2000000); 1725b262bb6SDmitry Osipenko 1735b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 1745b262bb6SDmitry Osipenko g_assert_true(triggered); 1755b262bb6SDmitry Osipenko 1765b262bb6SDmitry Osipenko ptimer_stop(ptimer); 1775b262bb6SDmitry Osipenko 1785b262bb6SDmitry Osipenko triggered = false; 1795b262bb6SDmitry Osipenko 1805b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 12 + 100000); 1815b262bb6SDmitry Osipenko 1825b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 1835b262bb6SDmitry Osipenko g_assert_false(triggered); 1845b262bb6SDmitry Osipenko } 1855b262bb6SDmitry Osipenko 1865b262bb6SDmitry Osipenko static void check_periodic(gconstpointer arg) 1875b262bb6SDmitry Osipenko { 1885b262bb6SDmitry Osipenko const uint8_t *policy = arg; 1895b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 1905b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 191293130aaSDmitry Osipenko bool wrap_policy = (*policy & PTIMER_POLICY_WRAP_AFTER_ONE_PERIOD); 192*516deb42SDmitry Osipenko bool no_immediate_trigger = (*policy & PTIMER_POLICY_NO_IMMEDIATE_TRIGGER); 1935b262bb6SDmitry Osipenko 1945b262bb6SDmitry Osipenko triggered = false; 1955b262bb6SDmitry Osipenko 1965b262bb6SDmitry Osipenko ptimer_set_period(ptimer, 2000000); 1975b262bb6SDmitry Osipenko ptimer_set_limit(ptimer, 10, 1); 1985b262bb6SDmitry Osipenko ptimer_run(ptimer, 0); 1995b262bb6SDmitry Osipenko 200293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 10); 201293130aaSDmitry Osipenko g_assert_false(triggered); 202293130aaSDmitry Osipenko 203293130aaSDmitry Osipenko qemu_clock_step(100000); 2045b262bb6SDmitry Osipenko 2055b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 9); 206293130aaSDmitry Osipenko g_assert_false(triggered); 207293130aaSDmitry Osipenko 208293130aaSDmitry Osipenko qemu_clock_step(2000000 * 10 - 100000); 209293130aaSDmitry Osipenko 210293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 0 : 10); 211293130aaSDmitry Osipenko g_assert_true(triggered); 212293130aaSDmitry Osipenko 213293130aaSDmitry Osipenko qemu_clock_step(100000); 214293130aaSDmitry Osipenko 215293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 0 : 9); 2165b262bb6SDmitry Osipenko g_assert_true(triggered); 2175b262bb6SDmitry Osipenko 2185b262bb6SDmitry Osipenko triggered = false; 2195b262bb6SDmitry Osipenko 2205b262bb6SDmitry Osipenko qemu_clock_step(2000000); 2215b262bb6SDmitry Osipenko 222293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 9 : 8); 2235b262bb6SDmitry Osipenko g_assert_false(triggered); 2245b262bb6SDmitry Osipenko 2255b262bb6SDmitry Osipenko ptimer_set_count(ptimer, 20); 2265b262bb6SDmitry Osipenko 227293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 20); 228293130aaSDmitry Osipenko g_assert_false(triggered); 229293130aaSDmitry Osipenko 230293130aaSDmitry Osipenko qemu_clock_step(100000); 231293130aaSDmitry Osipenko 232293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 19); 233293130aaSDmitry Osipenko g_assert_false(triggered); 234293130aaSDmitry Osipenko 2355b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 11 + 100000); 2365b262bb6SDmitry Osipenko 2375b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 8); 2385b262bb6SDmitry Osipenko g_assert_false(triggered); 2395b262bb6SDmitry Osipenko 2405b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 10); 2415b262bb6SDmitry Osipenko 242293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 9 : 8); 243293130aaSDmitry Osipenko g_assert_true(triggered); 244293130aaSDmitry Osipenko 245293130aaSDmitry Osipenko triggered = false; 246293130aaSDmitry Osipenko 247293130aaSDmitry Osipenko ptimer_set_count(ptimer, 3); 248293130aaSDmitry Osipenko 249293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 3); 250293130aaSDmitry Osipenko g_assert_false(triggered); 251293130aaSDmitry Osipenko 252293130aaSDmitry Osipenko qemu_clock_step(100000); 253293130aaSDmitry Osipenko 254293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 2); 255293130aaSDmitry Osipenko g_assert_false(triggered); 256293130aaSDmitry Osipenko 257293130aaSDmitry Osipenko qemu_clock_step(2000000 * 4); 258293130aaSDmitry Osipenko 259293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 9 : 8); 2605b262bb6SDmitry Osipenko g_assert_true(triggered); 2615b262bb6SDmitry Osipenko 2625b262bb6SDmitry Osipenko ptimer_stop(ptimer); 2635b262bb6SDmitry Osipenko triggered = false; 2645b262bb6SDmitry Osipenko 2655b262bb6SDmitry Osipenko qemu_clock_step(2000000); 2665b262bb6SDmitry Osipenko 267293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 9 : 8); 2685b262bb6SDmitry Osipenko g_assert_false(triggered); 2695b262bb6SDmitry Osipenko 2705b262bb6SDmitry Osipenko ptimer_set_count(ptimer, 3); 2715b262bb6SDmitry Osipenko ptimer_run(ptimer, 0); 2725b262bb6SDmitry Osipenko 2735b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 3 + 100000); 2745b262bb6SDmitry Osipenko 275293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 0 : 9); 2765b262bb6SDmitry Osipenko g_assert_true(triggered); 2775b262bb6SDmitry Osipenko 2785b262bb6SDmitry Osipenko triggered = false; 2795b262bb6SDmitry Osipenko 2805b262bb6SDmitry Osipenko qemu_clock_step(2000000); 2815b262bb6SDmitry Osipenko 282293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 9 : 8); 2835b262bb6SDmitry Osipenko g_assert_false(triggered); 2845b262bb6SDmitry Osipenko 2855b262bb6SDmitry Osipenko ptimer_set_count(ptimer, 0); 2865b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 10); 287*516deb42SDmitry Osipenko 288*516deb42SDmitry Osipenko if (no_immediate_trigger) { 289*516deb42SDmitry Osipenko g_assert_false(triggered); 290*516deb42SDmitry Osipenko } else { 2915b262bb6SDmitry Osipenko g_assert_true(triggered); 292*516deb42SDmitry Osipenko } 2935b262bb6SDmitry Osipenko 2945b262bb6SDmitry Osipenko triggered = false; 2955b262bb6SDmitry Osipenko 296293130aaSDmitry Osipenko qemu_clock_step(100000); 2975b262bb6SDmitry Osipenko 298293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 9); 299293130aaSDmitry Osipenko g_assert_false(triggered); 300293130aaSDmitry Osipenko 301293130aaSDmitry Osipenko qemu_clock_step(2000000 * 12); 302293130aaSDmitry Osipenko 303293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 8 : 7); 3045b262bb6SDmitry Osipenko g_assert_true(triggered); 3055b262bb6SDmitry Osipenko 3065b262bb6SDmitry Osipenko ptimer_stop(ptimer); 3075b262bb6SDmitry Osipenko 3085b262bb6SDmitry Osipenko triggered = false; 3095b262bb6SDmitry Osipenko 310293130aaSDmitry Osipenko qemu_clock_step(2000000 * 10); 3115b262bb6SDmitry Osipenko 312293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 8 : 7); 3135b262bb6SDmitry Osipenko g_assert_false(triggered); 3145b262bb6SDmitry Osipenko 3155b262bb6SDmitry Osipenko ptimer_run(ptimer, 0); 3165b262bb6SDmitry Osipenko ptimer_set_period(ptimer, 0); 3175b262bb6SDmitry Osipenko 3185b262bb6SDmitry Osipenko qemu_clock_step(2000000 + 100000); 3195b262bb6SDmitry Osipenko 320293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 8 : 7); 3215b262bb6SDmitry Osipenko g_assert_false(triggered); 3225b262bb6SDmitry Osipenko } 3235b262bb6SDmitry Osipenko 3245b262bb6SDmitry Osipenko static void check_on_the_fly_mode_change(gconstpointer arg) 3255b262bb6SDmitry Osipenko { 3265b262bb6SDmitry Osipenko const uint8_t *policy = arg; 3275b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 3285b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 329293130aaSDmitry Osipenko bool wrap_policy = (*policy & PTIMER_POLICY_WRAP_AFTER_ONE_PERIOD); 3305b262bb6SDmitry Osipenko 3315b262bb6SDmitry Osipenko triggered = false; 3325b262bb6SDmitry Osipenko 3335b262bb6SDmitry Osipenko ptimer_set_period(ptimer, 2000000); 3345b262bb6SDmitry Osipenko ptimer_set_limit(ptimer, 10, 1); 3355b262bb6SDmitry Osipenko ptimer_run(ptimer, 1); 3365b262bb6SDmitry Osipenko 3375b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 9 + 100000); 3385b262bb6SDmitry Osipenko 339293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 340293130aaSDmitry Osipenko g_assert_false(triggered); 341293130aaSDmitry Osipenko 3425b262bb6SDmitry Osipenko ptimer_run(ptimer, 0); 3435b262bb6SDmitry Osipenko 3445b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 3455b262bb6SDmitry Osipenko g_assert_false(triggered); 3465b262bb6SDmitry Osipenko 3475b262bb6SDmitry Osipenko qemu_clock_step(2000000); 3485b262bb6SDmitry Osipenko 349293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 0 : 9); 3505b262bb6SDmitry Osipenko g_assert_true(triggered); 3515b262bb6SDmitry Osipenko 3525b262bb6SDmitry Osipenko triggered = false; 3535b262bb6SDmitry Osipenko 3545b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 9); 3555b262bb6SDmitry Osipenko 3565b262bb6SDmitry Osipenko ptimer_run(ptimer, 1); 3575b262bb6SDmitry Osipenko 358293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 1 : 0); 3595b262bb6SDmitry Osipenko g_assert_false(triggered); 3605b262bb6SDmitry Osipenko 3615b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 3); 3625b262bb6SDmitry Osipenko 3635b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 3645b262bb6SDmitry Osipenko g_assert_true(triggered); 3655b262bb6SDmitry Osipenko } 3665b262bb6SDmitry Osipenko 3675b262bb6SDmitry Osipenko static void check_on_the_fly_period_change(gconstpointer arg) 3685b262bb6SDmitry Osipenko { 3695b262bb6SDmitry Osipenko const uint8_t *policy = arg; 3705b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 3715b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 3725b262bb6SDmitry Osipenko 3735b262bb6SDmitry Osipenko triggered = false; 3745b262bb6SDmitry Osipenko 3755b262bb6SDmitry Osipenko ptimer_set_period(ptimer, 2000000); 3765b262bb6SDmitry Osipenko ptimer_set_limit(ptimer, 8, 1); 3775b262bb6SDmitry Osipenko ptimer_run(ptimer, 1); 3785b262bb6SDmitry Osipenko 3795b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 4 + 100000); 3805b262bb6SDmitry Osipenko 3815b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 3); 3825b262bb6SDmitry Osipenko g_assert_false(triggered); 3835b262bb6SDmitry Osipenko 3845b262bb6SDmitry Osipenko ptimer_set_period(ptimer, 4000000); 3855b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 3); 3865b262bb6SDmitry Osipenko 3875b262bb6SDmitry Osipenko qemu_clock_step(4000000 * 2 + 100000); 3885b262bb6SDmitry Osipenko 3895b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 3905b262bb6SDmitry Osipenko g_assert_false(triggered); 3915b262bb6SDmitry Osipenko 3925b262bb6SDmitry Osipenko qemu_clock_step(4000000 * 2); 3935b262bb6SDmitry Osipenko 3945b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 3955b262bb6SDmitry Osipenko g_assert_true(triggered); 3965b262bb6SDmitry Osipenko } 3975b262bb6SDmitry Osipenko 3985b262bb6SDmitry Osipenko static void check_on_the_fly_freq_change(gconstpointer arg) 3995b262bb6SDmitry Osipenko { 4005b262bb6SDmitry Osipenko const uint8_t *policy = arg; 4015b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 4025b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 4035b262bb6SDmitry Osipenko 4045b262bb6SDmitry Osipenko triggered = false; 4055b262bb6SDmitry Osipenko 4065b262bb6SDmitry Osipenko ptimer_set_freq(ptimer, 500); 4075b262bb6SDmitry Osipenko ptimer_set_limit(ptimer, 8, 1); 4085b262bb6SDmitry Osipenko ptimer_run(ptimer, 1); 4095b262bb6SDmitry Osipenko 4105b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 4 + 100000); 4115b262bb6SDmitry Osipenko 4125b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 3); 4135b262bb6SDmitry Osipenko g_assert_false(triggered); 4145b262bb6SDmitry Osipenko 4155b262bb6SDmitry Osipenko ptimer_set_freq(ptimer, 250); 4165b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 3); 4175b262bb6SDmitry Osipenko 4185b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 4 + 100000); 4195b262bb6SDmitry Osipenko 4205b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 4215b262bb6SDmitry Osipenko g_assert_false(triggered); 4225b262bb6SDmitry Osipenko 4235b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 4); 4245b262bb6SDmitry Osipenko 4255b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 4265b262bb6SDmitry Osipenko g_assert_true(triggered); 4275b262bb6SDmitry Osipenko } 4285b262bb6SDmitry Osipenko 4295b262bb6SDmitry Osipenko static void check_run_with_period_0(gconstpointer arg) 4305b262bb6SDmitry Osipenko { 4315b262bb6SDmitry Osipenko const uint8_t *policy = arg; 4325b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 4335b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 4345b262bb6SDmitry Osipenko 4355b262bb6SDmitry Osipenko triggered = false; 4365b262bb6SDmitry Osipenko 4375b262bb6SDmitry Osipenko ptimer_set_count(ptimer, 99); 4385b262bb6SDmitry Osipenko ptimer_run(ptimer, 1); 4395b262bb6SDmitry Osipenko 4405b262bb6SDmitry Osipenko qemu_clock_step(10 * NANOSECONDS_PER_SECOND); 4415b262bb6SDmitry Osipenko 4425b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 99); 4435b262bb6SDmitry Osipenko g_assert_false(triggered); 4445b262bb6SDmitry Osipenko } 4455b262bb6SDmitry Osipenko 4465b262bb6SDmitry Osipenko static void check_run_with_delta_0(gconstpointer arg) 4475b262bb6SDmitry Osipenko { 4485b262bb6SDmitry Osipenko const uint8_t *policy = arg; 4495b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 4505b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 451293130aaSDmitry Osipenko bool wrap_policy = (*policy & PTIMER_POLICY_WRAP_AFTER_ONE_PERIOD); 452*516deb42SDmitry Osipenko bool no_immediate_trigger = (*policy & PTIMER_POLICY_NO_IMMEDIATE_TRIGGER); 4535b262bb6SDmitry Osipenko 4545b262bb6SDmitry Osipenko triggered = false; 4555b262bb6SDmitry Osipenko 4565b262bb6SDmitry Osipenko ptimer_set_period(ptimer, 2000000); 4575b262bb6SDmitry Osipenko ptimer_set_limit(ptimer, 99, 0); 4585b262bb6SDmitry Osipenko ptimer_run(ptimer, 1); 4595b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 99); 460*516deb42SDmitry Osipenko 461*516deb42SDmitry Osipenko if (no_immediate_trigger) { 462*516deb42SDmitry Osipenko g_assert_false(triggered); 463*516deb42SDmitry Osipenko } else { 4645b262bb6SDmitry Osipenko g_assert_true(triggered); 465*516deb42SDmitry Osipenko } 4665b262bb6SDmitry Osipenko 4675b262bb6SDmitry Osipenko triggered = false; 4685b262bb6SDmitry Osipenko 469*516deb42SDmitry Osipenko if (no_immediate_trigger) { 470*516deb42SDmitry Osipenko qemu_clock_step(2000000 + 100000); 471*516deb42SDmitry Osipenko 472*516deb42SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 97); 473*516deb42SDmitry Osipenko g_assert_false(triggered); 474*516deb42SDmitry Osipenko 475*516deb42SDmitry Osipenko ptimer_set_count(ptimer, 99); 476*516deb42SDmitry Osipenko ptimer_run(ptimer, 1); 477*516deb42SDmitry Osipenko } 478*516deb42SDmitry Osipenko 4795b262bb6SDmitry Osipenko qemu_clock_step(2000000 + 100000); 4805b262bb6SDmitry Osipenko 4815b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 97); 4825b262bb6SDmitry Osipenko g_assert_false(triggered); 4835b262bb6SDmitry Osipenko 4845b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 97); 4855b262bb6SDmitry Osipenko 4865b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 4875b262bb6SDmitry Osipenko g_assert_false(triggered); 4885b262bb6SDmitry Osipenko 4895b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 2); 4905b262bb6SDmitry Osipenko 4915b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 4925b262bb6SDmitry Osipenko g_assert_true(triggered); 4935b262bb6SDmitry Osipenko 4945b262bb6SDmitry Osipenko triggered = false; 4955b262bb6SDmitry Osipenko 4965b262bb6SDmitry Osipenko ptimer_set_count(ptimer, 0); 4975b262bb6SDmitry Osipenko ptimer_run(ptimer, 0); 4985b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 99); 499*516deb42SDmitry Osipenko 500*516deb42SDmitry Osipenko if (no_immediate_trigger) { 501*516deb42SDmitry Osipenko g_assert_false(triggered); 502*516deb42SDmitry Osipenko } else { 5035b262bb6SDmitry Osipenko g_assert_true(triggered); 504*516deb42SDmitry Osipenko } 5055b262bb6SDmitry Osipenko 5065b262bb6SDmitry Osipenko triggered = false; 5075b262bb6SDmitry Osipenko 508293130aaSDmitry Osipenko qemu_clock_step(100000); 509293130aaSDmitry Osipenko 510293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 98); 511293130aaSDmitry Osipenko g_assert_false(triggered); 512293130aaSDmitry Osipenko 513293130aaSDmitry Osipenko triggered = false; 514293130aaSDmitry Osipenko 515293130aaSDmitry Osipenko qemu_clock_step(2000000); 5165b262bb6SDmitry Osipenko 5175b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 97); 5185b262bb6SDmitry Osipenko g_assert_false(triggered); 5195b262bb6SDmitry Osipenko 5205b262bb6SDmitry Osipenko qemu_clock_step(2000000 * 98); 5215b262bb6SDmitry Osipenko 522293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, wrap_policy ? 0 : 98); 5235b262bb6SDmitry Osipenko g_assert_true(triggered); 5245b262bb6SDmitry Osipenko 5255b262bb6SDmitry Osipenko ptimer_stop(ptimer); 5265b262bb6SDmitry Osipenko } 5275b262bb6SDmitry Osipenko 5285b262bb6SDmitry Osipenko static void check_periodic_with_load_0(gconstpointer arg) 5295b262bb6SDmitry Osipenko { 5305b262bb6SDmitry Osipenko const uint8_t *policy = arg; 5315b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 5325b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 5332e74583bSDmitry Osipenko bool continuous_trigger = (*policy & PTIMER_POLICY_CONTINUOUS_TRIGGER); 534*516deb42SDmitry Osipenko bool no_immediate_trigger = (*policy & PTIMER_POLICY_NO_IMMEDIATE_TRIGGER); 5355b262bb6SDmitry Osipenko 5365b262bb6SDmitry Osipenko triggered = false; 5375b262bb6SDmitry Osipenko 5385b262bb6SDmitry Osipenko ptimer_set_period(ptimer, 2000000); 5395b262bb6SDmitry Osipenko ptimer_run(ptimer, 0); 5405b262bb6SDmitry Osipenko 5415b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 542*516deb42SDmitry Osipenko 543*516deb42SDmitry Osipenko if (no_immediate_trigger) { 544*516deb42SDmitry Osipenko g_assert_false(triggered); 545*516deb42SDmitry Osipenko } else { 5465b262bb6SDmitry Osipenko g_assert_true(triggered); 547*516deb42SDmitry Osipenko } 5485b262bb6SDmitry Osipenko 5495b262bb6SDmitry Osipenko triggered = false; 5505b262bb6SDmitry Osipenko 5515b262bb6SDmitry Osipenko qemu_clock_step(2000000 + 100000); 5525b262bb6SDmitry Osipenko 5535b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 5542e74583bSDmitry Osipenko 555*516deb42SDmitry Osipenko if (continuous_trigger || no_immediate_trigger) { 5562e74583bSDmitry Osipenko g_assert_true(triggered); 5572e74583bSDmitry Osipenko } else { 5585b262bb6SDmitry Osipenko g_assert_false(triggered); 5592e74583bSDmitry Osipenko } 5605b262bb6SDmitry Osipenko 561293130aaSDmitry Osipenko triggered = false; 562293130aaSDmitry Osipenko 563293130aaSDmitry Osipenko ptimer_set_count(ptimer, 10); 564293130aaSDmitry Osipenko ptimer_run(ptimer, 0); 565293130aaSDmitry Osipenko 566293130aaSDmitry Osipenko qemu_clock_step(2000000 * 10 + 100000); 567293130aaSDmitry Osipenko 568293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 569293130aaSDmitry Osipenko g_assert_true(triggered); 570293130aaSDmitry Osipenko 571293130aaSDmitry Osipenko triggered = false; 572293130aaSDmitry Osipenko 573293130aaSDmitry Osipenko qemu_clock_step(2000000 + 100000); 574293130aaSDmitry Osipenko 575293130aaSDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 5762e74583bSDmitry Osipenko 5772e74583bSDmitry Osipenko if (continuous_trigger) { 5782e74583bSDmitry Osipenko g_assert_true(triggered); 5792e74583bSDmitry Osipenko } else { 580293130aaSDmitry Osipenko g_assert_false(triggered); 5812e74583bSDmitry Osipenko } 582293130aaSDmitry Osipenko 5835b262bb6SDmitry Osipenko ptimer_stop(ptimer); 5845b262bb6SDmitry Osipenko } 5855b262bb6SDmitry Osipenko 5865b262bb6SDmitry Osipenko static void check_oneshot_with_load_0(gconstpointer arg) 5875b262bb6SDmitry Osipenko { 5885b262bb6SDmitry Osipenko const uint8_t *policy = arg; 5895b262bb6SDmitry Osipenko QEMUBH *bh = qemu_bh_new(ptimer_trigger, NULL); 5905b262bb6SDmitry Osipenko ptimer_state *ptimer = ptimer_init(bh, *policy); 591*516deb42SDmitry Osipenko bool no_immediate_trigger = (*policy & PTIMER_POLICY_NO_IMMEDIATE_TRIGGER); 5925b262bb6SDmitry Osipenko 5935b262bb6SDmitry Osipenko triggered = false; 5945b262bb6SDmitry Osipenko 5955b262bb6SDmitry Osipenko ptimer_set_period(ptimer, 2000000); 5965b262bb6SDmitry Osipenko ptimer_run(ptimer, 1); 5975b262bb6SDmitry Osipenko 5985b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 599*516deb42SDmitry Osipenko 600*516deb42SDmitry Osipenko if (no_immediate_trigger) { 601*516deb42SDmitry Osipenko g_assert_false(triggered); 602*516deb42SDmitry Osipenko } else { 6035b262bb6SDmitry Osipenko g_assert_true(triggered); 604*516deb42SDmitry Osipenko } 6055b262bb6SDmitry Osipenko 6065b262bb6SDmitry Osipenko triggered = false; 6075b262bb6SDmitry Osipenko 6085b262bb6SDmitry Osipenko qemu_clock_step(2000000 + 100000); 6095b262bb6SDmitry Osipenko 6105b262bb6SDmitry Osipenko g_assert_cmpuint(ptimer_get_count(ptimer), ==, 0); 611*516deb42SDmitry Osipenko 612*516deb42SDmitry Osipenko if (no_immediate_trigger) { 613*516deb42SDmitry Osipenko g_assert_true(triggered); 614*516deb42SDmitry Osipenko } else { 6155b262bb6SDmitry Osipenko g_assert_false(triggered); 6165b262bb6SDmitry Osipenko } 617*516deb42SDmitry Osipenko } 6185b262bb6SDmitry Osipenko 6195b262bb6SDmitry Osipenko static void add_ptimer_tests(uint8_t policy) 6205b262bb6SDmitry Osipenko { 6215b262bb6SDmitry Osipenko uint8_t *ppolicy = g_malloc(1); 622293130aaSDmitry Osipenko char *policy_name = g_malloc0(256); 6235b262bb6SDmitry Osipenko 6245b262bb6SDmitry Osipenko *ppolicy = policy; 6255b262bb6SDmitry Osipenko 6265b262bb6SDmitry Osipenko if (policy == PTIMER_POLICY_DEFAULT) { 6275b262bb6SDmitry Osipenko g_sprintf(policy_name, "default"); 6285b262bb6SDmitry Osipenko } 6295b262bb6SDmitry Osipenko 630293130aaSDmitry Osipenko if (policy & PTIMER_POLICY_WRAP_AFTER_ONE_PERIOD) { 631293130aaSDmitry Osipenko g_strlcat(policy_name, "wrap_after_one_period,", 256); 632293130aaSDmitry Osipenko } 633293130aaSDmitry Osipenko 6342e74583bSDmitry Osipenko if (policy & PTIMER_POLICY_CONTINUOUS_TRIGGER) { 6352e74583bSDmitry Osipenko g_strlcat(policy_name, "continuous_trigger,", 256); 6362e74583bSDmitry Osipenko } 6372e74583bSDmitry Osipenko 638*516deb42SDmitry Osipenko if (policy & PTIMER_POLICY_NO_IMMEDIATE_TRIGGER) { 639*516deb42SDmitry Osipenko g_strlcat(policy_name, "no_immediate_trigger,", 256); 640*516deb42SDmitry Osipenko } 641*516deb42SDmitry Osipenko 64224b94625SPaolo Bonzini g_test_add_data_func( 6435b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/set_count policy=%s", policy_name), 6445b262bb6SDmitry Osipenko ppolicy, check_set_count); 6455b262bb6SDmitry Osipenko 64624b94625SPaolo Bonzini g_test_add_data_func( 6475b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/set_limit policy=%s", policy_name), 6485b262bb6SDmitry Osipenko ppolicy, check_set_limit); 6495b262bb6SDmitry Osipenko 65024b94625SPaolo Bonzini g_test_add_data_func( 6515b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/oneshot policy=%s", policy_name), 6525b262bb6SDmitry Osipenko ppolicy, check_oneshot); 6535b262bb6SDmitry Osipenko 65424b94625SPaolo Bonzini g_test_add_data_func( 6555b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/periodic policy=%s", policy_name), 6565b262bb6SDmitry Osipenko ppolicy, check_periodic); 6575b262bb6SDmitry Osipenko 65824b94625SPaolo Bonzini g_test_add_data_func( 6595b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/on_the_fly_mode_change policy=%s", policy_name), 6605b262bb6SDmitry Osipenko ppolicy, check_on_the_fly_mode_change); 6615b262bb6SDmitry Osipenko 66224b94625SPaolo Bonzini g_test_add_data_func( 6635b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/on_the_fly_period_change policy=%s", policy_name), 6645b262bb6SDmitry Osipenko ppolicy, check_on_the_fly_period_change); 6655b262bb6SDmitry Osipenko 66624b94625SPaolo Bonzini g_test_add_data_func( 6675b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/on_the_fly_freq_change policy=%s", policy_name), 6685b262bb6SDmitry Osipenko ppolicy, check_on_the_fly_freq_change); 6695b262bb6SDmitry Osipenko 67024b94625SPaolo Bonzini g_test_add_data_func( 6715b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/run_with_period_0 policy=%s", policy_name), 6725b262bb6SDmitry Osipenko ppolicy, check_run_with_period_0); 6735b262bb6SDmitry Osipenko 67424b94625SPaolo Bonzini g_test_add_data_func( 6755b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/run_with_delta_0 policy=%s", policy_name), 6765b262bb6SDmitry Osipenko ppolicy, check_run_with_delta_0); 6775b262bb6SDmitry Osipenko 67824b94625SPaolo Bonzini g_test_add_data_func( 6795b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/periodic_with_load_0 policy=%s", policy_name), 6805b262bb6SDmitry Osipenko ppolicy, check_periodic_with_load_0); 6815b262bb6SDmitry Osipenko 68224b94625SPaolo Bonzini g_test_add_data_func( 6835b262bb6SDmitry Osipenko g_strdup_printf("/ptimer/oneshot_with_load_0 policy=%s", policy_name), 6845b262bb6SDmitry Osipenko ppolicy, check_oneshot_with_load_0); 6855b262bb6SDmitry Osipenko } 6865b262bb6SDmitry Osipenko 687293130aaSDmitry Osipenko static void add_all_ptimer_policies_comb_tests(void) 688293130aaSDmitry Osipenko { 689*516deb42SDmitry Osipenko int last_policy = PTIMER_POLICY_NO_IMMEDIATE_TRIGGER; 690293130aaSDmitry Osipenko int policy = PTIMER_POLICY_DEFAULT; 691293130aaSDmitry Osipenko 692293130aaSDmitry Osipenko for (; policy < (last_policy << 1); policy++) { 693293130aaSDmitry Osipenko add_ptimer_tests(policy); 694293130aaSDmitry Osipenko } 695293130aaSDmitry Osipenko } 696293130aaSDmitry Osipenko 6975b262bb6SDmitry Osipenko int main(int argc, char **argv) 6985b262bb6SDmitry Osipenko { 6995b262bb6SDmitry Osipenko int i; 7005b262bb6SDmitry Osipenko 7015b262bb6SDmitry Osipenko g_test_init(&argc, &argv, NULL); 7025b262bb6SDmitry Osipenko 7035b262bb6SDmitry Osipenko for (i = 0; i < QEMU_CLOCK_MAX; i++) { 7045b262bb6SDmitry Osipenko main_loop_tlg.tl[i] = g_new0(QEMUTimerList, 1); 7055b262bb6SDmitry Osipenko } 7065b262bb6SDmitry Osipenko 707293130aaSDmitry Osipenko add_all_ptimer_policies_comb_tests(); 7085b262bb6SDmitry Osipenko 7095b262bb6SDmitry Osipenko qtest_allowed = true; 7105b262bb6SDmitry Osipenko 7115b262bb6SDmitry Osipenko return g_test_run(); 7125b262bb6SDmitry Osipenko } 713