@samitouri / QOSamiQemu / commits / 84fd24d691

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);