> On 10/17/2026 11:51 AM, Wang Yechao wrote:
> > Save and restore the KVM SBI state as a vmstate subsection, so that
> > a guest using SBI STA keeps working after live migration. Only the
> > STA shmem address (shmem_lo and shmem_hi) is saved for now; other
> > SBI state can be appended to kvm_sbi_state as it is added.
> > 
> > Signed-off-by: Wang Yechao <[email protected]>
> > ---
> >   target/riscv/machine.c | 18 ++++++++++++++++++
> >   1 file changed, 18 insertions(+)
> > 
> > diff --git a/target/riscv/machine.c b/target/riscv/machine.c
> > index 0de06e9588..b8cdca79cc 100644
> > --- a/target/riscv/machine.c
> > +++ b/target/riscv/machine.c
> > @@ -318,6 +318,23 @@ static const VMStateDescription vmstate_kvm_mp_state = 
> > {
> >           VMSTATE_END_OF_LIST()
> >       }
> >   };
> > +
> > +static bool kvm_sbi_state_needed(void *opaque)
> > +{
> > +    return kvm_enabled();
> > +}
>
> I think kvm_enabled() isn't enough here since there's no guarantee that
> the current running kvm driver supports SBI STA.
>
> If we take the existing mp_state as an example, in kvm-cpu.c we have:
>
> bool kvm_riscv_has_mp_state(void)
> {
>     return cap_has_mp_state;
> }
>
> And then, in machine.c:
>
> static bool kvm_mp_state_needed(void *opaque)
> {
>      return kvm_enabled() && kvm_riscv_has_mp_state();
> }
> 
>
> I think we can do the same here.  In patch 1 you're setting 
> kvm_sbi_sta.supported
> to true if SBI STA is available.  We can add a:
> 
> bool kvm_riscv_has_sbi_sta_state(void)
> {
>     return kvm_sbi_sta.supported;
> }
>
> And then you can use it as another check in kvm_sbi_state_needed() too.
>
>
> Thanks,
> Daniel
>

Thanks for the review and for the detailed explanation.
I'll make this change in v2.

Thanks,
Yechao

>
> > +
> > +static const VMStateDescription vmstate_kvm_sbi_state = {
> > +    .name = "cpu/kvm-sbi-state",
> > +    .version_id = 1,
> > +    .minimum_version_id = 1,
> > +    .needed = kvm_sbi_state_needed,
> > +    .fields = (const VMStateField[]) {
> > +        VMSTATE_UINT64(env.kvm_sbi_sta.shmem_lo, RISCVCPU),
> > +        VMSTATE_UINT64(env.kvm_sbi_sta.shmem_hi, RISCVCPU),
> > +        VMSTATE_END_OF_LIST()
> > +    }
> > +};
> >   #endif
> >   
> >   static bool debug_needed(void *opaque)
> > @@ -645,6 +662,7 @@ const VMStateDescription vmstate_riscv_cpu = {
> >           &vmstate_kvm_timer_frequency,
> >           &vmstate_kvmtimer,
> >           &vmstate_kvm_mp_state,
> > +        &vmstate_kvm_sbi_state,
> >   #endif
> >           &vmstate_envcfg,
> >           &vmstate_debug,

Reply via email to