target/riscv/kvm/kvm-cpu.c: add missing property getters()
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 <dbarboza@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20231018195638.211151-2-dbarboza@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
257cfaed47
commit
456a65546f
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user