]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/xen.git/commitdiff
x86/mm: add information about faulted page's presence to npfec structure
authorBoris Ostrovsky <boris.ostrovsky@oracle.com>
Mon, 21 Dec 2015 12:38:53 +0000 (13:38 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 21 Dec 2015 12:38:53 +0000 (13:38 +0100)
This is provided explicitly in SVM and implicitly in VMX (when neither of
the three EPT_EFFECTIVE_* bits is set).

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Kevin Tian <kevin.tian@intel.com>
xen/arch/x86/hvm/svm/svm.c
xen/arch/x86/hvm/vmx/vmx.c
xen/include/xen/mm.h

index 0078100dd6e8786ea63234b8b3fbd6e2ef585316..a66d8544805dde6910d47eb6d02f79ece13eff11 100644 (file)
@@ -1491,7 +1491,8 @@ static void svm_do_nested_pgfault(struct vcpu *v,
     struct npfec npfec = {
         .read_access = !(pfec & PFEC_insn_fetch),
         .write_access = !!(pfec & PFEC_write_access),
-        .insn_fetch = !!(pfec & PFEC_insn_fetch)
+        .insn_fetch = !!(pfec & PFEC_insn_fetch),
+        .present = !!(pfec & PFEC_page_present),
     };
 
     /* These bits are mutually exclusive */
index bda94a9d4eb64032351aba7860e9266f8a750b76..b918b8a903dc5eef1bda4a7fe07ffa552054e77b 100644 (file)
@@ -2738,7 +2738,10 @@ static void ept_handle_violation(unsigned long qualification, paddr_t gpa)
         .read_access = !!(qualification & EPT_READ_VIOLATION) ||
                        !!(qualification & EPT_WRITE_VIOLATION),
         .write_access = !!(qualification & EPT_WRITE_VIOLATION),
-        .insn_fetch = !!(qualification & EPT_EXEC_VIOLATION)
+        .insn_fetch = !!(qualification & EPT_EXEC_VIOLATION),
+        .present = !!(qualification & (EPT_EFFECTIVE_READ |
+                                       EPT_EFFECTIVE_WRITE |
+                                       EPT_EFFECTIVE_EXEC))
     };
 
     if ( tb_init_done )
index 5d4b64b6d067c7bd79d17616c2db46dac75a6d9f..a795dd6001eff7c5dd942bbaf153e3efa5202318 100644 (file)
@@ -159,6 +159,7 @@ struct npfec {
     unsigned int read_access:1;
     unsigned int write_access:1;
     unsigned int insn_fetch:1;
+    unsigned int present:1;
     unsigned int gla_valid:1;
     unsigned int kind:2;  /* npfec_kind_t */
 };