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);
 }