From: Madhav Suresh Date: Fri, 18 May 2012 17:17:33 +0000 (-0500) Subject: Corrected write ordering in device manager state save to conform with stream requirements X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=dd60e1fd40cdf258bd988239c5dcda8861a5bbb5;p=palacios.releases.git Corrected write ordering in device manager state save to conform with stream requirements --- diff --git a/palacios/src/palacios/vmm_dev_mgr.c b/palacios/src/palacios/vmm_dev_mgr.c index a9e2af9..6cd685a 100644 --- a/palacios/src/palacios/vmm_dev_mgr.c +++ b/palacios/src/palacios/vmm_dev_mgr.c @@ -150,7 +150,17 @@ int v3_save_vm_devices(struct v3_vm_info * vm, struct v3_chkpt * chkpt) { dev_mgr_ctx = v3_chkpt_open_ctx(chkpt, NULL, "devices"); list_for_each_entry(dev, &(mgr->dev_list), dev_link) { + if (dev->ops->save) { + strncpy(name_table + tbl_offset, dev->name, 32); + tbl_offset += 32; + num_saved_devs++; + } + } + + v3_chkpt_save(dev_mgr_ctx, "num_devs", 4, &num_saved_devs); + v3_chkpt_save(dev_mgr_ctx, "names", table_len, name_table); + list_for_each_entry(dev, &(mgr->dev_list), dev_link) { if (dev->ops->save) { struct v3_chkpt_ctx * dev_ctx = NULL; @@ -163,10 +173,6 @@ int v3_save_vm_devices(struct v3_vm_info * vm, struct v3_chkpt * chkpt) { v3_chkpt_close_ctx(dev_ctx); // Error checking?? - - strncpy(name_table + tbl_offset, dev->name, 32); - tbl_offset += 32; - num_saved_devs++; } else { PrintError("Error: %s save() not implemented\n", dev->name); } @@ -174,8 +180,6 @@ int v3_save_vm_devices(struct v3_vm_info * vm, struct v3_chkpt * chkpt) { // Specify which devices were saved - v3_chkpt_save(dev_mgr_ctx, "num_devs", 4, &num_saved_devs); - v3_chkpt_save(dev_mgr_ctx, "names", table_len, name_table); V3_Free(name_table); v3_chkpt_close_ctx(dev_mgr_ctx);