Message ID | 160693010619.1111945.632640981169395440.stgit@bahia.lan (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [for-6.0] hw/ppc: Do not re-read the clock on pre_save if doing savevm | expand |
On Wed, Dec 02, 2020 at 06:28:26PM +0100, Greg Kurz wrote: > A guest with enough RAM, eg. 128G, is likely to detect savevm downtime > and to complain about stalled CPUs. This happens because we re-read > the timebase just before migrating it and we thus don't account for > all the time between VM stop and pre-save. > > A very similar situation was already addressed for live migration of > paused guests (commit d14f33976282). Extend the logic to do the same > with savevm. > > Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1893787 > Signed-off-by: Greg Kurz <groug@kaod.org> Applied to ppc-for-6.0, thanks. > --- > hw/ppc/ppc.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c > index 1b9827207676..5cbbff1f8d0c 100644 > --- a/hw/ppc/ppc.c > +++ b/hw/ppc/ppc.c > @@ -1027,7 +1027,8 @@ static void timebase_save(PPCTimebase *tb) > */ > tb->guest_timebase = ticks + first_ppc_cpu->env.tb_env->tb_offset; > > - tb->runstate_paused = runstate_check(RUN_STATE_PAUSED); > + tb->runstate_paused = > + runstate_check(RUN_STATE_PAUSED) || runstate_check(RUN_STATE_SAVE_VM); > } > > static void timebase_load(PPCTimebase *tb) > @@ -1088,7 +1089,7 @@ static int timebase_pre_save(void *opaque) > { > PPCTimebase *tb = opaque; > > - /* guest_timebase won't be overridden in case of paused guest */ > + /* guest_timebase won't be overridden in case of paused guest or savevm */ > if (!tb->runstate_paused) { > timebase_save(tb); > } > >
diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c index 1b9827207676..5cbbff1f8d0c 100644 --- a/hw/ppc/ppc.c +++ b/hw/ppc/ppc.c @@ -1027,7 +1027,8 @@ static void timebase_save(PPCTimebase *tb) */ tb->guest_timebase = ticks + first_ppc_cpu->env.tb_env->tb_offset; - tb->runstate_paused = runstate_check(RUN_STATE_PAUSED); + tb->runstate_paused = + runstate_check(RUN_STATE_PAUSED) || runstate_check(RUN_STATE_SAVE_VM); } static void timebase_load(PPCTimebase *tb) @@ -1088,7 +1089,7 @@ static int timebase_pre_save(void *opaque) { PPCTimebase *tb = opaque; - /* guest_timebase won't be overridden in case of paused guest */ + /* guest_timebase won't be overridden in case of paused guest or savevm */ if (!tb->runstate_paused) { timebase_save(tb); }
A guest with enough RAM, eg. 128G, is likely to detect savevm downtime and to complain about stalled CPUs. This happens because we re-read the timebase just before migrating it and we thus don't account for all the time between VM stop and pre-save. A very similar situation was already addressed for live migration of paused guests (commit d14f33976282). Extend the logic to do the same with savevm. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1893787 Signed-off-by: Greg Kurz <groug@kaod.org> --- hw/ppc/ppc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)