diff options
author | Izik Eidus <izike@qumranet.com> | 2007-11-20 12:02:12 +0200 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-01-30 17:53:10 +0200 |
commit | b238f7bc2dd5e0e8ecbd28863d6d03e490c652ce (patch) | |
tree | 3023d72504412f6e82243af736ccbed695e8a2fb /drivers/kvm/paging_tmpl.h | |
parent | d835dfecd00fd770288dcd9a46c0e0966d526fdf (diff) |
KVM: MMU: Code cleanup
Signed-off-by: Izik Eidus <izike@qumranet.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'drivers/kvm/paging_tmpl.h')
-rw-r--r-- | drivers/kvm/paging_tmpl.h | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/kvm/paging_tmpl.h b/drivers/kvm/paging_tmpl.h index 92b93134a2a..6e013015f0a 100644 --- a/drivers/kvm/paging_tmpl.h +++ b/drivers/kvm/paging_tmpl.h @@ -187,6 +187,7 @@ static void FNAME(set_pte_common)(struct kvm_vcpu *vcpu, int dirty = gpte & PT_DIRTY_MASK; u64 spte; int was_rmapped = is_rmap_pte(*shadow_pte); + struct page *page; pgprintk("%s: spte %llx gpte %llx access %llx write_fault %d" " user_fault %d gfn %lx\n", @@ -205,6 +206,12 @@ static void FNAME(set_pte_common)(struct kvm_vcpu *vcpu, paddr = gpa_to_hpa(vcpu->kvm, gaddr & PT64_BASE_ADDR_MASK); + /* + * the reason paddr get mask even that it isnt pte is beacuse the + * HPA_ERR_MASK bit might be used to signal error + */ + page = pfn_to_page((paddr & PT64_BASE_ADDR_MASK) >> PAGE_SHIFT); + spte |= PT_PRESENT_MASK; if (access_bits & PT_USER_MASK) spte |= PT_USER_MASK; @@ -212,8 +219,7 @@ static void FNAME(set_pte_common)(struct kvm_vcpu *vcpu, if (is_error_hpa(paddr)) { set_shadow_pte(shadow_pte, shadow_trap_nonpresent_pte | PT_SHADOW_IO_MARK); - kvm_release_page_clean(pfn_to_page((paddr & PT64_BASE_ADDR_MASK) - >> PAGE_SHIFT)); + kvm_release_page_clean(page); return; } @@ -254,17 +260,11 @@ unshadowed: if (!was_rmapped) { rmap_add(vcpu, shadow_pte, (gaddr & PT64_BASE_ADDR_MASK) >> PAGE_SHIFT); - if (!is_rmap_pte(*shadow_pte)) { - struct page *page; - - page = pfn_to_page((paddr & PT64_BASE_ADDR_MASK) - >> PAGE_SHIFT); + if (!is_rmap_pte(*shadow_pte)) kvm_release_page_clean(page); - } } else - kvm_release_page_clean(pfn_to_page((paddr & PT64_BASE_ADDR_MASK) - >> PAGE_SHIFT)); + kvm_release_page_clean(page); if (!ptwrite || !*ptwrite) vcpu->last_pte_updated = shadow_pte; } |