qga: implement qmp_guest_set_memory_blocks() for Linux with sysfs

We can change guest's online/offline state of memory blocks, by using
command 'guest-set-memory-blocks'.

Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
zhanghailiang 2015-01-22 10:40:04 +08:00 committed by Michael Roth
parent bd240fca42
commit 32ca7927c7
1 changed files with 29 additions and 1 deletions

View File

@ -2232,7 +2232,35 @@ GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp)
GuestMemoryBlockResponseList * GuestMemoryBlockResponseList *
qmp_guest_set_memory_blocks(GuestMemoryBlockList *mem_blks, Error **errp) qmp_guest_set_memory_blocks(GuestMemoryBlockList *mem_blks, Error **errp)
{ {
error_set(errp, QERR_UNSUPPORTED); GuestMemoryBlockResponseList *head, **link;
Error *local_err = NULL;
head = NULL;
link = &head;
while (mem_blks != NULL) {
GuestMemoryBlockResponse *result;
GuestMemoryBlockResponseList *entry;
GuestMemoryBlock *current_mem_blk = mem_blks->value;
result = g_malloc0(sizeof(*result));
result->phys_index = current_mem_blk->phys_index;
transfer_memory_block(current_mem_blk, false, result, &local_err);
if (local_err) { /* should never happen */
goto err;
}
entry = g_malloc0(sizeof *entry);
entry->value = result;
*link = entry;
link = &entry->next;
mem_blks = mem_blks->next;
}
return head;
err:
qapi_free_GuestMemoryBlockResponseList(head);
error_propagate(errp, local_err);
return NULL; return NULL;
} }