All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
	benh@kernel.crashing.org, paulus@samba.org
Cc: linuxppc-dev@lists.ozlabs.org, kvm-ppc@vger.kernel.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH] KVM: PPC: BOOK3S: HV: Use base page size when comparing against slb value
Date: Fri, 13 Jun 2014 10:03:14 +0000	[thread overview]
Message-ID: <539ACC62.1040004@suse.de> (raw)
In-Reply-To: <1402644190-15604-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com>


On 13.06.14 09:23, Aneesh Kumar K.V wrote:
> With guest supporting Multiple page size per segment (MPSS),
> hpte_page_size returns actual page size used. Add a new function to
> return base page size and use that to compare against the the page size
> calculated from SLB

Why? What does this fix? Is this a bug fix, an enhancement? Don't 
describe only what you do, but also why you do it.


Alex

>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
> ---
>   arch/powerpc/include/asm/kvm_book3s_64.h | 19 +++++++++++++++++--
>   arch/powerpc/kvm/book3s_64_mmu_hv.c      |  2 +-
>   arch/powerpc/kvm/book3s_hv_rm_mmu.c      |  2 +-
>   3 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_book3s_64.h b/arch/powerpc/include/asm/kvm_book3s_64.h
> index 34422be566ce..3d0f3fb9c6b6 100644
> --- a/arch/powerpc/include/asm/kvm_book3s_64.h
> +++ b/arch/powerpc/include/asm/kvm_book3s_64.h
> @@ -202,8 +202,10 @@ static inline unsigned long compute_tlbie_rb(unsigned long v, unsigned long r,
>   	return rb;
>   }
>   
> -static inline unsigned long hpte_page_size(unsigned long h, unsigned long l)
> +static inline unsigned long __hpte_page_size(unsigned long h, unsigned long l,
> +					     bool is_base_size)
>   {
> +
>   	int size, a_psize;
>   	/* Look at the 8 bit LP value */
>   	unsigned int lp = (l >> LP_SHIFT) & ((1 << LP_BITS) - 1);
> @@ -218,14 +220,27 @@ static inline unsigned long hpte_page_size(unsigned long h, unsigned long l)
>   				continue;
>   
>   			a_psize = __hpte_actual_psize(lp, size);
> -			if (a_psize != -1)
> +			if (a_psize != -1) {
> +				if (is_base_size)
> +					return 1ul << mmu_psize_defs[size].shift;
>   				return 1ul << mmu_psize_defs[a_psize].shift;
> +			}
>   		}
>   
>   	}
>   	return 0;
>   }
>   
> +static inline unsigned long hpte_page_size(unsigned long h, unsigned long l)
> +{
> +	return __hpte_page_size(h, l, 0);
> +}
> +
> +static inline unsigned long hpte_base_page_size(unsigned long h, unsigned long l)
> +{
> +	return __hpte_page_size(h, l, 1);
> +}
> +
>   static inline unsigned long hpte_rpn(unsigned long ptel, unsigned long psize)
>   {
>   	return ((ptel & HPTE_R_RPN) & ~(psize - 1)) >> PAGE_SHIFT;
> diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c
> index f53cf2eae36a..7ff45ed27c65 100644
> --- a/arch/powerpc/kvm/book3s_64_mmu_hv.c
> +++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c
> @@ -1567,7 +1567,7 @@ static ssize_t kvm_htab_write(struct file *file, const char __user *buf,
>   				goto out;
>   			}
>   			if (!rma_setup && is_vrma_hpte(v)) {
> -				unsigned long psize = hpte_page_size(v, r);
> +				unsigned long psize = hpte_base_page_size(v, r);
>   				unsigned long senc = slb_pgsize_encoding(psize);
>   				unsigned long lpcr;
>   
> diff --git a/arch/powerpc/kvm/book3s_hv_rm_mmu.c b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> index 87624ab5ba82..c6aca75b8376 100644
> --- a/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> +++ b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> @@ -839,7 +839,7 @@ long kvmppc_hv_find_lock_hpte(struct kvm *kvm, gva_t eaddr, unsigned long slb_v,
>   			 * to check against the actual page size.
>   			 */
>   			if ((v & valid) && (v & mask) = val &&
> -			    hpte_page_size(v, r) = (1ul << pshift))
> +			    hpte_base_page_size(v, r) = (1ul << pshift))
>   				/* Return with the HPTE still locked */
>   				return (hash << 3) + (i >> 1);
>   


WARNING: multiple messages have this Message-ID (diff)
From: Alexander Graf <agraf@suse.de>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
	benh@kernel.crashing.org, paulus@samba.org
Cc: linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org,
	kvm-ppc@vger.kernel.org
Subject: Re: [PATCH] KVM: PPC: BOOK3S: HV: Use base page size when comparing against slb value
Date: Fri, 13 Jun 2014 12:03:14 +0200	[thread overview]
Message-ID: <539ACC62.1040004@suse.de> (raw)
In-Reply-To: <1402644190-15604-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com>


On 13.06.14 09:23, Aneesh Kumar K.V wrote:
> With guest supporting Multiple page size per segment (MPSS),
> hpte_page_size returns actual page size used. Add a new function to
> return base page size and use that to compare against the the page size
> calculated from SLB

Why? What does this fix? Is this a bug fix, an enhancement? Don't 
describe only what you do, but also why you do it.


Alex

>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
> ---
>   arch/powerpc/include/asm/kvm_book3s_64.h | 19 +++++++++++++++++--
>   arch/powerpc/kvm/book3s_64_mmu_hv.c      |  2 +-
>   arch/powerpc/kvm/book3s_hv_rm_mmu.c      |  2 +-
>   3 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_book3s_64.h b/arch/powerpc/include/asm/kvm_book3s_64.h
> index 34422be566ce..3d0f3fb9c6b6 100644
> --- a/arch/powerpc/include/asm/kvm_book3s_64.h
> +++ b/arch/powerpc/include/asm/kvm_book3s_64.h
> @@ -202,8 +202,10 @@ static inline unsigned long compute_tlbie_rb(unsigned long v, unsigned long r,
>   	return rb;
>   }
>   
> -static inline unsigned long hpte_page_size(unsigned long h, unsigned long l)
> +static inline unsigned long __hpte_page_size(unsigned long h, unsigned long l,
> +					     bool is_base_size)
>   {
> +
>   	int size, a_psize;
>   	/* Look at the 8 bit LP value */
>   	unsigned int lp = (l >> LP_SHIFT) & ((1 << LP_BITS) - 1);
> @@ -218,14 +220,27 @@ static inline unsigned long hpte_page_size(unsigned long h, unsigned long l)
>   				continue;
>   
>   			a_psize = __hpte_actual_psize(lp, size);
> -			if (a_psize != -1)
> +			if (a_psize != -1) {
> +				if (is_base_size)
> +					return 1ul << mmu_psize_defs[size].shift;
>   				return 1ul << mmu_psize_defs[a_psize].shift;
> +			}
>   		}
>   
>   	}
>   	return 0;
>   }
>   
> +static inline unsigned long hpte_page_size(unsigned long h, unsigned long l)
> +{
> +	return __hpte_page_size(h, l, 0);
> +}
> +
> +static inline unsigned long hpte_base_page_size(unsigned long h, unsigned long l)
> +{
> +	return __hpte_page_size(h, l, 1);
> +}
> +
>   static inline unsigned long hpte_rpn(unsigned long ptel, unsigned long psize)
>   {
>   	return ((ptel & HPTE_R_RPN) & ~(psize - 1)) >> PAGE_SHIFT;
> diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c
> index f53cf2eae36a..7ff45ed27c65 100644
> --- a/arch/powerpc/kvm/book3s_64_mmu_hv.c
> +++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c
> @@ -1567,7 +1567,7 @@ static ssize_t kvm_htab_write(struct file *file, const char __user *buf,
>   				goto out;
>   			}
>   			if (!rma_setup && is_vrma_hpte(v)) {
> -				unsigned long psize = hpte_page_size(v, r);
> +				unsigned long psize = hpte_base_page_size(v, r);
>   				unsigned long senc = slb_pgsize_encoding(psize);
>   				unsigned long lpcr;
>   
> diff --git a/arch/powerpc/kvm/book3s_hv_rm_mmu.c b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> index 87624ab5ba82..c6aca75b8376 100644
> --- a/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> +++ b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> @@ -839,7 +839,7 @@ long kvmppc_hv_find_lock_hpte(struct kvm *kvm, gva_t eaddr, unsigned long slb_v,
>   			 * to check against the actual page size.
>   			 */
>   			if ((v & valid) && (v & mask) == val &&
> -			    hpte_page_size(v, r) == (1ul << pshift))
> +			    hpte_base_page_size(v, r) == (1ul << pshift))
>   				/* Return with the HPTE still locked */
>   				return (hash << 3) + (i >> 1);
>   

WARNING: multiple messages have this Message-ID (diff)
From: Alexander Graf <agraf@suse.de>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
	benh@kernel.crashing.org, paulus@samba.org
Cc: linuxppc-dev@lists.ozlabs.org, kvm-ppc@vger.kernel.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH] KVM: PPC: BOOK3S: HV: Use base page size when comparing against slb value
Date: Fri, 13 Jun 2014 12:03:14 +0200	[thread overview]
Message-ID: <539ACC62.1040004@suse.de> (raw)
In-Reply-To: <1402644190-15604-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com>


On 13.06.14 09:23, Aneesh Kumar K.V wrote:
> With guest supporting Multiple page size per segment (MPSS),
> hpte_page_size returns actual page size used. Add a new function to
> return base page size and use that to compare against the the page size
> calculated from SLB

Why? What does this fix? Is this a bug fix, an enhancement? Don't 
describe only what you do, but also why you do it.


Alex

>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
> ---
>   arch/powerpc/include/asm/kvm_book3s_64.h | 19 +++++++++++++++++--
>   arch/powerpc/kvm/book3s_64_mmu_hv.c      |  2 +-
>   arch/powerpc/kvm/book3s_hv_rm_mmu.c      |  2 +-
>   3 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_book3s_64.h b/arch/powerpc/include/asm/kvm_book3s_64.h
> index 34422be566ce..3d0f3fb9c6b6 100644
> --- a/arch/powerpc/include/asm/kvm_book3s_64.h
> +++ b/arch/powerpc/include/asm/kvm_book3s_64.h
> @@ -202,8 +202,10 @@ static inline unsigned long compute_tlbie_rb(unsigned long v, unsigned long r,
>   	return rb;
>   }
>   
> -static inline unsigned long hpte_page_size(unsigned long h, unsigned long l)
> +static inline unsigned long __hpte_page_size(unsigned long h, unsigned long l,
> +					     bool is_base_size)
>   {
> +
>   	int size, a_psize;
>   	/* Look at the 8 bit LP value */
>   	unsigned int lp = (l >> LP_SHIFT) & ((1 << LP_BITS) - 1);
> @@ -218,14 +220,27 @@ static inline unsigned long hpte_page_size(unsigned long h, unsigned long l)
>   				continue;
>   
>   			a_psize = __hpte_actual_psize(lp, size);
> -			if (a_psize != -1)
> +			if (a_psize != -1) {
> +				if (is_base_size)
> +					return 1ul << mmu_psize_defs[size].shift;
>   				return 1ul << mmu_psize_defs[a_psize].shift;
> +			}
>   		}
>   
>   	}
>   	return 0;
>   }
>   
> +static inline unsigned long hpte_page_size(unsigned long h, unsigned long l)
> +{
> +	return __hpte_page_size(h, l, 0);
> +}
> +
> +static inline unsigned long hpte_base_page_size(unsigned long h, unsigned long l)
> +{
> +	return __hpte_page_size(h, l, 1);
> +}
> +
>   static inline unsigned long hpte_rpn(unsigned long ptel, unsigned long psize)
>   {
>   	return ((ptel & HPTE_R_RPN) & ~(psize - 1)) >> PAGE_SHIFT;
> diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c
> index f53cf2eae36a..7ff45ed27c65 100644
> --- a/arch/powerpc/kvm/book3s_64_mmu_hv.c
> +++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c
> @@ -1567,7 +1567,7 @@ static ssize_t kvm_htab_write(struct file *file, const char __user *buf,
>   				goto out;
>   			}
>   			if (!rma_setup && is_vrma_hpte(v)) {
> -				unsigned long psize = hpte_page_size(v, r);
> +				unsigned long psize = hpte_base_page_size(v, r);
>   				unsigned long senc = slb_pgsize_encoding(psize);
>   				unsigned long lpcr;
>   
> diff --git a/arch/powerpc/kvm/book3s_hv_rm_mmu.c b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> index 87624ab5ba82..c6aca75b8376 100644
> --- a/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> +++ b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> @@ -839,7 +839,7 @@ long kvmppc_hv_find_lock_hpte(struct kvm *kvm, gva_t eaddr, unsigned long slb_v,
>   			 * to check against the actual page size.
>   			 */
>   			if ((v & valid) && (v & mask) == val &&
> -			    hpte_page_size(v, r) == (1ul << pshift))
> +			    hpte_base_page_size(v, r) == (1ul << pshift))
>   				/* Return with the HPTE still locked */
>   				return (hash << 3) + (i >> 1);
>   

  reply	other threads:[~2014-06-13 10:03 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-13  7:23 [PATCH] KVM: PPC: BOOK3S: HV: Use base page size when comparing against slb value Aneesh Kumar K.V
2014-06-13  7:35 ` Aneesh Kumar K.V
2014-06-13  7:23 ` Aneesh Kumar K.V
2014-06-13 10:03 ` Alexander Graf [this message]
2014-06-13 10:03   ` Alexander Graf
2014-06-13 10:03   ` Alexander Graf
2014-06-13 14:28   ` Aneesh Kumar K.V
2014-06-13 14:40     ` Aneesh Kumar K.V
2014-06-13 14:28     ` Aneesh Kumar K.V
2014-06-13 14:44     ` Alexander Graf
2014-06-13 14:44       ` Alexander Graf
2014-06-13 14:44       ` Alexander Graf
2014-06-13 16:43       ` Aneesh Kumar K.V
2014-06-13 16:55         ` Aneesh Kumar K.V
2014-06-13 16:43         ` Aneesh Kumar K.V

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=539ACC62.1040004@suse.de \
    --to=agraf@suse.de \
    --cc=aneesh.kumar@linux.vnet.ibm.com \
    --cc=benh@kernel.crashing.org \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=paulus@samba.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.