x86: Handle buggy user_contexts (XCC)
[akaros.git] / kern / arch / x86 / ros / trapframe64.h
index 7848e29..b16c6d1 100644 (file)
@@ -55,6 +55,8 @@ struct sw_trapframe {
        uint16_t tf_padding0;           /* used for partial contexts */
 };
 
+#define MXCSR_RSVD_0   0xffff  // These 0s must be 0, mxcsr &= this
+
 /* The context is both what we want to run and its current state.  For VMs, that
  * includes status bits from the VMCS for reflected vmexits/hypercalls.  This is
  * not particularly different than how hardware contexts contain info on
@@ -63,10 +65,15 @@ struct sw_trapframe {
  * The VM context also consists of a mountain of state in the VMCS, referenced
  * only in here by guest pcoreid.  Those bits are set once by Akaros to sensible
  * defaults and then are changed during execution of the VM.  The parts of that
- * state that are exposed to the user-VMM are the contents of the trapframe. */
+ * state that are exposed to the user-VMM are the contents of the trapframe.
+ *
+ * Before adding any new flags, consider whether or not they need to be checked
+ * in proc_secure_vmtf(). */
 
 #define VMCTX_FL_PARTIAL               (1 << 0)
 #define VMCTX_FL_HAS_FAULT             (1 << 1)
+#define VMCTX_FL_VMRESUME              (1 << 2)
+#define VMCTX_FL_EPT_VMR_BACKED        (1 << 3)
 
 struct vm_trapframe {
        /* Actual processor state */
@@ -94,7 +101,8 @@ struct vm_trapframe {
        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;