diff options
author | Avi Kivity <avi@qumranet.com> | 2007-12-09 16:52:56 +0200 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-01-30 17:53:20 +0200 |
commit | bedbe4ee86195dcd899577828714cc1413beb571 (patch) | |
tree | 3dfd5ae82837d4dacdabd8efd8a498cb5c4bcb9b /drivers | |
parent | 8d87a03aea43535a92efbb180e0ceac94d4bb5db (diff) |
KVM: MMU: Move pte access calculation into a helper function
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/kvm/paging_tmpl.h | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/kvm/paging_tmpl.h b/drivers/kvm/paging_tmpl.h index 59ba752a6880..1fc4f9b321ee 100644 --- a/drivers/kvm/paging_tmpl.h +++ b/drivers/kvm/paging_tmpl.h @@ -102,6 +102,18 @@ static bool FNAME(cmpxchg_gpte)(struct kvm *kvm, return (ret != orig_pte); } +static unsigned FNAME(gpte_access)(struct kvm_vcpu *vcpu, pt_element_t gpte) +{ + unsigned access; + + access = (gpte & (PT_WRITABLE_MASK | PT_USER_MASK)) | ACC_EXEC_MASK; +#if PTTYPE == 64 + if (is_nx(vcpu)) + access &= ~(gpte >> PT64_NX_SHIFT); +#endif + return access; +} + /* * Fetch a guest pte for a guest virtual address */ @@ -166,13 +178,7 @@ walk: pte |= PT_ACCESSED_MASK; } - pte_access = pte & (PT_WRITABLE_MASK | PT_USER_MASK); - pte_access |= ACC_EXEC_MASK; -#if PTTYPE == 64 - if (is_nx(vcpu)) - pte_access &= ~(pte >> PT64_NX_SHIFT); -#endif - pte_access &= pt_access; + pte_access = pt_access & FNAME(gpte_access)(vcpu, pte); if (walker->level == PT_PAGE_TABLE_LEVEL) { walker->gfn = gpte_to_gfn(pte); |