All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [for 4.2 PATCH 0/3] Remove time reset notifications
@ 2019-07-22 15:07 Dr. David Alan Gilbert (git)
  2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 1/3] mc146818rtc: Remove reset notifiers Dr. David Alan Gilbert (git)
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2019-07-22 15:07 UTC (permalink / raw)
  To: qemu-devel, pbonzini, pavel.dovgaluk

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

Timers have a mechanism for detecting host clock jumps; this relied
on noticing if the time had gone backwards or if it had gone forward
more than 60s since we last read it.  This had assumed that we regularly
read the time, which isn't true any more - we might not read the host
timer until the guest explicitly reads the guest RTC (e.g. hwclock).
This falsely triggers the reset mechanism.

The reset mechanism was only used by the mc146818 (i.e. PC) RTC
anyway; so lets remove it.

Dr. David Alan Gilbert (3):
  mc146818rtc: Remove reset notifiers
  timer: Remove reset notifiers
  timer: last, remove last bits of last

 hw/timer/mc146818rtc.c   | 19 -------------------
 include/qemu/timer.h     | 35 ----------------------------------
 replay/replay-snapshot.c |  3 +--
 util/qemu-timer.c        | 41 +---------------------------------------
 4 files changed, 2 insertions(+), 96 deletions(-)

-- 
2.21.0



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Qemu-devel] [for 4.2 PATCH 1/3] mc146818rtc: Remove reset notifiers
  2019-07-22 15:07 [Qemu-devel] [for 4.2 PATCH 0/3] Remove time reset notifications Dr. David Alan Gilbert (git)
@ 2019-07-22 15:07 ` Dr. David Alan Gilbert (git)
  2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 2/3] timer: " Dr. David Alan Gilbert (git)
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2019-07-22 15:07 UTC (permalink / raw)
  To: qemu-devel, pbonzini, pavel.dovgaluk

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

The reset notifiers are unreliable and recalculating the offsets
after boot causes problems with migration in cases where explicit
base times are set on the destination.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 hw/timer/mc146818rtc.c | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c
index ce4550b6f2..352ff9d395 100644
--- a/hw/timer/mc146818rtc.c
+++ b/hw/timer/mc146818rtc.c
@@ -92,7 +92,6 @@ typedef struct RTCState {
     uint32_t irq_coalesced;
     uint32_t period;
     QEMUTimer *coalesced_timer;
-    Notifier clock_reset_notifier;
     LostTickPolicy lost_tick_policy;
     Notifier suspend_notifier;
     QLIST_ENTRY(RTCState) link;
@@ -885,20 +884,6 @@ static const VMStateDescription vmstate_rtc = {
     }
 };
 
-static void rtc_notify_clock_reset(Notifier *notifier, void *data)
-{
-    RTCState *s = container_of(notifier, RTCState, clock_reset_notifier);
-    int64_t now = *(int64_t *)data;
-
-    rtc_set_date_from_host(ISA_DEVICE(s));
-    periodic_timer_update(s, now, 0);
-    check_update_timer(s);
-
-    if (s->lost_tick_policy == LOST_TICK_POLICY_SLEW) {
-        rtc_coalesced_timer_update(s);
-    }
-}
-
 /* set CMOS shutdown status register (index 0xF) as S3_resume(0xFE)
    BIOS will read it and start S3 resume at POST Entry */
 static void rtc_notify_suspend(Notifier *notifier, void *data)
@@ -984,10 +969,6 @@ static void rtc_realizefn(DeviceState *dev, Error **errp)
     s->update_timer = timer_new_ns(rtc_clock, rtc_update_timer, s);
     check_update_timer(s);
 
-    s->clock_reset_notifier.notify = rtc_notify_clock_reset;
-    qemu_clock_register_reset_notifier(rtc_clock,
-                                       &s->clock_reset_notifier);
-
     s->suspend_notifier.notify = rtc_notify_suspend;
     qemu_register_suspend_notifier(&s->suspend_notifier);
 
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Qemu-devel] [for 4.2 PATCH 2/3] timer: Remove reset notifiers
  2019-07-22 15:07 [Qemu-devel] [for 4.2 PATCH 0/3] Remove time reset notifications Dr. David Alan Gilbert (git)
  2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 1/3] mc146818rtc: Remove reset notifiers Dr. David Alan Gilbert (git)
@ 2019-07-22 15:07 ` Dr. David Alan Gilbert (git)
  2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 3/3] timer: last, remove last bits of last Dr. David Alan Gilbert (git)
  2019-07-22 16:46 ` [Qemu-devel] [for 4.2 PATCH 0/3] Remove time reset notifications Paolo Bonzini
  3 siblings, 0 replies; 7+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2019-07-22 15:07 UTC (permalink / raw)
  To: qemu-devel, pbonzini, pavel.dovgaluk

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

Remove the reset notifer from the core qemu-timer code.
The only user was mc146818 and we've just remove it's use.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 include/qemu/timer.h | 22 ----------------------
 util/qemu-timer.c    | 21 +--------------------
 2 files changed, 1 insertion(+), 42 deletions(-)

diff --git a/include/qemu/timer.h b/include/qemu/timer.h
index 5d978e1634..6817c78ef4 100644
--- a/include/qemu/timer.h
+++ b/include/qemu/timer.h
@@ -227,28 +227,6 @@ void qemu_clock_enable(QEMUClockType type, bool enabled);
  */
 void qemu_start_warp_timer(void);
 
-/**
- * qemu_clock_register_reset_notifier:
- * @type: the clock type
- * @notifier: the notifier function
- *
- * Register a notifier function to call when the clock
- * concerned is reset.
- */
-void qemu_clock_register_reset_notifier(QEMUClockType type,
-                                        Notifier *notifier);
-
-/**
- * qemu_clock_unregister_reset_notifier:
- * @type: the clock type
- * @notifier: the notifier function
- *
- * Unregister a notifier function to call when the clock
- * concerned is reset.
- */
-void qemu_clock_unregister_reset_notifier(QEMUClockType type,
-                                          Notifier *notifier);
-
 /**
  * qemu_clock_run_timers:
  * @type: clock on which to operate
diff --git a/util/qemu-timer.c b/util/qemu-timer.c
index 1cc1b2f2c3..2faaaf9926 100644
--- a/util/qemu-timer.c
+++ b/util/qemu-timer.c
@@ -48,7 +48,6 @@ typedef struct QEMUClock {
     /* We rely on BQL to protect the timerlists */
     QLIST_HEAD(, QEMUTimerList) timerlists;
 
-    NotifierList reset_notifiers;
     int64_t last;
 
     QEMUClockType type;
@@ -133,7 +132,6 @@ static void qemu_clock_init(QEMUClockType type, QEMUTimerListNotifyCB *notify_cb
     clock->enabled = (type == QEMU_CLOCK_VIRTUAL ? false : true);
     clock->last = INT64_MIN;
     QLIST_INIT(&clock->timerlists);
-    notifier_list_init(&clock->reset_notifiers);
     main_loop_tlg.tl[type] = timerlist_new(type, notify_cb, NULL);
 }
 
@@ -630,7 +628,7 @@ int64_t timerlistgroup_deadline_ns(QEMUTimerListGroup *tlg)
 
 int64_t qemu_clock_get_ns(QEMUClockType type)
 {
-    int64_t now, last;
+    int64_t now;
     QEMUClock *clock = qemu_clock_ptr(type);
 
     switch (type) {
@@ -645,11 +643,7 @@ int64_t qemu_clock_get_ns(QEMUClockType type)
         }
     case QEMU_CLOCK_HOST:
         now = REPLAY_CLOCK(REPLAY_CLOCK_HOST, get_clock_realtime());
-        last = clock->last;
         clock->last = now;
-        if (now < last || now > (last + get_max_clock_jump())) {
-            notifier_list_notify(&clock->reset_notifiers, &now);
-        }
         return now;
     case QEMU_CLOCK_VIRTUAL_RT:
         return REPLAY_CLOCK(REPLAY_CLOCK_VIRTUAL_RT, cpu_get_clock());
@@ -668,19 +662,6 @@ void qemu_clock_set_last(QEMUClockType type, uint64_t last)
     clock->last = last;
 }
 
-void qemu_clock_register_reset_notifier(QEMUClockType type,
-                                        Notifier *notifier)
-{
-    QEMUClock *clock = qemu_clock_ptr(type);
-    notifier_list_add(&clock->reset_notifiers, notifier);
-}
-
-void qemu_clock_unregister_reset_notifier(QEMUClockType type,
-                                          Notifier *notifier)
-{
-    notifier_remove(notifier);
-}
-
 void init_clocks(QEMUTimerListNotifyCB *notify_cb)
 {
     QEMUClockType type;
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Qemu-devel] [for 4.2 PATCH 3/3] timer: last, remove last bits of last
  2019-07-22 15:07 [Qemu-devel] [for 4.2 PATCH 0/3] Remove time reset notifications Dr. David Alan Gilbert (git)
  2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 1/3] mc146818rtc: Remove reset notifiers Dr. David Alan Gilbert (git)
  2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 2/3] timer: " Dr. David Alan Gilbert (git)
@ 2019-07-22 15:07 ` Dr. David Alan Gilbert (git)
  2019-07-23  5:54   ` Pavel Dovgalyuk
  2019-07-22 16:46 ` [Qemu-devel] [for 4.2 PATCH 0/3] Remove time reset notifications Paolo Bonzini
  3 siblings, 1 reply; 7+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2019-07-22 15:07 UTC (permalink / raw)
  To: qemu-devel, pbonzini, pavel.dovgaluk

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

The reset notifiers kept a 'last' counter to notice jumps;
now that we've remove the notifier we don't need to keep 'last'.
replay used to save/restore 'last' (presumably to avoid triggering
the notifier);  make it store the current time instead which avoids
changing it's migration format.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 include/qemu/timer.h     | 13 -------------
 replay/replay-snapshot.c |  3 +--
 util/qemu-timer.c        | 22 +---------------------
 3 files changed, 2 insertions(+), 36 deletions(-)

diff --git a/include/qemu/timer.h b/include/qemu/timer.h
index 6817c78ef4..5bcab935f6 100644
--- a/include/qemu/timer.h
+++ b/include/qemu/timer.h
@@ -248,19 +248,6 @@ bool qemu_clock_run_timers(QEMUClockType type);
  */
 bool qemu_clock_run_all_timers(void);
 
-/**
- * qemu_clock_get_last:
- *
- * Returns last clock query time.
- */
-uint64_t qemu_clock_get_last(QEMUClockType type);
-/**
- * qemu_clock_set_last:
- *
- * Sets last clock query time.
- */
-void qemu_clock_set_last(QEMUClockType type, uint64_t last);
-
 
 /*
  * QEMUTimerList
diff --git a/replay/replay-snapshot.c b/replay/replay-snapshot.c
index 756f48bc02..ca6d4adcc0 100644
--- a/replay/replay-snapshot.c
+++ b/replay/replay-snapshot.c
@@ -24,7 +24,7 @@ static int replay_pre_save(void *opaque)
 {
     ReplayState *state = opaque;
     state->file_offset = ftell(replay_file);
-    state->host_clock_last = qemu_clock_get_last(QEMU_CLOCK_HOST);
+    state->host_clock_last = get_clock_realtime();
 
     return 0;
 }
@@ -34,7 +34,6 @@ static int replay_post_load(void *opaque, int version_id)
     ReplayState *state = opaque;
     if (replay_mode == REPLAY_MODE_PLAY) {
         fseek(replay_file, state->file_offset, SEEK_SET);
-        qemu_clock_set_last(QEMU_CLOCK_HOST, state->host_clock_last);
         /* If this was a vmstate, saved in recording mode,
            we need to initialize replay data fields. */
         replay_fetch_data_kind();
diff --git a/util/qemu-timer.c b/util/qemu-timer.c
index 2faaaf9926..b73041df4e 100644
--- a/util/qemu-timer.c
+++ b/util/qemu-timer.c
@@ -48,8 +48,6 @@ typedef struct QEMUClock {
     /* We rely on BQL to protect the timerlists */
     QLIST_HEAD(, QEMUTimerList) timerlists;
 
-    int64_t last;
-
     QEMUClockType type;
     bool enabled;
 } QEMUClock;
@@ -130,7 +128,6 @@ static void qemu_clock_init(QEMUClockType type, QEMUTimerListNotifyCB *notify_cb
 
     clock->type = type;
     clock->enabled = (type == QEMU_CLOCK_VIRTUAL ? false : true);
-    clock->last = INT64_MIN;
     QLIST_INIT(&clock->timerlists);
     main_loop_tlg.tl[type] = timerlist_new(type, notify_cb, NULL);
 }
@@ -628,9 +625,6 @@ int64_t timerlistgroup_deadline_ns(QEMUTimerListGroup *tlg)
 
 int64_t qemu_clock_get_ns(QEMUClockType type)
 {
-    int64_t now;
-    QEMUClock *clock = qemu_clock_ptr(type);
-
     switch (type) {
     case QEMU_CLOCK_REALTIME:
         return get_clock();
@@ -642,26 +636,12 @@ int64_t qemu_clock_get_ns(QEMUClockType type)
             return cpu_get_clock();
         }
     case QEMU_CLOCK_HOST:
-        now = REPLAY_CLOCK(REPLAY_CLOCK_HOST, get_clock_realtime());
-        clock->last = now;
-        return now;
+        return REPLAY_CLOCK(REPLAY_CLOCK_HOST, get_clock_realtime());
     case QEMU_CLOCK_VIRTUAL_RT:
         return REPLAY_CLOCK(REPLAY_CLOCK_VIRTUAL_RT, cpu_get_clock());
     }
 }
 
-uint64_t qemu_clock_get_last(QEMUClockType type)
-{
-    QEMUClock *clock = qemu_clock_ptr(type);
-    return clock->last;
-}
-
-void qemu_clock_set_last(QEMUClockType type, uint64_t last)
-{
-    QEMUClock *clock = qemu_clock_ptr(type);
-    clock->last = last;
-}
-
 void init_clocks(QEMUTimerListNotifyCB *notify_cb)
 {
     QEMUClockType type;
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [for 4.2 PATCH 0/3] Remove time reset notifications
  2019-07-22 15:07 [Qemu-devel] [for 4.2 PATCH 0/3] Remove time reset notifications Dr. David Alan Gilbert (git)
                   ` (2 preceding siblings ...)
  2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 3/3] timer: last, remove last bits of last Dr. David Alan Gilbert (git)
@ 2019-07-22 16:46 ` Paolo Bonzini
  3 siblings, 0 replies; 7+ messages in thread
From: Paolo Bonzini @ 2019-07-22 16:46 UTC (permalink / raw)
  To: Dr. David Alan Gilbert (git), qemu-devel, pavel.dovgaluk

On 22/07/19 17:07, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> Timers have a mechanism for detecting host clock jumps; this relied
> on noticing if the time had gone backwards or if it had gone forward
> more than 60s since we last read it.  This had assumed that we regularly
> read the time, which isn't true any more - we might not read the host
> timer until the guest explicitly reads the guest RTC (e.g. hwclock).
> This falsely triggers the reset mechanism.
> 
> The reset mechanism was only used by the mc146818 (i.e. PC) RTC
> anyway; so lets remove it.
> 
> Dr. David Alan Gilbert (3):
>   mc146818rtc: Remove reset notifiers
>   timer: Remove reset notifiers
>   timer: last, remove last bits of last
> 
>  hw/timer/mc146818rtc.c   | 19 -------------------
>  include/qemu/timer.h     | 35 ----------------------------------
>  replay/replay-snapshot.c |  3 +--
>  util/qemu-timer.c        | 41 +---------------------------------------
>  4 files changed, 2 insertions(+), 96 deletions(-)
> 

Queued, thanks.

Paolo


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [for 4.2 PATCH 3/3] timer: last, remove last bits of last
  2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 3/3] timer: last, remove last bits of last Dr. David Alan Gilbert (git)
@ 2019-07-23  5:54   ` Pavel Dovgalyuk
  2019-07-24 11:20     ` Dr. David Alan Gilbert
  0 siblings, 1 reply; 7+ messages in thread
From: Pavel Dovgalyuk @ 2019-07-23  5:54 UTC (permalink / raw)
  To: 'Dr. David Alan Gilbert (git)',
	qemu-devel, pbonzini, pavel.dovgaluk

Hello!

> From: Dr. David Alan Gilbert (git) [mailto:dgilbert@redhat.com]
> The reset notifiers kept a 'last' counter to notice jumps;
> now that we've remove the notifier we don't need to keep 'last'.
> replay used to save/restore 'last' (presumably to avoid triggering
> the notifier);  make it store the current time instead which avoids
> changing it's migration format.

If you are removing 'last' field, you also should drop 'host_clock_last'
from ReplayState, because it is used only for restoring host clock
'last' field. And that was useful only in record/replay mode.

> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
>  include/qemu/timer.h     | 13 -------------
>  replay/replay-snapshot.c |  3 +--
>  util/qemu-timer.c        | 22 +---------------------
>  3 files changed, 2 insertions(+), 36 deletions(-)
> 
> diff --git a/include/qemu/timer.h b/include/qemu/timer.h
> index 6817c78ef4..5bcab935f6 100644
> --- a/include/qemu/timer.h
> +++ b/include/qemu/timer.h
> @@ -248,19 +248,6 @@ bool qemu_clock_run_timers(QEMUClockType type);
>   */
>  bool qemu_clock_run_all_timers(void);
> 
> -/**
> - * qemu_clock_get_last:
> - *
> - * Returns last clock query time.
> - */
> -uint64_t qemu_clock_get_last(QEMUClockType type);
> -/**
> - * qemu_clock_set_last:
> - *
> - * Sets last clock query time.
> - */
> -void qemu_clock_set_last(QEMUClockType type, uint64_t last);
> -
> 
>  /*
>   * QEMUTimerList
> diff --git a/replay/replay-snapshot.c b/replay/replay-snapshot.c
> index 756f48bc02..ca6d4adcc0 100644
> --- a/replay/replay-snapshot.c
> +++ b/replay/replay-snapshot.c
> @@ -24,7 +24,7 @@ static int replay_pre_save(void *opaque)
>  {
>      ReplayState *state = opaque;
>      state->file_offset = ftell(replay_file);
> -    state->host_clock_last = qemu_clock_get_last(QEMU_CLOCK_HOST);
> +    state->host_clock_last = get_clock_realtime();
> 
>      return 0;
>  }
> @@ -34,7 +34,6 @@ static int replay_post_load(void *opaque, int version_id)
>      ReplayState *state = opaque;
>      if (replay_mode == REPLAY_MODE_PLAY) {
>          fseek(replay_file, state->file_offset, SEEK_SET);
> -        qemu_clock_set_last(QEMU_CLOCK_HOST, state->host_clock_last);
>          /* If this was a vmstate, saved in recording mode,
>             we need to initialize replay data fields. */
>          replay_fetch_data_kind();
> diff --git a/util/qemu-timer.c b/util/qemu-timer.c
> index 2faaaf9926..b73041df4e 100644
> --- a/util/qemu-timer.c
> +++ b/util/qemu-timer.c
> @@ -48,8 +48,6 @@ typedef struct QEMUClock {
>      /* We rely on BQL to protect the timerlists */
>      QLIST_HEAD(, QEMUTimerList) timerlists;
> 
> -    int64_t last;
> -
>      QEMUClockType type;
>      bool enabled;
>  } QEMUClock;
> @@ -130,7 +128,6 @@ static void qemu_clock_init(QEMUClockType type, QEMUTimerListNotifyCB
> *notify_cb
> 
>      clock->type = type;
>      clock->enabled = (type == QEMU_CLOCK_VIRTUAL ? false : true);
> -    clock->last = INT64_MIN;
>      QLIST_INIT(&clock->timerlists);
>      main_loop_tlg.tl[type] = timerlist_new(type, notify_cb, NULL);
>  }
> @@ -628,9 +625,6 @@ int64_t timerlistgroup_deadline_ns(QEMUTimerListGroup *tlg)
> 
>  int64_t qemu_clock_get_ns(QEMUClockType type)
>  {
> -    int64_t now;
> -    QEMUClock *clock = qemu_clock_ptr(type);
> -
>      switch (type) {
>      case QEMU_CLOCK_REALTIME:
>          return get_clock();
> @@ -642,26 +636,12 @@ int64_t qemu_clock_get_ns(QEMUClockType type)
>              return cpu_get_clock();
>          }
>      case QEMU_CLOCK_HOST:
> -        now = REPLAY_CLOCK(REPLAY_CLOCK_HOST, get_clock_realtime());
> -        clock->last = now;
> -        return now;
> +        return REPLAY_CLOCK(REPLAY_CLOCK_HOST, get_clock_realtime());
>      case QEMU_CLOCK_VIRTUAL_RT:
>          return REPLAY_CLOCK(REPLAY_CLOCK_VIRTUAL_RT, cpu_get_clock());
>      }
>  }
> 
> -uint64_t qemu_clock_get_last(QEMUClockType type)
> -{
> -    QEMUClock *clock = qemu_clock_ptr(type);
> -    return clock->last;
> -}
> -
> -void qemu_clock_set_last(QEMUClockType type, uint64_t last)
> -{
> -    QEMUClock *clock = qemu_clock_ptr(type);
> -    clock->last = last;
> -}
> -
>  void init_clocks(QEMUTimerListNotifyCB *notify_cb)
>  {
>      QEMUClockType type;
> --
> 2.21.0


Pavel Dovgalyuk



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [for 4.2 PATCH 3/3] timer: last, remove last bits of last
  2019-07-23  5:54   ` Pavel Dovgalyuk
@ 2019-07-24 11:20     ` Dr. David Alan Gilbert
  0 siblings, 0 replies; 7+ messages in thread
From: Dr. David Alan Gilbert @ 2019-07-24 11:20 UTC (permalink / raw)
  To: Pavel Dovgalyuk; +Cc: pbonzini, qemu-devel, pavel.dovgaluk

* Pavel Dovgalyuk (dovgaluk@ispras.ru) wrote:
> Hello!
> 
> > From: Dr. David Alan Gilbert (git) [mailto:dgilbert@redhat.com]
> > The reset notifiers kept a 'last' counter to notice jumps;
> > now that we've remove the notifier we don't need to keep 'last'.
> > replay used to save/restore 'last' (presumably to avoid triggering
> > the notifier);  make it store the current time instead which avoids
> > changing it's migration format.
> 
> If you are removing 'last' field, you also should drop 'host_clock_last'
> from ReplayState, because it is used only for restoring host clock
> 'last' field. And that was useful only in record/replay mode.

OK, I'll cook a v2 that removes it and bumps the version.

Dave

> > 
> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > ---
> >  include/qemu/timer.h     | 13 -------------
> >  replay/replay-snapshot.c |  3 +--
> >  util/qemu-timer.c        | 22 +---------------------
> >  3 files changed, 2 insertions(+), 36 deletions(-)
> > 
> > diff --git a/include/qemu/timer.h b/include/qemu/timer.h
> > index 6817c78ef4..5bcab935f6 100644
> > --- a/include/qemu/timer.h
> > +++ b/include/qemu/timer.h
> > @@ -248,19 +248,6 @@ bool qemu_clock_run_timers(QEMUClockType type);
> >   */
> >  bool qemu_clock_run_all_timers(void);
> > 
> > -/**
> > - * qemu_clock_get_last:
> > - *
> > - * Returns last clock query time.
> > - */
> > -uint64_t qemu_clock_get_last(QEMUClockType type);
> > -/**
> > - * qemu_clock_set_last:
> > - *
> > - * Sets last clock query time.
> > - */
> > -void qemu_clock_set_last(QEMUClockType type, uint64_t last);
> > -
> > 
> >  /*
> >   * QEMUTimerList
> > diff --git a/replay/replay-snapshot.c b/replay/replay-snapshot.c
> > index 756f48bc02..ca6d4adcc0 100644
> > --- a/replay/replay-snapshot.c
> > +++ b/replay/replay-snapshot.c
> > @@ -24,7 +24,7 @@ static int replay_pre_save(void *opaque)
> >  {
> >      ReplayState *state = opaque;
> >      state->file_offset = ftell(replay_file);
> > -    state->host_clock_last = qemu_clock_get_last(QEMU_CLOCK_HOST);
> > +    state->host_clock_last = get_clock_realtime();
> > 
> >      return 0;
> >  }
> > @@ -34,7 +34,6 @@ static int replay_post_load(void *opaque, int version_id)
> >      ReplayState *state = opaque;
> >      if (replay_mode == REPLAY_MODE_PLAY) {
> >          fseek(replay_file, state->file_offset, SEEK_SET);
> > -        qemu_clock_set_last(QEMU_CLOCK_HOST, state->host_clock_last);
> >          /* If this was a vmstate, saved in recording mode,
> >             we need to initialize replay data fields. */
> >          replay_fetch_data_kind();
> > diff --git a/util/qemu-timer.c b/util/qemu-timer.c
> > index 2faaaf9926..b73041df4e 100644
> > --- a/util/qemu-timer.c
> > +++ b/util/qemu-timer.c
> > @@ -48,8 +48,6 @@ typedef struct QEMUClock {
> >      /* We rely on BQL to protect the timerlists */
> >      QLIST_HEAD(, QEMUTimerList) timerlists;
> > 
> > -    int64_t last;
> > -
> >      QEMUClockType type;
> >      bool enabled;
> >  } QEMUClock;
> > @@ -130,7 +128,6 @@ static void qemu_clock_init(QEMUClockType type, QEMUTimerListNotifyCB
> > *notify_cb
> > 
> >      clock->type = type;
> >      clock->enabled = (type == QEMU_CLOCK_VIRTUAL ? false : true);
> > -    clock->last = INT64_MIN;
> >      QLIST_INIT(&clock->timerlists);
> >      main_loop_tlg.tl[type] = timerlist_new(type, notify_cb, NULL);
> >  }
> > @@ -628,9 +625,6 @@ int64_t timerlistgroup_deadline_ns(QEMUTimerListGroup *tlg)
> > 
> >  int64_t qemu_clock_get_ns(QEMUClockType type)
> >  {
> > -    int64_t now;
> > -    QEMUClock *clock = qemu_clock_ptr(type);
> > -
> >      switch (type) {
> >      case QEMU_CLOCK_REALTIME:
> >          return get_clock();
> > @@ -642,26 +636,12 @@ int64_t qemu_clock_get_ns(QEMUClockType type)
> >              return cpu_get_clock();
> >          }
> >      case QEMU_CLOCK_HOST:
> > -        now = REPLAY_CLOCK(REPLAY_CLOCK_HOST, get_clock_realtime());
> > -        clock->last = now;
> > -        return now;
> > +        return REPLAY_CLOCK(REPLAY_CLOCK_HOST, get_clock_realtime());
> >      case QEMU_CLOCK_VIRTUAL_RT:
> >          return REPLAY_CLOCK(REPLAY_CLOCK_VIRTUAL_RT, cpu_get_clock());
> >      }
> >  }
> > 
> > -uint64_t qemu_clock_get_last(QEMUClockType type)
> > -{
> > -    QEMUClock *clock = qemu_clock_ptr(type);
> > -    return clock->last;
> > -}
> > -
> > -void qemu_clock_set_last(QEMUClockType type, uint64_t last)
> > -{
> > -    QEMUClock *clock = qemu_clock_ptr(type);
> > -    clock->last = last;
> > -}
> > -
> >  void init_clocks(QEMUTimerListNotifyCB *notify_cb)
> >  {
> >      QEMUClockType type;
> > --
> > 2.21.0
> 
> 
> Pavel Dovgalyuk
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-07-24 11:20 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-22 15:07 [Qemu-devel] [for 4.2 PATCH 0/3] Remove time reset notifications Dr. David Alan Gilbert (git)
2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 1/3] mc146818rtc: Remove reset notifiers Dr. David Alan Gilbert (git)
2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 2/3] timer: " Dr. David Alan Gilbert (git)
2019-07-22 15:07 ` [Qemu-devel] [for 4.2 PATCH 3/3] timer: last, remove last bits of last Dr. David Alan Gilbert (git)
2019-07-23  5:54   ` Pavel Dovgalyuk
2019-07-24 11:20     ` Dr. David Alan Gilbert
2019-07-22 16:46 ` [Qemu-devel] [for 4.2 PATCH 0/3] Remove time reset notifications Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.