From: Jack Lange <jarusl@cs.northwestern.edu>
Date: Tue, 3 Nov 2009 20:53:04 +0000 (-0600)
Subject: moved atomic interrupt handling past state save
X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=9a2cb919a10e02ddaa418560854ef72c2081070d;p=palacios.git

moved atomic interrupt handling past state save
---

diff --git a/palacios/src/palacios/svm.c b/palacios/src/palacios/svm.c
index a72f596..ba7f5b3 100644
--- a/palacios/src/palacios/svm.c
+++ b/palacios/src/palacios/svm.c
@@ -338,8 +338,6 @@ static int update_irq_state(struct guest_info * info) {
 	
 	guest_ctrl->EVENTINJ.valid = 1;
 
-
-
 #ifdef CONFIG_DEBUG_INTERRUPTS
 	PrintDebug("<%d> Injecting Exception %d (CR2=%p) (EIP=%p)\n", 
 		   (int)info->num_exits, 
@@ -349,8 +347,6 @@ static int update_irq_state(struct guest_info * info) {
 #endif
 
 	v3_injecting_excp(info, excp);
-
-
     } else if (info->intr_state.irq_started == 1) {
 #ifdef CONFIG_DEBUG_INTERRUPTS
 	PrintDebug("IRQ pending from previous injection\n");
@@ -470,13 +466,6 @@ int v3_svm_enter(struct guest_info * info) {
 
     v3_update_time(info, tmp_tsc - info->time_state.cached_host_tsc);
 
-#ifdef CONFIG_SYMBIOTIC
-    if (info->sym_state.sym_call_active == 0) {
-	update_irq_state_atomic(info);
-    }
-#else 
-    update_irq_state_atomic(info);
-#endif
 
     // Save Guest state from VMCB
     info->rip = guest_state->rip;
@@ -507,6 +496,15 @@ int v3_svm_enter(struct guest_info * info) {
     exit_info2 = guest_ctrl->exit_info2;
 
 
+#ifdef CONFIG_SYMBIOTIC
+    if (info->sym_state.sym_call_active == 0) {
+	update_irq_state_atomic(info);
+    }
+#else
+    update_irq_state_atomic(info);
+#endif
+
+
     // reenable global interrupts after vm exit
     v3_stgi();