target/riscv: update multi-letter extension KVM properties
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 <dbarboza@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-Id: <20230706101738.460804-19-dbarboza@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
56f0e992ca
commit
df817297d7
@ -273,6 +273,32 @@ static void kvm_cpu_set_multi_ext_cfg(Object *obj, Visitor *v,
|
|||||||
kvm_cpu_cfg_set(cpu, multi_ext_cfg, value);
|
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++) {
|
||||||
|
KVMCPUConfig *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)
|
static void kvm_riscv_add_cpu_user_properties(Object *cpu_obj)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -792,6 +818,7 @@ int kvm_arch_init_vcpu(CPUState *cs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
kvm_riscv_update_cpu_misa_ext(cpu, cs);
|
kvm_riscv_update_cpu_misa_ext(cpu, cs);
|
||||||
|
kvm_riscv_update_cpu_cfg_isa_ext(cpu, cs);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user