All of lore.kernel.org
 help / color / mirror / Atom feed
From: Scott Wood <scottwood@freescale.com>
To: Alexander Graf <agraf@suse.de>
Cc: kvm-ppc@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH 1/3] KVM: PPC: e500: Call kvmppc_mmu_map for initial mapping
Date: Fri, 18 Jan 2013 00:11:17 +0000	[thread overview]
Message-ID: <1358467877.13978.18@snotra> (raw)
In-Reply-To: <1358463041-25922-2-git-send-email-agraf@suse.de> (from agraf@suse.de on Thu Jan 17 16:50:39 2013)

On 01/17/2013 04:50:39 PM, Alexander Graf wrote:
> @@ -1024,9 +1001,11 @@ void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64  
> eaddr, gpa_t gpaddr,
>  {
>  	struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
>  	struct tlbe_priv *priv;
> -	struct kvm_book3e_206_tlb_entry *gtlbe, stlbe;
> +	struct kvm_book3e_206_tlb_entry *gtlbe, stlbe = {};

Is there a code path in which stlbe gets used but not fully filled in
without this?

>  	int tlbsel = tlbsel_of(index);
>  	int esel = esel_of(index);
> +	/* Needed for initial map, where we can't use the cached value  
> */
> +	int force_map = index & KVM_E500_INDEX_FORCE_MAP;
>  	int stlbsel, sesel;
> 
>  	gtlbe = get_entry(vcpu_e500, tlbsel, esel);
> @@ -1038,7 +1017,7 @@ void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64  
> eaddr, gpa_t gpaddr,
>  		priv = &vcpu_e500->gtlb_priv[tlbsel][esel];
> 
>  		/* Only triggers after clear_tlb_refs */
> -		if (unlikely(!(priv->ref.flags & E500_TLB_VALID)))
> +		if (force_map || unlikely(!(priv->ref.flags &  
> E500_TLB_VALID)))
>  			kvmppc_e500_tlb0_map(vcpu_e500, esel, &stlbe);
>  		else
>  			kvmppc_e500_setup_stlbe(vcpu, gtlbe,  
> BOOK3E_PAGESZ_4K,

It seems a bit odd to overload index rather than adding a flags
parameter...

It also seems like it would be cleaner to just invalidate the old entry
in tlbwe, and then this function doesn't need to change at all.  I am a
bit confused by how invalidation is currently operating -- why is
E500_TLB_VALID not cleared on invalidations (except for MMU API stuff  
and
MMU notifiers)?

-Scott

WARNING: multiple messages have this Message-ID (diff)
From: Scott Wood <scottwood@freescale.com>
To: Alexander Graf <agraf@suse.de>
Cc: <kvm-ppc@vger.kernel.org>, <kvm@vger.kernel.org>
Subject: Re: [PATCH 1/3] KVM: PPC: e500: Call kvmppc_mmu_map for initial mapping
Date: Thu, 17 Jan 2013 18:11:17 -0600	[thread overview]
Message-ID: <1358467877.13978.18@snotra> (raw)
In-Reply-To: <1358463041-25922-2-git-send-email-agraf@suse.de> (from agraf@suse.de on Thu Jan 17 16:50:39 2013)

On 01/17/2013 04:50:39 PM, Alexander Graf wrote:
> @@ -1024,9 +1001,11 @@ void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64  
> eaddr, gpa_t gpaddr,
>  {
>  	struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
>  	struct tlbe_priv *priv;
> -	struct kvm_book3e_206_tlb_entry *gtlbe, stlbe;
> +	struct kvm_book3e_206_tlb_entry *gtlbe, stlbe = {};

Is there a code path in which stlbe gets used but not fully filled in
without this?

>  	int tlbsel = tlbsel_of(index);
>  	int esel = esel_of(index);
> +	/* Needed for initial map, where we can't use the cached value  
> */
> +	int force_map = index & KVM_E500_INDEX_FORCE_MAP;
>  	int stlbsel, sesel;
> 
>  	gtlbe = get_entry(vcpu_e500, tlbsel, esel);
> @@ -1038,7 +1017,7 @@ void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64  
> eaddr, gpa_t gpaddr,
>  		priv = &vcpu_e500->gtlb_priv[tlbsel][esel];
> 
>  		/* Only triggers after clear_tlb_refs */
> -		if (unlikely(!(priv->ref.flags & E500_TLB_VALID)))
> +		if (force_map || unlikely(!(priv->ref.flags &  
> E500_TLB_VALID)))
>  			kvmppc_e500_tlb0_map(vcpu_e500, esel, &stlbe);
>  		else
>  			kvmppc_e500_setup_stlbe(vcpu, gtlbe,  
> BOOK3E_PAGESZ_4K,

It seems a bit odd to overload index rather than adding a flags
parameter...

It also seems like it would be cleaner to just invalidate the old entry
in tlbwe, and then this function doesn't need to change at all.  I am a
bit confused by how invalidation is currently operating -- why is
E500_TLB_VALID not cleared on invalidations (except for MMU API stuff  
and
MMU notifiers)?

-Scott

  reply	other threads:[~2013-01-18  0:11 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-17 22:50 [PATCH 0/3] KVM: PPC: e500: Shadow TLB Improvements Alexander Graf
2013-01-17 22:50 ` Alexander Graf
2013-01-17 22:50 ` [PATCH 1/3] KVM: PPC: e500: Call kvmppc_mmu_map for initial mapping Alexander Graf
2013-01-17 22:50   ` Alexander Graf
2013-01-18  0:11   ` Scott Wood [this message]
2013-01-18  0:11     ` Scott Wood
2013-01-18  0:20     ` Alexander Graf
2013-01-18  0:20       ` Alexander Graf
2013-01-18  0:29       ` Alexander Graf
2013-01-18  0:29         ` Alexander Graf
2013-01-18  0:35         ` Scott Wood
2013-01-18  0:35           ` Scott Wood
2013-01-18  0:47       ` Scott Wood
2013-01-18  0:47         ` Scott Wood
2013-01-18  0:49         ` Alexander Graf
2013-01-18  0:49           ` Alexander Graf
2013-01-18  1:16         ` Alexander Graf
2013-01-18  1:16           ` Alexander Graf
2013-01-17 22:50 ` [PATCH 2/3] KVM: PPC: E500: Split host and guest MMU parts Alexander Graf
2013-01-17 22:50   ` Alexander Graf
2013-01-17 22:50 ` [PATCH 3/3] KVM: PPC: e500: Implement TLB1-in-TLB0 mapping Alexander Graf
2013-01-17 22:50   ` Alexander Graf
2013-01-18  0:31   ` Scott Wood
2013-01-18  0:31     ` Scott Wood

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=1358467877.13978.18@snotra \
    --to=scottwood@freescale.com \
    --cc=agraf@suse.de \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm@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.