Message ID | 20211210100732.1080-13-jiangyifei@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add riscv kvm accel support | expand |
On Fri, Dec 10, 2021 at 3:38 PM Yifei Jiang <jiangyifei@huawei.com> wrote: > > Add virtual time context description to vmstate_kvmtimer. After cpu being > loaded, virtual time context is updated to KVM. > > Signed-off-by: Yifei Jiang <jiangyifei@huawei.com> > Signed-off-by: Mingwang Li <limingwang@huawei.com> > --- > target/riscv/machine.c | 37 +++++++++++++++++++++++++++++++++++-- > 1 file changed, 35 insertions(+), 2 deletions(-) > > diff --git a/target/riscv/machine.c b/target/riscv/machine.c > index ad8248ebfd..f46443c316 100644 > --- a/target/riscv/machine.c > +++ b/target/riscv/machine.c > @@ -164,10 +164,42 @@ static const VMStateDescription vmstate_pointermasking = { > } > }; > > +static bool kvmtimer_needed(void *opaque) > +{ > + return kvm_enabled(); > +} > + > + Remove extra newline from here. > +static const VMStateDescription vmstate_kvmtimer = { > + .name = "cpu/kvmtimer", > + .version_id = 1, > + .minimum_version_id = 1, > + .needed = kvmtimer_needed, > + .fields = (VMStateField[]) { > + VMSTATE_UINT64(env.kvm_timer_time, RISCVCPU), > + VMSTATE_UINT64(env.kvm_timer_compare, RISCVCPU), > + VMSTATE_UINT64(env.kvm_timer_state, RISCVCPU), > + > + VMSTATE_END_OF_LIST() > + } > +}; > + > +static int cpu_post_load(void *opaque, int version_id) > +{ > + RISCVCPU *cpu = opaque; > + CPURISCVState *env = &cpu->env; > + > + if (kvm_enabled()) { > + env->kvm_timer_dirty = true; > + } > + return 0; > +} > + > const VMStateDescription vmstate_riscv_cpu = { > .name = "cpu", > - .version_id = 3, > - .minimum_version_id = 3, > + .version_id = 4, > + .minimum_version_id = 4, > + .post_load = cpu_post_load, > .fields = (VMStateField[]) { > VMSTATE_UINTTL_ARRAY(env.gpr, RISCVCPU, 32), > VMSTATE_UINT64_ARRAY(env.fpr, RISCVCPU, 32), > @@ -218,6 +250,7 @@ const VMStateDescription vmstate_riscv_cpu = { > &vmstate_hyper, > &vmstate_vector, > &vmstate_pointermasking, > + &vmstate_kvmtimer, > NULL > } > }; > -- > 2.19.1 > > > -- > kvm-riscv mailing list > kvm-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv Otherwise, it looks good to me. Reviewed-by: Anup Patel <anup.patel@wdc.com> Regards, Anup
On 12/10/21 2:07 AM, Yifei Jiang via wrote: > +static bool kvmtimer_needed(void *opaque) > +{ > + return kvm_enabled(); > +} > + > + > +static const VMStateDescription vmstate_kvmtimer = { > + .name = "cpu/kvmtimer", > + .version_id = 1, > + .minimum_version_id = 1, > + .needed = kvmtimer_needed, > + .fields = (VMStateField[]) { > + VMSTATE_UINT64(env.kvm_timer_time, RISCVCPU), > + VMSTATE_UINT64(env.kvm_timer_compare, RISCVCPU), > + VMSTATE_UINT64(env.kvm_timer_state, RISCVCPU), > + > + VMSTATE_END_OF_LIST() > + } > +}; > + > +static int cpu_post_load(void *opaque, int version_id) > +{ > + RISCVCPU *cpu = opaque; > + CPURISCVState *env = &cpu->env; > + > + if (kvm_enabled()) { > + env->kvm_timer_dirty = true; > + } > + return 0; > +} This post-load belongs on the vmstate_kvmtimer struct, so that you need not re-check kvm_enabled(). > const VMStateDescription vmstate_riscv_cpu = { > .name = "cpu", > - .version_id = 3, > - .minimum_version_id = 3, > + .version_id = 4, > + .minimum_version_id = 4, > + .post_load = cpu_post_load, No need for version change. r~
> -----Original Message----- > From: Richard Henderson [mailto:richard.henderson@linaro.org] > Sent: Monday, December 13, 2021 11:22 PM > To: Jiangyifei <jiangyifei@huawei.com>; qemu-devel@nongnu.org; > qemu-riscv@nongnu.org > Cc: kvm-riscv@lists.infradead.org; kvm@vger.kernel.org; > libvir-list@redhat.com; anup.patel@wdc.com; palmer@dabbelt.com; > Alistair.Francis@wdc.com; bin.meng@windriver.com; Fanliang (EulerOS) > <fanliang@huawei.com>; Wubin (H) <wu.wubin@huawei.com>; Wanghaibin (D) > <wanghaibin.wang@huawei.com>; wanbo (G) <wanbo13@huawei.com>; > limingwang (A) <limingwang@huawei.com> > Subject: Re: [PATCH v2 12/12] target/riscv: Support virtual time context > synchronization > > On 12/10/21 2:07 AM, Yifei Jiang via wrote: > > +static bool kvmtimer_needed(void *opaque) { > > + return kvm_enabled(); > > +} > > + > > + > > +static const VMStateDescription vmstate_kvmtimer = { > > + .name = "cpu/kvmtimer", > > + .version_id = 1, > > + .minimum_version_id = 1, > > + .needed = kvmtimer_needed, > > + .fields = (VMStateField[]) { > > + VMSTATE_UINT64(env.kvm_timer_time, RISCVCPU), > > + VMSTATE_UINT64(env.kvm_timer_compare, RISCVCPU), > > + VMSTATE_UINT64(env.kvm_timer_state, RISCVCPU), > > + > > + VMSTATE_END_OF_LIST() > > + } > > +}; > > + > > +static int cpu_post_load(void *opaque, int version_id) { > > + RISCVCPU *cpu = opaque; > > + CPURISCVState *env = &cpu->env; > > + > > + if (kvm_enabled()) { > > + env->kvm_timer_dirty = true; > > + } > > + return 0; > > +} > > This post-load belongs on the vmstate_kvmtimer struct, so that you need not > re-check kvm_enabled(). > > > const VMStateDescription vmstate_riscv_cpu = { > > .name = "cpu", > > - .version_id = 3, > > - .minimum_version_id = 3, > > + .version_id = 4, > > + .minimum_version_id = 4, > > + .post_load = cpu_post_load, > > No need for version change. > > > r~ Ok, it will be modified in the next series. Yifei
diff --git a/target/riscv/machine.c b/target/riscv/machine.c index ad8248ebfd..f46443c316 100644 --- a/target/riscv/machine.c +++ b/target/riscv/machine.c @@ -164,10 +164,42 @@ static const VMStateDescription vmstate_pointermasking = { } }; +static bool kvmtimer_needed(void *opaque) +{ + return kvm_enabled(); +} + + +static const VMStateDescription vmstate_kvmtimer = { + .name = "cpu/kvmtimer", + .version_id = 1, + .minimum_version_id = 1, + .needed = kvmtimer_needed, + .fields = (VMStateField[]) { + VMSTATE_UINT64(env.kvm_timer_time, RISCVCPU), + VMSTATE_UINT64(env.kvm_timer_compare, RISCVCPU), + VMSTATE_UINT64(env.kvm_timer_state, RISCVCPU), + + VMSTATE_END_OF_LIST() + } +}; + +static int cpu_post_load(void *opaque, int version_id) +{ + RISCVCPU *cpu = opaque; + CPURISCVState *env = &cpu->env; + + if (kvm_enabled()) { + env->kvm_timer_dirty = true; + } + return 0; +} + const VMStateDescription vmstate_riscv_cpu = { .name = "cpu", - .version_id = 3, - .minimum_version_id = 3, + .version_id = 4, + .minimum_version_id = 4, + .post_load = cpu_post_load, .fields = (VMStateField[]) { VMSTATE_UINTTL_ARRAY(env.gpr, RISCVCPU, 32), VMSTATE_UINT64_ARRAY(env.fpr, RISCVCPU, 32), @@ -218,6 +250,7 @@ const VMStateDescription vmstate_riscv_cpu = { &vmstate_hyper, &vmstate_vector, &vmstate_pointermasking, + &vmstate_kvmtimer, NULL } };