aboutsummaryrefslogtreecommitdiff
path: root/target/riscv
diff options
context:
space:
mode:
authorDaniel Henrique Barboza <dbarboza@ventanamicro.com>2023-10-18 16:56:38 -0300
committerAlistair Francis <alistair.francis@wdc.com>2023-11-07 11:06:02 +1000
commita3abecbef0ad5e121c0d3f8f26568ab0466d9a6a (patch)
tree4343a3648a88318fbc7181b66ae7814e84d185b0 /target/riscv
parentef58fad0fdc7aba2c2196f9c35a89889286ef92b (diff)
downloadqemu-a3abecbef0ad5e121c0d3f8f26568ab0466d9a6a.zip
qemu-a3abecbef0ad5e121c0d3f8f26568ab0466d9a6a.tar.gz
qemu-a3abecbef0ad5e121c0d3f8f26568ab0466d9a6a.tar.bz2
target/riscv/riscv-qmp-cmds.c: check CPU accel in query-cpu-model-expansion
Use the recently added riscv_cpu_accelerator_compatible() to filter unavailable CPUs for a given accelerator. At this moment this is the case for a QEMU built with KVM and TCG support querying a binary running with TCG: qemu-system-riscv64 -S -M virt,accel=tcg -display none -qmp tcp:localhost:1234,server,wait=off ./qemu/scripts/qmp/qmp-shell localhost:1234 (QEMU) query-cpu-model-expansion type=full model={"name":"host"} {"error": {"class": "GenericError", "desc": "'host' CPU not available with tcg"}} Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20231018195638.211151-7-dbarboza@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Diffstat (limited to 'target/riscv')
-rw-r--r--target/riscv/riscv-qmp-cmds.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/target/riscv/riscv-qmp-cmds.c b/target/riscv/riscv-qmp-cmds.c
index 5b2d186..2f2dbae 100644
--- a/target/riscv/riscv-qmp-cmds.c
+++ b/target/riscv/riscv-qmp-cmds.c
@@ -31,6 +31,8 @@
#include "qapi/qobject-input-visitor.h"
#include "qapi/visitor.h"
#include "qom/qom-qobject.h"
+#include "sysemu/kvm.h"
+#include "sysemu/tcg.h"
#include "cpu-qom.h"
#include "cpu.h"
@@ -63,6 +65,17 @@ CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
return cpu_list;
}
+static void riscv_check_if_cpu_available(RISCVCPU *cpu, Error **errp)
+{
+ if (!riscv_cpu_accelerator_compatible(cpu)) {
+ g_autofree char *name = riscv_cpu_get_name(cpu);
+ const char *accel = kvm_enabled() ? "kvm" : "tcg";
+
+ error_setg(errp, "'%s' CPU not available with %s", name, accel);
+ return;
+ }
+}
+
static void riscv_obj_add_qdict_prop(Object *obj, QDict *qdict_out,
const char *name)
{
@@ -161,6 +174,13 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
obj = object_new(object_class_get_name(oc));
+ riscv_check_if_cpu_available(RISCV_CPU(obj), &local_err);
+ if (local_err != NULL) {
+ error_propagate(errp, local_err);
+ object_unref(obj);
+ return NULL;
+ }
+
if (qdict_in) {
riscv_cpuobj_validate_qdict_in(obj, model->props, qdict_in,
&local_err);