lkml.org 
[lkml]   [2007]   [Dec]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 47/52] KVM: MMU: Remove extra gaddr parameter from set_pte_common()
    Date
    Similar information is available in the gfn parameter, so use that.

    Signed-off-by: Avi Kivity <avi@qumranet.com>
    ---
    drivers/kvm/mmu.c | 1 +
    drivers/kvm/paging_tmpl.h | 29 +++++++++--------------------
    2 files changed, 10 insertions(+), 20 deletions(-)

    diff --git a/drivers/kvm/mmu.c b/drivers/kvm/mmu.c
    index a9fed59..c3362ba 100644
    --- a/drivers/kvm/mmu.c
    +++ b/drivers/kvm/mmu.c
    @@ -29,6 +29,7 @@

    #include <asm/page.h>
    #include <asm/cmpxchg.h>
    +#include <asm/io.h>

    #undef MMU_DEBUG

    diff --git a/drivers/kvm/paging_tmpl.h b/drivers/kvm/paging_tmpl.h
    index dceb4b9..cc373ed 100644
    --- a/drivers/kvm/paging_tmpl.h
    +++ b/drivers/kvm/paging_tmpl.h
    @@ -188,7 +188,6 @@ err:

    static void FNAME(set_pte_common)(struct kvm_vcpu *vcpu,
    u64 *shadow_pte,
    - gpa_t gaddr,
    pt_element_t gpte,
    u64 access_bits,
    int user_fault,
    @@ -197,7 +196,6 @@ static void FNAME(set_pte_common)(struct kvm_vcpu *vcpu,
    struct guest_walker *walker,
    gfn_t gfn)
    {
    - hpa_t paddr;
    int dirty = gpte & PT_DIRTY_MASK;
    u64 spte;
    int was_rmapped = is_rmap_pte(*shadow_pte);
    @@ -218,26 +216,20 @@ static void FNAME(set_pte_common)(struct kvm_vcpu *vcpu,
    if (!dirty)
    access_bits &= ~PT_WRITABLE_MASK;

    - 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);
    + page = gfn_to_page(vcpu->kvm, gfn);

    spte |= PT_PRESENT_MASK;
    if (access_bits & PT_USER_MASK)
    spte |= PT_USER_MASK;

    - if (is_error_hpa(paddr)) {
    + if (is_error_page(page)) {
    set_shadow_pte(shadow_pte,
    shadow_trap_nonpresent_pte | PT_SHADOW_IO_MARK);
    kvm_release_page_clean(page);
    return;
    }

    - spte |= paddr;
    + spte |= page_to_phys(page);

    if ((access_bits & PT_WRITABLE_MASK)
    || (write_fault && !is_write_protection(vcpu) && !user_fault)) {
    @@ -266,14 +258,14 @@ static void FNAME(set_pte_common)(struct kvm_vcpu *vcpu,
    unshadowed:

    if (access_bits & PT_WRITABLE_MASK)
    - mark_page_dirty(vcpu->kvm, gaddr >> PAGE_SHIFT);
    + mark_page_dirty(vcpu->kvm, gfn);

    pgprintk("%s: setting spte %llx\n", __FUNCTION__, spte);
    set_shadow_pte(shadow_pte, spte);
    - page_header_update_slot(vcpu->kvm, shadow_pte, gaddr);
    + page_header_update_slot(vcpu->kvm, shadow_pte,
    + (gpa_t)gfn << PAGE_SHIFT);
    if (!was_rmapped) {
    - rmap_add(vcpu, shadow_pte, (gaddr & PT64_BASE_ADDR_MASK)
    - >> PAGE_SHIFT);
    + rmap_add(vcpu, shadow_pte, gfn);
    if (!is_rmap_pte(*shadow_pte))
    kvm_release_page_clean(page);
    }
    @@ -289,7 +281,7 @@ static void FNAME(set_pte)(struct kvm_vcpu *vcpu, pt_element_t gpte,
    struct guest_walker *walker, gfn_t gfn)
    {
    access_bits &= gpte;
    - FNAME(set_pte_common)(vcpu, shadow_pte, gpte & PT_BASE_ADDR_MASK,
    + FNAME(set_pte_common)(vcpu, shadow_pte,
    gpte, access_bits, user_fault, write_fault,
    ptwrite, walker, gfn);
    }
    @@ -318,11 +310,8 @@ static void FNAME(set_pde)(struct kvm_vcpu *vcpu, pt_element_t gpde,
    int user_fault, int write_fault, int *ptwrite,
    struct guest_walker *walker, gfn_t gfn)
    {
    - gpa_t gaddr;
    -
    access_bits &= gpde;
    - gaddr = (gpa_t)gfn << PAGE_SHIFT;
    - FNAME(set_pte_common)(vcpu, shadow_pte, gaddr,
    + FNAME(set_pte_common)(vcpu, shadow_pte,
    gpde, access_bits, user_fault, write_fault,
    ptwrite, walker, gfn);
    }
    --
    1.5.3.7


    \
     
     \ /
      Last update: 2007-12-30 08:27    [W:0.023 / U:62.232 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site