Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK

2020-01-25 Thread Christophe Leroy

Michael Ellerman  a écrit :


Christophe Leroy  writes:

Michael Ellerman  a écrit :

Christophe Leroy  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 */
addir3,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 
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 
Signed-off-by: Michael Ellerman 
---
 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 */
addir3,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





Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK

2020-01-25 Thread Michael Ellerman
Christophe Leroy  writes:
> Michael Ellerman  a écrit :
>> Christophe Leroy  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 */
>>  addir3,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 
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 
Signed-off-by: Michael Ellerman 
---
 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 */
addir3,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





Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK

2020-01-25 Thread Christophe Leroy

Michael Ellerman  a écrit :


Christophe Leroy  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 
---
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 
---
 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 */
addir3,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


Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK

2020-01-25 Thread Michael Ellerman
Christophe Leroy  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 
> ---
> 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 
> ---
>  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 */
addir3,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
>   subir11, r1, INT_FRAME_SIZE /* use r1 if kernel */
>  #else


Re: [PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK

2020-01-25 Thread Michael Ellerman
Christophe Leroy  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 
> ---
> 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


[PATCH] powerpc/32: Add missing context synchronisation with CONFIG_VMAP_STACK

2020-01-24 Thread Christophe Leroy
After reactivation of data translation by modifying MSR[DR], a isync
is required to ensure the translation is effective.

Signed-off-by: Christophe Leroy 
---
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 
---
 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
subir11, 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