snprintf(keyname, 128,"COM%d_int_state",i);
V3_CHKPT_LOAD(ctx, keyname, serial->int_state,failout);
- if (serial_buffer_load(ctx, i, &(serial->tx_buffer), "RX")) {
+ if (serial_buffer_load(ctx, i, &(serial->tx_buffer), "TX")) {
PrintError(VM_NONE, VCORE_NONE, "Failed to load serial tx buffer %d\n",i);
goto failout;
}
- if (serial_buffer_load(ctx, i, &(serial->rx_buffer), "TX")) {
+ if (serial_buffer_load(ctx, i, &(serial->rx_buffer), "RX")) {
PrintError(VM_NONE, VCORE_NONE, "Failed to load serial rx buffer %d\n",i);
goto failout;
}
void * guest_mem_base = NULL;
void * ctx = NULL;
uint64_t ret = 0;
+ uint64_t saved_mem_block_size;
+ uint32_t saved_num_base_regions;
+ char buf[128];
int i;
extern uint64_t v3_mem_block_size;
return -1;
}
+ if (V3_CHKPT_LOAD(ctx, "region_size",saved_mem_block_size)) {
+ PrintError(vm, VCORE_NONE, "Unable to load memory region size\n");
+ return -1;
+ }
+
+ if (V3_CHKPT_LOAD(ctx, "num_regions",saved_num_base_regions)) {
+ PrintError(vm, VCORE_NONE, "Unable to load number of regions\n");
+ return -1;
+ }
+
+ if (saved_mem_block_size != v3_mem_block_size) {
+ PrintError(vm, VCORE_NONE, "Unable to load as memory block size differs\n");
+ return -1;
+ } // support will eventually be added for this
+
+ if (saved_num_base_regions != vm->mem_map.num_base_regions) {
+ PrintError(vm, VCORE_NONE, "Unable to laod as number of base regions differs\n");
+ return -1;
+ } // support will eventually be added for this
for (i=0;i<vm->mem_map.num_base_regions;i++) {
guest_mem_base = V3_VAddr((void *)vm->mem_map.base_regions[i].host_addr);
- if (v3_chkpt_load(ctx, "memory_img", v3_mem_block_size, guest_mem_base)) {
+ sprintf(buf,"memory_img%d",i);
+ if (v3_chkpt_load(ctx, buf, v3_mem_block_size, guest_mem_base)) {
PrintError(vm, VCORE_NONE, "Unable to load all of memory (region %d) (requested=%llu bytes, result=%llu bytes\n",i,(uint64_t)(vm->mem_size),ret);
v3_chkpt_close_ctx(ctx);
return -1;
static int save_memory(struct v3_vm_info * vm, struct v3_chkpt * chkpt) {
void * guest_mem_base = NULL;
void * ctx = NULL;
+ char buf[128]; // region name
uint64_t ret = 0;
extern uint64_t v3_mem_block_size;
int i;
return -1;
}
+ if (V3_CHKPT_SAVE(ctx, "region_size",v3_mem_block_size)) {
+ PrintError(vm, VCORE_NONE, "Unable to save memory region size\n");
+ return -1;
+ }
+
+ if (V3_CHKPT_SAVE(ctx, "num_regions",vm->mem_map.num_base_regions)) {
+ PrintError(vm, VCORE_NONE, "Unable to save number of regions\n");
+ return -1;
+ }
+
for (i=0;i<vm->mem_map.num_base_regions;i++) {
guest_mem_base = V3_VAddr((void *)vm->mem_map.base_regions[i].host_addr);
- if (v3_chkpt_save(ctx, "memory_img", v3_mem_block_size, guest_mem_base)) {
+ sprintf(buf,"memory_img%d",i);
+ if (v3_chkpt_save(ctx, buf, v3_mem_block_size, guest_mem_base)) {
PrintError(vm, VCORE_NONE, "Unable to save all of memory (region %d) (requested=%llu, received=%llu)\n",i,(uint64_t)(vm->mem_size),ret);
v3_chkpt_close_ctx(ctx);
return -1;