On Thu, Sep 11, 2025 at 7:59 PM TANG Tiancheng <[email protected]> wrote: > > vmstate_riscv_cpu was missing env.stimer and env.vstimer. > Without migrating these QEMUTimer fields, active S/VS-mode > timer events are lost after snapshot or migration. > > Add VMSTATE_TIMER_PTR() entries to save and restore them. > > Reviewed-by: LIU Zhiwei <[email protected]> > Reviewed-by: Daniel Henrique Barboza <[email protected]> > Signed-off-by: TANG Tiancheng <[email protected]>
Reviewed-by: Alistair Francis <[email protected]> Alistair > --- > target/riscv/machine.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/target/riscv/machine.c b/target/riscv/machine.c > index > 1600ec44f0b755fdd49fc0df47c2288c9940afe0..51e0567ed30cbab5e791ea904165bc1854709192 > 100644 > --- a/target/riscv/machine.c > +++ b/target/riscv/machine.c > @@ -400,6 +400,30 @@ static const VMStateDescription vmstate_ssp = { > } > }; > > +static bool sstc_timer_needed(void *opaque) > +{ > + RISCVCPU *cpu = opaque; > + CPURISCVState *env = &cpu->env; > + > + if (!cpu->cfg.ext_sstc) { > + return false; > + } > + > + return env->stimer != NULL || env->vstimer != NULL; > +} > + > +static const VMStateDescription vmstate_sstc = { > + .name = "cpu/timer", > + .version_id = 1, > + .minimum_version_id = 1, > + .needed = sstc_timer_needed, > + .fields = (const VMStateField[]) { > + VMSTATE_TIMER_PTR(env.stimer, RISCVCPU), > + VMSTATE_TIMER_PTR(env.vstimer, RISCVCPU), > + VMSTATE_END_OF_LIST() > + } > +}; > + > const VMStateDescription vmstate_riscv_cpu = { > .name = "cpu", > .version_id = 10, > @@ -476,6 +500,7 @@ const VMStateDescription vmstate_riscv_cpu = { > &vmstate_elp, > &vmstate_ssp, > &vmstate_ctr, > + &vmstate_sstc, > NULL > } > }; > > -- > 2.43.0 > >
