On 2/22/21 4:34 PM, Alex Bennée wrote: > > Claudio Fontana <cfont...@suse.de> writes: > >> From: Claudio Fontana <cfont...@centriq4.arch.suse.de> >> >> KVM has its own cpu->kvm_vtime. >> >> Adjust cpu vmstate by putting unused fields instead of the >> VMSTATE_TIMER_PTR when TCG is not available. >> >> Signed-off-by: Claudio Fontana <cfont...@suse.de> >> --- >> target/arm/cpu.c | 4 +++- >> target/arm/machine.c | 5 +++++ >> 2 files changed, 8 insertions(+), 1 deletion(-) >> >> diff --git a/target/arm/cpu.c b/target/arm/cpu.c >> index 1d81a1e7ac..b929109054 100644 >> --- a/target/arm/cpu.c >> +++ b/target/arm/cpu.c >> @@ -1322,6 +1322,7 @@ static void arm_cpu_realizefn(DeviceState *dev, Error >> **errp) >> } >> } >> >> +#ifdef CONFIG_TCG >> { >> uint64_t scale; >> >> @@ -1347,7 +1348,8 @@ static void arm_cpu_realizefn(DeviceState *dev, Error >> **errp) >> cpu->gt_timer[GTIMER_HYPVIRT] = timer_new(QEMU_CLOCK_VIRTUAL, scale, >> arm_gt_hvtimer_cb, cpu); >> } >> -#endif >> +#endif /* CONFIG_TCG */ >> +#endif /* !CONFIG_USER_ONLY */ >> >> cpu_exec_realizefn(cs, &local_err); >> if (local_err != NULL) { >> diff --git a/target/arm/machine.c b/target/arm/machine.c >> index 666ef329ef..13d7c6d930 100644 >> --- a/target/arm/machine.c >> +++ b/target/arm/machine.c >> @@ -822,8 +822,13 @@ const VMStateDescription vmstate_arm_cpu = { >> VMSTATE_UINT32(env.exception.syndrome, ARMCPU), >> VMSTATE_UINT32(env.exception.fsr, ARMCPU), >> VMSTATE_UINT64(env.exception.vaddress, ARMCPU), >> +#ifdef CONFIG_TCG >> VMSTATE_TIMER_PTR(gt_timer[GTIMER_PHYS], ARMCPU), >> VMSTATE_TIMER_PTR(gt_timer[GTIMER_VIRT], ARMCPU), >> +#else >> + VMSTATE_UNUSED(sizeof(QEMUTimer *)), >> + VMSTATE_UNUSED(sizeof(QEMUTimer *)), >> +#endif /* CONFIG_TCG */ > > I'm not sure this is correct - VMSTATE_TIMER_PTR chases the links to > just expose expired time but QEMUTimer has more in it than that. Paolo
I am not sure I follow can you state more precisely where the issue could be? it's not a VMSTATE_TIMER, it's a VMSTATE_TIMER_PTR, it ends up in VMSTATE_POINTER where a single pointer is assigned; so if we don't use gt_timer at all (as is the case with !CONFIG_TCG), we just need to ensure that an unused number is there to assign, migrating from old to new version? > suggested a straight VMSTATE_UNUSED(8) on IRC but I wonder if it would > be better to have a VMSTATE_UNUSED_TIMER? > > I don't think there is an impact for Xen because I'm fairly certain > migration isn't a thing we do - but I'll double check. > Thanks Alex, that would be helpful, if Xen uses gt_timer in any way I would not want to unwillingly break it. Thanks, Claudio