target/loongarch: Add property set with query-cpu-model-expansion
On LoongArch with QMP command query-cpu-model-expansion, property setting is not supported witch command such as: query-cpu-model-expansion type=static model={"name":"max","props":{"lasx":false}} Here add property setting support with QMP command. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Song Gao <gaosong@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn>
Bibo Mao committed
Jan 19, 2026 at 18:07 UTC
84fd24d691c672cb48a5c5e6ae60fcfa752c9d4c
1 file changed
+28
-12
target/loongarch/loongarch-qmp-cmds.c
+28
-12
@@ -50,7 +50,6 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
50
Error **errp)
51
{
52
Visitor *visitor;
53
- bool ok;
53
CpuModelExpansionInfo *expansion_info;
54
QDict *qdict_out;
55
ObjectClass *oc;
@@ -64,30 +63,47 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
63
return NULL;
64
}
65
66
+ oc = cpu_class_by_name(TYPE_LOONGARCH_CPU, model->name);
67
+ if (!oc) {
68
+ error_setg(errp, "The CPU type '%s' is not a recognized LoongArch "
69
+ "CPU type", model->name);
70
+ return NULL;
71
+ }
72
+
73
+ obj = object_new(object_class_get_name(oc));
74
if (model->props) {
75
+ Error *err = NULL;
76
+ const QDict *qdict_in;
77
+
78
visitor = qobject_input_visitor_new(model->props);
79
if (!visit_start_struct(visitor, "model.props", NULL, 0, errp)) {
80
visit_free(visitor);
81
+ object_unref(obj);
82
return NULL;
83
}
84
74
- ok = visit_check_struct(visitor, errp);
85
+ qdict_in = qobject_to(QDict, model->props);
86
+ i = 0;
87
+ while ((name = cpu_model_advertised_features[i++]) != NULL) {
88
+ if (qdict_get(qdict_in, name)) {
89
+ if (!object_property_set(obj, name, visitor, &err)) {
90
+ break;
91
+ }
92
+ }
93
+ }
94
+
95
+ if (!err) {
96
+ visit_check_struct(visitor, &err);
97
+ }
98
visit_end_struct(visitor, NULL);
99
visit_free(visitor);
77
- if (!ok) {
100
+ if (err) {
101
+ error_propagate(errp, err);
102
+ object_unref(obj);
103
return NULL;
104
}
105
}
106
82
- oc = cpu_class_by_name(TYPE_LOONGARCH_CPU, model->name);
83
- if (!oc) {
84
- error_setg(errp, "The CPU type '%s' is not a recognized LoongArch CPU type",
85
- model->name);
86
- return NULL;
87
- }
88
-
89
- obj = object_new(object_class_get_name(oc));
90
-
107
expansion_info = g_new0(CpuModelExpansionInfo, 1);
108
expansion_info->model = g_malloc0(sizeof(*expansion_info->model));
109
expansion_info->model->name = g_strdup(model->name);