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 | ||||
| host_memory_backend_class_init(ObjectClass *oc, void *data) | ||||
| { | ||||
| @ -377,6 +395,13 @@ host_memory_backend_class_init(ObjectClass *oc, void *data) | ||||
|         HostMemPolicy_lookup, | ||||
|         host_memory_backend_get_policy, | ||||
|         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 = { | ||||
| @ -387,6 +412,7 @@ static const TypeInfo host_memory_backend_info = { | ||||
|     .class_init = host_memory_backend_class_init, | ||||
|     .instance_size = sizeof(HostMemoryBackend), | ||||
|     .instance_init = host_memory_backend_init, | ||||
|     .instance_finalize = host_memory_backend_finalize, | ||||
|     .interfaces = (InterfaceInfo[]) { | ||||
|         { TYPE_USER_CREATABLE }, | ||||
|         { } | ||||
|  | ||||
| @ -3529,6 +3529,7 @@ Example (1): | ||||
|          "policy": "bind" | ||||
|        }, | ||||
|        { | ||||
|          "id": "mem1", | ||||
|          "size": 536870912, | ||||
|          "merge": false, | ||||
|          "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; | ||||
|     Visitor *v; | ||||
|     char *str; | ||||
|     int i = 0; | ||||
| 
 | ||||
| 
 | ||||
|     while (m) { | ||||
|         v = string_output_visitor_new(false, &str); | ||||
|         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, "  merge: %s\n", | ||||
|                        m->value->merge ? "true" : "false"); | ||||
| @ -2100,7 +2098,6 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict) | ||||
|         g_free(str); | ||||
|         visit_free(v); | ||||
|         m = m->next; | ||||
|         i++; | ||||
|     } | ||||
| 
 | ||||
|     monitor_printf(mon, "\n"); | ||||
|  | ||||
| @ -52,6 +52,7 @@ struct HostMemoryBackend { | ||||
|     Object parent; | ||||
| 
 | ||||
|     /* protected */ | ||||
|     char *id; | ||||
|     uint64_t size; | ||||
|     bool merge, dump; | ||||
|     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->id = object_property_get_str(obj, "id", NULL); | ||||
|         m->value->has_id = !!m->value->id; | ||||
| 
 | ||||
|         m->value->size = object_property_get_int(obj, "size", | ||||
|                                                  &error_abort); | ||||
|         m->value->merge = object_property_get_bool(obj, "merge", | ||||
|  | ||||
| @ -4457,6 +4457,8 @@ | ||||
| # | ||||
| # Information about memory backend | ||||
| # | ||||
| # @id: #optional backend's ID if backend has 'id' property (since 2.9) | ||||
| # | ||||
| # @size: memory backend size | ||||
| # | ||||
| # @merge: enables or disables memory merge support | ||||
| @ -4473,6 +4475,7 @@ | ||||
| ## | ||||
| { 'struct': 'Memdev', | ||||
|   'data': { | ||||
|     '*id':        'str', | ||||
|     'size':       'size', | ||||
|     'merge':      'bool', | ||||
|     'dump':       'bool', | ||||
|  | ||||
| @ -62,6 +62,12 @@ Object *user_creatable_add_type(const char *type, const char *id, | ||||
| 
 | ||||
|     assert(qdict); | ||||
|     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); | ||||
|     if (local_err) { | ||||
|         goto out; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Igor Mammedov
						Igor Mammedov