Excerpts from Christian Zigotzky's message of May 14, 2021 6:20 am:
> On 13 May 2021 at 07:00pm, Christophe Leroy wrote:
>>
>> Ah yes, I remember this problem.
>>
>> Can you select CONFIG_VIRT_CPU_ACCOUNTING_GEN in your configuration ?
>>
>> Otherwise, I can try to fix the branch.
>>
>> Christophe
> I selected this. After that it compiles.
> 
> 1. git bisect good - Xorg restarts again and again
>      Output: [f9aa0ac1e9e82b60401ad567bdabc30598325bc1] Revert 
> "powerpc/64e/interrupt: use new interrupt return"
> 2. git bisect good - Xorg restarts again and again
>      Output: [cd6d259a14704741bf0cd1dcadb84c0de22d7f77] Revert 
> "powerpc/64e/interrupt: always save nvgprs on interrupt"
> 3. git bisect bad - Xorg works
>      Output: [9bfa20ef2ae54d3b9088dfbcde4ef97062cf5ef2] Revert 
> "powerpc/interrupt: update common interrupt code for"
> 4. git bisect good - Xorg restarts again and again
>      Output:
> 
> cd6d259a14704741bf0cd1dcadb84c0de22d7f77 is the first bad commit
> commit cd6d259a14704741bf0cd1dcadb84c0de22d7f77
> Author: Christophe Leroy <christophe.le...@csgroup.eu>
> Date:   Thu May 13 09:52:06 2021 +0000
> 
>      Revert "powerpc/64e/interrupt: always save nvgprs on interrupt"
> 
>      This reverts commit 4228b2c3d20e9f80b847f809c38e6cf82864fa50.
> 
> :040000 040000 156542c857ad72776b69bb67b2f244afeeb7abd3 
> 92ea86ed097fce16238b0c2f2b343473894e4e8e M    arch

Thank you both very much for chasing this down.

I think I see the problem, it's clobbering r14 and r15 for some 
interrupts. Something like this is required, I'll give it more
review and testing though.

Thanks,
Nick

---
diff --git a/arch/powerpc/kernel/exceptions-64e.S 
b/arch/powerpc/kernel/exceptions-64e.S
index 7c3654b0d0f4..b91ef04f1ce2 100644
--- a/arch/powerpc/kernel/exceptions-64e.S
+++ b/arch/powerpc/kernel/exceptions-64e.S
@@ -535,6 +535,10 @@ __end_interrupts:
                                PROLOG_ADDITION_2REGS)
        mfspr   r14,SPRN_DEAR
        mfspr   r15,SPRN_ESR
+       std     r14,_DAR(r1)
+       std     r15,_DSISR(r1)
+       ld      r14,PACA_EXGEN+EX_R14(r13)
+       ld      r15,PACA_EXGEN+EX_R15(r13)
        EXCEPTION_COMMON(0x300)
        b       storage_fault_common
 
@@ -544,6 +548,10 @@ __end_interrupts:
                                PROLOG_ADDITION_2REGS)
        li      r15,0
        mr      r14,r10
+       std     r14,_DAR(r1)
+       std     r15,_DSISR(r1)
+       ld      r14,PACA_EXGEN+EX_R14(r13)
+       ld      r15,PACA_EXGEN+EX_R15(r13)
        EXCEPTION_COMMON(0x400)
        b       storage_fault_common
 
@@ -557,6 +565,10 @@ __end_interrupts:
                                PROLOG_ADDITION_2REGS)
        mfspr   r14,SPRN_DEAR
        mfspr   r15,SPRN_ESR
+       std     r14,_DAR(r1)
+       std     r15,_DSISR(r1)
+       ld      r14,PACA_EXGEN+EX_R14(r13)
+       ld      r15,PACA_EXGEN+EX_R15(r13)
        EXCEPTION_COMMON(0x600)
        b       alignment_more  /* no room, go out of line */
 
@@ -565,10 +577,10 @@ __end_interrupts:
        NORMAL_EXCEPTION_PROLOG(0x700, BOOKE_INTERRUPT_PROGRAM,
                                PROLOG_ADDITION_1REG)
        mfspr   r14,SPRN_ESR
-       EXCEPTION_COMMON(0x700)
        std     r14,_DSISR(r1)
-       addi    r3,r1,STACK_FRAME_OVERHEAD
        ld      r14,PACA_EXGEN+EX_R14(r13)
+       EXCEPTION_COMMON(0x700)
+       addi    r3,r1,STACK_FRAME_OVERHEAD
        bl      program_check_exception
        REST_NVGPRS(r1)
        b       interrupt_return
@@ -725,11 +737,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
         * normal exception
         */
        mfspr   r14,SPRN_DBSR
-       EXCEPTION_COMMON_CRIT(0xd00)
        std     r14,_DSISR(r1)
-       addi    r3,r1,STACK_FRAME_OVERHEAD
        ld      r14,PACA_EXCRIT+EX_R14(r13)
        ld      r15,PACA_EXCRIT+EX_R15(r13)
+       EXCEPTION_COMMON_CRIT(0xd00)
+       addi    r3,r1,STACK_FRAME_OVERHEAD
        bl      DebugException
        REST_NVGPRS(r1)
        b       interrupt_return
@@ -796,11 +808,11 @@ kernel_dbg_exc:
         * normal exception
         */
        mfspr   r14,SPRN_DBSR
-       EXCEPTION_COMMON_DBG(0xd08)
        std     r14,_DSISR(r1)
-       addi    r3,r1,STACK_FRAME_OVERHEAD
        ld      r14,PACA_EXDBG+EX_R14(r13)
        ld      r15,PACA_EXDBG+EX_R15(r13)
+       EXCEPTION_COMMON_DBG(0xd08)
+       addi    r3,r1,STACK_FRAME_OVERHEAD
        bl      DebugException
        REST_NVGPRS(r1)
        b       interrupt_return
@@ -931,11 +943,7 @@ masked_interrupt_book3e_0x2c0:
  * original values stashed away in the PACA
  */
 storage_fault_common:
-       std     r14,_DAR(r1)
-       std     r15,_DSISR(r1)
        addi    r3,r1,STACK_FRAME_OVERHEAD
-       ld      r14,PACA_EXGEN+EX_R14(r13)
-       ld      r15,PACA_EXGEN+EX_R15(r13)
        bl      do_page_fault
        b       interrupt_return
 
@@ -944,11 +952,7 @@ storage_fault_common:
  * continues here.
  */
 alignment_more:
-       std     r14,_DAR(r1)
-       std     r15,_DSISR(r1)
        addi    r3,r1,STACK_FRAME_OVERHEAD
-       ld      r14,PACA_EXGEN+EX_R14(r13)
-       ld      r15,PACA_EXGEN+EX_R15(r13)
        bl      alignment_exception
        REST_NVGPRS(r1)
        b       interrupt_return


Reply via email to