From: Maciek Swiech Date: Fri, 24 May 2013 16:45:20 +0000 (-0500) Subject: Checkpointing fixes X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=cccc6b1a738266ed3d3bd2011b573e7033c012a8;p=palacios.git Checkpointing fixes vmm_checkpoint.c - GUEST_CRO ==> GUEST_CR0 serial.c - Added TX and RX buffer tags - Fixed tag for COMX_IRQ_NUM 8254.c - Added LATCH_VALUE to checkpointing --- diff --git a/palacios/src/devices/8254.c b/palacios/src/devices/8254.c index 8ea7d61..7394224 100644 --- a/palacios/src/devices/8254.c +++ b/palacios/src/devices/8254.c @@ -722,6 +722,10 @@ static int pit_save(struct v3_chkpt_ctx * ctx, void * private_data) { V3_CHKPT_SAVE(ctx, key, c->counter, savefailout); MAKE_KEY("RELOAD_VALUE"); V3_CHKPT_SAVE(ctx, key, c->reload_value, savefailout); + + MAKE_KEY("LATCH_VALUE"); + V3_CHKPT_SAVE(ctx, key, c->latched_value, savefailout); + MAKE_KEY("LATCH_STATE"); V3_CHKPT_SAVE(ctx, key, c->latch_state, savefailout); MAKE_KEY("READ_STATE"); @@ -773,6 +777,10 @@ static int pit_load(struct v3_chkpt_ctx * ctx, void * private_data) { V3_CHKPT_LOAD(ctx, key, c->counter, loadfailout); MAKE_KEY("RELOAD_VALUE"); V3_CHKPT_LOAD(ctx, key, c->reload_value, loadfailout); + + MAKE_KEY("LATCH_VALUE"); + V3_CHKPT_LOAD(ctx, key, c->latched_value, loadfailout); + MAKE_KEY("LATCH_STATE"); V3_CHKPT_LOAD(ctx, key, c->latch_state, loadfailout); MAKE_KEY("READ_STATE"); diff --git a/palacios/src/devices/serial.c b/palacios/src/devices/serial.c index 208bf0e..687b357 100644 --- a/palacios/src/devices/serial.c +++ b/palacios/src/devices/serial.c @@ -865,17 +865,17 @@ static int serial_free(struct serial_state * state) { #include -static int serial_buffer_save(struct v3_chkpt_ctx * ctx, int port, struct serial_buffer *sb) { +static int serial_buffer_save(struct v3_chkpt_ctx * ctx, int port, struct serial_buffer *sb, char * bufname) { char keyname[128]; - snprintf(keyname,128,"COM%d_SB_HEAD", port); + snprintf(keyname,128,"COM%d_%s_HEAD", port, bufname); V3_CHKPT_SAVE(ctx,keyname,sb->head,failout); - snprintf(keyname,128,"COM%d_SB_TAIL", port); + snprintf(keyname,128,"COM%d_%s_TAIL", port, bufname); V3_CHKPT_SAVE(ctx,keyname,sb->tail,failout); - snprintf(keyname,128,"COM%d_SB_FULL", port); + snprintf(keyname,128,"COM%d_%s_FULL", port, bufname); V3_CHKPT_SAVE(ctx,keyname,sb->full,failout); - snprintf(keyname,128,"COM%d_SB_DATA", port); + snprintf(keyname,128,"COM%d_%s_DATA", port, bufname); V3_CHKPT_SAVE(ctx,keyname,sb->buffer,failout); return 0; @@ -886,17 +886,17 @@ static int serial_buffer_save(struct v3_chkpt_ctx * ctx, int port, struct serial } -static int serial_buffer_load(struct v3_chkpt_ctx * ctx, int port, struct serial_buffer *sb) { +static int serial_buffer_load(struct v3_chkpt_ctx * ctx, int port, struct serial_buffer *sb, char * bufname) { char keyname[128]; - snprintf(keyname,128,"COM%d_SB_HEAD", port); + snprintf(keyname,128,"COM%d_%s_HEAD", port, bufname); V3_CHKPT_LOAD(ctx,keyname,sb->head,failout); - snprintf(keyname,128,"COM%d_SB_TAIL", port); + snprintf(keyname,128,"COM%d_%s_TAIL", port, bufname); V3_CHKPT_LOAD(ctx,keyname,sb->tail,failout); - snprintf(keyname,128,"COM%d_SB_FULL", port); + snprintf(keyname,128,"COM%d_%s_FULL", port, bufname); V3_CHKPT_LOAD(ctx,keyname,sb->full,failout); - snprintf(keyname,128,"COM%d_SB_DATA", port); + snprintf(keyname,128,"COM%d_%s_DATA", port, bufname); V3_CHKPT_LOAD(ctx,keyname,sb->buffer,failout); return 0; @@ -939,16 +939,17 @@ static int serial_save(struct v3_chkpt_ctx * ctx, void * private_data) { snprintf(keyname, 128,"COM%d_DLM",i); V3_CHKPT_SAVE(ctx, keyname, serial->dlm.data,failout); - if (serial_buffer_save(ctx, i, &(serial->tx_buffer))) { + if (serial_buffer_save(ctx, i, &(serial->tx_buffer), "TX")) { PrintError(VM_NONE, VCORE_NONE, "Failed to save serial tx buffer %d\n",i); goto failout; } - if (serial_buffer_save(ctx, i, &(serial->rx_buffer))) { + if (serial_buffer_save(ctx, i, &(serial->rx_buffer), "RX")) { PrintError(VM_NONE, VCORE_NONE, "Failed to save serial rx buffer %d\n",i); goto failout; } + snprintf(keyname, 128,"COM%d_IRQ_NUM",i); V3_CHKPT_SAVE(ctx, keyname, serial->irq_number,failout); } @@ -993,16 +994,17 @@ static int serial_load(struct v3_chkpt_ctx * ctx, void * private_data) { snprintf(keyname, 128,"COM%d_DLM",i); V3_CHKPT_LOAD(ctx, keyname, serial->dlm.data,failout); - if (serial_buffer_load(ctx, i, &(serial->tx_buffer))) { + if (serial_buffer_load(ctx, i, &(serial->tx_buffer), "RX")) { 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))) { + if (serial_buffer_load(ctx, i, &(serial->rx_buffer), "TX")) { PrintError(VM_NONE, VCORE_NONE, "Failed to load serial rx buffer %d\n",i); goto failout; } + snprintf(keyname, 128,"COM%d_IRQ_NUM",i); V3_CHKPT_LOAD(ctx, keyname, serial->irq_number,failout); } diff --git a/palacios/src/palacios/vmm_checkpoint.c b/palacios/src/palacios/vmm_checkpoint.c index db9f42f..a4c593a 100644 --- a/palacios/src/palacios/vmm_checkpoint.c +++ b/palacios/src/palacios/vmm_checkpoint.c @@ -748,7 +748,7 @@ static int load_core(struct guest_info * info, struct v3_chkpt * chkpt, v3_chkpt // Some components of guest state captured in the shadow pager V3_CHKPT_LOAD(ctx, "GUEST_CR3", info->shdw_pg_state.guest_cr3, loadfailout); - V3_CHKPT_LOAD(ctx, "GUEST_CRO", info->shdw_pg_state.guest_cr0, loadfailout); + V3_CHKPT_LOAD(ctx, "GUEST_CR0", info->shdw_pg_state.guest_cr0, loadfailout); V3_CHKPT_LOAD(ctx, "GUEST_EFER", info->shdw_pg_state.guest_efer, loadfailout); v3_chkpt_close_ctx(ctx); ctx=0; @@ -929,7 +929,7 @@ static int save_core(struct guest_info * info, struct v3_chkpt * chkpt, v3_chkpt // Some components of guest state captured in the shadow pager V3_CHKPT_SAVE(ctx, "GUEST_CR3", info->shdw_pg_state.guest_cr3, savefailout); - V3_CHKPT_SAVE(ctx, "GUEST_CRO", info->shdw_pg_state.guest_cr0, savefailout); + V3_CHKPT_SAVE(ctx, "GUEST_CR0", info->shdw_pg_state.guest_cr0, savefailout); V3_CHKPT_SAVE(ctx, "GUEST_EFER", info->shdw_pg_state.guest_efer, savefailout); v3_chkpt_close_ctx(ctx); ctx=0;