KVM: SVM: Software reserved fields
[linux-2.6-microblaze.git] / arch / x86 / kvm / svm / svm.h
index a514b49..af09bcd 100644 (file)
 extern u32 msrpm_offsets[MSRPM_OFFSETS] __read_mostly;
 extern bool npt_enabled;
 
+/*
+ * Clean bits in VMCB.
+ * VMCB_ALL_CLEAN_MASK might also need to
+ * be updated if this enum is modified.
+ */
 enum {
        VMCB_INTERCEPTS, /* Intercept vectors, TSC offset,
                            pause filter count */
@@ -48,9 +53,17 @@ enum {
                          * AVIC PHYSICAL_TABLE pointer,
                          * AVIC LOGICAL_TABLE pointer
                          */
-       VMCB_DIRTY_MAX,
+       VMCB_SW = 31,    /* Reserved for hypervisor/software use */
 };
 
+#define VMCB_ALL_CLEAN_MASK (                                  \
+       (1U << VMCB_INTERCEPTS) | (1U << VMCB_PERM_MAP) |       \
+       (1U << VMCB_ASID) | (1U << VMCB_INTR) |                 \
+       (1U << VMCB_NPT) | (1U << VMCB_CR) | (1U << VMCB_DR) |  \
+       (1U << VMCB_DT) | (1U << VMCB_SEG) | (1U << VMCB_CR2) | \
+       (1U << VMCB_LBR) | (1U << VMCB_AVIC) |                  \
+       (1U << VMCB_SW))
+
 /* TPR and CR2 are always written before VMRUN */
 #define VMCB_ALWAYS_DIRTY_MASK ((1U << VMCB_INTR) | (1U << VMCB_CR2))
 
@@ -237,7 +250,7 @@ static inline void vmcb_mark_all_dirty(struct vmcb *vmcb)
 
 static inline void vmcb_mark_all_clean(struct vmcb *vmcb)
 {
-       vmcb->control.clean = ((1 << VMCB_DIRTY_MAX) - 1)
+       vmcb->control.clean = VMCB_ALL_CLEAN_MASK
                               & ~VMCB_ALWAYS_DIRTY_MASK;
 }