target/loongarch: Fix query-cpu-model-expansion to reject props

query-cpu-model-expansion takes a CpuModelInfo argument.  The
loongarch version of the command silently ignores the argument's
member @props.  For instance,

    {"execute": "query-cpu-model-expansion", "arguments": {"type": "static", "model": {"name": "la464", "props": null}}}

and

    {"execute": "query-cpu-model-expansion", "arguments": {"type": "static", "model": {"name": "la464", "props": {"prop": null}}}}

succeed.

Add skeleton code for property processing that recognizes no
properties.  Now the two commands fail as they should:

    {"error": {"class": "GenericError", "desc": "Invalid parameter type for 'model.props', expected: object"}}

and

    {"error": {"class": "GenericError", "desc": "Parameter 'model.props.prop' is unexpected"}}

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-ID: <20240305145919.2186971-5-armbru@redhat.com>
[Drop #include now superfluous]
This commit is contained in:
Markus Armbruster 2024-03-05 15:59:18 +01:00
parent 8934643a0e
commit 2805440671

View File

@ -10,7 +10,6 @@
#include "qapi/error.h" #include "qapi/error.h"
#include "qapi/qapi-commands-machine-target.h" #include "qapi/qapi-commands-machine-target.h"
#include "cpu.h" #include "cpu.h"
#include "qapi/qmp/qerror.h"
#include "qapi/qmp/qdict.h" #include "qapi/qmp/qdict.h"
#include "qapi/qobject-input-visitor.h" #include "qapi/qobject-input-visitor.h"
#include "qom/qom-qobject.h" #include "qom/qom-qobject.h"
@ -48,6 +47,8 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
CpuModelInfo *model, CpuModelInfo *model,
Error **errp) Error **errp)
{ {
Visitor *visitor;
bool ok;
CpuModelExpansionInfo *expansion_info; CpuModelExpansionInfo *expansion_info;
QDict *qdict_out; QDict *qdict_out;
ObjectClass *oc; ObjectClass *oc;
@ -60,6 +61,21 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
return NULL; return NULL;
} }
if (model->props) {
visitor = qobject_input_visitor_new(model->props);
if (!visit_start_struct(visitor, "model.props", NULL, 0, errp)) {
visit_free(visitor);
return NULL;
}
ok = visit_check_struct(visitor, errp);
visit_end_struct(visitor, NULL);
visit_free(visitor);
if (!ok) {
return NULL;
}
}
oc = cpu_class_by_name(TYPE_LOONGARCH_CPU, model->name); oc = cpu_class_by_name(TYPE_LOONGARCH_CPU, model->name);
if (!oc) { if (!oc) {
error_setg(errp, "The CPU type '%s' is not a recognized LoongArch CPU type", error_setg(errp, "The CPU type '%s' is not a recognized LoongArch CPU type",