Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Checkpointing fixes
Maciek Swiech [Fri, 24 May 2013 16:45:20 +0000 (11:45 -0500)]
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

palacios/src/devices/8254.c
palacios/src/devices/serial.c
palacios/src/palacios/vmm_checkpoint.c

index 8ea7d61..7394224 100644 (file)
@@ -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");
index 208bf0e..687b357 100644 (file)
@@ -865,17 +865,17 @@ static int serial_free(struct serial_state * state) {
 
 #include <palacios/vmm_sprintf.h>
 
-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);
   }
 
index db9f42f..a4c593a 100644 (file)
@@ -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;