diff mbox series

[2/5] qtest: use cpu interface in qtest_clock_warp

Message ID 20240516222047.1853459-3-pierrick.bouvier@linaro.org
State Superseded
Headers show
Series Implement icount=auto using TCG Plugins | expand

Commit Message

Pierrick Bouvier May 16, 2024, 10:20 p.m. UTC
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(-)

Comments

Paolo Bonzini May 30, 2024, 6:32 a.m. UTC | #1
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
>
Pierrick Bouvier May 30, 2024, 5:41 p.m. UTC | #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 mbox series

Patch

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]);