Monitor patches for 2023-03-02
-----BEGIN PGP SIGNATURE----- iQJGBAABCAAwFiEENUvIs9frKmtoZ05fOHC0AOuRhlMFAmQASV0SHGFybWJydUBy ZWRoYXQuY29tAAoJEDhwtADrkYZT4mEQALkbu0i/Y2B2XKpGyp9Z/uf0zoHmL6fA UEy2S8yn3K1uPPDmzWsQ7PgxDnirVzePa88UzuW3iUiiHBcQp0IsFOP6LZ47NTTz UM146odlDtn50bHWr6vHtToNU+PcKOw8ELX28eDE+ihtg+8B+B6cBgLa14VKGSJ4 4oBJbsNMG8U3qJgqrIMomBeP38TorTdKq05jEE9txqsiw5uYO6jQE9owNkLQP76U 8T/99sgQzyQjJ7VjOdyu2ZveUwGIpmGzmeA26CcwYP8uhYTRY+Lk+5gZnC15pad9 TMimrq+7vwuzqKQpZw5rZO25ryQmKgQX49hSt/dKZEFNvb9vtKq693VhRoP4EMCz 136suIATRkXHTw2FhjC2l3lnN+rQEfTr+zuGvazQ9ZOibHFPhxOAR4RNPTFXbfk6 fOM7wW2Y3lhlQdhLc+0Ar2N/GzjEHi4WJhk4nV0V1PK79dLPYA5kuYGUuqzeA04P Fu1EvpNWgHpQd3m8oFxjfozn9LMDohUrdHknrF0+VncAfzcPic1z4VhKDg+kMLJx 1WePIMdMMS/aIYpNCMevLm11GQXhd2B4GG3xhNpM/BfHQ9KLM1dfoTEGfG9ZpKNv Qyi1ofpgKzX5mpSHrdACK/rm45KIJRbprGgAe3fZFh65iGQ51wwZd16MUV/c8exN ouu3jimfHWWG =RuRo -----END PGP SIGNATURE----- Merge tag 'pull-monitor-2023-03-02' of https://repo.or.cz/qemu/armbru into staging Monitor patches for 2023-03-02 # -----BEGIN PGP SIGNATURE----- # # iQJGBAABCAAwFiEENUvIs9frKmtoZ05fOHC0AOuRhlMFAmQASV0SHGFybWJydUBy # ZWRoYXQuY29tAAoJEDhwtADrkYZT4mEQALkbu0i/Y2B2XKpGyp9Z/uf0zoHmL6fA # UEy2S8yn3K1uPPDmzWsQ7PgxDnirVzePa88UzuW3iUiiHBcQp0IsFOP6LZ47NTTz # UM146odlDtn50bHWr6vHtToNU+PcKOw8ELX28eDE+ihtg+8B+B6cBgLa14VKGSJ4 # 4oBJbsNMG8U3qJgqrIMomBeP38TorTdKq05jEE9txqsiw5uYO6jQE9owNkLQP76U # 8T/99sgQzyQjJ7VjOdyu2ZveUwGIpmGzmeA26CcwYP8uhYTRY+Lk+5gZnC15pad9 # TMimrq+7vwuzqKQpZw5rZO25ryQmKgQX49hSt/dKZEFNvb9vtKq693VhRoP4EMCz # 136suIATRkXHTw2FhjC2l3lnN+rQEfTr+zuGvazQ9ZOibHFPhxOAR4RNPTFXbfk6 # fOM7wW2Y3lhlQdhLc+0Ar2N/GzjEHi4WJhk4nV0V1PK79dLPYA5kuYGUuqzeA04P # Fu1EvpNWgHpQd3m8oFxjfozn9LMDohUrdHknrF0+VncAfzcPic1z4VhKDg+kMLJx # 1WePIMdMMS/aIYpNCMevLm11GQXhd2B4GG3xhNpM/BfHQ9KLM1dfoTEGfG9ZpKNv # Qyi1ofpgKzX5mpSHrdACK/rm45KIJRbprGgAe3fZFh65iGQ51wwZd16MUV/c8exN # ouu3jimfHWWG # =RuRo # -----END PGP SIGNATURE----- # gpg: Signature made Thu 02 Mar 2023 06:59:41 GMT # gpg: using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653 # gpg: issuer "armbru@redhat.com" # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full] # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" [full] # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * tag 'pull-monitor-2023-03-02' of https://repo.or.cz/qemu/armbru: target/ppc: Restrict 'qapi-commands-machine.h' to system emulation target/loongarch: Restrict 'qapi-commands-machine.h' to system emulation target/i386: Restrict 'qapi-commands-machine.h' to system emulation target/arm: Restrict 'qapi-commands-machine.h' to system emulation readline: fix hmp completion issue Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
0ccf919d74
@ -1189,9 +1189,7 @@ static void cmd_completion(MonitorHMP *mon, const char *name, const char *list)
|
||||
}
|
||||
memcpy(cmd, pstart, len);
|
||||
cmd[len] = '\0';
|
||||
if (name[0] == '\0') {
|
||||
readline_add_completion_of(mon->rs, name, cmd);
|
||||
}
|
||||
readline_add_completion_of(mon->rs, name, cmd);
|
||||
if (*p == '\0') {
|
||||
break;
|
||||
}
|
||||
@ -1335,9 +1333,7 @@ static void monitor_find_completion_by_table(MonitorHMP *mon,
|
||||
/* block device name completion */
|
||||
readline_set_completion_index(mon->rs, strlen(str));
|
||||
while ((blk = blk_next(blk)) != NULL) {
|
||||
if (str[0] == '\0') {
|
||||
readline_add_completion_of(mon->rs, str, blk_name(blk));
|
||||
}
|
||||
readline_add_completion_of(mon->rs, str, blk_name(blk));
|
||||
}
|
||||
break;
|
||||
case 's':
|
||||
|
@ -227,3 +227,31 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
|
||||
|
||||
return expansion_info;
|
||||
}
|
||||
|
||||
static void arm_cpu_add_definition(gpointer data, gpointer user_data)
|
||||
{
|
||||
ObjectClass *oc = data;
|
||||
CpuDefinitionInfoList **cpu_list = user_data;
|
||||
CpuDefinitionInfo *info;
|
||||
const char *typename;
|
||||
|
||||
typename = object_class_get_name(oc);
|
||||
info = g_malloc0(sizeof(*info));
|
||||
info->name = g_strndup(typename,
|
||||
strlen(typename) - strlen("-" TYPE_ARM_CPU));
|
||||
info->q_typename = g_strdup(typename);
|
||||
|
||||
QAPI_LIST_PREPEND(*cpu_list, info);
|
||||
}
|
||||
|
||||
CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
|
||||
{
|
||||
CpuDefinitionInfoList *cpu_list = NULL;
|
||||
GSList *list;
|
||||
|
||||
list = object_class_get_list(TYPE_ARM_CPU, false);
|
||||
g_slist_foreach(list, arm_cpu_add_definition, &cpu_list);
|
||||
g_slist_free(list);
|
||||
|
||||
return cpu_list;
|
||||
}
|
@ -23,7 +23,6 @@
|
||||
#include "sysemu/cpu-timers.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "sysemu/tcg.h"
|
||||
#include "qapi/qapi-commands-machine-target.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/guest-random.h"
|
||||
#ifdef CONFIG_TCG
|
||||
@ -9188,34 +9187,6 @@ void arm_cpu_list(void)
|
||||
g_slist_free(list);
|
||||
}
|
||||
|
||||
static void arm_cpu_add_definition(gpointer data, gpointer user_data)
|
||||
{
|
||||
ObjectClass *oc = data;
|
||||
CpuDefinitionInfoList **cpu_list = user_data;
|
||||
CpuDefinitionInfo *info;
|
||||
const char *typename;
|
||||
|
||||
typename = object_class_get_name(oc);
|
||||
info = g_malloc0(sizeof(*info));
|
||||
info->name = g_strndup(typename,
|
||||
strlen(typename) - strlen("-" TYPE_ARM_CPU));
|
||||
info->q_typename = g_strdup(typename);
|
||||
|
||||
QAPI_LIST_PREPEND(*cpu_list, info);
|
||||
}
|
||||
|
||||
CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
|
||||
{
|
||||
CpuDefinitionInfoList *cpu_list = NULL;
|
||||
GSList *list;
|
||||
|
||||
list = object_class_get_list(TYPE_ARM_CPU, false);
|
||||
g_slist_foreach(list, arm_cpu_add_definition, &cpu_list);
|
||||
g_slist_free(list);
|
||||
|
||||
return cpu_list;
|
||||
}
|
||||
|
||||
/*
|
||||
* Private utility function for define_one_arm_cp_reg_with_opaque():
|
||||
* add a single reginfo struct to the hash table.
|
||||
|
@ -20,8 +20,8 @@ arm_softmmu_ss = ss.source_set()
|
||||
arm_softmmu_ss.add(files(
|
||||
'arch_dump.c',
|
||||
'arm-powerctl.c',
|
||||
'arm-qmp-cmds.c',
|
||||
'machine.c',
|
||||
'monitor.c',
|
||||
'ptw.c',
|
||||
))
|
||||
|
||||
|
@ -31,11 +31,11 @@
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/qapi-visit-machine.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "qapi/qapi-commands-machine-target.h"
|
||||
#include "standard-headers/asm-x86/kvm_para.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/i386/topology.h"
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
#include "qapi/qapi-commands-machine-target.h"
|
||||
#include "exec/address-spaces.h"
|
||||
#include "hw/boards.h"
|
||||
#include "hw/i386/sgx-epc.h"
|
||||
@ -4843,40 +4843,6 @@ static void x86_cpu_get_unavailable_features(Object *obj, Visitor *v,
|
||||
visit_type_strList(v, "unavailable-features", &result, errp);
|
||||
}
|
||||
|
||||
/* Check for missing features that may prevent the CPU class from
|
||||
* running using the current machine and accelerator.
|
||||
*/
|
||||
static void x86_cpu_class_check_missing_features(X86CPUClass *xcc,
|
||||
strList **list)
|
||||
{
|
||||
strList **tail = list;
|
||||
X86CPU *xc;
|
||||
Error *err = NULL;
|
||||
|
||||
if (xcc->host_cpuid_required && !accel_uses_host_cpuid()) {
|
||||
QAPI_LIST_APPEND(tail, g_strdup("kvm"));
|
||||
return;
|
||||
}
|
||||
|
||||
xc = X86_CPU(object_new_with_class(OBJECT_CLASS(xcc)));
|
||||
|
||||
x86_cpu_expand_features(xc, &err);
|
||||
if (err) {
|
||||
/* Errors at x86_cpu_expand_features should never happen,
|
||||
* but in case it does, just report the model as not
|
||||
* runnable at all using the "type" property.
|
||||
*/
|
||||
QAPI_LIST_APPEND(tail, g_strdup("type"));
|
||||
error_free(err);
|
||||
}
|
||||
|
||||
x86_cpu_filter_features(xc, false);
|
||||
|
||||
x86_cpu_list_feature_names(xc->filtered_features, tail);
|
||||
|
||||
object_unref(OBJECT(xc));
|
||||
}
|
||||
|
||||
/* Print all cpuid feature names in featureset
|
||||
*/
|
||||
static void listflags(GList *features)
|
||||
@ -5005,6 +4971,42 @@ void x86_cpu_list(void)
|
||||
g_list_free(names);
|
||||
}
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
|
||||
/* Check for missing features that may prevent the CPU class from
|
||||
* running using the current machine and accelerator.
|
||||
*/
|
||||
static void x86_cpu_class_check_missing_features(X86CPUClass *xcc,
|
||||
strList **list)
|
||||
{
|
||||
strList **tail = list;
|
||||
X86CPU *xc;
|
||||
Error *err = NULL;
|
||||
|
||||
if (xcc->host_cpuid_required && !accel_uses_host_cpuid()) {
|
||||
QAPI_LIST_APPEND(tail, g_strdup("kvm"));
|
||||
return;
|
||||
}
|
||||
|
||||
xc = X86_CPU(object_new_with_class(OBJECT_CLASS(xcc)));
|
||||
|
||||
x86_cpu_expand_features(xc, &err);
|
||||
if (err) {
|
||||
/* Errors at x86_cpu_expand_features should never happen,
|
||||
* but in case it does, just report the model as not
|
||||
* runnable at all using the "type" property.
|
||||
*/
|
||||
QAPI_LIST_APPEND(tail, g_strdup("type"));
|
||||
error_free(err);
|
||||
}
|
||||
|
||||
x86_cpu_filter_features(xc, false);
|
||||
|
||||
x86_cpu_list_feature_names(xc->filtered_features, tail);
|
||||
|
||||
object_unref(OBJECT(xc));
|
||||
}
|
||||
|
||||
static void x86_cpu_definition_entry(gpointer data, gpointer user_data)
|
||||
{
|
||||
ObjectClass *oc = data;
|
||||
@ -5045,6 +5047,8 @@ CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
|
||||
return cpu_list;
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_USER_ONLY */
|
||||
|
||||
uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
||||
bool migratable_only)
|
||||
{
|
||||
|
@ -12,7 +12,6 @@
|
||||
#include "qemu/module.h"
|
||||
#include "sysemu/qtest.h"
|
||||
#include "exec/exec-all.h"
|
||||
#include "qapi/qapi-commands-machine-target.h"
|
||||
#include "cpu.h"
|
||||
#include "internals.h"
|
||||
#include "fpu/softfloat-helpers.h"
|
||||
@ -750,29 +749,3 @@ static const TypeInfo loongarch_cpu_type_infos[] = {
|
||||
};
|
||||
|
||||
DEFINE_TYPES(loongarch_cpu_type_infos)
|
||||
|
||||
static void loongarch_cpu_add_definition(gpointer data, gpointer user_data)
|
||||
{
|
||||
ObjectClass *oc = data;
|
||||
CpuDefinitionInfoList **cpu_list = user_data;
|
||||
CpuDefinitionInfo *info = g_new0(CpuDefinitionInfo, 1);
|
||||
const char *typename = object_class_get_name(oc);
|
||||
|
||||
info->name = g_strndup(typename,
|
||||
strlen(typename) - strlen("-" TYPE_LOONGARCH_CPU));
|
||||
info->q_typename = g_strdup(typename);
|
||||
|
||||
QAPI_LIST_PREPEND(*cpu_list, info);
|
||||
}
|
||||
|
||||
CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
|
||||
{
|
||||
CpuDefinitionInfoList *cpu_list = NULL;
|
||||
GSList *list;
|
||||
|
||||
list = object_class_get_list(TYPE_LOONGARCH_CPU, false);
|
||||
g_slist_foreach(list, loongarch_cpu_add_definition, &cpu_list);
|
||||
g_slist_free(list);
|
||||
|
||||
return cpu_list;
|
||||
}
|
||||
|
37
target/loongarch/loongarch-qmp-cmds.c
Normal file
37
target/loongarch/loongarch-qmp-cmds.c
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* QEMU LoongArch CPU (monitor definitions)
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2021 Loongson Technology Corporation Limited
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/qapi-commands-machine-target.h"
|
||||
#include "cpu.h"
|
||||
|
||||
static void loongarch_cpu_add_definition(gpointer data, gpointer user_data)
|
||||
{
|
||||
ObjectClass *oc = data;
|
||||
CpuDefinitionInfoList **cpu_list = user_data;
|
||||
CpuDefinitionInfo *info = g_new0(CpuDefinitionInfo, 1);
|
||||
const char *typename = object_class_get_name(oc);
|
||||
|
||||
info->name = g_strndup(typename,
|
||||
strlen(typename) - strlen("-" TYPE_LOONGARCH_CPU));
|
||||
info->q_typename = g_strdup(typename);
|
||||
|
||||
QAPI_LIST_PREPEND(*cpu_list, info);
|
||||
}
|
||||
|
||||
CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
|
||||
{
|
||||
CpuDefinitionInfoList *cpu_list = NULL;
|
||||
GSList *list;
|
||||
|
||||
list = object_class_get_list(TYPE_LOONGARCH_CPU, false);
|
||||
g_slist_foreach(list, loongarch_cpu_add_definition, &cpu_list);
|
||||
g_slist_free(list);
|
||||
|
||||
return cpu_list;
|
||||
}
|
@ -16,6 +16,7 @@ loongarch_tcg_ss.add(zlib)
|
||||
|
||||
loongarch_softmmu_ss = ss.source_set()
|
||||
loongarch_softmmu_ss.add(files(
|
||||
'loongarch-qmp-cmds.c',
|
||||
'machine.c',
|
||||
'tlb_helper.c',
|
||||
'constant_timer.c',
|
||||
|
@ -31,6 +31,8 @@
|
||||
|
||||
OBJECT_DECLARE_CPU_TYPE(PowerPCCPU, PowerPCCPUClass, POWERPC_CPU)
|
||||
|
||||
ObjectClass *ppc_cpu_class_by_name(const char *name);
|
||||
|
||||
typedef struct CPUArchState CPUPPCState;
|
||||
typedef struct ppc_tb_t ppc_tb_t;
|
||||
typedef struct ppc_dcr_t ppc_dcr_t;
|
||||
|
@ -40,7 +40,6 @@
|
||||
#include "qemu/cutils.h"
|
||||
#include "disas/capstone.h"
|
||||
#include "fpu/softfloat.h"
|
||||
#include "qapi/qapi-commands-machine-target.h"
|
||||
|
||||
#include "helper_regs.h"
|
||||
#include "internal.h"
|
||||
@ -6841,7 +6840,7 @@ static const char *ppc_cpu_lookup_alias(const char *alias)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static ObjectClass *ppc_cpu_class_by_name(const char *name)
|
||||
ObjectClass *ppc_cpu_class_by_name(const char *name)
|
||||
{
|
||||
char *cpu_model, *typename;
|
||||
ObjectClass *oc;
|
||||
@ -6981,51 +6980,6 @@ void ppc_cpu_list(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void ppc_cpu_defs_entry(gpointer data, gpointer user_data)
|
||||
{
|
||||
ObjectClass *oc = data;
|
||||
CpuDefinitionInfoList **first = user_data;
|
||||
const char *typename;
|
||||
CpuDefinitionInfo *info;
|
||||
|
||||
typename = object_class_get_name(oc);
|
||||
info = g_malloc0(sizeof(*info));
|
||||
info->name = g_strndup(typename,
|
||||
strlen(typename) - strlen(POWERPC_CPU_TYPE_SUFFIX));
|
||||
|
||||
QAPI_LIST_PREPEND(*first, info);
|
||||
}
|
||||
|
||||
CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
|
||||
{
|
||||
CpuDefinitionInfoList *cpu_list = NULL;
|
||||
GSList *list;
|
||||
int i;
|
||||
|
||||
list = object_class_get_list(TYPE_POWERPC_CPU, false);
|
||||
g_slist_foreach(list, ppc_cpu_defs_entry, &cpu_list);
|
||||
g_slist_free(list);
|
||||
|
||||
for (i = 0; ppc_cpu_aliases[i].alias != NULL; i++) {
|
||||
PowerPCCPUAlias *alias = &ppc_cpu_aliases[i];
|
||||
ObjectClass *oc;
|
||||
CpuDefinitionInfo *info;
|
||||
|
||||
oc = ppc_cpu_class_by_name(alias->model);
|
||||
if (oc == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
info = g_malloc0(sizeof(*info));
|
||||
info->name = g_strdup(alias->alias);
|
||||
info->q_typename = g_strdup(object_class_get_name(oc));
|
||||
|
||||
QAPI_LIST_PREPEND(cpu_list, info);
|
||||
}
|
||||
|
||||
return cpu_list;
|
||||
}
|
||||
|
||||
static void ppc_cpu_set_pc(CPUState *cs, vaddr value)
|
||||
{
|
||||
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||
|
@ -39,7 +39,7 @@ ppc_softmmu_ss.add(files(
|
||||
'machine.c',
|
||||
'mmu-hash32.c',
|
||||
'mmu_common.c',
|
||||
'monitor.c',
|
||||
'ppc-qmp-cmds.c',
|
||||
))
|
||||
ppc_softmmu_ss.add(when: 'CONFIG_TCG', if_true: files(
|
||||
'mmu_helper.c',
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* QEMU monitor
|
||||
* QEMU PPC (monitor definitions)
|
||||
*
|
||||
* Copyright (c) 2003-2004 Fabrice Bellard
|
||||
*
|
||||
@ -28,6 +28,9 @@
|
||||
#include "qemu/ctype.h"
|
||||
#include "monitor/hmp-target.h"
|
||||
#include "monitor/hmp.h"
|
||||
#include "qapi/qapi-commands-machine-target.h"
|
||||
#include "cpu-models.h"
|
||||
#include "cpu-qom.h"
|
||||
|
||||
static target_long monitor_get_ccr(Monitor *mon, const struct MonitorDef *md,
|
||||
int val)
|
||||
@ -172,3 +175,48 @@ int target_get_monitor_def(CPUState *cs, const char *name, uint64_t *pval)
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static void ppc_cpu_defs_entry(gpointer data, gpointer user_data)
|
||||
{
|
||||
ObjectClass *oc = data;
|
||||
CpuDefinitionInfoList **first = user_data;
|
||||
const char *typename;
|
||||
CpuDefinitionInfo *info;
|
||||
|
||||
typename = object_class_get_name(oc);
|
||||
info = g_malloc0(sizeof(*info));
|
||||
info->name = g_strndup(typename,
|
||||
strlen(typename) - strlen(POWERPC_CPU_TYPE_SUFFIX));
|
||||
|
||||
QAPI_LIST_PREPEND(*first, info);
|
||||
}
|
||||
|
||||
CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
|
||||
{
|
||||
CpuDefinitionInfoList *cpu_list = NULL;
|
||||
GSList *list;
|
||||
int i;
|
||||
|
||||
list = object_class_get_list(TYPE_POWERPC_CPU, false);
|
||||
g_slist_foreach(list, ppc_cpu_defs_entry, &cpu_list);
|
||||
g_slist_free(list);
|
||||
|
||||
for (i = 0; ppc_cpu_aliases[i].alias != NULL; i++) {
|
||||
PowerPCCPUAlias *alias = &ppc_cpu_aliases[i];
|
||||
ObjectClass *oc;
|
||||
CpuDefinitionInfo *info;
|
||||
|
||||
oc = ppc_cpu_class_by_name(alias->model);
|
||||
if (oc == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
info = g_malloc0(sizeof(*info));
|
||||
info->name = g_strdup(alias->alias);
|
||||
info->q_typename = g_strdup(object_class_get_name(oc));
|
||||
|
||||
QAPI_LIST_PREPEND(cpu_list, info);
|
||||
}
|
||||
|
||||
return cpu_list;
|
||||
}
|
Loading…
Reference in New Issue
Block a user