All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Tosatti <mtosatti@redhat.com>
To: Joerg Roedel <joerg.roedel@amd.com>
Cc: Avi Kivity <avi@redhat.com>, Alexander Graf <agraf@suse.de>,
	joro@8bytes.org, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 14/27] KVM: MMU: Make walk_addr_generic capable for two-level walking
Date: Tue, 7 Sep 2010 14:48:05 -0300	[thread overview]
Message-ID: <20100907174805.GA11215@amt.cnet> (raw)
In-Reply-To: <1283788566-29186-15-git-send-email-joerg.roedel@amd.com>

On Mon, Sep 06, 2010 at 05:55:53PM +0200, Joerg Roedel wrote:
> This patch uses kvm_read_guest_page_tdp to make the
> walk_addr_generic functions suitable for two-level page
> table walking.
> 
> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
> ---
>  arch/x86/kvm/paging_tmpl.h |   27 ++++++++++++++++++++-------
>  1 files changed, 20 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
> index cd59af1..a5b5759 100644
> --- a/arch/x86/kvm/paging_tmpl.h
> +++ b/arch/x86/kvm/paging_tmpl.h
> @@ -124,6 +124,8 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker,
>  	unsigned index, pt_access, uninitialized_var(pte_access);
>  	gpa_t pte_gpa;
>  	bool eperm, present, rsvd_fault;
> +	int offset;
> +	u32 error = 0;
>  
>  	trace_kvm_mmu_pagetable_walk(addr, write_fault, user_fault,
>  				     fetch_fault);
> @@ -153,12 +155,13 @@ walk:
>  		index = PT_INDEX(addr, walker->level);
>  
>  		table_gfn = gpte_to_gfn(pte);
> -		pte_gpa = gfn_to_gpa(table_gfn);
> -		pte_gpa += index * sizeof(pt_element_t);
> +		offset    = index * sizeof(pt_element_t);
> +		pte_gpa   = gfn_to_gpa(table_gfn) + offset;
>  		walker->table_gfn[walker->level - 1] = table_gfn;
>  		walker->pte_gpa[walker->level - 1] = pte_gpa;
>  
> -		if (kvm_read_guest(vcpu->kvm, pte_gpa, &pte, sizeof(pte))) {
> +		if (kvm_read_guest_page_mmu(vcpu, mmu, table_gfn, &pte, offset,
> +					    sizeof(pte), &error)) {
>  			present = false;
>  			break;
>  		}

If there is failure reading the nested page tables here, you fill
vcpu->arch.fault. But the nested fault error values will be overwritten
at the end of walk_addr() by the original fault values?

> @@ -209,15 +212,25 @@ walk:
>  				is_large_pte(pte) &&
>  				mmu->root_level == PT64_ROOT_LEVEL)) {
>  			int lvl = walker->level;
> +			gpa_t real_gpa;
> +			gfn_t gfn;
>  
> -			walker->gfn = gpte_to_gfn_lvl(pte, lvl);
> -			walker->gfn += (addr & PT_LVL_OFFSET_MASK(lvl))
> -					>> PAGE_SHIFT;
> +			gfn = gpte_to_gfn_lvl(pte, lvl);
> +			gfn += (addr & PT_LVL_OFFSET_MASK(lvl)) >> PAGE_SHIFT;
>  
>  			if (PTTYPE == 32 &&
>  			    walker->level == PT_DIRECTORY_LEVEL &&
>  			    is_cpuid_PSE36())
> -				walker->gfn += pse36_gfn_delta(pte);
> +				gfn += pse36_gfn_delta(pte);
> +
> +			real_gpa = mmu->translate_gpa(vcpu, gfn_to_gpa(gfn),
> +						      &error);
> +			if (real_gpa == UNMAPPED_GVA) {
> +				walker->error_code = error;
> +				return 0;
> +			}
> +
> +			walker->gfn = real_gpa >> PAGE_SHIFT;
>  
>  			break;
>  		}
> -- 
> 1.7.0.4
> 

  reply	other threads:[~2010-09-07 17:50 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-06 15:55 [PATCH 0/27] Nested Paging Virtualization for KVM v3 (now with fixed Cc-List) Joerg Roedel
2010-09-06 15:55 ` [PATCH 01/27] KVM: MMU: Check for root_level instead of long mode Joerg Roedel
2010-09-06 15:55 ` [PATCH 02/27] KVM: MMU: Make tdp_enabled a mmu-context parameter Joerg Roedel
2010-09-06 15:55 ` [PATCH 03/27] KVM: MMU: Make set_cr3 a function pointer in kvm_mmu Joerg Roedel
2010-09-06 15:55 ` [PATCH 04/27] KVM: X86: Introduce a tdp_set_cr3 function Joerg Roedel
2010-09-06 15:55 ` [PATCH 05/27] KVM: MMU: Introduce get_cr3 function pointer Joerg Roedel
2010-09-06 15:55 ` [PATCH 06/27] KVM: MMU: Introduce inject_page_fault " Joerg Roedel
2010-09-06 15:55 ` [PATCH 07/27] KVM: MMU: Introduce kvm_init_shadow_mmu helper function Joerg Roedel
2010-09-06 15:55 ` [PATCH 08/27] KVM: MMU: Let is_rsvd_bits_set take mmu context instead of vcpu Joerg Roedel
2010-09-06 15:55 ` [PATCH 09/27] KVM: MMU: Introduce generic walk_addr function Joerg Roedel
2010-09-06 15:55 ` [PATCH 10/27] KVM: MMU: Add infrastructure for two-level page walker Joerg Roedel
2010-09-06 18:05   ` Avi Kivity
2010-09-08  9:20     ` Roedel, Joerg
2010-09-06 15:55 ` [PATCH 11/27] KVM: X86: Introduce pointer to mmu context used for gva_to_gpa Joerg Roedel
2010-09-06 15:55 ` [PATCH 12/27] KVM: MMU: Implement nested gva_to_gpa functions Joerg Roedel
2010-09-06 15:55 ` [PATCH 13/27] KVM: X86: Add kvm_read_guest_page_tdp function Joerg Roedel
2010-09-06 15:55 ` [PATCH 14/27] KVM: MMU: Make walk_addr_generic capable for two-level walking Joerg Roedel
2010-09-07 17:48   ` Marcelo Tosatti [this message]
2010-09-08  9:12     ` Roedel, Joerg
2010-09-06 15:55 ` [PATCH 15/27] KVM: MMU: Introduce kvm_read_guest_page_x86() Joerg Roedel
2010-09-06 15:55 ` [PATCH 16/27] KVM: MMU: Introduce init_kvm_nested_mmu() Joerg Roedel
2010-09-06 15:55 ` [PATCH 17/27] KVM: MMU: Track page fault data in struct vcpu Joerg Roedel
2010-09-06 18:17   ` Avi Kivity
2010-09-06 15:55 ` [PATCH 18/27] KVM: MMU: Propagate the right fault back to the guest after gva_to_gpa Joerg Roedel
2010-09-06 15:55 ` [PATCH 19/27] KVM: X86: Propagate fetch faults Joerg Roedel
2010-09-07 18:43   ` Marcelo Tosatti
2010-09-08  9:18     ` Roedel, Joerg
2010-09-06 15:55 ` [PATCH 20/27] KVM: MMU: Add kvm_mmu parameter to load_pdptrs function Joerg Roedel
2010-09-06 15:56 ` [PATCH 21/27] KVM: MMU: Introduce kvm_pdptr_read_mmu Joerg Roedel
2010-09-06 15:56 ` [PATCH 22/27] KVM: MMU: Refactor mmu_alloc_roots function Joerg Roedel
2010-09-07 20:39   ` Marcelo Tosatti
2010-09-08  7:16     ` Avi Kivity
2010-09-08  9:16       ` Roedel, Joerg
2010-09-06 15:56 ` [PATCH 23/27] KVM: MMU: Allow long mode shadows for legacy page tables Joerg Roedel
2010-09-06 15:56 ` [PATCH 24/27] KVM: SVM: Implement MMU helper functions for Nested Nested Paging Joerg Roedel
2010-09-06 15:56 ` [PATCH 25/27] KVM: SVM: Initialize Nested Nested MMU context on VMRUN Joerg Roedel
2010-09-06 15:56 ` [PATCH 26/27] KVM: SVM: Expect two more candiates for exit_int_info Joerg Roedel
2010-09-06 15:56 ` [PATCH 27/27] KVM: SVM: Report Nested Paging support to userspace Joerg Roedel
2010-09-06 18:37 ` [PATCH 0/27] Nested Paging Virtualization for KVM v3 (now with fixed Cc-List) Avi Kivity
2010-09-07 16:35   ` Roedel, Joerg
  -- strict thread matches above, loose matches on Subject: below --
2010-09-06 15:01 [PATCH 0/27] Nested Paging Virtualization for KVM v3 Joerg Roedel
2010-09-06 15:01 ` [PATCH 14/27] KVM: MMU: Make walk_addr_generic capable for two-level walking Joerg Roedel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100907174805.GA11215@amt.cnet \
    --to=mtosatti@redhat.com \
    --cc=agraf@suse.de \
    --cc=avi@redhat.com \
    --cc=joerg.roedel@amd.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.