<...> > +static void func(gpointer data, gpointer user_data)
maybe a better name. > +{ > + HostMemoryBackendRam *backend = data; > + MemdevList **list = user_data; > + MemdevList *m; > + uint16List **node; > + unsigned long value; > + > + m = g_malloc0(sizeof(*m)); > + m->value = g_malloc0(sizeof(*m->value)); > + m->value->policy = g_strdup(policies[backend->policy]); > + m->value->relative = backend->relative; > + > + node = &m->value->host_nodes; > + > + value = find_first_bit(backend->host_nodes, MAX_NODES); > + if (value < MAX_NODES) { > + *node = g_malloc0(sizeof(**node)); > + (*node)->value = value; > + node = &(*node)->next; > + > + do { > + value = find_next_bit(backend->host_nodes, MAX_NODES, value + 1); > + if (value == MAX_NODES) { > + break; > + } > + > + *node = g_malloc0(sizeof(**node)); > + (*node)->value = value; > + node = &(*node)->next; > + } while (true); > + } It is useful to query also the size property. But it's a member of parent class(HostMemoryBackend). I'm not sure what is the common solution, but maybe we can add size to Memdev(see below) and fill it with HostMemoryBackend::size? > + > + m->next = *list; > + *list = m; > +} > + <...> > + > +## > +# @Memdev: > +# > +# Information of memory device > +# > +# @id: memory device id > +# > +# @host-nodes: host nodes for its memory policy > +# > +# @policy: memory policy of memory device > +# > +# Since: 2.0 > +## > + > +{ 'type': 'Memdev', > + 'data': { > + 'host-nodes': ['uint16'], > + 'policy': 'str', > + 'relative': 'bool' }} add size to qeury HostMemoryBackend::size?