From e860f70194b54346cb0df03301126a86ddd4b000 Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Thu, 14 Aug 2008 19:31:27 +0300 Subject: [PATCH] kvm: bios: detect vapic calls to uninitialized vapic when resuming from hibernation, the saved image will contain calls to the vapic even though the vapic was never enabled on this run. add hooks so qemu can detect this condition. Signed-off-by: Avi Kivity --- kvm/bios/vapic.S | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/kvm/bios/vapic.S b/kvm/bios/vapic.S index 3c8e4d2bd6..0c7ca844f9 100644 --- a/kvm/bios/vapic.S +++ b/kvm/bios/vapic.S @@ -11,6 +11,10 @@ vapic_size = 2*4096 .popsection .endm +.macro reenable_vtpr + out %al, $0x7e +.endm + vapic_base: .ascii "kvm aPiC" @@ -61,6 +65,7 @@ tr_vcpu_signature = 0xdb mp_get_tpr_eax: pushf cli + reenable_vtpr push %ecx str %eax @@ -135,6 +140,7 @@ mp_set_tpr: push %edx push %ebx cli + reenable_vtpr mp_set_tpr_failed: str %eax @@ -188,34 +194,42 @@ mp_set_tpr_bad: jmp mp_set_tpr_out up_get_tpr_eax: + reenable_vtpr movzbl vapic, %eax ; fixup ret up_get_tpr_ebx: + reenable_vtpr movzbl vapic, %ebx ; fixup ret up_get_tpr_ecx: + reenable_vtpr movzbl vapic, %ecx ; fixup ret up_get_tpr_edx: + reenable_vtpr movzbl vapic, %edx ; fixup ret up_get_tpr_esi: + reenable_vtpr movzbl vapic, %esi ; fixup ret up_get_tpr_edi: + reenable_vtpr movzbl vapic, %edi ; fixup ret up_get_tpr_ebp: + reenable_vtpr movzbl vapic, %ebp ; fixup ret up_get_tpr_stack: + reenable_vtpr movzbl vapic, %eax ; fixup xchg %eax, 4(%esp) ret @@ -230,6 +244,7 @@ up_set_tpr: push %eax push %ecx push %ebx + reenable_vtpr up_set_tpr_failed: mov vapic, %eax ; fixup -- 2.11.4.GIT