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 <ha...@linux.vnet.ibm.com> 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 <b...@kernel.crashing.org> > > 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. > >> > > > > > > _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev