On Wed, Sep 27, 2023 at 6:10 AM Daniel Henrique Barboza <dbarb...@ventanamicro.com> wrote: > > We got along without property getters in the KVM driver because we never > needed them. But the incoming query-cpu-model-expansion API will use > property getters and setters to retrieve the CPU characteristics. > > Add the missing getters for the KVM driver for both MISA and > multi-letter extension properties. We're also adding an special getter > for absent multi-letter properties that KVM doesn't implement that > always return false. > > Signed-off-by: Daniel Henrique Barboza <dbarb...@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > target/riscv/kvm/kvm-cpu.c | 40 +++++++++++++++++++++++++++++++++++--- > 1 file changed, 37 insertions(+), 3 deletions(-) > > diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c > index c6615cb807..b4c231f231 100644 > --- a/target/riscv/kvm/kvm-cpu.c > +++ b/target/riscv/kvm/kvm-cpu.c > @@ -140,6 +140,19 @@ static KVMCPUConfig kvm_misa_ext_cfgs[] = { > KVM_MISA_CFG(RVM, KVM_RISCV_ISA_EXT_M), > }; > > +static void kvm_cpu_get_misa_ext_cfg(Object *obj, Visitor *v, > + const char *name, > + void *opaque, Error **errp) > +{ > + KVMCPUConfig *misa_ext_cfg = opaque; > + target_ulong misa_bit = misa_ext_cfg->offset; > + RISCVCPU *cpu = RISCV_CPU(obj); > + CPURISCVState *env = &cpu->env; > + bool value = env->misa_ext_mask & misa_bit; > + > + visit_type_bool(v, name, &value, errp); > +} > + > static void kvm_cpu_set_misa_ext_cfg(Object *obj, Visitor *v, > const char *name, > void *opaque, Error **errp) > @@ -244,6 +257,17 @@ static uint32_t kvm_cpu_cfg_get(RISCVCPU *cpu, > return *ext_enabled; > } > > +static void kvm_cpu_get_multi_ext_cfg(Object *obj, Visitor *v, > + const char *name, > + void *opaque, Error **errp) > +{ > + KVMCPUConfig *multi_ext_cfg = opaque; > + RISCVCPU *cpu = RISCV_CPU(obj); > + bool value = kvm_cpu_cfg_get(cpu, multi_ext_cfg); > + > + visit_type_bool(v, name, &value, errp); > +} > + > static void kvm_cpu_set_multi_ext_cfg(Object *obj, Visitor *v, > const char *name, > void *opaque, Error **errp) > @@ -346,6 +370,15 @@ static void kvm_riscv_update_cpu_cfg_isa_ext(RISCVCPU > *cpu, CPUState *cs) > } > } > > +static void cpu_get_cfg_unavailable(Object *obj, Visitor *v, > + const char *name, > + void *opaque, Error **errp) > +{ > + bool value = false; > + > + visit_type_bool(v, name, &value, errp); > +} > + > static void cpu_set_cfg_unavailable(Object *obj, Visitor *v, > const char *name, > void *opaque, Error **errp) > @@ -376,7 +409,8 @@ static void riscv_cpu_add_kvm_unavail_prop(Object *obj, > const char *prop_name) > * to enable any of them. > */ > object_property_add(obj, prop_name, "bool", > - NULL, cpu_set_cfg_unavailable, > + cpu_get_cfg_unavailable, > + cpu_set_cfg_unavailable, > NULL, (void *)prop_name); > } > > @@ -406,7 +440,7 @@ static void kvm_riscv_add_cpu_user_properties(Object > *cpu_obj) > misa_cfg->description = riscv_get_misa_ext_description(bit); > > object_property_add(cpu_obj, misa_cfg->name, "bool", > - NULL, > + kvm_cpu_get_misa_ext_cfg, > kvm_cpu_set_misa_ext_cfg, > NULL, misa_cfg); > object_property_set_description(cpu_obj, misa_cfg->name, > @@ -422,7 +456,7 @@ static void kvm_riscv_add_cpu_user_properties(Object > *cpu_obj) > KVMCPUConfig *multi_cfg = &kvm_multi_ext_cfgs[i]; > > object_property_add(cpu_obj, multi_cfg->name, "bool", > - NULL, > + kvm_cpu_get_multi_ext_cfg, > kvm_cpu_set_multi_ext_cfg, > NULL, multi_cfg); > } > -- > 2.41.0 > >