<...>
> +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?