Skip to content

Commit

Permalink
kvmvapic: fix migration when VM paused and when not running Windows
Browse files Browse the repository at this point in the history
This patch fixes migration by extending do_vapic_enable function. This function
called vapic_enable which read cpu number from the guest memory. When cpu
number could not be read, vapic was not enabled while loading the VM state.
This patch adds required code for cpu_number=0 to do_vapic_enable function,
because it is called only when cpu_number=0.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
Dovgalyuk authored and bonzini committed Sep 26, 2014
1 parent a30cf87 commit 5a6e8ba
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions hw/i386/kvmvapic.c
Expand Up @@ -732,7 +732,11 @@ static void do_vapic_enable(void *data)
VAPICROMState *s = data;
X86CPU *cpu = X86_CPU(first_cpu);

vapic_enable(s, cpu);
static const uint8_t enabled = 1;
cpu_physical_memory_write(s->vapic_paddr + offsetof(VAPICState, enabled),
&enabled, sizeof(enabled));
apic_enable_vapic(cpu->apic_state, s->vapic_paddr);
s->state = VAPIC_ACTIVE;
}

static void kvmvapic_vm_state_change(void *opaque, int running,
Expand Down Expand Up @@ -777,7 +781,10 @@ static int vapic_post_load(void *opaque, int version_id)
}
}

s->vmsentry = qemu_add_vm_change_state_handler(kvmvapic_vm_state_change, s);
if (!s->vmsentry) {
s->vmsentry =
qemu_add_vm_change_state_handler(kvmvapic_vm_state_change, s);
}
return 0;
}

Expand Down

0 comments on commit 5a6e8ba

Please sign in to comment.