nestedhvm: initialize pfec for l1 pagetable walk
PATCH 1/1 nestedhvm: initialize pfec for l1 pagetable walk
Initialize pfec for l1 pagetable walk.
Signed-off-by Christoph Egger <[email protected]>
CC Tim Deegan <[email protected]>
Signature · 6 lines
---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85689 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632
xen/arch/x86/hvm/hvm.c +2 -1
@@ -1278,7 +1278,8 @@ int hvm_hap_nested_page_fault(unsigned l* into l1 guest if not fixable. The algorithm is * the same as for shadow paging. */ - rv =nestedhvm_hap_nested_page_fault (v, gpa); + rv =nestedhvm_hap_nested_page_fault (v, gpa, + access_r, access_w, access_x);switch (rv) {case NESTEDHVM_PAGEFAULT_DONE :return 1 ;
xen/arch/x86/mm/hap/nested_hap.c +12 -3
@@ -177,13 +177,20 @@ out:*/ static int nestedhap_walk_L1_p2m (struct vcpu *v,paddr_t L2_gpa,paddr_t *L1_gpa, -unsigned int *page_order) +unsigned int *page_order, +bool_t access_r,bool_t access_w,bool_t access_x) {uint32_t pfec;unsigned long nested_cr3, gfn; nested_cr3 =nhvm_vcpu_hostcr3 (v); + pfec = PFEC_user_mode | PFEC_page_present; +if (access_w) + pfec |= PFEC_write_access; +if (access_x) + pfec |= PFEC_insn_fetch; +/* Walk the guest-supplied NPT table, just as if it were a pagetable */ gfn =paging_ga_to_gfn_cr3 (v, nested_cr3, L2_gpa, &pfec, page_order);
@@ -200,7 +207,8 @@ nestedhap_walk_L1_p2m(struct vcpu *v, pa* Returns: */ int -nestedhvm_hap_nested_page_fault (struct vcpu *v,paddr_t L2_gpa) +nestedhvm_hap_nested_page_fault (struct vcpu *v,paddr_t L2_gpa, +bool_t access_r,bool_t access_w,bool_t access_x) {int rv;paddr_t L1_gpa, L0_gpa;
@@ -212,7 +220,8 @@ nestedhvm_hap_nested_page_fault(struct v nested_p2m =p2m_get_nestedp2m (v,nhvm_vcpu_hostcr3 (v));/* walk the L1 P2M table */ - rv =nestedhap_walk_L1_p2m (v, L2_gpa, &L1_gpa, &page_order_21); + rv =nestedhap_walk_L1_p2m (v, L2_gpa, &L1_gpa, &page_order_21, + access_r, access_w, access_x);/* let caller to handle these two cases */ switch (rv) {
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel
Bah. Last one missed the diff of the header file. Resent.
Quoted 7 lines · Christoph Egger
Initialize pfec for l1 pagetable walk.
Signed-off-by Christoph Egger <[email protected]>CC Tim Deegan <[email protected]>
Signature · 6 lines
---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85689 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632
xen/arch/x86/hvm/hvm.c +2 -1
@@ -1278,7 +1278,8 @@ int hvm_hap_nested_page_fault(unsigned l* into l1 guest if not fixable. The algorithm is * the same as for shadow paging. */ - rv =nestedhvm_hap_nested_page_fault (v, gpa); + rv =nestedhvm_hap_nested_page_fault (v, gpa, + access_r, access_w, access_x);switch (rv) {case NESTEDHVM_PAGEFAULT_DONE :return 1 ;
xen/arch/x86/mm/hap/nested_hap.c +12 -3
@@ -177,13 +177,20 @@ out:*/ static int nestedhap_walk_L1_p2m (struct vcpu *v,paddr_t L2_gpa,paddr_t *L1_gpa, -unsigned int *page_order) +unsigned int *page_order, +bool_t access_r,bool_t access_w,bool_t access_x) {uint32_t pfec;unsigned long nested_cr3, gfn; nested_cr3 =nhvm_vcpu_hostcr3 (v); + pfec = PFEC_user_mode | PFEC_page_present; +if (access_w) + pfec |= PFEC_write_access; +if (access_x) + pfec |= PFEC_insn_fetch; +/* Walk the guest-supplied NPT table, just as if it were a pagetable */ gfn =paging_ga_to_gfn_cr3 (v, nested_cr3, L2_gpa, &pfec, page_order);
@@ -200,7 +207,8 @@ nestedhap_walk_L1_p2m(struct vcpu *v, pa* Returns: */ int -nestedhvm_hap_nested_page_fault (struct vcpu *v,paddr_t L2_gpa) +nestedhvm_hap_nested_page_fault (struct vcpu *v,paddr_t L2_gpa, +bool_t access_r,bool_t access_w,bool_t access_x) {int rv;paddr_t L1_gpa, L0_gpa;
@@ -212,7 +220,8 @@ nestedhvm_hap_nested_page_fault(struct v nested_p2m =p2m_get_nestedp2m (v,nhvm_vcpu_hostcr3 (v));/* walk the L1 P2M table */ - rv =nestedhap_walk_L1_p2m (v, L2_gpa, &L1_gpa, &page_order_21); + rv =nestedhap_walk_L1_p2m (v, L2_gpa, &L1_gpa, &page_order_21, + access_r, access_w, access_x);/* let caller to handle these two cases */ switch (rv) {
xen/include/asm-x86/hvm/nestedhvm.h +2 -1
@@ -51,7 +51,8 @@ bool_t nestedhvm_vcpu_in_guestmode(struc#define NESTEDHVM_PAGEFAULT_INJECT 1#define NESTEDHVM_PAGEFAULT_ERROR 2#define NESTEDHVM_PAGEFAULT_MMIO 3 -int nestedhvm_hap_nested_page_fault (struct vcpu *v,paddr_t L2_gpa); +int nestedhvm_hap_nested_page_fault (struct vcpu *v,paddr_t L2_gpa, +bool_t access_r,bool_t access_w,bool_t access_x);/* IO permission map */ unsigned long *nestedhvm_vcpu_iomap_get (bool_t ioport_80,bool_t ioport_ed);
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel
Tim Deegan
AppliedQuoted 4 lines · Christoph Egger
Quoted 4 lines
Initialize pfec for l1 pagetable walk.
Signed-off-by Christoph Egger <[email protected]>
Applied, thanks.
Tim.