VMM: Add the GUEST_INTR_STATUS to the VM TF (XCC) We need this to halt properly. I squeezed the u16 into the existing padding both to save space as well as to keep people from needing to do full rebuilds. Reinstall your kernel headers. Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/kern/arch/x86/ros/trapframe64.h b/kern/arch/x86/ros/trapframe64.h index 7848e29..fcbc97b 100644 --- a/kern/arch/x86/ros/trapframe64.h +++ b/kern/arch/x86/ros/trapframe64.h
@@ -94,7 +94,8 @@ uint32_t tf_guest_pcoreid; uint32_t tf_flags; uint32_t tf_trap_inject; - uint32_t tf_padding0; + uint16_t tf_guest_intr_status; + uint16_t tf_padding0; uint32_t tf_exit_reason; uint32_t tf_exit_qual; uint32_t tf_intrinfo1;
diff --git a/kern/arch/x86/trap.c b/kern/arch/x86/trap.c index 9ebe5a6..e23b9b0 100644 --- a/kern/arch/x86/trap.c +++ b/kern/arch/x86/trap.c
@@ -894,6 +894,7 @@ tf->tf_cr3 = vmcs_read(GUEST_CR3); tf->tf_guest_pcoreid = pcpui->guest_pcoreid; tf->tf_flags |= VMCTX_FL_PARTIAL; + tf->tf_guest_intr_status = vmcs_read(GUEST_INTR_STATUS); tf->tf_exit_reason = vmcs_read(VM_EXIT_REASON); tf->tf_exit_qual = vmcs_read(EXIT_QUALIFICATION); tf->tf_intrinfo1 = vmcs_read(GUEST_INTERRUPTIBILITY_INFO);
diff --git a/kern/arch/x86/trap64.c b/kern/arch/x86/trap64.c index 9d51285..5370788 100644 --- a/kern/arch/x86/trap64.c +++ b/kern/arch/x86/trap64.c
@@ -138,6 +138,7 @@ printk("ExitQl 0x%08x\n", vm_tf->tf_exit_qual); printk("Intr1 0x%016lx\n", vm_tf->tf_intrinfo1); printk("Intr2 0x%016lx\n", vm_tf->tf_intrinfo2); + printk("GIntr 0x----%04x\n", vm_tf->tf_guest_intr_status); printk("GVA 0x%016lx\n", vm_tf->tf_guest_va); printk("GPA 0x%016lx\n", vm_tf->tf_guest_pa); spin_unlock_irqsave(&ptf_lock);
diff --git a/user/parlib/x86/vcore.c b/user/parlib/x86/vcore.c index 3f7b6c8..3be41ae 100644 --- a/user/parlib/x86/vcore.c +++ b/user/parlib/x86/vcore.c
@@ -377,6 +377,7 @@ printf("ExitQl 0x%08x\n", vm_tf->tf_exit_qual); printf("Intr1 0x%016lx\n", vm_tf->tf_intrinfo1); printf("Intr2 0x%016lx\n", vm_tf->tf_intrinfo2); + printf("GIntr 0x----%04x\n", vm_tf->tf_guest_intr_status); printf("GVA 0x%016lx\n", vm_tf->tf_guest_va); printf("GPA 0x%016lx\n", vm_tf->tf_guest_pa); }