mirror of
https://github.com/qemu/qemu.git
synced 2024-11-24 11:23:43 +08:00
monitor: fix qmp/hmp query-memdev not reporting IDs of memory backends
Considering 'id' is mandatory for user_creatable objects/backends and user_creatable_add_type() always has it as an argument regardless of where from it is called CLI/monitor or QMP, Fix issue by adding 'id' property to hostmem backends and set it in user_creatable_add_type() for every object that implements 'id' property. Then later at query-memdev time get 'id' from object directly. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <1484052795-158195-4-git-send-email-imammedo@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
3a4641054e
commit
e1ff3c67e8
@ -348,6 +348,24 @@ host_memory_backend_can_be_deleted(UserCreatable *uc, Error **errp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *get_id(Object *o, Error **errp)
|
||||||
|
{
|
||||||
|
HostMemoryBackend *backend = MEMORY_BACKEND(o);
|
||||||
|
|
||||||
|
return g_strdup(backend->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void set_id(Object *o, const char *str, Error **errp)
|
||||||
|
{
|
||||||
|
HostMemoryBackend *backend = MEMORY_BACKEND(o);
|
||||||
|
|
||||||
|
if (backend->id) {
|
||||||
|
error_setg(errp, "cannot change property value");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
backend->id = g_strdup(str);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
host_memory_backend_class_init(ObjectClass *oc, void *data)
|
host_memory_backend_class_init(ObjectClass *oc, void *data)
|
||||||
{
|
{
|
||||||
@ -377,6 +395,13 @@ host_memory_backend_class_init(ObjectClass *oc, void *data)
|
|||||||
HostMemPolicy_lookup,
|
HostMemPolicy_lookup,
|
||||||
host_memory_backend_get_policy,
|
host_memory_backend_get_policy,
|
||||||
host_memory_backend_set_policy, &error_abort);
|
host_memory_backend_set_policy, &error_abort);
|
||||||
|
object_class_property_add_str(oc, "id", get_id, set_id, &error_abort);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void host_memory_backend_finalize(Object *o)
|
||||||
|
{
|
||||||
|
HostMemoryBackend *backend = MEMORY_BACKEND(o);
|
||||||
|
g_free(backend->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo host_memory_backend_info = {
|
static const TypeInfo host_memory_backend_info = {
|
||||||
@ -387,6 +412,7 @@ static const TypeInfo host_memory_backend_info = {
|
|||||||
.class_init = host_memory_backend_class_init,
|
.class_init = host_memory_backend_class_init,
|
||||||
.instance_size = sizeof(HostMemoryBackend),
|
.instance_size = sizeof(HostMemoryBackend),
|
||||||
.instance_init = host_memory_backend_init,
|
.instance_init = host_memory_backend_init,
|
||||||
|
.instance_finalize = host_memory_backend_finalize,
|
||||||
.interfaces = (InterfaceInfo[]) {
|
.interfaces = (InterfaceInfo[]) {
|
||||||
{ TYPE_USER_CREATABLE },
|
{ TYPE_USER_CREATABLE },
|
||||||
{ }
|
{ }
|
||||||
|
@ -3529,6 +3529,7 @@ Example (1):
|
|||||||
"policy": "bind"
|
"policy": "bind"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"id": "mem1",
|
||||||
"size": 536870912,
|
"size": 536870912,
|
||||||
"merge": false,
|
"merge": false,
|
||||||
"dump": true,
|
"dump": true,
|
||||||
|
5
hmp.c
5
hmp.c
@ -2078,13 +2078,11 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict)
|
|||||||
MemdevList *m = memdev_list;
|
MemdevList *m = memdev_list;
|
||||||
Visitor *v;
|
Visitor *v;
|
||||||
char *str;
|
char *str;
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
|
|
||||||
while (m) {
|
while (m) {
|
||||||
v = string_output_visitor_new(false, &str);
|
v = string_output_visitor_new(false, &str);
|
||||||
visit_type_uint16List(v, NULL, &m->value->host_nodes, NULL);
|
visit_type_uint16List(v, NULL, &m->value->host_nodes, NULL);
|
||||||
monitor_printf(mon, "memory backend: %d\n", i);
|
monitor_printf(mon, "memory backend: %s\n", m->value->id);
|
||||||
monitor_printf(mon, " size: %" PRId64 "\n", m->value->size);
|
monitor_printf(mon, " size: %" PRId64 "\n", m->value->size);
|
||||||
monitor_printf(mon, " merge: %s\n",
|
monitor_printf(mon, " merge: %s\n",
|
||||||
m->value->merge ? "true" : "false");
|
m->value->merge ? "true" : "false");
|
||||||
@ -2100,7 +2098,6 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict)
|
|||||||
g_free(str);
|
g_free(str);
|
||||||
visit_free(v);
|
visit_free(v);
|
||||||
m = m->next;
|
m = m->next;
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
monitor_printf(mon, "\n");
|
monitor_printf(mon, "\n");
|
||||||
|
@ -52,6 +52,7 @@ struct HostMemoryBackend {
|
|||||||
Object parent;
|
Object parent;
|
||||||
|
|
||||||
/* protected */
|
/* protected */
|
||||||
|
char *id;
|
||||||
uint64_t size;
|
uint64_t size;
|
||||||
bool merge, dump;
|
bool merge, dump;
|
||||||
bool prealloc, force_prealloc, is_mapped;
|
bool prealloc, force_prealloc, is_mapped;
|
||||||
|
3
numa.c
3
numa.c
@ -518,6 +518,9 @@ static int query_memdev(Object *obj, void *opaque)
|
|||||||
|
|
||||||
m->value = g_malloc0(sizeof(*m->value));
|
m->value = g_malloc0(sizeof(*m->value));
|
||||||
|
|
||||||
|
m->value->id = object_property_get_str(obj, "id", NULL);
|
||||||
|
m->value->has_id = !!m->value->id;
|
||||||
|
|
||||||
m->value->size = object_property_get_int(obj, "size",
|
m->value->size = object_property_get_int(obj, "size",
|
||||||
&error_abort);
|
&error_abort);
|
||||||
m->value->merge = object_property_get_bool(obj, "merge",
|
m->value->merge = object_property_get_bool(obj, "merge",
|
||||||
|
@ -4457,6 +4457,8 @@
|
|||||||
#
|
#
|
||||||
# Information about memory backend
|
# Information about memory backend
|
||||||
#
|
#
|
||||||
|
# @id: #optional backend's ID if backend has 'id' property (since 2.9)
|
||||||
|
#
|
||||||
# @size: memory backend size
|
# @size: memory backend size
|
||||||
#
|
#
|
||||||
# @merge: enables or disables memory merge support
|
# @merge: enables or disables memory merge support
|
||||||
@ -4473,6 +4475,7 @@
|
|||||||
##
|
##
|
||||||
{ 'struct': 'Memdev',
|
{ 'struct': 'Memdev',
|
||||||
'data': {
|
'data': {
|
||||||
|
'*id': 'str',
|
||||||
'size': 'size',
|
'size': 'size',
|
||||||
'merge': 'bool',
|
'merge': 'bool',
|
||||||
'dump': 'bool',
|
'dump': 'bool',
|
||||||
|
@ -62,6 +62,12 @@ Object *user_creatable_add_type(const char *type, const char *id,
|
|||||||
|
|
||||||
assert(qdict);
|
assert(qdict);
|
||||||
obj = object_new(type);
|
obj = object_new(type);
|
||||||
|
if (object_property_find(obj, "id", NULL)) {
|
||||||
|
object_property_set_str(obj, id, "id", &local_err);
|
||||||
|
if (local_err) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
visit_start_struct(v, NULL, NULL, 0, &local_err);
|
visit_start_struct(v, NULL, NULL, 0, &local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
goto out;
|
goto out;
|
||||||
|
Loading…
Reference in New Issue
Block a user