[PATCH] powerpc/86xx: clean up smp init code

Kumar Gala galak at kernel.crashing.org
Mon Apr 27 23:59:09 EST 2009


On Apr 23, 2009, at 7:54 AM, Martyn Welch wrote:

> Kumar Gala wrote:
>> Removed the need for asm/mpc86xx.h as it was only used in  
>> mpc86xx_smp.c
>> and just moved the defines it cared about into there.  Also fixed up
>> the ioremap to only map the one 4k page we need access to and to  
>> iounmap
>> when we are done.
>>
>> Signed-off-by: Kumar Gala <galak at kernel.crashing.org>
>> ---
>> arch/powerpc/include/asm/mpc86xx.h         |   33  
>> ----------------------------
>> arch/powerpc/platforms/86xx/gef_ppc9a.c    |    1 -
>> arch/powerpc/platforms/86xx/gef_sbc310.c   |    1 -
>> arch/powerpc/platforms/86xx/gef_sbc610.c   |    1 -
>> arch/powerpc/platforms/86xx/mpc8610_hpcd.c |    1 -
>> arch/powerpc/platforms/86xx/mpc86xx_hpcn.c |    1 -
>> arch/powerpc/platforms/86xx/mpc86xx_smp.c  |    8 ++++++-
>> arch/powerpc/platforms/86xx/sbc8641d.c     |    1 -
>> 8 files changed, 7 insertions(+), 40 deletions(-)
>> delete mode 100644 arch/powerpc/include/asm/mpc86xx.h
>>
>>
> I assume this patch relies on one of the other patches posted?
>
> Just applying this patch to my development tree (based on your main  
> branch) resulted in the following on a PPC9A:
>
> mpic: requesting IPIs ...
> __ioremap(): phys addr 0x0 is RAM lr c041e5c8
> Unable to handle kernel paging request for data at address 0x00000010
> Faulting instruction address: 0xc041e5cc
> Oops: Kernel access of bad area, sig: 11 [#1]
> PREEMPT SMP NR_CPUS=2 GE Fanuc PPC9A
> Modules linked in:
> NIP: c041e5cc LR: c041e5c8 CTR: c0013d90
> REGS: ef841ea0 TRAP: 0300   Not tainted  (2.6.30-rc3-00016-gabae74f)
> MSR: 00001032 <ME,IR,DR>  CR: 24000022  XER: 00000000
> DAR: 00000010, DSISR: 40000000
> TASK = ef83f980[1] 'swapper' THREAD: ef840000 CPU: 0
> GPR00: c041e5c8 ef841f50 ef83f980 00000000 00001032 ffffffff  
> c0480000 00004000
> GPR08: c0441a4c 00000000 ef840000 c0440000 22000042 ffffdfff  
> 0ff50d00 00000001
> GPR16: ffffffff 00000000 c0440000 c0480000 c0480000 c0468000  
> c0440000 c0442838
> GPR24: 00000002 c0480000 c0480000 7d5043a6 00009032 00000004  
> 00000001 0000c350
> NIP [c041e5cc] smp_86xx_kick_cpu+0x70/0x11c
> LR [c041e5c8] smp_86xx_kick_cpu+0x6c/0x11c
> Call Trace:
> [ef841f50] [c041e5c8] smp_86xx_kick_cpu+0x6c/0x11c (unreliable)
>
> [ef841f70] [c0435010] __cpu_up+0xa4/0x1b0
> [ef841f90] [c04355ec] cpu_up+0x104/0x1cc
> [ef841fd0] [c0412368] kernel_init+0x1d8/0x1f0
> [ef841ff0] [c0012cb8] kernel_thread+0x4c/0x68
> Instruction dump:
> 3c80c000 61290100 38a00001 7d234b78 38843464 83690000 4bbfa7f9  
> 4bbfcb21
> 38801000 38631000 4bbf91ad 7c0004ac <81230010> 0c090000 4c00012c  
> 38000001
> ---[ end trace 31fd0ba7d8756001 ]---
> Kernel panic - not syncing: Attempted to kill init!
> Rebooting in 180 seconds..

I'm not able to reproduce this failure.  It seems like either ioremap  
is returning 0 or you are getting 0 from get_immrbase().. either way I  
don't see how my change would cause what you are seeing on your board.

Are you running w/CONFIG_PHYS_64BIT=y?

- k

- k




More information about the Linuxppc-dev mailing list