Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK
From: Christophe Leroy <hidden>
Date: 2020-01-25 14:34:56
Also in:
lkml
Michael Ellerman [off-list ref] a écrit :
Christophe Leroy [off-list ref] writes:quoted
Michael Ellerman [off-list ref] a écrit :quoted
Christophe Leroy [off-list ref] writes:...quoted
quoted
quoted
diff --git a/arch/powerpc/kernel/head_32.h b/arch/powerpc/kernel/head_32.h index 73a035b40dbf..a6a5fbbf8504 100644 --- a/arch/powerpc/kernel/head_32.h +++ b/arch/powerpc/kernel/head_32.h@@ -43,6 +43,7 @@ .ifeq \for_rtas li r11, MSR_KERNEL & ~(MSR_IR | MSR_RI) /* can take DTLB miss */ mtmsr r11 + isyncActually this one leads to: /home/michael/linux/arch/powerpc/kernel/head_8xx.S: Assembler messages: /home/michael/linux/arch/powerpc/kernel/head_8xx.S:151: Error: attempt to move .org backwards make[3]: *** [/home/michael/linux/scripts/Makefile.build:348: arch/powerpc/kernel/head_8xx.o] Error 1 For mpc885_ads_defconfig. That's the alignment exception overflowing into the program check handler: /* Alignment exception */ . = 0x600 Alignment: EXCEPTION_PROLOG handle_dar_dsisr=1 save_dar_dsisr_on_stack r4, r5, r11 li r6, RPN_PATTERN mtspr SPRN_DAR, r6 /* Tag DAR, to be used in DTLB Error */ addi r3,r1,STACK_FRAME_OVERHEAD EXC_XFER_STD(0x600, alignment_exception) /* Program check exception */ EXCEPTION(0x700, ProgramCheck, program_check_exception, EXC_XFER_STD) Can't see an obvious/easy way to fix it.Argh ! I think the easiest is to move the EXC_XFER_STD(0x600, alignment_exception) somewhere else and branch to it. There is some space at .0xa00That works, or builds at least. I'm not setup to boot test it. Does this look OK?
Yes it looks ok, Thanks Christophe
quoted hunk ↗ jump to hunk
cheers From 40e7d671aa27cf4411188f978b2cd06b30a9cb6c Mon Sep 17 00:00:00 2001 From: Michael Ellerman <mpe@ellerman.id.au> Date: Sun, 26 Jan 2020 00:20:16 +1100 Subject: [PATCH] powerpc/8xx: Move tail of alignment exception out of line When we enable VMAP_STACK there will not be enough room for the alignment handler at 0x600 in head_8xx.S. For now move the tail of the alignment handler out of line, and branch to it. Suggested-by: Christophe Leroy <redacted> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> --- arch/powerpc/kernel/head_8xx.S | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S index 477933b36bde..9922306ae512 100644 --- a/arch/powerpc/kernel/head_8xx.S +++ b/arch/powerpc/kernel/head_8xx.S@@ -145,7 +145,7 @@ _ENTRY(_start); li r6, RPN_PATTERN mtspr SPRN_DAR, r6 /* Tag DAR, to be used in DTLB Error */ addi r3,r1,STACK_FRAME_OVERHEAD - EXC_XFER_STD(0x600, alignment_exception) + b .Lalignment_exception_ool /* Program check exception */ EXCEPTION(0x700, ProgramCheck, program_check_exception, EXC_XFER_STD)@@ -153,6 +153,11 @@ _ENTRY(_start); /* Decrementer */ EXCEPTION(0x900, Decrementer, timer_interrupt, EXC_XFER_LITE) + /* With VMAP_STACK there's not enough room for this at 0x600 */ + . = 0xa00 +.Lalignment_exception_ool: + EXC_XFER_STD(0x600, alignment_exception) + /* System call */ . = 0xc00 SystemCall: --2.21.1