[FSL P50x0] Xorg always restarts again and again after the the PowerPC updates 5.13-1
Christian Zigotzky
chzigotzky at xenosoft.de
Fri May 14 10:19:32 AEST 2021
On 14 May 2021 at 00:58am, Nicholas Piggin wrote:
> 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.leroy at 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
>
>
Hi Nicholas,
I compiled the RC1 with your patch today and Xorg works without any
problems.
Many thanks! It was a long way.
Cheers,
Christian
More information about the Linuxppc-dev
mailing list