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,
	linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH 19/30] KVM: PPC: e500mc: add load inst fixup
Date: Fri, 17 Feb 2012 23:17:02 +0000	[thread overview]
Message-ID: <4F3EDFEE.3040106@freescale.com> (raw)
In-Reply-To: <1329498837-11717-20-git-send-email-agraf@suse.de>

On 02/17/2012 11:13 AM, Alexander Graf wrote:
> There's always a chance we're unable to read a guest instruction. The guest
> could have its TLB mapped execute-, but not readable, something odd happens
> and our TLB gets flushed. So it's a good idea to be prepared for that case
> and have a fallback that allows us to fix things up in that case.
> 
> Add fixup code that keeps guest code from potentially crashing our host kernel.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>  arch/powerpc/kvm/bookehv_interrupts.S |   30 +++++++++++++++++++++++++++++-
>  1 files changed, 29 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
> index 63023ae..e0f484c 100644
> --- a/arch/powerpc/kvm/bookehv_interrupts.S
> +++ b/arch/powerpc/kvm/bookehv_interrupts.S
> @@ -28,6 +28,7 @@
>  #include <asm/asm-compat.h>
>  #include <asm/asm-offsets.h>
>  #include <asm/bitsperlong.h>
> +#include <asm/thread_info.h>
>  
>  #include "../kernel/head_booke.h" /* for THREAD_NORMSAVE() */
>  
> @@ -171,9 +172,36 @@
>  	PPC_STL	r30, VCPU_GPR(r30)(r4)
>  	PPC_STL	r31, VCPU_GPR(r31)(r4)
>  	mtspr	SPRN_EPLC, r8
> +
> +	/* disable preemption, so we are sure we hit the fixup handler */
> +#ifdef CONFIG_PPC64
> +	clrrdi	r8,r1,THREAD_SHIFT
> +#else
> +	rlwinm	r8,r1,0,0,31-THREAD_SHIFT       /* current thread_info */
> +#endif
> +        lwz     r6,TI_PREEMPT(r8)
> +	addi	r7,r6,1
> +        stw     r7,TI_PREEMPT(r8)

Whitespace

The preempt count had better already be zero here, so we can just store
1 now, and 0 later, and avoid the stall on load results.

> +
>  	isync
> -	lwepx	r9, 0, r5
> +
> +	/*
> +	 * In case the read goes wrong, we catch it and write an invalid value
> +	 * in LAST_INST instead.
> +	 */
> +1:	lwepx	r9, 0, r5
> +2:
> +.section .fixup, "ax"
> +3:	li r9, KVM_INST_FETCH_FAILED
> +	b 2b

Please tab after the opcode

> +.previous
> +.section __ex_table,"a"
> +	PPC_LONG_ALIGN
> +	PPC_LONG 1b,3b
> +.previous
> +
>  	mtspr	SPRN_EPLC, r3
> +        stw     r6,TI_PREEMPT(r8)
>  	stw	r9, VCPU_LAST_INST(r4)

Whitespace

-Scott


WARNING: multiple messages have this Message-ID (diff)
From: Scott Wood <scottwood@freescale.com>
To: Alexander Graf <agraf@suse.de>
Cc: linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org,
	kvm-ppc@vger.kernel.org
Subject: Re: [PATCH 19/30] KVM: PPC: e500mc: add load inst fixup
Date: Fri, 17 Feb 2012 17:17:02 -0600	[thread overview]
Message-ID: <4F3EDFEE.3040106@freescale.com> (raw)
In-Reply-To: <1329498837-11717-20-git-send-email-agraf@suse.de>

On 02/17/2012 11:13 AM, Alexander Graf wrote:
> There's always a chance we're unable to read a guest instruction. The guest
> could have its TLB mapped execute-, but not readable, something odd happens
> and our TLB gets flushed. So it's a good idea to be prepared for that case
> and have a fallback that allows us to fix things up in that case.
> 
> Add fixup code that keeps guest code from potentially crashing our host kernel.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>  arch/powerpc/kvm/bookehv_interrupts.S |   30 +++++++++++++++++++++++++++++-
>  1 files changed, 29 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
> index 63023ae..e0f484c 100644
> --- a/arch/powerpc/kvm/bookehv_interrupts.S
> +++ b/arch/powerpc/kvm/bookehv_interrupts.S
> @@ -28,6 +28,7 @@
>  #include <asm/asm-compat.h>
>  #include <asm/asm-offsets.h>
>  #include <asm/bitsperlong.h>
> +#include <asm/thread_info.h>
>  
>  #include "../kernel/head_booke.h" /* for THREAD_NORMSAVE() */
>  
> @@ -171,9 +172,36 @@
>  	PPC_STL	r30, VCPU_GPR(r30)(r4)
>  	PPC_STL	r31, VCPU_GPR(r31)(r4)
>  	mtspr	SPRN_EPLC, r8
> +
> +	/* disable preemption, so we are sure we hit the fixup handler */
> +#ifdef CONFIG_PPC64
> +	clrrdi	r8,r1,THREAD_SHIFT
> +#else
> +	rlwinm	r8,r1,0,0,31-THREAD_SHIFT       /* current thread_info */
> +#endif
> +        lwz     r6,TI_PREEMPT(r8)
> +	addi	r7,r6,1
> +        stw     r7,TI_PREEMPT(r8)

Whitespace

The preempt count had better already be zero here, so we can just store
1 now, and 0 later, and avoid the stall on load results.

> +
>  	isync
> -	lwepx	r9, 0, r5
> +
> +	/*
> +	 * In case the read goes wrong, we catch it and write an invalid value
> +	 * in LAST_INST instead.
> +	 */
> +1:	lwepx	r9, 0, r5
> +2:
> +.section .fixup, "ax"
> +3:	li r9, KVM_INST_FETCH_FAILED
> +	b 2b

Please tab after the opcode

> +.previous
> +.section __ex_table,"a"
> +	PPC_LONG_ALIGN
> +	PPC_LONG 1b,3b
> +.previous
> +
>  	mtspr	SPRN_EPLC, r3
> +        stw     r6,TI_PREEMPT(r8)
>  	stw	r9, VCPU_LAST_INST(r4)

Whitespace

-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>,
	<linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH 19/30] KVM: PPC: e500mc: add load inst fixup
Date: Fri, 17 Feb 2012 17:17:02 -0600	[thread overview]
Message-ID: <4F3EDFEE.3040106@freescale.com> (raw)
In-Reply-To: <1329498837-11717-20-git-send-email-agraf@suse.de>

On 02/17/2012 11:13 AM, Alexander Graf wrote:
> There's always a chance we're unable to read a guest instruction. The guest
> could have its TLB mapped execute-, but not readable, something odd happens
> and our TLB gets flushed. So it's a good idea to be prepared for that case
> and have a fallback that allows us to fix things up in that case.
> 
> Add fixup code that keeps guest code from potentially crashing our host kernel.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>  arch/powerpc/kvm/bookehv_interrupts.S |   30 +++++++++++++++++++++++++++++-
>  1 files changed, 29 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
> index 63023ae..e0f484c 100644
> --- a/arch/powerpc/kvm/bookehv_interrupts.S
> +++ b/arch/powerpc/kvm/bookehv_interrupts.S
> @@ -28,6 +28,7 @@
>  #include <asm/asm-compat.h>
>  #include <asm/asm-offsets.h>
>  #include <asm/bitsperlong.h>
> +#include <asm/thread_info.h>
>  
>  #include "../kernel/head_booke.h" /* for THREAD_NORMSAVE() */
>  
> @@ -171,9 +172,36 @@
>  	PPC_STL	r30, VCPU_GPR(r30)(r4)
>  	PPC_STL	r31, VCPU_GPR(r31)(r4)
>  	mtspr	SPRN_EPLC, r8
> +
> +	/* disable preemption, so we are sure we hit the fixup handler */
> +#ifdef CONFIG_PPC64
> +	clrrdi	r8,r1,THREAD_SHIFT
> +#else
> +	rlwinm	r8,r1,0,0,31-THREAD_SHIFT       /* current thread_info */
> +#endif
> +        lwz     r6,TI_PREEMPT(r8)
> +	addi	r7,r6,1
> +        stw     r7,TI_PREEMPT(r8)

Whitespace

The preempt count had better already be zero here, so we can just store
1 now, and 0 later, and avoid the stall on load results.

> +
>  	isync
> -	lwepx	r9, 0, r5
> +
> +	/*
> +	 * In case the read goes wrong, we catch it and write an invalid value
> +	 * in LAST_INST instead.
> +	 */
> +1:	lwepx	r9, 0, r5
> +2:
> +.section .fixup, "ax"
> +3:	li r9, KVM_INST_FETCH_FAILED
> +	b 2b

Please tab after the opcode

> +.previous
> +.section __ex_table,"a"
> +	PPC_LONG_ALIGN
> +	PPC_LONG 1b,3b
> +.previous
> +
>  	mtspr	SPRN_EPLC, r3
> +        stw     r6,TI_PREEMPT(r8)
>  	stw	r9, VCPU_LAST_INST(r4)

Whitespace

-Scott

  reply	other threads:[~2012-02-17 23:17 UTC|newest]

Thread overview: 130+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-17 17:13 [PATCH 00/30] KVM: PPC: e500mc support Alexander Graf
2012-02-17 17:13 ` Alexander Graf
2012-02-17 17:13 ` Alexander Graf
2012-02-17 17:13 ` [PATCH 01/30] powerpc/booke: Set CPU_FTR_DEBUG_LVL_EXC on 32-bit Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 02/30] powerpc/e500: split CPU_FTRS_ALWAYS/CPU_FTRS_POSSIBLE Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 03/30] KVM: PPC: factor out lpid allocator from book3s_64_mmu_hv Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 04/30] KVM: PPC: booke: add booke-level vcpu load/put Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 05/30] KVM: PPC: booke: Move vm core init/destroy out of booke.c Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 06/30] KVM: PPC: e500: rename e500_tlb.h to e500.h Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 07/30] KVM: PPC: e500: merge <asm/kvm_e500.h> into arch/powerpc/kvm/e500.h Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 08/30] KVM: PPC: e500: clean up arch/powerpc/kvm/e500.h Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 09/30] KVM: PPC: e500: refactor core-specific TLB code Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 10/30] KVM: PPC: e500: Track TLB1 entries with a bitmap Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 11/30] KVM: PPC: e500: emulate tlbilx Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 12/30] powerpc/booke: Provide exception macros with interrupt name Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 13/30] KVM: PPC: booke: category E.HV (GS-mode) support Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 21:12   ` Scott Wood
2012-02-17 21:12     ` Scott Wood
2012-02-17 21:12     ` Scott Wood
2012-02-20 11:40     ` Alexander Graf
2012-02-20 11:40       ` Alexander Graf
2012-02-20 11:40       ` Alexander Graf
2012-02-17 17:13 ` [PATCH 14/30] KVM: PPC: booke: standard PPC floating point support Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 15/30] KVM: PPC: e500mc support Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 16/30] KVM: PPC: e500mc: Add doorbell emulation support Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 21:55   ` Scott Wood
2012-02-17 21:55     ` Scott Wood
2012-02-17 21:55     ` Scott Wood
2012-02-17 21:57     ` Scott Wood
2012-02-17 21:57       ` Scott Wood
2012-02-17 21:57       ` Scott Wood
2012-02-20 11:49     ` Alexander Graf
2012-02-20 11:49       ` Alexander Graf
2012-02-20 11:49       ` Alexander Graf
2012-02-20 15:39       ` Scott Wood
2012-02-20 15:39         ` Scott Wood
2012-02-20 15:39         ` Scott Wood
2012-02-20 15:42         ` Alexander Graf
2012-02-20 15:42           ` Alexander Graf
2012-02-20 15:42           ` Alexander Graf
2012-02-17 17:13 ` [PATCH 17/30] KVM: PPC: e500mc: implicitly set MSR_GS Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 18/30] KVM: PPC: e500mc: Move r1/r2 restoration very early Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 19/30] KVM: PPC: e500mc: add load inst fixup Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 23:17   ` Scott Wood [this message]
2012-02-17 23:17     ` Scott Wood
2012-02-17 23:17     ` Scott Wood
2012-02-17 17:13 ` [PATCH 20/30] KVM: PPC: rename CONFIG_KVM_E500 -> CONFIG_KVM_E500V2 Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 21/30] KVM: PPC: make e500v2 and e500mc mutually exclusive Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 22:13   ` Scott Wood
2012-02-17 22:13     ` Scott Wood
2012-02-17 22:13     ` Scott Wood
2012-02-17 17:13 ` [PATCH 22/30] KVM: PPC: booke: remove leftover debugging Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 23/30] KVM: PPC: booke: deliver program int on emulation failure Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 24/30] KVM: PPC: booke: call resched after every exit Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 23:00   ` Scott Wood
2012-02-17 23:00     ` Scott Wood
2012-02-17 23:00     ` Scott Wood
2012-02-20 13:17     ` Alexander Graf
2012-02-20 13:17       ` Alexander Graf
2012-02-20 13:17       ` Alexander Graf
2012-02-20 17:18       ` Scott Wood
2012-02-20 17:18         ` Scott Wood
2012-02-20 17:18         ` Scott Wood
2012-02-17 17:13 ` [PATCH 25/30] KVM: PPC: booke: BOOKE_IRQPRIO_MAX is n+1 Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 26/30] KVM: PPC: bookehv: fix exit timing Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 27/30] KVM: PPC: bookehv: remove negation for CONFIG_64BIT Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 28/30] KVM: PPC: bookehv: remove SET_VCPU Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 29/30] KVM: PPC: bookehv: disable MAS register updates early Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13 ` [PATCH 30/30] KVM: PPC: bookehv: add comment about shadow_msr Alexander Graf
2012-02-17 17:13   ` Alexander Graf
2012-02-17 17:13   ` Alexander Graf
  -- strict thread matches above, loose matches on Subject: below --
2012-02-17 16:56 [PATCH 00/30] KVM: PPC: e500mc support Alexander Graf
2012-02-17 16:56 ` [PATCH 19/30] KVM: PPC: e500mc: add load inst fixup Alexander Graf

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=4F3EDFEE.3040106@freescale.com \
    --to=scottwood@freescale.com \
    --cc=agraf@suse.de \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.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.