Message ID | 20240516222047.1853459-3-pierrick.bouvier@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | Implement icount=auto using TCG Plugins | expand |
On Fri, May 17, 2024 at 12:21 AM Pierrick Bouvier <pierrick.bouvier@linaro.org> wrote: > > From: Alex Bennée <alex.bennee@linaro.org> > > This generalises the qtest_clock_warp code to use the AccelOps > handlers for updating its own sense of time. This will make the next > patch which moves the warp code closer to pure code motion. > > From: Alex Bennée <alex.bennee@linaro.org> > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > Acked-by: Thomas Huth <thuth@redhat.com> > --- > include/sysemu/qtest.h | 1 + > accel/qtest/qtest.c | 1 + > system/qtest.c | 6 +++--- > 3 files changed, 5 insertions(+), 3 deletions(-) > > diff --git a/include/sysemu/qtest.h b/include/sysemu/qtest.h > index b5d5fd34637..45f3b7e1df5 100644 > --- a/include/sysemu/qtest.h > +++ b/include/sysemu/qtest.h > @@ -36,6 +36,7 @@ void qtest_server_set_send_handler(void (*send)(void *, const char *), > void qtest_server_inproc_recv(void *opaque, const char *buf); > > int64_t qtest_get_virtual_clock(void); > +void qtest_set_virtual_clock(int64_t count); You can move qtest_get_virtual_clock/qtest_set_virtual_clock to accel/qtest/qtest.c instead, and make them static. They are not used anymore in system/qtest.c, and it actually makes a lot more sense that they aren't. Paolo > #endif > > #endif > diff --git a/accel/qtest/qtest.c b/accel/qtest/qtest.c > index f6056ac8361..53182e6c2ae 100644 > --- a/accel/qtest/qtest.c > +++ b/accel/qtest/qtest.c > @@ -52,6 +52,7 @@ static void qtest_accel_ops_class_init(ObjectClass *oc, void *data) > > ops->create_vcpu_thread = dummy_start_vcpu_thread; > ops->get_virtual_clock = qtest_get_virtual_clock; > + ops->set_virtual_clock = qtest_set_virtual_clock; > }; > > static const TypeInfo qtest_accel_ops_type = { > diff --git a/system/qtest.c b/system/qtest.c > index 6da58b3874e..ee8b139e982 100644 > --- a/system/qtest.c > +++ b/system/qtest.c > @@ -332,14 +332,14 @@ int64_t qtest_get_virtual_clock(void) > return qatomic_read_i64(&qtest_clock_counter); > } > > -static void qtest_set_virtual_clock(int64_t count) > +void qtest_set_virtual_clock(int64_t count) > { > qatomic_set_i64(&qtest_clock_counter, count); > } > > static void qtest_clock_warp(int64_t dest) > { > - int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); > + int64_t clock = cpus_get_virtual_clock(); > AioContext *aio_context; > assert(qtest_enabled()); > aio_context = qemu_get_aio_context(); > @@ -348,7 +348,7 @@ static void qtest_clock_warp(int64_t dest) > QEMU_TIMER_ATTR_ALL); > int64_t warp = qemu_soonest_timeout(dest - clock, deadline); > > - qtest_set_virtual_clock(qtest_get_virtual_clock() + warp); > + cpus_set_virtual_clock(cpus_get_virtual_clock() + warp); > > qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL); > timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]); > -- > 2.39.2 >
On 5/29/24 23:32, Paolo Bonzini wrote: > On Fri, May 17, 2024 at 12:21 AM Pierrick Bouvier > <pierrick.bouvier@linaro.org> wrote: >> >> From: Alex Bennée <alex.bennee@linaro.org> >> >> This generalises the qtest_clock_warp code to use the AccelOps >> handlers for updating its own sense of time. This will make the next >> patch which moves the warp code closer to pure code motion. >> >> From: Alex Bennée <alex.bennee@linaro.org> >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> >> Acked-by: Thomas Huth <thuth@redhat.com> >> --- >> include/sysemu/qtest.h | 1 + >> accel/qtest/qtest.c | 1 + >> system/qtest.c | 6 +++--- >> 3 files changed, 5 insertions(+), 3 deletions(-) >> >> diff --git a/include/sysemu/qtest.h b/include/sysemu/qtest.h >> index b5d5fd34637..45f3b7e1df5 100644 >> --- a/include/sysemu/qtest.h >> +++ b/include/sysemu/qtest.h >> @@ -36,6 +36,7 @@ void qtest_server_set_send_handler(void (*send)(void *, const char *), >> void qtest_server_inproc_recv(void *opaque, const char *buf); >> >> int64_t qtest_get_virtual_clock(void); >> +void qtest_set_virtual_clock(int64_t count); > > You can move qtest_get_virtual_clock/qtest_set_virtual_clock to > accel/qtest/qtest.c instead, and make them static. > > They are not used anymore in system/qtest.c, and it actually makes a > lot more sense that they aren't. > Changed for next revision, thanks > Paolo > >> #endif >> >> #endif >> diff --git a/accel/qtest/qtest.c b/accel/qtest/qtest.c >> index f6056ac8361..53182e6c2ae 100644 >> --- a/accel/qtest/qtest.c >> +++ b/accel/qtest/qtest.c >> @@ -52,6 +52,7 @@ static void qtest_accel_ops_class_init(ObjectClass *oc, void *data) >> >> ops->create_vcpu_thread = dummy_start_vcpu_thread; >> ops->get_virtual_clock = qtest_get_virtual_clock; >> + ops->set_virtual_clock = qtest_set_virtual_clock; >> }; >> >> static const TypeInfo qtest_accel_ops_type = { >> diff --git a/system/qtest.c b/system/qtest.c >> index 6da58b3874e..ee8b139e982 100644 >> --- a/system/qtest.c >> +++ b/system/qtest.c >> @@ -332,14 +332,14 @@ int64_t qtest_get_virtual_clock(void) >> return qatomic_read_i64(&qtest_clock_counter); >> } >> >> -static void qtest_set_virtual_clock(int64_t count) >> +void qtest_set_virtual_clock(int64_t count) >> { >> qatomic_set_i64(&qtest_clock_counter, count); >> } >> >> static void qtest_clock_warp(int64_t dest) >> { >> - int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); >> + int64_t clock = cpus_get_virtual_clock(); >> AioContext *aio_context; >> assert(qtest_enabled()); >> aio_context = qemu_get_aio_context(); >> @@ -348,7 +348,7 @@ static void qtest_clock_warp(int64_t dest) >> QEMU_TIMER_ATTR_ALL); >> int64_t warp = qemu_soonest_timeout(dest - clock, deadline); >> >> - qtest_set_virtual_clock(qtest_get_virtual_clock() + warp); >> + cpus_set_virtual_clock(cpus_get_virtual_clock() + warp); >> >> qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL); >> timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]); >> -- >> 2.39.2 >> >
diff --git a/include/sysemu/qtest.h b/include/sysemu/qtest.h index b5d5fd34637..45f3b7e1df5 100644 --- a/include/sysemu/qtest.h +++ b/include/sysemu/qtest.h @@ -36,6 +36,7 @@ void qtest_server_set_send_handler(void (*send)(void *, const char *), void qtest_server_inproc_recv(void *opaque, const char *buf); int64_t qtest_get_virtual_clock(void); +void qtest_set_virtual_clock(int64_t count); #endif #endif diff --git a/accel/qtest/qtest.c b/accel/qtest/qtest.c index f6056ac8361..53182e6c2ae 100644 --- a/accel/qtest/qtest.c +++ b/accel/qtest/qtest.c @@ -52,6 +52,7 @@ static void qtest_accel_ops_class_init(ObjectClass *oc, void *data) ops->create_vcpu_thread = dummy_start_vcpu_thread; ops->get_virtual_clock = qtest_get_virtual_clock; + ops->set_virtual_clock = qtest_set_virtual_clock; }; static const TypeInfo qtest_accel_ops_type = { diff --git a/system/qtest.c b/system/qtest.c index 6da58b3874e..ee8b139e982 100644 --- a/system/qtest.c +++ b/system/qtest.c @@ -332,14 +332,14 @@ int64_t qtest_get_virtual_clock(void) return qatomic_read_i64(&qtest_clock_counter); } -static void qtest_set_virtual_clock(int64_t count) +void qtest_set_virtual_clock(int64_t count) { qatomic_set_i64(&qtest_clock_counter, count); } static void qtest_clock_warp(int64_t dest) { - int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); + int64_t clock = cpus_get_virtual_clock(); AioContext *aio_context; assert(qtest_enabled()); aio_context = qemu_get_aio_context(); @@ -348,7 +348,7 @@ static void qtest_clock_warp(int64_t dest) QEMU_TIMER_ATTR_ALL); int64_t warp = qemu_soonest_timeout(dest - clock, deadline); - qtest_set_virtual_clock(qtest_get_virtual_clock() + warp); + cpus_set_virtual_clock(cpus_get_virtual_clock() + warp); qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL); timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]);