From: Jack Lange 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?p=palacios.git;a=commitdiff_plain;h=9a2cb919a10e02ddaa418560854ef72c2081070d 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();