From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Paul Mackerras <paulus@samba.org>, Dinar Valeev <dvaleev@suse.de>,
Alexander Graf <agraf@suse.de>
Cc: kvm-ppc@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH 1/2] KVM: PPC: Book3S HV: Correct tlbie usage
Date: Wed, 17 Jul 2013 10:52:18 +0000 [thread overview]
Message-ID: <87sizdcvvx.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <20130708100825.GC24032@iris.ozlabs.ibm.com>
Paul Mackerras <paulus@samba.org> writes:
> This corrects the usage of the tlbie (TLB invalidate entry) instruction
> in HV KVM. The tlbie instruction changed between PPC970 and POWER7.
> On the PPC970, the bit to select large vs. small page is in the instruction,
> not in the RB register value. This changes the code to use the correct
> form on PPC970.
I guess we need a similar fix for __tlbiel ?
>
> On POWER7 we were calculating the AVAL (Abbreviated Virtual Address, Lower)
> field of the RB value incorrectly for 64k pages. This fixes it.
>
> Since we now have several cases to handle for the tlbie instruction, this
> factors out the code to do a sequence of tlbies into a new function,
> do_tlbies(), and calls that from the various places where the code was
> doing tlbie instructions inline. It also makes kvmppc_h_bulk_remove()
> use the same global_invalidates() function for determining whether to do
> local or global TLB invalidations as is used in other places, for
> consistency, and also to make sure that kvm->arch.need_tlb_flush gets
> updated properly.
>
> Signed-off-by: Paul Mackerras <paulus@samba.org>
> Cc: stable@vger.kernel.org
> ---
> arch/powerpc/include/asm/kvm_book3s_64.h | 2 +-
> arch/powerpc/kvm/book3s_hv_rm_mmu.c | 139 ++++++++++++++++++-------------
> 2 files changed, 82 insertions(+), 59 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_book3s_64.h b/arch/powerpc/include/asm/kvm_book3s_64.h
> index 9c1ff33..dc6b84a 100644
> --- a/arch/powerpc/include/asm/kvm_book3s_64.h
> +++ b/arch/powerpc/include/asm/kvm_book3s_64.h
> @@ -100,7 +100,7 @@ static inline unsigned long compute_tlbie_rb(unsigned long v, unsigned long r,
> /* (masks depend on page size) */
> rb |= 0x1000; /* page encoding in LP field */
> rb |= (va_low & 0x7f) << 16; /* 7b of VA in AVA/LP field */
> - rb |= (va_low & 0xfe); /* AVAL field (P7 doesn't seem to care) */
> + rb |= ((va_low << 4) & 0xf0); /* AVAL field
> (P7 doesn't seem to care) */
Can you explain this more ? Why shift by 4 ? and what about the three
bits ('e' part of 0xfe) ?
> }
> } else {
> /* 4kB page */
> diff --git a/arch/powerpc/kvm/book3s_hv_rm_mmu.c b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> index 6dcbb49..105b00f 100644
> --- a/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> +++ b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> @@ -385,6 +385,80 @@ static inline int try_lock_tlbie(unsigned int *lock)
> return old = 0;
> }
>
-aneesh
WARNING: multiple messages have this Message-ID (diff)
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Paul Mackerras <paulus@samba.org>, Dinar Valeev <dvaleev@suse.de>,
Alexander Graf <agraf@suse.de>
Cc: kvm-ppc@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH 1/2] KVM: PPC: Book3S HV: Correct tlbie usage
Date: Wed, 17 Jul 2013 16:10:18 +0530 [thread overview]
Message-ID: <87sizdcvvx.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <20130708100825.GC24032@iris.ozlabs.ibm.com>
Paul Mackerras <paulus@samba.org> writes:
> This corrects the usage of the tlbie (TLB invalidate entry) instruction
> in HV KVM. The tlbie instruction changed between PPC970 and POWER7.
> On the PPC970, the bit to select large vs. small page is in the instruction,
> not in the RB register value. This changes the code to use the correct
> form on PPC970.
I guess we need a similar fix for __tlbiel ?
>
> On POWER7 we were calculating the AVAL (Abbreviated Virtual Address, Lower)
> field of the RB value incorrectly for 64k pages. This fixes it.
>
> Since we now have several cases to handle for the tlbie instruction, this
> factors out the code to do a sequence of tlbies into a new function,
> do_tlbies(), and calls that from the various places where the code was
> doing tlbie instructions inline. It also makes kvmppc_h_bulk_remove()
> use the same global_invalidates() function for determining whether to do
> local or global TLB invalidations as is used in other places, for
> consistency, and also to make sure that kvm->arch.need_tlb_flush gets
> updated properly.
>
> Signed-off-by: Paul Mackerras <paulus@samba.org>
> Cc: stable@vger.kernel.org
> ---
> arch/powerpc/include/asm/kvm_book3s_64.h | 2 +-
> arch/powerpc/kvm/book3s_hv_rm_mmu.c | 139 ++++++++++++++++++-------------
> 2 files changed, 82 insertions(+), 59 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_book3s_64.h b/arch/powerpc/include/asm/kvm_book3s_64.h
> index 9c1ff33..dc6b84a 100644
> --- a/arch/powerpc/include/asm/kvm_book3s_64.h
> +++ b/arch/powerpc/include/asm/kvm_book3s_64.h
> @@ -100,7 +100,7 @@ static inline unsigned long compute_tlbie_rb(unsigned long v, unsigned long r,
> /* (masks depend on page size) */
> rb |= 0x1000; /* page encoding in LP field */
> rb |= (va_low & 0x7f) << 16; /* 7b of VA in AVA/LP field */
> - rb |= (va_low & 0xfe); /* AVAL field (P7 doesn't seem to care) */
> + rb |= ((va_low << 4) & 0xf0); /* AVAL field
> (P7 doesn't seem to care) */
Can you explain this more ? Why shift by 4 ? and what about the three
bits ('e' part of 0xfe) ?
> }
> } else {
> /* 4kB page */
> diff --git a/arch/powerpc/kvm/book3s_hv_rm_mmu.c b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> index 6dcbb49..105b00f 100644
> --- a/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> +++ b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> @@ -385,6 +385,80 @@ static inline int try_lock_tlbie(unsigned int *lock)
> return old == 0;
> }
>
-aneesh
next prev parent reply other threads:[~2013-07-17 10:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-08 10:08 [PATCH 1/2] KVM: PPC: Book3S HV: Correct tlbie usage Paul Mackerras
2013-07-08 10:08 ` Paul Mackerras
2013-07-08 10:09 ` [PATCH 2/2] KVM: PPC: Book3S HV: Allow negative offsets to real-mode hcall handlers Paul Mackerras
2013-07-08 10:09 ` Paul Mackerras
2013-07-10 11:15 ` [PATCH 1/2] KVM: PPC: Book3S HV: Correct tlbie usage Alexander Graf
2013-07-10 11:15 ` Alexander Graf
2013-07-17 10:40 ` Aneesh Kumar K.V [this message]
2013-07-17 10:52 ` 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=87sizdcvvx.fsf@linux.vnet.ibm.com \
--to=aneesh.kumar@linux.vnet.ibm.com \
--cc=agraf@suse.de \
--cc=dvaleev@suse.de \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.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.