From: Alexander Graf <agraf@suse.de>
To: Mihai Caraman <mihai.caraman@freescale.com>
Cc: kvm-ppc@vger.kernel.org, kvm@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org,
Scott Wood <scottwood@freescale.com>
Subject: Re: [PATCH] KVM: PPC: e500mc: Relax tlb invalidation condition on vcpu schedule
Date: Thu, 12 Jun 2014 17:04:40 +0000 [thread overview]
Message-ID: <5399DDA8.5060404@suse.de> (raw)
In-Reply-To: <1402581610-16585-1-git-send-email-mihai.caraman@freescale.com>
On 06/12/2014 04:00 PM, Mihai Caraman wrote:
> On vcpu schedule, the condition checked for tlb pollution is too tight.
> The tlb entries of one vcpu are polluted when a different vcpu from the
> same partition runs in-between. Relax the current tlb invalidation
> condition taking into account the lpid.
>
> Signed-off-by: Mihai Caraman <mihai.caraman <at> freescale.com>
Your mailer is broken? :)
This really should be an @.
I think this should work. Scott, please ack.
Alex
> Cc: Scott Wood <scottwood <at> freescale.com>
> ---
> arch/powerpc/kvm/e500mc.c | 20 +++++++++++++++++---
> 1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/arch/powerpc/kvm/e500mc.c b/arch/powerpc/kvm/e500mc.c
> index 17e4562..2e0cd69 100644
> --- a/arch/powerpc/kvm/e500mc.c
> +++ b/arch/powerpc/kvm/e500mc.c
> @@ -111,10 +111,12 @@ void kvmppc_mmu_msr_notify(struct kvm_vcpu *vcpu, u32 old_msr)
> }
>
> static DEFINE_PER_CPU(struct kvm_vcpu *, last_vcpu_on_cpu);
> +static DEFINE_PER_CPU(int, last_lpid_on_cpu);
>
> static void kvmppc_core_vcpu_load_e500mc(struct kvm_vcpu *vcpu, int cpu)
> {
> struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
> + bool update_last = false, inval_tlb = false;
>
> kvmppc_booke_vcpu_load(vcpu, cpu);
>
> @@ -140,12 +142,24 @@ static void kvmppc_core_vcpu_load_e500mc(struct kvm_vcpu *vcpu, int cpu)
> mtspr(SPRN_GDEAR, vcpu->arch.shared->dar);
> mtspr(SPRN_GESR, vcpu->arch.shared->esr);
>
> - if (vcpu->arch.oldpir != mfspr(SPRN_PIR) ||
> - __get_cpu_var(last_vcpu_on_cpu) != vcpu) {
> - kvmppc_e500_tlbil_all(vcpu_e500);
> + if (vcpu->arch.oldpir != mfspr(SPRN_PIR)) {
> + /* tlb entries deprecated */
> + inval_tlb = update_last = true;
> + } else if (__get_cpu_var(last_vcpu_on_cpu) != vcpu) {
> + update_last = true;
> + /* tlb entries polluted */
> + inval_tlb = __get_cpu_var(last_lpid_on_cpu) =
> + vcpu->kvm->arch.lpid;
> + }
> +
> + if (update_last) {
> __get_cpu_var(last_vcpu_on_cpu) = vcpu;
> + __get_cpu_var(last_lpid_on_cpu) = vcpu->kvm->arch.lpid;
> }
>
> + if (inval_tlb)
> + kvmppc_e500_tlbil_all(vcpu_e500);
> +
> kvmppc_load_guest_fp(vcpu);
> }
>
WARNING: multiple messages have this Message-ID (diff)
From: Alexander Graf <agraf@suse.de>
To: Mihai Caraman <mihai.caraman@freescale.com>
Cc: Scott Wood <scottwood@freescale.com>,
linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org,
kvm-ppc@vger.kernel.org
Subject: Re: [PATCH] KVM: PPC: e500mc: Relax tlb invalidation condition on vcpu schedule
Date: Thu, 12 Jun 2014 19:04:40 +0200 [thread overview]
Message-ID: <5399DDA8.5060404@suse.de> (raw)
In-Reply-To: <1402581610-16585-1-git-send-email-mihai.caraman@freescale.com>
On 06/12/2014 04:00 PM, Mihai Caraman wrote:
> On vcpu schedule, the condition checked for tlb pollution is too tight.
> The tlb entries of one vcpu are polluted when a different vcpu from the
> same partition runs in-between. Relax the current tlb invalidation
> condition taking into account the lpid.
>
> Signed-off-by: Mihai Caraman <mihai.caraman <at> freescale.com>
Your mailer is broken? :)
This really should be an @.
I think this should work. Scott, please ack.
Alex
> Cc: Scott Wood <scottwood <at> freescale.com>
> ---
> arch/powerpc/kvm/e500mc.c | 20 +++++++++++++++++---
> 1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/arch/powerpc/kvm/e500mc.c b/arch/powerpc/kvm/e500mc.c
> index 17e4562..2e0cd69 100644
> --- a/arch/powerpc/kvm/e500mc.c
> +++ b/arch/powerpc/kvm/e500mc.c
> @@ -111,10 +111,12 @@ void kvmppc_mmu_msr_notify(struct kvm_vcpu *vcpu, u32 old_msr)
> }
>
> static DEFINE_PER_CPU(struct kvm_vcpu *, last_vcpu_on_cpu);
> +static DEFINE_PER_CPU(int, last_lpid_on_cpu);
>
> static void kvmppc_core_vcpu_load_e500mc(struct kvm_vcpu *vcpu, int cpu)
> {
> struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
> + bool update_last = false, inval_tlb = false;
>
> kvmppc_booke_vcpu_load(vcpu, cpu);
>
> @@ -140,12 +142,24 @@ static void kvmppc_core_vcpu_load_e500mc(struct kvm_vcpu *vcpu, int cpu)
> mtspr(SPRN_GDEAR, vcpu->arch.shared->dar);
> mtspr(SPRN_GESR, vcpu->arch.shared->esr);
>
> - if (vcpu->arch.oldpir != mfspr(SPRN_PIR) ||
> - __get_cpu_var(last_vcpu_on_cpu) != vcpu) {
> - kvmppc_e500_tlbil_all(vcpu_e500);
> + if (vcpu->arch.oldpir != mfspr(SPRN_PIR)) {
> + /* tlb entries deprecated */
> + inval_tlb = update_last = true;
> + } else if (__get_cpu_var(last_vcpu_on_cpu) != vcpu) {
> + update_last = true;
> + /* tlb entries polluted */
> + inval_tlb = __get_cpu_var(last_lpid_on_cpu) ==
> + vcpu->kvm->arch.lpid;
> + }
> +
> + if (update_last) {
> __get_cpu_var(last_vcpu_on_cpu) = vcpu;
> + __get_cpu_var(last_lpid_on_cpu) = vcpu->kvm->arch.lpid;
> }
>
> + if (inval_tlb)
> + kvmppc_e500_tlbil_all(vcpu_e500);
> +
> kvmppc_load_guest_fp(vcpu);
> }
>
WARNING: multiple messages have this Message-ID (diff)
From: Alexander Graf <agraf@suse.de>
To: Mihai Caraman <mihai.caraman@freescale.com>
Cc: kvm-ppc@vger.kernel.org, kvm@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org,
Scott Wood <scottwood@freescale.com>
Subject: Re: [PATCH] KVM: PPC: e500mc: Relax tlb invalidation condition on vcpu schedule
Date: Thu, 12 Jun 2014 19:04:40 +0200 [thread overview]
Message-ID: <5399DDA8.5060404@suse.de> (raw)
In-Reply-To: <1402581610-16585-1-git-send-email-mihai.caraman@freescale.com>
On 06/12/2014 04:00 PM, Mihai Caraman wrote:
> On vcpu schedule, the condition checked for tlb pollution is too tight.
> The tlb entries of one vcpu are polluted when a different vcpu from the
> same partition runs in-between. Relax the current tlb invalidation
> condition taking into account the lpid.
>
> Signed-off-by: Mihai Caraman <mihai.caraman <at> freescale.com>
Your mailer is broken? :)
This really should be an @.
I think this should work. Scott, please ack.
Alex
> Cc: Scott Wood <scottwood <at> freescale.com>
> ---
> arch/powerpc/kvm/e500mc.c | 20 +++++++++++++++++---
> 1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/arch/powerpc/kvm/e500mc.c b/arch/powerpc/kvm/e500mc.c
> index 17e4562..2e0cd69 100644
> --- a/arch/powerpc/kvm/e500mc.c
> +++ b/arch/powerpc/kvm/e500mc.c
> @@ -111,10 +111,12 @@ void kvmppc_mmu_msr_notify(struct kvm_vcpu *vcpu, u32 old_msr)
> }
>
> static DEFINE_PER_CPU(struct kvm_vcpu *, last_vcpu_on_cpu);
> +static DEFINE_PER_CPU(int, last_lpid_on_cpu);
>
> static void kvmppc_core_vcpu_load_e500mc(struct kvm_vcpu *vcpu, int cpu)
> {
> struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
> + bool update_last = false, inval_tlb = false;
>
> kvmppc_booke_vcpu_load(vcpu, cpu);
>
> @@ -140,12 +142,24 @@ static void kvmppc_core_vcpu_load_e500mc(struct kvm_vcpu *vcpu, int cpu)
> mtspr(SPRN_GDEAR, vcpu->arch.shared->dar);
> mtspr(SPRN_GESR, vcpu->arch.shared->esr);
>
> - if (vcpu->arch.oldpir != mfspr(SPRN_PIR) ||
> - __get_cpu_var(last_vcpu_on_cpu) != vcpu) {
> - kvmppc_e500_tlbil_all(vcpu_e500);
> + if (vcpu->arch.oldpir != mfspr(SPRN_PIR)) {
> + /* tlb entries deprecated */
> + inval_tlb = update_last = true;
> + } else if (__get_cpu_var(last_vcpu_on_cpu) != vcpu) {
> + update_last = true;
> + /* tlb entries polluted */
> + inval_tlb = __get_cpu_var(last_lpid_on_cpu) ==
> + vcpu->kvm->arch.lpid;
> + }
> +
> + if (update_last) {
> __get_cpu_var(last_vcpu_on_cpu) = vcpu;
> + __get_cpu_var(last_lpid_on_cpu) = vcpu->kvm->arch.lpid;
> }
>
> + if (inval_tlb)
> + kvmppc_e500_tlbil_all(vcpu_e500);
> +
> kvmppc_load_guest_fp(vcpu);
> }
>
next prev parent reply other threads:[~2014-06-12 17:04 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-12 14:00 [PATCH] KVM: PPC: e500mc: Relax tlb invalidation condition on vcpu schedule Mihai Caraman
2014-06-12 14:00 ` Mihai Caraman
2014-06-12 14:00 ` Mihai Caraman
2014-06-12 17:04 ` Alexander Graf [this message]
2014-06-12 17:04 ` Alexander Graf
2014-06-12 17:04 ` Alexander Graf
2014-06-13 14:43 ` mihai.caraman
2014-06-13 14:43 ` mihai.caraman
2014-06-13 14:55 ` Alexander Graf
2014-06-13 14:55 ` Alexander Graf
2014-06-13 14:55 ` Alexander Graf
2014-06-13 19:42 ` Scott Wood
2014-06-13 19:42 ` Scott Wood
2014-06-13 19:42 ` Scott Wood
2014-06-17 9:08 ` Alexander Graf
2014-06-17 9:08 ` Alexander Graf
2014-06-17 9:08 ` Alexander Graf
2014-06-17 12:00 ` mihai.caraman
2014-06-17 12:00 ` mihai.caraman
2014-06-17 12:00 ` mihai.caraman
2014-06-17 15:33 ` Scott Wood
2014-06-17 15:33 ` Scott Wood
2014-06-17 15:33 ` 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=5399DDA8.5060404@suse.de \
--to=agraf@suse.de \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mihai.caraman@freescale.com \
--cc=scottwood@freescale.com \
/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.