From ec245e2111ec59cd04e2510a183e43dee3fb85ce Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Thu, 20 Aug 2009 19:42:29 +0200 Subject: Add VMState support for structs This patch adds support for saving one VMStateDescription from other VMStateDescription. Signed-off-by: Juan Quintela Signed-off-by: Anthony Liguori --- savevm.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'savevm.c') diff --git a/savevm.c b/savevm.c index 7bcb783..71ec4ca 100644 --- a/savevm.c +++ b/savevm.c @@ -983,7 +983,13 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, } for (i = 0; i < n_elems; i++) { void *addr = base_addr + field->size * i; - ret = field->info->get(f, addr, field->size); + + if (field->flags & VMS_STRUCT) { + ret = vmstate_load_state(f, field->vmsd, addr, version_id); + } else { + ret = field->info->get(f, addr, field->size); + + } if (ret < 0) { return ret; } @@ -1011,7 +1017,12 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, } for (i = 0; i < n_elems; i++) { const void *addr = base_addr + field->size * i; - field->info->put(f, addr, field->size); + + if (field->flags & VMS_STRUCT) { + vmstate_save_state(f, field->vmsd, addr); + } else { + field->info->put(f, addr, field->size); + } } field++; } -- cgit v1.1