On Tue, May 30, 2023 at 04:46:22PM -0300, Daniel Henrique Barboza wrote: > We're now ready to update the multi-letter extensions status for KVM. > > kvm_riscv_update_cpu_cfg_isa_ext() is called called during vcpu creation > time to verify which user options changes host defaults (via the 'user_set' > flag) and tries to write them back to KVM. > > Failure to commit a change to KVM is only ignored in case KVM doesn't > know about the extension (-EINVAL error code) and the user wanted to > disable the given extension. Otherwise we're going to abort the boot > process. > > Signed-off-by: Daniel Henrique Barboza <dbarb...@ventanamicro.com> > --- > target/riscv/kvm.c | 27 +++++++++++++++++++++++++++ > 1 file changed, 27 insertions(+) > > diff --git a/target/riscv/kvm.c b/target/riscv/kvm.c > index 675e18df3b..92b99fe261 100644 > --- a/target/riscv/kvm.c > +++ b/target/riscv/kvm.c > @@ -295,6 +295,32 @@ static void kvm_cpu_set_multi_ext_cfg(Object *obj, > Visitor *v, > kvm_cpu_cfg_set(cpu, multi_ext_cfg, value); > } > > +static void kvm_riscv_update_cpu_cfg_isa_ext(RISCVCPU *cpu, CPUState *cs) > +{ > + CPURISCVState *env = &cpu->env; > + uint64_t id, reg; > + int i, ret; > + > + for (i = 0; i < ARRAY_SIZE(kvm_multi_ext_cfgs); i++) { > + RISCVCPUMultiExtConfig *multi_ext_cfg = &kvm_multi_ext_cfgs[i]; > + > + if (!multi_ext_cfg->user_set) { > + continue; > + } > + > + id = kvm_riscv_reg_id(env, KVM_REG_RISCV_ISA_EXT, > + multi_ext_cfg->kvm_reg_id); > + reg = kvm_cpu_cfg_get(cpu, multi_ext_cfg); > + ret = kvm_set_one_reg(cs, id, ®); > + if (ret != 0) { > + error_report("Unable to %s extension %s in KVM, error %d", > + reg ? "enable" : "disable", > + multi_ext_cfg->name, ret); > + exit(EXIT_FAILURE); > + } > + } > +} > + > static void kvm_riscv_add_cpu_user_properties(Object *cpu_obj) > { > int i; > @@ -829,6 +855,7 @@ int kvm_arch_init_vcpu(CPUState *cs) > } > > kvm_riscv_update_cpu_misa_ext(cpu, cs); > + kvm_riscv_update_cpu_cfg_isa_ext(cpu, cs); > > return ret; > } > -- > 2.40.1 > >
Reviewed-by: Andrew Jones <ajo...@ventanamicro.com>