* [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK @ 2020-01-24 17:03 Christophe Leroy 2020-01-25 10:30 ` Michael Ellerman 2020-01-25 12:15 ` Michael Ellerman 0 siblings, 2 replies; 6+ messages in thread From: Christophe Leroy @ 2020-01-24 17:03 UTC (permalink / raw) To: Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman Cc: linuxppc-dev, linux-kernel After reactivation of data translation by modifying MSR[DR], a isync is required to ensure the translation is effective. Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> --- Rebased on powerpc/merge-test @mpe: If not too late: - change to head_32.h should be squashed into "powerpc/32: prepare for CONFIG_VMAP_STACK" - change to head_32.S should be squashed into "powerpc/32s: Enable CONFIG_VMAP_STACK" Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> --- arch/powerpc/kernel/head_32.S | 1 + arch/powerpc/kernel/head_32.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index cb7864091641..0493fcac6409 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S @@ -277,6 +277,7 @@ MachineCheck: #ifdef CONFIG_VMAP_STACK li r11, MSR_KERNEL & ~(MSR_IR | MSR_RI) /* can take DTLB miss */ mtmsr r11 + isync #endif #ifdef CONFIG_PPC_CHRP mfspr r11, SPRN_SPRG_THREAD 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 + isync .endif subi r11, r1, INT_FRAME_SIZE /* use r1 if kernel */ #else @@ -123,6 +124,7 @@ #ifdef CONFIG_VMAP_STACK li r9, MSR_KERNEL & ~(MSR_IR | MSR_RI) /* can take DTLB miss */ mtmsr r9 + isync #endif tovirt_vmstack r12, r12 tophys_novmstack r11, r11 -- 2.25.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK 2020-01-24 17:03 [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK Christophe Leroy @ 2020-01-25 10:30 ` Michael Ellerman 2020-01-25 12:15 ` Michael Ellerman 1 sibling, 0 replies; 6+ messages in thread From: Michael Ellerman @ 2020-01-25 10:30 UTC (permalink / raw) To: Christophe Leroy, Benjamin Herrenschmidt, Paul Mackerras Cc: linuxppc-dev, linux-kernel Christophe Leroy <christophe.leroy@c-s.fr> writes: > After reactivation of data translation by modifying MSR[DR], a isync > is required to ensure the translation is effective. > > Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> > --- > Rebased on powerpc/merge-test > > @mpe: If not too late: > - change to head_32.h should be squashed into "powerpc/32: prepare for CONFIG_VMAP_STACK" > - change to head_32.S should be squashed into "powerpc/32s: Enable CONFIG_VMAP_STACK" Done. Thanks. cheers ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK 2020-01-24 17:03 [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK Christophe Leroy 2020-01-25 10:30 ` Michael Ellerman @ 2020-01-25 12:15 ` Michael Ellerman 2020-01-25 13:00 ` Christophe Leroy 1 sibling, 1 reply; 6+ messages in thread From: Michael Ellerman @ 2020-01-25 12:15 UTC (permalink / raw) To: Christophe Leroy, Benjamin Herrenschmidt, Paul Mackerras Cc: linuxppc-dev, linux-kernel Christophe Leroy <christophe.leroy@c-s.fr> writes: > After reactivation of data translation by modifying MSR[DR], a isync > is required to ensure the translation is effective. > > Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> > --- > Rebased on powerpc/merge-test > > @mpe: If not too late: > - change to head_32.h should be squashed into "powerpc/32: prepare for CONFIG_VMAP_STACK" > - change to head_32.S should be squashed into "powerpc/32s: Enable CONFIG_VMAP_STACK" > > Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> > --- > arch/powerpc/kernel/head_32.S | 1 + > arch/powerpc/kernel/head_32.h | 2 ++ > 2 files changed, 3 insertions(+) > > 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 > + isync Actually 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. cheers > .endif > subi r11, r1, INT_FRAME_SIZE /* use r1 if kernel */ > #else ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK 2020-01-25 12:15 ` Michael Ellerman @ 2020-01-25 13:00 ` Christophe Leroy 2020-01-25 13:28 ` Michael Ellerman 0 siblings, 1 reply; 6+ messages in thread From: Christophe Leroy @ 2020-01-25 13:00 UTC (permalink / raw) To: Michael Ellerman; +Cc: Paul Mackerras, linuxppc-dev, linux-kernel Michael Ellerman <mpe@ellerman.id.au> a écrit : > Christophe Leroy <christophe.leroy@c-s.fr> writes: >> After reactivation of data translation by modifying MSR[DR], a isync >> is required to ensure the translation is effective. >> >> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> >> --- >> Rebased on powerpc/merge-test >> >> @mpe: If not too late: >> - change to head_32.h should be squashed into "powerpc/32: prepare >> for CONFIG_VMAP_STACK" >> - change to head_32.S should be squashed into "powerpc/32s: Enable >> CONFIG_VMAP_STACK" >> >> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> >> --- >> arch/powerpc/kernel/head_32.S | 1 + >> arch/powerpc/kernel/head_32.h | 2 ++ >> 2 files changed, 3 insertions(+) >> >> 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 >> + isync > > Actually 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 .0xa00 Christophe PS: I'm afk until monday ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK 2020-01-25 13:00 ` Christophe Leroy @ 2020-01-25 13:28 ` Michael Ellerman 2020-01-25 14:35 ` Christophe Leroy 0 siblings, 1 reply; 6+ messages in thread From: Michael Ellerman @ 2020-01-25 13:28 UTC (permalink / raw) To: Christophe Leroy; +Cc: Paul Mackerras, linuxppc-dev, linux-kernel Christophe Leroy <christophe.leroy@c-s.fr> writes: > Michael Ellerman <mpe@ellerman.id.au> a écrit : >> Christophe Leroy <christophe.leroy@c-s.fr> writes: ... >>> 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 >>> + isync >> >> Actually 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 .0xa00 That works, or builds at least. I'm not setup to boot test it. Does this look OK? 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 <christophe.leroy@c-s.fr> 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 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK 2020-01-25 13:28 ` Michael Ellerman @ 2020-01-25 14:35 ` Christophe Leroy 0 siblings, 0 replies; 6+ messages in thread From: Christophe Leroy @ 2020-01-25 14:35 UTC (permalink / raw) To: Michael Ellerman; +Cc: linuxppc-dev, Paul Mackerras, linux-kernel Michael Ellerman <mpe@ellerman.id.au> a écrit : > Christophe Leroy <christophe.leroy@c-s.fr> writes: >> Michael Ellerman <mpe@ellerman.id.au> a écrit : >>> Christophe Leroy <christophe.leroy@c-s.fr> writes: > ... >>>> 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 >>>> + isync >>> >>> Actually 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 .0xa00 > > That works, or builds at least. I'm not setup to boot test it. > > Does this look OK? Yes it looks ok, Thanks Christophe > > 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 <christophe.leroy@c-s.fr> > 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 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-01-25 14:37 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-01-24 17:03 [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK Christophe Leroy 2020-01-25 10:30 ` Michael Ellerman 2020-01-25 12:15 ` Michael Ellerman 2020-01-25 13:00 ` Christophe Leroy 2020-01-25 13:28 ` Michael Ellerman 2020-01-25 14:35 ` Christophe Leroy
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).