public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler
@ 2012-04-16 14:08 Mihai Caraman
  2012-04-16 14:08 ` [PATCH 2/2] KVM: PPC: bookehv: Use lwz/stw instead of PPC_LL/PPC_STL for 32-bit fields Mihai Caraman
  2012-04-26 11:36 ` [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler Alexander Graf
  0 siblings, 2 replies; 6+ messages in thread
From: Mihai Caraman @ 2012-04-16 14:08 UTC (permalink / raw)
  To: kvm-ppc; +Cc: kvm, Mihai Caraman

Guest r8 register is held in the scratch register and stored correctly,
so remove the instruction that clobbers it. Guest r13 was missing from vcpu,
store it there.

Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
---
 arch/powerpc/kvm/bookehv_interrupts.S |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
index 0d04bc9..0ca987d 100644
--- a/arch/powerpc/kvm/bookehv_interrupts.S
+++ b/arch/powerpc/kvm/bookehv_interrupts.S
@@ -264,10 +264,10 @@ _GLOBAL(kvmppc_handler_\intno\()_\srr1)
 	mfspr	r6, \srr1
 	PPC_LL	r4, GPR11(r8)
 	PPC_STL	r7, VCPU_GPR(r7)(r11)
-	PPC_STL	r8, VCPU_GPR(r8)(r11)
 	PPC_STL r3, VCPU_GPR(r10)(r11)
 	mfctr	r7
 	PPC_STL	r12, VCPU_GPR(r12)(r11)
+	PPC_STL r13, VCPU_GPR(r13)(r11)
 	PPC_STL	r4, VCPU_GPR(r11)(r11)
 	PPC_STL	r7, VCPU_CTR(r11)
 	mr	r4, r11
-- 
1.7.4.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] KVM: PPC: bookehv: Use lwz/stw instead of PPC_LL/PPC_STL for 32-bit fields
  2012-04-16 14:08 [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler Mihai Caraman
@ 2012-04-16 14:08 ` Mihai Caraman
  2012-04-26 11:40   ` Alexander Graf
  2012-04-26 11:36 ` [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler Alexander Graf
  1 sibling, 1 reply; 6+ messages in thread
From: Mihai Caraman @ 2012-04-16 14:08 UTC (permalink / raw)
  To: kvm-ppc; +Cc: kvm, Mihai Caraman

Interrupt code used PPC_LL/PPC_STL macros to load/store some of u32 fields
which led to memory overflow on 64-bit. Use lwz/stw instead.

Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
---
 arch/powerpc/kvm/bookehv_interrupts.S |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
index 0ca987d..e351c53 100644
--- a/arch/powerpc/kvm/bookehv_interrupts.S
+++ b/arch/powerpc/kvm/bookehv_interrupts.S
@@ -95,9 +95,9 @@
 	mfspr	r8, SPRN_TBRL
 	mfspr	r9, SPRN_TBRU
 	cmpw	r9, r7
-	PPC_STL	r8, VCPU_TIMING_EXIT_TBL(r4)
+	stw	r8, VCPU_TIMING_EXIT_TBL(r4)
 	bne-	1b
-	PPC_STL	r9, VCPU_TIMING_EXIT_TBU(r4)
+	stw	r9, VCPU_TIMING_EXIT_TBU(r4)
 #endif
 
 	oris	r8, r6, MSR_CE@h
@@ -228,7 +228,7 @@ _GLOBAL(kvmppc_handler_\intno\()_\srr1)
 	PPC_STL	r4, VCPU_GPR(r4)(r11)
 	PPC_LL	r4, THREAD_NORMSAVE(0)(r10)
 	PPC_STL	r5, VCPU_GPR(r5)(r11)
-	PPC_STL	r13, VCPU_CR(r11)
+	stw	r13, VCPU_CR(r11)
 	mfspr	r5, \srr0
 	PPC_STL	r3, VCPU_GPR(r10)(r11)
 	PPC_LL	r3, THREAD_NORMSAVE(2)(r10)
@@ -255,7 +255,7 @@ _GLOBAL(kvmppc_handler_\intno\()_\srr1)
 	PPC_STL	r4, VCPU_GPR(r4)(r11)
 	PPC_LL	r4, GPR9(r8)
 	PPC_STL	r5, VCPU_GPR(r5)(r11)
-	PPC_STL	r9, VCPU_CR(r11)
+	stw	r9, VCPU_CR(r11)
 	mfspr	r5, \srr0
 	PPC_STL	r3, VCPU_GPR(r8)(r11)
 	PPC_LL	r3, GPR10(r8)
@@ -327,7 +327,7 @@ _GLOBAL(kvmppc_resume_host)
 	mfspr	r6, SPRN_SPRG4
 	PPC_STL	r5, VCPU_LR(r4)
 	mfspr	r7, SPRN_SPRG5
-	PPC_STL	r3, VCPU_VRSAVE(r4)
+	stw	r3, VCPU_VRSAVE(r4)
 	PPC_STD(r6, VCPU_SHARED_SPRG4, r11)
 	mfspr	r8, SPRN_SPRG6
 	PPC_STD(r7, VCPU_SHARED_SPRG5, r11)
@@ -571,7 +571,7 @@ lightweight_exit:
 	PPC_LL	r3, VCPU_LR(r4)
 	PPC_LL	r5, VCPU_XER(r4)
 	PPC_LL	r6, VCPU_CTR(r4)
-	PPC_LL	r7, VCPU_CR(r4)
+	lwz	r7, VCPU_CR(r4)
 	PPC_LL	r8, VCPU_PC(r4)
 #ifdef CONFIG_64BIT
 	ld	r9, (VCPU_SHARED_MSR)(r11)
@@ -598,9 +598,9 @@ lightweight_exit:
 	mfspr	r9, SPRN_TBRL
 	mfspr	r8, SPRN_TBRU
 	cmpw	r8, r6
-	PPC_STL	r9, VCPU_TIMING_LAST_ENTER_TBL(r4)
+	stw	r9, VCPU_TIMING_LAST_ENTER_TBL(r4)
 	bne	1b
-	PPC_STL	r8, VCPU_TIMING_LAST_ENTER_TBU(r4)
+	stw	r8, VCPU_TIMING_LAST_ENTER_TBU(r4)
 #endif
 
 	/*
-- 
1.7.4.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler
  2012-04-16 14:08 [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler Mihai Caraman
  2012-04-16 14:08 ` [PATCH 2/2] KVM: PPC: bookehv: Use lwz/stw instead of PPC_LL/PPC_STL for 32-bit fields Mihai Caraman
@ 2012-04-26 11:36 ` Alexander Graf
  2012-04-26 17:43   ` Scott Wood
  1 sibling, 1 reply; 6+ messages in thread
From: Alexander Graf @ 2012-04-26 11:36 UTC (permalink / raw)
  To: Mihai Caraman; +Cc: kvm-ppc, kvm


On 16.04.2012, at 16:08, Mihai Caraman wrote:

> Guest r8 register is held in the scratch register and stored correctly,
> so remove the instruction that clobbers it. Guest r13 was missing from vcpu,
> store it there.
> 
> Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
> ---
> arch/powerpc/kvm/bookehv_interrupts.S |    2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
> index 0d04bc9..0ca987d 100644
> --- a/arch/powerpc/kvm/bookehv_interrupts.S
> +++ b/arch/powerpc/kvm/bookehv_interrupts.S
> @@ -264,10 +264,10 @@ _GLOBAL(kvmppc_handler_\intno\()_\srr1)
> 	mfspr	r6, \srr1
> 	PPC_LL	r4, GPR11(r8)
> 	PPC_STL	r7, VCPU_GPR(r7)(r11)
> -	PPC_STL	r8, VCPU_GPR(r8)(r11)

I'm not sure I can follow you here. The code that leads up to this is:

#define NORMAL_EXCEPTION_PROLOG(intno)                                               \
        mtspr   SPRN_SPRG_WSCRATCH0, r10;       /* save one register */      \
        mfspr   r10, SPRN_SPRG_THREAD;                                       \
        stw     r11, THREAD_NORMSAVE(0)(r10);                                \
        stw     r13, THREAD_NORMSAVE(2)(r10);                                \
        mfcr    r13;                    /* save CR in r13 for now          */\
        mfspr   r11, SPRN_SRR1;                                              \
        DO_KVM  BOOKE_INTERRUPT_##intno SPRN_SRR1;                           \

[...]

.macro DO_KVM intno srr1
#ifdef CONFIG_KVM_BOOKE_HV
BEGIN_FTR_SECTION
        mtocrf  0x80, r11       /* check MSR[GS] without clobbering reg */
        bf      3, kvmppc_resume_\intno\()_\srr1
        b       kvmppc_handler_\intno\()_\srr1
kvmppc_resume_\intno\()_\srr1:
END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV)
#endif
.endm

[...]

So where is r8 held in a scratch register here? The only registers that I can see stored in scratch registers are r10, r11, r13


> 	PPC_STL r3, VCPU_GPR(r10)(r11)
> 	mfctr	r7
> 	PPC_STL	r12, VCPU_GPR(r12)(r11)
> +	PPC_STL r13, VCPU_GPR(r13)(r11)

r13 however is in a scratch register / scratch memory location according to the code above :).


Alex

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/2] KVM: PPC: bookehv: Use lwz/stw instead of PPC_LL/PPC_STL for 32-bit fields
  2012-04-16 14:08 ` [PATCH 2/2] KVM: PPC: bookehv: Use lwz/stw instead of PPC_LL/PPC_STL for 32-bit fields Mihai Caraman
@ 2012-04-26 11:40   ` Alexander Graf
  0 siblings, 0 replies; 6+ messages in thread
From: Alexander Graf @ 2012-04-26 11:40 UTC (permalink / raw)
  To: Mihai Caraman; +Cc: kvm-ppc, kvm


On 16.04.2012, at 16:08, Mihai Caraman wrote:

> Interrupt code used PPC_LL/PPC_STL macros to load/store some of u32 fields
> which led to memory overflow on 64-bit. Use lwz/stw instead.

Phew, pretty ugly :). Applied to kvm-ppc-next.


Alex

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler
  2012-04-26 11:36 ` [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler Alexander Graf
@ 2012-04-26 17:43   ` Scott Wood
  2012-05-02 11:12     ` Alexander Graf
  0 siblings, 1 reply; 6+ messages in thread
From: Scott Wood @ 2012-04-26 17:43 UTC (permalink / raw)
  To: Alexander Graf; +Cc: Mihai Caraman, kvm-ppc, kvm

On 04/26/2012 06:36 AM, Alexander Graf wrote:
> 
> On 16.04.2012, at 16:08, Mihai Caraman wrote:
> 
>> Guest r8 register is held in the scratch register and stored correctly,
>> so remove the instruction that clobbers it. Guest r13 was missing from vcpu,
>> store it there.
>>
>> Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
>> ---
>> arch/powerpc/kvm/bookehv_interrupts.S |    2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
>> index 0d04bc9..0ca987d 100644
>> --- a/arch/powerpc/kvm/bookehv_interrupts.S
>> +++ b/arch/powerpc/kvm/bookehv_interrupts.S
>> @@ -264,10 +264,10 @@ _GLOBAL(kvmppc_handler_\intno\()_\srr1)
>> 	mfspr	r6, \srr1
>> 	PPC_LL	r4, GPR11(r8)
>> 	PPC_STL	r7, VCPU_GPR(r7)(r11)
>> -	PPC_STL	r8, VCPU_GPR(r8)(r11)
> 
> I'm not sure I can follow you here. The code that leads up to this is:
> 
> #define NORMAL_EXCEPTION_PROLOG(intno)                                               \
>         mtspr   SPRN_SPRG_WSCRATCH0, r10;       /* save one register */      \
>         mfspr   r10, SPRN_SPRG_THREAD;                                       \
>         stw     r11, THREAD_NORMSAVE(0)(r10);                                \
>         stw     r13, THREAD_NORMSAVE(2)(r10);                                \
>         mfcr    r13;                    /* save CR in r13 for now          */\
>         mfspr   r11, SPRN_SRR1;                                              \
>         DO_KVM  BOOKE_INTERRUPT_##intno SPRN_SRR1;                           \

See the subject line -- this is for level exceptions
(EXC_LEVEL_EXCEPTION_PROLOG), not normal exceptions.

-Scott

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler
  2012-04-26 17:43   ` Scott Wood
@ 2012-05-02 11:12     ` Alexander Graf
  0 siblings, 0 replies; 6+ messages in thread
From: Alexander Graf @ 2012-05-02 11:12 UTC (permalink / raw)
  To: Scott Wood; +Cc: Mihai Caraman, kvm-ppc, kvm

On 04/26/2012 07:43 PM, Scott Wood wrote:
> On 04/26/2012 06:36 AM, Alexander Graf wrote:
>> On 16.04.2012, at 16:08, Mihai Caraman wrote:
>>
>>> Guest r8 register is held in the scratch register and stored correctly,
>>> so remove the instruction that clobbers it. Guest r13 was missing from vcpu,
>>> store it there.
>>>
>>> Signed-off-by: Mihai Caraman<mihai.caraman@freescale.com>
>>> ---
>>> arch/powerpc/kvm/bookehv_interrupts.S |    2 +-
>>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
>>> index 0d04bc9..0ca987d 100644
>>> --- a/arch/powerpc/kvm/bookehv_interrupts.S
>>> +++ b/arch/powerpc/kvm/bookehv_interrupts.S
>>> @@ -264,10 +264,10 @@ _GLOBAL(kvmppc_handler_\intno\()_\srr1)
>>> 	mfspr	r6, \srr1
>>> 	PPC_LL	r4, GPR11(r8)
>>> 	PPC_STL	r7, VCPU_GPR(r7)(r11)
>>> -	PPC_STL	r8, VCPU_GPR(r8)(r11)
>> I'm not sure I can follow you here. The code that leads up to this is:
>>
>> #define NORMAL_EXCEPTION_PROLOG(intno)                                               \
>>          mtspr   SPRN_SPRG_WSCRATCH0, r10;       /* save one register */      \
>>          mfspr   r10, SPRN_SPRG_THREAD;                                       \
>>          stw     r11, THREAD_NORMSAVE(0)(r10);                                \
>>          stw     r13, THREAD_NORMSAVE(2)(r10);                                \
>>          mfcr    r13;                    /* save CR in r13 for now          */\
>>          mfspr   r11, SPRN_SRR1;                                              \
>>          DO_KVM  BOOKE_INTERRUPT_##intno SPRN_SRR1;                           \
> See the subject line -- this is for level exceptions
> (EXC_LEVEL_EXCEPTION_PROLOG), not normal exceptions.

Ah, my bad. Sorry.

Thanks, applied to kvm-ppc-next.


Alex


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-05-02 11:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-16 14:08 [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler Mihai Caraman
2012-04-16 14:08 ` [PATCH 2/2] KVM: PPC: bookehv: Use lwz/stw instead of PPC_LL/PPC_STL for 32-bit fields Mihai Caraman
2012-04-26 11:40   ` Alexander Graf
2012-04-26 11:36 ` [PATCH 1/2] KVM: PPC: bookehv: Fix r8/r13 storing in level exception handler Alexander Graf
2012-04-26 17:43   ` Scott Wood
2012-05-02 11:12     ` Alexander Graf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox