2013-03-15 02:51:10

by Chen Gang

[permalink] [raw]
Subject: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

Hello Maintainers:

do next-* tree support powerpc POWER7 with allmodconfig ?

I met an issue, can we bear it (or I need additional trying) ?


Compiling:
make V=1 EXTRA_CFLAGS=-W ARCH=powerpc allmodconfig
set cpu type POWER7 in menuconfig.
set cross-compiler in menuconfig.
under Fedora 16 x86_64 laptop
/usr/bin/powerpc64-linux-gnu-gcc -v
gcc version 4.7.1 20120606 (Red Hat 4.7.1-0.1.20120606) (GCC)

Issue:
error:
/android/public-kernel/linux-next/arch/powerpc/kernel/exceptions-64s.S: Assembler messages:
/android/public-kernel/linux-next/arch/powerpc/kernel/exceptions-64s.S:1304: Error: attempt to move .org backwards

command:
powerpc64-linux-gnu-gcc -m64 -Wp,-MD,arch/powerpc/kernel/.head_64.o.d -nostdinc -isystem /usr/lib/gcc/powerpc64-linux-gnu/4.7.1/include -I/android/public-kernel/linux-next/arch/powerpc/include -Iarch/powerpc/include/generated -I/android/public-kernel/linux-next/include -Iinclude -I/android/public-kernel/linux-next/arch/powerpc/include/uapi -Iarch/powerpc/include/generated/uapi -I/android/public-kernel/linux-next/include/uapi -Iinclude/generated/uapi -include /android/public-kernel/linux-next/include/linux/kconfig.h -D__KERNEL__ -I/android/public-kernel/linux-next/arch/powerpc -Iarch/powerpc -D__ASSEMBLY__ -I/android/public-kernel/linux-next/arch/powerpc -Iarch/powerpc -Wa,-maltivec -gdwarf-2 -c -o arch/powerpc/kernel/head_64.o /android/public-kernel/linux-next/arch/powerpc/kernel/head_64.S

(head_64.S includes exceptions-64.S)


thanks.

--
Chen Gang

Asianux Corporation


2013-03-15 04:52:58

by Michael Neuling

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

> do next-* tree support powerpc POWER7 with allmodconfig ?
>
> I met an issue, can we bear it (or I need additional trying) ?
>
>
> Compiling:
> make V=1 EXTRA_CFLAGS=-W ARCH=powerpc allmodconfig
> set cpu type POWER7 in menuconfig.
> set cross-compiler in menuconfig.
> under Fedora 16 x86_64 laptop
> /usr/bin/powerpc64-linux-gnu-gcc -v
> gcc version 4.7.1 20120606 (Red Hat 4.7.1-0.1.20120606) (GCC)
>
> Issue:
> error:
> /android/public-kernel/linux-next/arch/powerpc/kernel/exceptions-64s.S: Assembler messages:
> /android/public-kernel/linux-next/arch/powerpc/kernel/exceptions-64s.S:1304: Error: attempt to move .org backwards
>
> command:
> powerpc64-linux-gnu-gcc -m64 -Wp,-MD,arch/powerpc/kernel/.head_64.o.d -nostdinc -isystem /usr/lib/gcc/powerpc64-linux-gnu/4.7.1/include -I/android/public-kernel/linux-next/arch/powerpc/include -Iarch/powerpc/include/generated -I/android/public-kernel/linux-next/include -Iinclude -I/android/public-kernel/linux-next/arch/powerpc/include/uapi -Iarch/powerpc/include/generated/uapi -I/android/public-kernel/linux-next/include/uapi -Iinclude/generated/uapi -include /android/public-kernel/linux-next/include/linux/kconfig.h -D__KERNEL__ -I/android/public-kernel/linux-next/arch/powerpc -Iarch/powerpc -D__ASSEMBLY__ -I/android/public-kernel/linux-next/arch/powerpc -Iarch/powerpc -Wa,-maltivec -gdwarf-2 -c -o arch/powerpc/kernel/head_64.o /android/public-kernel/linux-next/arch/powerpc/kernel/head_64.S
>
> (head_64.S includes exceptions-64.S)

Yep it's a known problem but no one has bothered to fix it since it
doesn't happen in a config that anyone cares about like
pseries_defconfig and ppc64_defconfig. We've been moving code around in
this area a lot recently hence the breakage.

It should be fixed though. Patches welcome. :-)

Mikey

2013-03-15 05:14:50

by Chen Gang

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

于 2013年03月15日 12:52, Michael Neuling 写道:
> Yep it's a known problem but no one has bothered to fix it since it
> doesn't happen in a config that anyone cares about like
> pseries_defconfig and ppc64_defconfig. We've been moving code around in
> this area a lot recently hence the breakage.
>
> It should be fixed though. Patches welcome. :-)

thanks, and I should try, and very glad to try.

:-) :-)

excuse me, I try to provide related patch within this month (2013-03-31), is it ok ?
the reason is:
I am not familiar with ppc assembly code, neither ppc kernel,
so need additional time resource.
(originally, I worked for x86(_64) core dump analysing for kernel and user programs)

thanks.

--
Chen Gang

Asianux Corporation

2013-03-21 05:56:10

by Chen Gang

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

Hello All:

summary:
the root cause is no enough room in exception area (0x5500 -- 0x7000).

it is caused by the patches "for saving/restre PPR":
they consumed much space of this area (0x5500 -- 0x7000).
for pseries_defconfig and ppc64_defconfig, it is still ok.
but for allmodconfig and "some additional config", it will cause issue.

the solving patch "Make room in exception vector area" can make room larger.
it can let "some additional config" ok.
but for allmodconfig, it is still not enough.


details
reason:
it is caused by:
commit number: 13e7a8e846c2ea38a552b986ea49332f965bbb7a
commit number: 44e9309f1f357794b7ae93d5f3e3e6f11d2b8a7f
they are "for saving/restore PPR"
by Haren Myneni <[email protected]> Thu, 6 Dec 2012
compiling result:
pseries_defconfig: pass (cpu for POWER7)
ppc64_defconfig: pass (cpu for POWER7)
allmodconfig: failed (cpu for POWER7)

analysing:
solving patch:
------------------------------------------------------------------
commit number: 61383407677aef05928541a00678591abea2d84c
Author: Benjamin Herrenschmidt <[email protected]>
Date: Thu Jan 10 17:44:19 2013 +1100

powerpc: Make room in exception vector area

The FWNMI region is fixed at 0x7000 and the vector are now
overflowing that with some configurations. Fix that by moving
some hash management code out of that region as it doesn't need
to be that close to the call sites (isn't accessed using
conditional branches).
------------------------------------------------------------------

but for allmodconfig (not only for "some configurations"):
it really can reduce much overflow bytes,
(maybe from hundreds bytes to dozens bytes)
but still not enough (still content overflow bytes)

additional trying:
after del CONFIG_VSX and CONFIG_PPC_970_NAP in allmodconfig,
(will reduce dozens bytes in the region .0x5500 -- .0x7000)
it can pass compiling (not overflow).


next:
I am sorry:
I am not quite familiar with the detail features of powerpc.
it seems I am not the suitable member to continue trying.

I prefer Benjamin to continue trying (just like what he has done).

if Benjamin will not do it (e.g. maybe no time to do)
I should continue: "make additional room in exception vector area".
(if get no reply within a week: before 2013-03-28, I should continue)



welcome any members' (especially Benjamin) suggestions or completions.

thanks.

:-)


On 2013年03月15日 13:14, Chen Gang wrote:
> 于 2013年03月15日 12:52, Michael Neuling 写道:
>> Yep it's a known problem but no one has bothered to fix it since it
>> doesn't happen in a config that anyone cares about like
>> pseries_defconfig and ppc64_defconfig. We've been moving code around in
>> this area a lot recently hence the breakage.
>>
>> It should be fixed though. Patches welcome. :-)
>
> thanks, and I should try, and very glad to try.
>
> :-) :-)
>
> excuse me, I try to provide related patch within this month (2013-03-31), is it ok ?
> the reason is:
> I am not familiar with ppc assembly code, neither ppc kernel,
> so need additional time resource.
> (originally, I worked for x86(_64) core dump analysing for kernel and user programs)
>
> thanks.
>


--
Chen Gang

Asianux Corporation

2013-03-21 08:26:43

by Chen Gang F T

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig


it seems:
only move slb_miss_realmode to the end, can fix this issue without negative effect.



diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 200afa5..56bd923 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -1066,78 +1066,6 @@ unrecov_user_slb:
#endif /* __DISABLED__ */


-/*
- * r13 points to the PACA, r9 contains the saved CR,
- * r12 contain the saved SRR1, SRR0 is still ready for return
- * r3 has the faulting address
- * r9 - r13 are saved in paca->exslb.
- * r3 is saved in paca->slb_r3
- * We assume we aren't going to take any exceptions during this procedure.
- */
-_GLOBAL(slb_miss_realmode)
- mflr r10
-#ifdef CONFIG_RELOCATABLE
- mtctr r11
-#endif
-
- stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
- std r10,PACA_EXSLB+EX_LR(r13) /* save LR */
-
- bl .slb_allocate_realmode
-
- /* All done -- return from exception. */
-
- ld r10,PACA_EXSLB+EX_LR(r13)
- ld r3,PACA_EXSLB+EX_R3(r13)
- lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */
-
- mtlr r10
-
- andi. r10,r12,MSR_RI /* check for unrecoverable exception */
- beq- 2f
-
-.machine push
-.machine "power4"
- mtcrf 0x80,r9
- mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */
-.machine pop
-
- RESTORE_PPR_PACA(PACA_EXSLB, r9)
- ld r9,PACA_EXSLB+EX_R9(r13)
- ld r10,PACA_EXSLB+EX_R10(r13)
- ld r11,PACA_EXSLB+EX_R11(r13)
- ld r12,PACA_EXSLB+EX_R12(r13)
- ld r13,PACA_EXSLB+EX_R13(r13)
- rfid
- b . /* prevent speculative execution */
-
-2: mfspr r11,SPRN_SRR0
- ld r10,PACAKBASE(r13)
- LOAD_HANDLER(r10,unrecov_slb)
- mtspr SPRN_SRR0,r10
- ld r10,PACAKMSR(r13)
- mtspr SPRN_SRR1,r10
- rfid
- b .
-
-unrecov_slb:
- EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
- DISABLE_INTS
- bl .save_nvgprs
-1: addi r3,r1,STACK_FRAME_OVERHEAD
- bl .unrecoverable_exception
- b 1b
-
-
-#ifdef CONFIG_PPC_970_NAP
-power4_fixup_nap:
- andc r9,r9,r10
- std r9,TI_LOCAL_FLAGS(r11)
- ld r10,_LINK(r1) /* make idle task do the */
- std r10,_NIP(r1) /* equivalent of a blr */
- blr
-#endif
-
.align 7
.globl alignment_common
alignment_common:
@@ -1336,6 +1264,78 @@ _GLOBAL(opal_mc_secondary_handler)


/*
+ * r13 points to the PACA, r9 contains the saved CR,
+ * r12 contain the saved SRR1, SRR0 is still ready for return
+ * r3 has the faulting address
+ * r9 - r13 are saved in paca->exslb.
+ * r3 is saved in paca->slb_r3
+ * We assume we aren't going to take any exceptions during this procedure.
+ */
+_GLOBAL(slb_miss_realmode)
+ mflr r10
+#ifdef CONFIG_RELOCATABLE
+ mtctr r11
+#endif
+
+ stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
+ std r10,PACA_EXSLB+EX_LR(r13) /* save LR */
+
+ bl .slb_allocate_realmode
+
+ /* All done -- return from exception. */
+
+ ld r10,PACA_EXSLB+EX_LR(r13)
+ ld r3,PACA_EXSLB+EX_R3(r13)
+ lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */
+
+ mtlr r10
+
+ andi. r10,r12,MSR_RI /* check for unrecoverable exception */
+ beq- 2f
+
+.machine push
+.machine "power4"
+ mtcrf 0x80,r9
+ mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */
+.machine pop
+
+ RESTORE_PPR_PACA(PACA_EXSLB, r9)
+ ld r9,PACA_EXSLB+EX_R9(r13)
+ ld r10,PACA_EXSLB+EX_R10(r13)
+ ld r11,PACA_EXSLB+EX_R11(r13)
+ ld r12,PACA_EXSLB+EX_R12(r13)
+ ld r13,PACA_EXSLB+EX_R13(r13)
+ rfid
+ b . /* prevent speculative execution */
+
+2: mfspr r11,SPRN_SRR0
+ ld r10,PACAKBASE(r13)
+ LOAD_HANDLER(r10,unrecov_slb)
+ mtspr SPRN_SRR0,r10
+ ld r10,PACAKMSR(r13)
+ mtspr SPRN_SRR1,r10
+ rfid
+ b .
+
+unrecov_slb:
+ EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
+ DISABLE_INTS
+ bl .save_nvgprs
+1: addi r3,r1,STACK_FRAME_OVERHEAD
+ bl .unrecoverable_exception
+ b 1b
+
+
+#ifdef CONFIG_PPC_970_NAP
+power4_fixup_nap:
+ andc r9,r9,r10
+ std r9,TI_LOCAL_FLAGS(r11)
+ ld r10,_LINK(r1) /* make idle task do the */
+ std r10,_NIP(r1) /* equivalent of a blr */
+ blr
+#endif
+
+/*
* Hash table stuff
*/
.align 7


On 2013年03月21日 13:55, Chen Gang wrote:
> Hello All:
>
> summary:
> the root cause is no enough room in exception area (0x5500 -- 0x7000).
>
> it is caused by the patches "for saving/restre PPR":
> they consumed much space of this area (0x5500 -- 0x7000).
> for pseries_defconfig and ppc64_defconfig, it is still ok.
> but for allmodconfig and "some additional config", it will cause issue.
>
> the solving patch "Make room in exception vector area" can make room larger.
> it can let "some additional config" ok.
> but for allmodconfig, it is still not enough.
>
>
> details
> reason:
> it is caused by:
> commit number: 13e7a8e846c2ea38a552b986ea49332f965bbb7a
> commit number: 44e9309f1f357794b7ae93d5f3e3e6f11d2b8a7f
> they are "for saving/restore PPR"
> by Haren Myneni <[email protected]> Thu, 6 Dec 2012
> compiling result:
> pseries_defconfig: pass (cpu for POWER7)
> ppc64_defconfig: pass (cpu for POWER7)
> allmodconfig: failed (cpu for POWER7)
>
> analysing:
> solving patch:
> ------------------------------------------------------------------
> commit number: 61383407677aef05928541a00678591abea2d84c
> Author: Benjamin Herrenschmidt <[email protected]>
> Date: Thu Jan 10 17:44:19 2013 +1100
>
> powerpc: Make room in exception vector area
>
> The FWNMI region is fixed at 0x7000 and the vector are now
> overflowing that with some configurations. Fix that by moving
> some hash management code out of that region as it doesn't need
> to be that close to the call sites (isn't accessed using
> conditional branches).
> ------------------------------------------------------------------
>
> but for allmodconfig (not only for "some configurations"):
> it really can reduce much overflow bytes,
> (maybe from hundreds bytes to dozens bytes)
> but still not enough (still content overflow bytes)
>
> additional trying:
> after del CONFIG_VSX and CONFIG_PPC_970_NAP in allmodconfig,
> (will reduce dozens bytes in the region .0x5500 -- .0x7000)
> it can pass compiling (not overflow).
>
>
> next:
> I am sorry:
> I am not quite familiar with the detail features of powerpc.
> it seems I am not the suitable member to continue trying.
>
> I prefer Benjamin to continue trying (just like what he has done).
>
> if Benjamin will not do it (e.g. maybe no time to do)
> I should continue: "make additional room in exception vector area".
> (if get no reply within a week: before 2013-03-28, I should continue)
>
>
>
> welcome any members' (especially Benjamin) suggestions or completions.
>
> thanks.
>
> :-)
>
>
> On 2013年03月15日 13:14, Chen Gang wrote:
>> 于 2013年03月15日 12:52, Michael Neuling 写道:
>>> Yep it's a known problem but no one has bothered to fix it since it
>>> doesn't happen in a config that anyone cares about like
>>> pseries_defconfig and ppc64_defconfig. We've been moving code around in
>>> this area a lot recently hence the breakage.
>>>
>>> It should be fixed though. Patches welcome. :-)
>>
>> thanks, and I should try, and very glad to try.
>>
>> :-) :-)
>>
>> excuse me, I try to provide related patch within this month (2013-03-31), is it ok ?
>> the reason is:
>> I am not familiar with ppc assembly code, neither ppc kernel,
>> so need additional time resource.
>> (originally, I worked for x86(_64) core dump analysing for kernel and user programs)
>>
>> thanks.
>>
>
>


--
Chen Gang

Flying Transformer

2013-03-21 12:39:07

by Benjamin Herrenschmidt

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

On Thu, 2013-03-21 at 16:26 +0800, Chen Gang F T wrote:
> it seems:
> only move slb_miss_realmode to the end, can fix this issue without negative effect.

Thanks. I'm currently on vacation, I'll have a closer look when I'm back
unless Stephen or Paulus wants to shoot that to Linus while I'm
away.

Cheers,
Ben.

>
> diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
> index 200afa5..56bd923 100644
> --- a/arch/powerpc/kernel/exceptions-64s.S
> +++ b/arch/powerpc/kernel/exceptions-64s.S
> @@ -1066,78 +1066,6 @@ unrecov_user_slb:
> #endif /* __DISABLED__ */
>
>
> -/*
> - * r13 points to the PACA, r9 contains the saved CR,
> - * r12 contain the saved SRR1, SRR0 is still ready for return
> - * r3 has the faulting address
> - * r9 - r13 are saved in paca->exslb.
> - * r3 is saved in paca->slb_r3
> - * We assume we aren't going to take any exceptions during this procedure.
> - */
> -_GLOBAL(slb_miss_realmode)
> - mflr r10
> -#ifdef CONFIG_RELOCATABLE
> - mtctr r11
> -#endif
> -
> - stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
> - std r10,PACA_EXSLB+EX_LR(r13) /* save LR */
> -
> - bl .slb_allocate_realmode
> -
> - /* All done -- return from exception. */
> -
> - ld r10,PACA_EXSLB+EX_LR(r13)
> - ld r3,PACA_EXSLB+EX_R3(r13)
> - lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */
> -
> - mtlr r10
> -
> - andi. r10,r12,MSR_RI /* check for unrecoverable exception */
> - beq- 2f
> -
> -.machine push
> -.machine "power4"
> - mtcrf 0x80,r9
> - mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */
> -.machine pop
> -
> - RESTORE_PPR_PACA(PACA_EXSLB, r9)
> - ld r9,PACA_EXSLB+EX_R9(r13)
> - ld r10,PACA_EXSLB+EX_R10(r13)
> - ld r11,PACA_EXSLB+EX_R11(r13)
> - ld r12,PACA_EXSLB+EX_R12(r13)
> - ld r13,PACA_EXSLB+EX_R13(r13)
> - rfid
> - b . /* prevent speculative execution */
> -
> -2: mfspr r11,SPRN_SRR0
> - ld r10,PACAKBASE(r13)
> - LOAD_HANDLER(r10,unrecov_slb)
> - mtspr SPRN_SRR0,r10
> - ld r10,PACAKMSR(r13)
> - mtspr SPRN_SRR1,r10
> - rfid
> - b .
> -
> -unrecov_slb:
> - EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
> - DISABLE_INTS
> - bl .save_nvgprs
> -1: addi r3,r1,STACK_FRAME_OVERHEAD
> - bl .unrecoverable_exception
> - b 1b
> -
> -
> -#ifdef CONFIG_PPC_970_NAP
> -power4_fixup_nap:
> - andc r9,r9,r10
> - std r9,TI_LOCAL_FLAGS(r11)
> - ld r10,_LINK(r1) /* make idle task do the */
> - std r10,_NIP(r1) /* equivalent of a blr */
> - blr
> -#endif
> -
> .align 7
> .globl alignment_common
> alignment_common:
> @@ -1336,6 +1264,78 @@ _GLOBAL(opal_mc_secondary_handler)
>
>
> /*
> + * r13 points to the PACA, r9 contains the saved CR,
> + * r12 contain the saved SRR1, SRR0 is still ready for return
> + * r3 has the faulting address
> + * r9 - r13 are saved in paca->exslb.
> + * r3 is saved in paca->slb_r3
> + * We assume we aren't going to take any exceptions during this procedure.
> + */
> +_GLOBAL(slb_miss_realmode)
> + mflr r10
> +#ifdef CONFIG_RELOCATABLE
> + mtctr r11
> +#endif
> +
> + stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
> + std r10,PACA_EXSLB+EX_LR(r13) /* save LR */
> +
> + bl .slb_allocate_realmode
> +
> + /* All done -- return from exception. */
> +
> + ld r10,PACA_EXSLB+EX_LR(r13)
> + ld r3,PACA_EXSLB+EX_R3(r13)
> + lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */
> +
> + mtlr r10
> +
> + andi. r10,r12,MSR_RI /* check for unrecoverable exception */
> + beq- 2f
> +
> +.machine push
> +.machine "power4"
> + mtcrf 0x80,r9
> + mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */
> +.machine pop
> +
> + RESTORE_PPR_PACA(PACA_EXSLB, r9)
> + ld r9,PACA_EXSLB+EX_R9(r13)
> + ld r10,PACA_EXSLB+EX_R10(r13)
> + ld r11,PACA_EXSLB+EX_R11(r13)
> + ld r12,PACA_EXSLB+EX_R12(r13)
> + ld r13,PACA_EXSLB+EX_R13(r13)
> + rfid
> + b . /* prevent speculative execution */
> +
> +2: mfspr r11,SPRN_SRR0
> + ld r10,PACAKBASE(r13)
> + LOAD_HANDLER(r10,unrecov_slb)
> + mtspr SPRN_SRR0,r10
> + ld r10,PACAKMSR(r13)
> + mtspr SPRN_SRR1,r10
> + rfid
> + b .
> +
> +unrecov_slb:
> + EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
> + DISABLE_INTS
> + bl .save_nvgprs
> +1: addi r3,r1,STACK_FRAME_OVERHEAD
> + bl .unrecoverable_exception
> + b 1b
> +
> +
> +#ifdef CONFIG_PPC_970_NAP
> +power4_fixup_nap:
> + andc r9,r9,r10
> + std r9,TI_LOCAL_FLAGS(r11)
> + ld r10,_LINK(r1) /* make idle task do the */
> + std r10,_NIP(r1) /* equivalent of a blr */
> + blr
> +#endif
> +
> +/*
> * Hash table stuff
> */
> .align 7
>
>
> On 2013年03月21日 13:55, Chen Gang wrote:
> > Hello All:
> >
> > summary:
> > the root cause is no enough room in exception area (0x5500 -- 0x7000).
> >
> > it is caused by the patches "for saving/restre PPR":
> > they consumed much space of this area (0x5500 -- 0x7000).
> > for pseries_defconfig and ppc64_defconfig, it is still ok.
> > but for allmodconfig and "some additional config", it will cause issue.
> >
> > the solving patch "Make room in exception vector area" can make room larger.
> > it can let "some additional config" ok.
> > but for allmodconfig, it is still not enough.
> >
> >
> > details
> > reason:
> > it is caused by:
> > commit number: 13e7a8e846c2ea38a552b986ea49332f965bbb7a
> > commit number: 44e9309f1f357794b7ae93d5f3e3e6f11d2b8a7f
> > they are "for saving/restore PPR"
> > by Haren Myneni <[email protected]> Thu, 6 Dec 2012
> > compiling result:
> > pseries_defconfig: pass (cpu for POWER7)
> > ppc64_defconfig: pass (cpu for POWER7)
> > allmodconfig: failed (cpu for POWER7)
> >
> > analysing:
> > solving patch:
> > ------------------------------------------------------------------
> > commit number: 61383407677aef05928541a00678591abea2d84c
> > Author: Benjamin Herrenschmidt <[email protected]>
> > Date: Thu Jan 10 17:44:19 2013 +1100
> >
> > powerpc: Make room in exception vector area
> >
> > The FWNMI region is fixed at 0x7000 and the vector are now
> > overflowing that with some configurations. Fix that by moving
> > some hash management code out of that region as it doesn't need
> > to be that close to the call sites (isn't accessed using
> > conditional branches).
> > ------------------------------------------------------------------
> >
> > but for allmodconfig (not only for "some configurations"):
> > it really can reduce much overflow bytes,
> > (maybe from hundreds bytes to dozens bytes)
> > but still not enough (still content overflow bytes)
> >
> > additional trying:
> > after del CONFIG_VSX and CONFIG_PPC_970_NAP in allmodconfig,
> > (will reduce dozens bytes in the region .0x5500 -- .0x7000)
> > it can pass compiling (not overflow).
> >
> >
> > next:
> > I am sorry:
> > I am not quite familiar with the detail features of powerpc.
> > it seems I am not the suitable member to continue trying.
> >
> > I prefer Benjamin to continue trying (just like what he has done).
> >
> > if Benjamin will not do it (e.g. maybe no time to do)
> > I should continue: "make additional room in exception vector area".
> > (if get no reply within a week: before 2013-03-28, I should continue)
> >
> >
> >
> > welcome any members' (especially Benjamin) suggestions or completions.
> >
> > thanks.
> >
> > :-)
> >
> >
> > On 2013年03月15日 13:14, Chen Gang wrote:
> >> 于 2013年03月15日 12:52, Michael Neuling 写道:
> >>> Yep it's a known problem but no one has bothered to fix it since it
> >>> doesn't happen in a config that anyone cares about like
> >>> pseries_defconfig and ppc64_defconfig. We've been moving code around in
> >>> this area a lot recently hence the breakage.
> >>>
> >>> It should be fixed though. Patches welcome. :-)
> >>
> >> thanks, and I should try, and very glad to try.
> >>
> >> :-) :-)
> >>
> >> excuse me, I try to provide related patch within this month (2013-03-31), is it ok ?
> >> the reason is:
> >> I am not familiar with ppc assembly code, neither ppc kernel,
> >> so need additional time resource.
> >> (originally, I worked for x86(_64) core dump analysing for kernel and user programs)
> >>
> >> thanks.
> >>
> >
> >
>
>

2013-03-21 22:54:50

by Michael Neuling

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

Chen Gang <[email protected]> wrote:

> Hello All:
>
> summary:
> the root cause is no enough room in exception area (0x5500 -- 0x7000).
>
> it is caused by the patches "for saving/restre PPR":
> they consumed much space of this area (0x5500 -- 0x7000).
> for pseries_defconfig and ppc64_defconfig, it is still ok.
> but for allmodconfig and "some additional config", it will cause issue.
>
> the solving patch "Make room in exception vector area" can make room larger.
> it can let "some additional config" ok.
> but for allmodconfig, it is still not enough.
>
>
> details
> reason:
> it is caused by:
> commit number: 13e7a8e846c2ea38a552b986ea49332f965bbb7a
> commit number: 44e9309f1f357794b7ae93d5f3e3e6f11d2b8a7f
> they are "for saving/restore PPR"
> by Haren Myneni <[email protected]> Thu, 6 Dec 2012
> compiling result:
> pseries_defconfig: pass (cpu for POWER7)
> ppc64_defconfig: pass (cpu for POWER7)
> allmodconfig: failed (cpu for POWER7)
>
> analysing:
> solving patch:
> ------------------------------------------------------------------
> commit number: 61383407677aef05928541a00678591abea2d84c
> Author: Benjamin Herrenschmidt <[email protected]>
> Date: Thu Jan 10 17:44:19 2013 +1100
>
> powerpc: Make room in exception vector area
>
> The FWNMI region is fixed at 0x7000 and the vector are now
> overflowing that with some configurations. Fix that by moving
> some hash management code out of that region as it doesn't need
> to be that close to the call sites (isn't accessed using
> conditional branches).
> ------------------------------------------------------------------
>
> but for allmodconfig (not only for "some configurations"):
> it really can reduce much overflow bytes,
> (maybe from hundreds bytes to dozens bytes)
> but still not enough (still content overflow bytes)
>
> additional trying:
> after del CONFIG_VSX and CONFIG_PPC_970_NAP in allmodconfig,
> (will reduce dozens bytes in the region .0x5500 -- .0x7000)
> it can pass compiling (not overflow).
>
>
> next:
> I am sorry:
> I am not quite familiar with the detail features of powerpc.
> it seems I am not the suitable member to continue trying.
>
> I prefer Benjamin to continue trying (just like what he has done).
>
> if Benjamin will not do it (e.g. maybe no time to do)
> I should continue: "make additional room in exception vector area".
> (if get no reply within a week: before 2013-03-28, I should continue)
>
>
>
> welcome any members' (especially Benjamin) suggestions or completions.

This is great, thanks a lot.

If you want this to be picked up by the maintainer, you'll need to add
your signed-off-by.

The signed-off-by is to indicate that your happy for it to be included
and that you're legally allowed to do so. See
http://gerrit.googlecode.com/svn/documentation/2.0/user-signedoffby.html
for more info.

Mikey

>
> thanks.
>
> :-)
>
>
> On 2013年03月15日 13:14, Chen Gang wrote:
> > 于 2013年03月15日 12:52, Michael Neuling 写道:
> >> Yep it's a known problem but no one has bothered to fix it since it
> >> doesn't happen in a config that anyone cares about like
> >> pseries_defconfig and ppc64_defconfig. We've been moving code around in
> >> this area a lot recently hence the breakage.
> >>
> >> It should be fixed though. Patches welcome. :-)
> >
> > thanks, and I should try, and very glad to try.
> >
> > :-) :-)
> >
> > excuse me, I try to provide related patch within this month (2013-03-31), is it ok ?
> > the reason is:
> > I am not familiar with ppc assembly code, neither ppc kernel,
> > so need additional time resource.
> > (originally, I worked for x86(_64) core dump analysing for kernel and user programs)
> >
> > thanks.
> >
>
>
> --
> Chen Gang
>
> Asianux Corporation
>

2013-03-21 23:21:07

by Michael Neuling

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

Chen Gang F T <[email protected]> wrote:

>
> it seems:
> only move slb_miss_realmode to the end, can fix this issue without negative effect.

So this works but uncovers a new bug.

Stuart: if you apply this patch allmodconfig now gets this build error
on linux-next.

arch/powerpc/kernel/built-in.o: In function `restore_pblist_ptr':
ftrace.c:(.toc+0xd78): undefined reference to `epapr_ev_idle_start'
ftrace.c:(.toc+0xd88): undefined reference to `epapr_ev_idle'
make[1]: *** [vmlinux] Error 1

Reverting your patch below fixes this:

commit f070986a07e514e3b4fc4aef6551b8dffcb19287
Author: Stuart Yoder <[email protected]>
Date: Fri Feb 8 13:22:56 2013 -0600

powerpc: Add paravirt idle loop for 64-bit Book-E

Signed-off-by: Stuart Yoder <[email protected]>
Signed-off-by: Kumar Gala <[email protected]>

Should we revert your patch or can you send a fix? This is currently
broken in linux-next (at least next-20130321).

Mikey


>
>
>
> diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
> index 200afa5..56bd923 100644
> --- a/arch/powerpc/kernel/exceptions-64s.S
> +++ b/arch/powerpc/kernel/exceptions-64s.S
> @@ -1066,78 +1066,6 @@ unrecov_user_slb:
> #endif /* __DISABLED__ */
>
>
> -/*
> - * r13 points to the PACA, r9 contains the saved CR,
> - * r12 contain the saved SRR1, SRR0 is still ready for return
> - * r3 has the faulting address
> - * r9 - r13 are saved in paca->exslb.
> - * r3 is saved in paca->slb_r3
> - * We assume we aren't going to take any exceptions during this procedure.
> - */
> -_GLOBAL(slb_miss_realmode)
> - mflr r10
> -#ifdef CONFIG_RELOCATABLE
> - mtctr r11
> -#endif
> -
> - stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
> - std r10,PACA_EXSLB+EX_LR(r13) /* save LR */
> -
> - bl .slb_allocate_realmode
> -
> - /* All done -- return from exception. */
> -
> - ld r10,PACA_EXSLB+EX_LR(r13)
> - ld r3,PACA_EXSLB+EX_R3(r13)
> - lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */
> -
> - mtlr r10
> -
> - andi. r10,r12,MSR_RI /* check for unrecoverable exception */
> - beq- 2f
> -
> -.machine push
> -.machine "power4"
> - mtcrf 0x80,r9
> - mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */
> -.machine pop
> -
> - RESTORE_PPR_PACA(PACA_EXSLB, r9)
> - ld r9,PACA_EXSLB+EX_R9(r13)
> - ld r10,PACA_EXSLB+EX_R10(r13)
> - ld r11,PACA_EXSLB+EX_R11(r13)
> - ld r12,PACA_EXSLB+EX_R12(r13)
> - ld r13,PACA_EXSLB+EX_R13(r13)
> - rfid
> - b . /* prevent speculative execution */
> -
> -2: mfspr r11,SPRN_SRR0
> - ld r10,PACAKBASE(r13)
> - LOAD_HANDLER(r10,unrecov_slb)
> - mtspr SPRN_SRR0,r10
> - ld r10,PACAKMSR(r13)
> - mtspr SPRN_SRR1,r10
> - rfid
> - b .
> -
> -unrecov_slb:
> - EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
> - DISABLE_INTS
> - bl .save_nvgprs
> -1: addi r3,r1,STACK_FRAME_OVERHEAD
> - bl .unrecoverable_exception
> - b 1b
> -
> -
> -#ifdef CONFIG_PPC_970_NAP
> -power4_fixup_nap:
> - andc r9,r9,r10
> - std r9,TI_LOCAL_FLAGS(r11)
> - ld r10,_LINK(r1) /* make idle task do the */
> - std r10,_NIP(r1) /* equivalent of a blr */
> - blr
> -#endif
> -
> .align 7
> .globl alignment_common
> alignment_common:
> @@ -1336,6 +1264,78 @@ _GLOBAL(opal_mc_secondary_handler)
>
>
> /*
> + * r13 points to the PACA, r9 contains the saved CR,
> + * r12 contain the saved SRR1, SRR0 is still ready for return
> + * r3 has the faulting address
> + * r9 - r13 are saved in paca->exslb.
> + * r3 is saved in paca->slb_r3
> + * We assume we aren't going to take any exceptions during this procedure.
> + */
> +_GLOBAL(slb_miss_realmode)
> + mflr r10
> +#ifdef CONFIG_RELOCATABLE
> + mtctr r11
> +#endif
> +
> + stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
> + std r10,PACA_EXSLB+EX_LR(r13) /* save LR */
> +
> + bl .slb_allocate_realmode
> +
> + /* All done -- return from exception. */
> +
> + ld r10,PACA_EXSLB+EX_LR(r13)
> + ld r3,PACA_EXSLB+EX_R3(r13)
> + lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */
> +
> + mtlr r10
> +
> + andi. r10,r12,MSR_RI /* check for unrecoverable exception */
> + beq- 2f
> +
> +.machine push
> +.machine "power4"
> + mtcrf 0x80,r9
> + mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */
> +.machine pop
> +
> + RESTORE_PPR_PACA(PACA_EXSLB, r9)
> + ld r9,PACA_EXSLB+EX_R9(r13)
> + ld r10,PACA_EXSLB+EX_R10(r13)
> + ld r11,PACA_EXSLB+EX_R11(r13)
> + ld r12,PACA_EXSLB+EX_R12(r13)
> + ld r13,PACA_EXSLB+EX_R13(r13)
> + rfid
> + b . /* prevent speculative execution */
> +
> +2: mfspr r11,SPRN_SRR0
> + ld r10,PACAKBASE(r13)
> + LOAD_HANDLER(r10,unrecov_slb)
> + mtspr SPRN_SRR0,r10
> + ld r10,PACAKMSR(r13)
> + mtspr SPRN_SRR1,r10
> + rfid
> + b .
> +
> +unrecov_slb:
> + EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
> + DISABLE_INTS
> + bl .save_nvgprs
> +1: addi r3,r1,STACK_FRAME_OVERHEAD
> + bl .unrecoverable_exception
> + b 1b
> +
> +
> +#ifdef CONFIG_PPC_970_NAP
> +power4_fixup_nap:
> + andc r9,r9,r10
> + std r9,TI_LOCAL_FLAGS(r11)
> + ld r10,_LINK(r1) /* make idle task do the */
> + std r10,_NIP(r1) /* equivalent of a blr */
> + blr
> +#endif
> +
> +/*
> * Hash table stuff
> */
> .align 7
>
>
> On 2013年03月21日 13:55, Chen Gang wrote:
> > Hello All:
> >
> > summary:
> > the root cause is no enough room in exception area (0x5500 -- 0x7000).
> >
> > it is caused by the patches "for saving/restre PPR":
> > they consumed much space of this area (0x5500 -- 0x7000).
> > for pseries_defconfig and ppc64_defconfig, it is still ok.
> > but for allmodconfig and "some additional config", it will cause issue.
> >
> > the solving patch "Make room in exception vector area" can make room larger.
> > it can let "some additional config" ok.
> > but for allmodconfig, it is still not enough.
> >
> >
> > details
> > reason:
> > it is caused by:
> > commit number: 13e7a8e846c2ea38a552b986ea49332f965bbb7a
> > commit number: 44e9309f1f357794b7ae93d5f3e3e6f11d2b8a7f
> > they are "for saving/restore PPR"
> > by Haren Myneni <[email protected]> Thu, 6 Dec 2012
> > compiling result:
> > pseries_defconfig: pass (cpu for POWER7)
> > ppc64_defconfig: pass (cpu for POWER7)
> > allmodconfig: failed (cpu for POWER7)
> >
> > analysing:
> > solving patch:
> > ------------------------------------------------------------------
> > commit number: 61383407677aef05928541a00678591abea2d84c
> > Author: Benjamin Herrenschmidt <[email protected]>
> > Date: Thu Jan 10 17:44:19 2013 +1100
> >
> > powerpc: Make room in exception vector area
> >
> > The FWNMI region is fixed at 0x7000 and the vector are now
> > overflowing that with some configurations. Fix that by moving
> > some hash management code out of that region as it doesn't need
> > to be that close to the call sites (isn't accessed using
> > conditional branches).
> > ------------------------------------------------------------------
> >
> > but for allmodconfig (not only for "some configurations"):
> > it really can reduce much overflow bytes,
> > (maybe from hundreds bytes to dozens bytes)
> > but still not enough (still content overflow bytes)
> >
> > additional trying:
> > after del CONFIG_VSX and CONFIG_PPC_970_NAP in allmodconfig,
> > (will reduce dozens bytes in the region .0x5500 -- .0x7000)
> > it can pass compiling (not overflow).
> >
> >
> > next:
> > I am sorry:
> > I am not quite familiar with the detail features of powerpc.
> > it seems I am not the suitable member to continue trying.
> >
> > I prefer Benjamin to continue trying (just like what he has done).
> >
> > if Benjamin will not do it (e.g. maybe no time to do)
> > I should continue: "make additional room in exception vector area".
> > (if get no reply within a week: before 2013-03-28, I should continue)
> >
> >
> >
> > welcome any members' (especially Benjamin) suggestions or completions.
> >
> > thanks.
> >
> > :-)
> >
> >
> > On 2013年03月15日 13:14, Chen Gang wrote:
> >> 于 2013年03月15日 12:52, Michael Neuling 写道:
> >>> Yep it's a known problem but no one has bothered to fix it since it
> >>> doesn't happen in a config that anyone cares about like
> >>> pseries_defconfig and ppc64_defconfig. We've been moving code around in
> >>> this area a lot recently hence the breakage.
> >>>
> >>> It should be fixed though. Patches welcome. :-)
> >>
> >> thanks, and I should try, and very glad to try.
> >>
> >> :-) :-)
> >>
> >> excuse me, I try to provide related patch within this month (2013-03-31), is it ok ?
> >> the reason is:
> >> I am not familiar with ppc assembly code, neither ppc kernel,
> >> so need additional time resource.
> >> (originally, I worked for x86(_64) core dump analysing for kernel and user programs)
> >>
> >> thanks.
> >>
> >
> >
>
>
> --
> Chen Gang
>
> Flying Transformer
>

2013-03-22 06:46:55

by Chen Gang

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

On 2013年03月21日 20:38, Benjamin Herrenschmidt wrote:
> On Thu, 2013-03-21 at 16:26 +0800, Chen Gang F T wrote:
>> > it seems:
>> > only move slb_miss_realmode to the end, can fix this issue without negative effect.
> Thanks. I'm currently on vacation, I'll have a closer look when I'm back
> unless Stephen or Paulus wants to shoot that to Linus while I'm
> away.
>

ok, I prefer to wait you back to have a closer look.

thanks.

:-)


> Cheers,
> Ben.
>


--
Chen Gang

Asianux Corporation

2013-03-22 06:56:03

by Chen Gang

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

On 2013年03月22日 06:54, Michael Neuling wrote:
> This is great, thanks a lot.
>
> If you want this to be picked up by the maintainer, you'll need to add
> your signed-off-by.
>
> The signed-off-by is to indicate that your happy for it to be included
> and that you're legally allowed to do so. See
> http://gerrit.googlecode.com/svn/documentation/2.0/user-signedoffby.html
> for more info.
>
> Mikey

thanks, too.
I prefer Benjamin to have a closer look for my fixing.
if pass his checking, I will send a patch.
(he is on vacation, now, and he will check it when he is back).

Regards

--
Chen Gang

Asianux Corporation

2013-03-22 19:17:34

by Yoder Stuart-B08248

[permalink] [raw]
Subject: RE: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig



> -----Original Message-----
> From: Michael Neuling [mailto:[email protected]]
> Sent: Thursday, March 21, 2013 6:21 PM
> To: Chen Gang F T; Yoder Stuart-B08248; Kumar Gala
> Cc: Chen Gang; Benjamin Herrenschmidt; [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected]
> Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig
>
> Chen Gang F T <[email protected]> wrote:
>
> >
> > it seems:
> > only move slb_miss_realmode to the end, can fix this issue without negative effect.
>
> So this works but uncovers a new bug.
>
> Stuart: if you apply this patch allmodconfig now gets this build error
> on linux-next.
>
> arch/powerpc/kernel/built-in.o: In function `restore_pblist_ptr':
> ftrace.c:(.toc+0xd78): undefined reference to `epapr_ev_idle_start'
> ftrace.c:(.toc+0xd88): undefined reference to `epapr_ev_idle'
> make[1]: *** [vmlinux] Error 1
>
> Reverting your patch below fixes this:
>
> commit f070986a07e514e3b4fc4aef6551b8dffcb19287
> Author: Stuart Yoder <[email protected]>
> Date: Fri Feb 8 13:22:56 2013 -0600
>
> powerpc: Add paravirt idle loop for 64-bit Book-E
>
> Signed-off-by: Stuart Yoder <[email protected]>
> Signed-off-by: Kumar Gala <[email protected]>
>
> Should we revert your patch or can you send a fix? This is currently
> broken in linux-next (at least next-20130321).

Sent a patch that resolves this. Not completely happy with it
because of the added #ifdefs, but not sure how else to resolve
this. allmodconfig is creating config combinations that don't
happen in a normal build (at least currently)-- 64-bit build
that enables EPAPR_PARAVIRT but not PPC_BOOK3E_64.

Stuart
????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?

2013-03-23 02:51:58

by Chen Gang F T

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

On 2013年03月23日 03:17, Yoder Stuart-B08248 wrote:
> allmodconfig is creating config combinations that don't
> happen in a normal build (at least currently)-- 64-bit build
> that enables EPAPR_PARAVIRT but not PPC_BOOK3E_64.

if it should not happen.
can we add dependency to let it will never happen in any config combinations ?
let allmodconfig can not create this config combinamtions:
"64-bit build that enables EPAPR_PARAVIRT but not PPC_BOOK3E_64".

thanks.

--
Chen Gang

Flying Transformer

2013-03-25 00:03:43

by Michael Neuling

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

Chen Gang <[email protected]> wrote:

> On 2013年03月22日 06:54, Michael Neuling wrote:
> > This is great, thanks a lot.
> >
> > If you want this to be picked up by the maintainer, you'll need to add
> > your signed-off-by.
> >
> > The signed-off-by is to indicate that your happy for it to be included
> > and that you're legally allowed to do so. See
> > http://gerrit.googlecode.com/svn/documentation/2.0/user-signedoffby.html
> > for more info.
> >
> > Mikey
>
> thanks, too.
> I prefer Benjamin to have a closer look for my fixing.
> if pass his checking, I will send a patch.
> (he is on vacation, now, and he will check it when he is back).

benh asked paulus or sfr to send in while he was away.

So please send your signed off by now (if you can), or someone is going
to rewrite it, sent it upstream bypassing you.

Mikey

2013-03-25 01:07:38

by Chen Gang

[permalink] [raw]
Subject: Re: [Suggestion] PowerPC: kernel: cross compiling issue with allmodconfig

On 2013??03??25?? 08:03, Michael Neuling wrote:
>
> benh asked paulus or sfr to send in while he was away.
>
> So please send your signed off by now (if you can), or someone is going
> to rewrite it, sent it upstream bypassing you.
>
> Mikey
>
>

thanks, I will send patch now.

:-)

--
Chen Gang

Asianux Corporation

2013-03-25 01:32:05

by Chen Gang

[permalink] [raw]
Subject: [PATCH] PowerPC:kernel: make additional room in exception vector area


The FWNMI region is fixed at 0x7000 and the vector are now overflowing
that with allmodconfig. Fix that by moving slb_miss_realmode code out
of that region as it doesn't need to be that close to the call sites
(it is a _GLOBAL function)

Signed-off-by: Chen Gang <[email protected]>
---
arch/powerpc/kernel/exceptions-64s.S | 144 +++++++++++++++++-----------------
1 files changed, 72 insertions(+), 72 deletions(-)

diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 200afa5..56bd923 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -1066,78 +1066,6 @@ unrecov_user_slb:
#endif /* __DISABLED__ */


-/*
- * r13 points to the PACA, r9 contains the saved CR,
- * r12 contain the saved SRR1, SRR0 is still ready for return
- * r3 has the faulting address
- * r9 - r13 are saved in paca->exslb.
- * r3 is saved in paca->slb_r3
- * We assume we aren't going to take any exceptions during this procedure.
- */
-_GLOBAL(slb_miss_realmode)
- mflr r10
-#ifdef CONFIG_RELOCATABLE
- mtctr r11
-#endif
-
- stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
- std r10,PACA_EXSLB+EX_LR(r13) /* save LR */
-
- bl .slb_allocate_realmode
-
- /* All done -- return from exception. */
-
- ld r10,PACA_EXSLB+EX_LR(r13)
- ld r3,PACA_EXSLB+EX_R3(r13)
- lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */
-
- mtlr r10
-
- andi. r10,r12,MSR_RI /* check for unrecoverable exception */
- beq- 2f
-
-.machine push
-.machine "power4"
- mtcrf 0x80,r9
- mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */
-.machine pop
-
- RESTORE_PPR_PACA(PACA_EXSLB, r9)
- ld r9,PACA_EXSLB+EX_R9(r13)
- ld r10,PACA_EXSLB+EX_R10(r13)
- ld r11,PACA_EXSLB+EX_R11(r13)
- ld r12,PACA_EXSLB+EX_R12(r13)
- ld r13,PACA_EXSLB+EX_R13(r13)
- rfid
- b . /* prevent speculative execution */
-
-2: mfspr r11,SPRN_SRR0
- ld r10,PACAKBASE(r13)
- LOAD_HANDLER(r10,unrecov_slb)
- mtspr SPRN_SRR0,r10
- ld r10,PACAKMSR(r13)
- mtspr SPRN_SRR1,r10
- rfid
- b .
-
-unrecov_slb:
- EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
- DISABLE_INTS
- bl .save_nvgprs
-1: addi r3,r1,STACK_FRAME_OVERHEAD
- bl .unrecoverable_exception
- b 1b
-
-
-#ifdef CONFIG_PPC_970_NAP
-power4_fixup_nap:
- andc r9,r9,r10
- std r9,TI_LOCAL_FLAGS(r11)
- ld r10,_LINK(r1) /* make idle task do the */
- std r10,_NIP(r1) /* equivalent of a blr */
- blr
-#endif
-
.align 7
.globl alignment_common
alignment_common:
@@ -1336,6 +1264,78 @@ _GLOBAL(opal_mc_secondary_handler)


/*
+ * r13 points to the PACA, r9 contains the saved CR,
+ * r12 contain the saved SRR1, SRR0 is still ready for return
+ * r3 has the faulting address
+ * r9 - r13 are saved in paca->exslb.
+ * r3 is saved in paca->slb_r3
+ * We assume we aren't going to take any exceptions during this procedure.
+ */
+_GLOBAL(slb_miss_realmode)
+ mflr r10
+#ifdef CONFIG_RELOCATABLE
+ mtctr r11
+#endif
+
+ stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
+ std r10,PACA_EXSLB+EX_LR(r13) /* save LR */
+
+ bl .slb_allocate_realmode
+
+ /* All done -- return from exception. */
+
+ ld r10,PACA_EXSLB+EX_LR(r13)
+ ld r3,PACA_EXSLB+EX_R3(r13)
+ lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */
+
+ mtlr r10
+
+ andi. r10,r12,MSR_RI /* check for unrecoverable exception */
+ beq- 2f
+
+.machine push
+.machine "power4"
+ mtcrf 0x80,r9
+ mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */
+.machine pop
+
+ RESTORE_PPR_PACA(PACA_EXSLB, r9)
+ ld r9,PACA_EXSLB+EX_R9(r13)
+ ld r10,PACA_EXSLB+EX_R10(r13)
+ ld r11,PACA_EXSLB+EX_R11(r13)
+ ld r12,PACA_EXSLB+EX_R12(r13)
+ ld r13,PACA_EXSLB+EX_R13(r13)
+ rfid
+ b . /* prevent speculative execution */
+
+2: mfspr r11,SPRN_SRR0
+ ld r10,PACAKBASE(r13)
+ LOAD_HANDLER(r10,unrecov_slb)
+ mtspr SPRN_SRR0,r10
+ ld r10,PACAKMSR(r13)
+ mtspr SPRN_SRR1,r10
+ rfid
+ b .
+
+unrecov_slb:
+ EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
+ DISABLE_INTS
+ bl .save_nvgprs
+1: addi r3,r1,STACK_FRAME_OVERHEAD
+ bl .unrecoverable_exception
+ b 1b
+
+
+#ifdef CONFIG_PPC_970_NAP
+power4_fixup_nap:
+ andc r9,r9,r10
+ std r9,TI_LOCAL_FLAGS(r11)
+ ld r10,_LINK(r1) /* make idle task do the */
+ std r10,_NIP(r1) /* equivalent of a blr */
+ blr
+#endif
+
+/*
* Hash table stuff
*/
.align 7
--
1.7.7.6

2013-03-25 05:14:44

by Stephen Rothwell

[permalink] [raw]
Subject: Re: [PATCH] PowerPC:kernel: make additional room in exception vector area

Hi all,

On Mon, 25 Mar 2013 09:31:31 +0800 Chen Gang <[email protected]> wrote:
>
> The FWNMI region is fixed at 0x7000 and the vector are now overflowing
> that with allmodconfig. Fix that by moving slb_miss_realmode code out
> of that region as it doesn't need to be that close to the call sites
> (it is a _GLOBAL function)
>
> Signed-off-by: Chen Gang <[email protected]>
> ---
> arch/powerpc/kernel/exceptions-64s.S | 144 +++++++++++++++++-----------------
> 1 files changed, 72 insertions(+), 72 deletions(-)

Thanks, Chen,

I have applied this to linux-next today and pending the builds overnight,
will send it to Linus tomorrow or Wednesday.

--
Cheers,
Stephen Rothwell [email protected]


Attachments:
(No filename) (741.00 B)
(No filename) (836.00 B)
Download all attachments

2013-03-25 05:39:22

by Chen Gang

[permalink] [raw]
Subject: Re: [PATCH] PowerPC:kernel: make additional room in exception vector area

On 2013年03月25日 13:14, Stephen Rothwell wrote:
> Hi all,
>
> On Mon, 25 Mar 2013 09:31:31 +0800 Chen Gang <[email protected]> wrote:
>> >
>> > The FWNMI region is fixed at 0x7000 and the vector are now overflowing
>> > that with allmodconfig. Fix that by moving slb_miss_realmode code out
>> > of that region as it doesn't need to be that close to the call sites
>> > (it is a _GLOBAL function)
>> >
>> > Signed-off-by: Chen Gang <[email protected]>
>> > ---
>> > arch/powerpc/kernel/exceptions-64s.S | 144 +++++++++++++++++-----------------
>> > 1 files changed, 72 insertions(+), 72 deletions(-)
> Thanks, Chen,
>
> I have applied this to linux-next today and pending the builds overnight,
> will send it to Linus tomorrow or Wednesday.

thanks.

:-)

--
Chen Gang

Asianux Corporation

2013-03-25 06:07:23

by Michael Neuling

[permalink] [raw]
Subject: Re: [PATCH] PowerPC:kernel: make additional room in exception vector area

Stephen Rothwell <[email protected]> wrote:

> Hi all,
>
> On Mon, 25 Mar 2013 09:31:31 +0800 Chen Gang <[email protected]> wrote:
> >
> > The FWNMI region is fixed at 0x7000 and the vector are now overflowing
> > that with allmodconfig. Fix that by moving slb_miss_realmode code out
> > of that region as it doesn't need to be that close to the call sites
> > (it is a _GLOBAL function)
> >
> > Signed-off-by: Chen Gang <[email protected]>
> > ---
> > arch/powerpc/kernel/exceptions-64s.S | 144 +++++++++++++++++-----------------
> > 1 files changed, 72 insertions(+), 72 deletions(-)
>
> Thanks, Chen,
>
> I have applied this to linux-next today and pending the builds overnight,
> will send it to Linus tomorrow or Wednesday.

sfr,

FYI you're gonna need this one also to make allmodconfig work.

http://patchwork.ozlabs.org/patch/230244/

Mikey

2013-03-25 06:20:49

by Stephen Rothwell

[permalink] [raw]
Subject: Re: [PATCH] PowerPC:kernel: make additional room in exception vector area

Hi Mikey,

On Mon, 25 Mar 2013 17:07:17 +1100 Michael Neuling <[email protected]> wrote:
>
> FYI you're gonna need this one also to make allmodconfig work.
>
> http://patchwork.ozlabs.org/patch/230244/

Thanks for that, I will add it to linux-next tomorrow.

--
Cheers,
Stephen Rothwell [email protected]


Attachments:
(No filename) (331.00 B)
(No filename) (836.00 B)
Download all attachments