[PATCH v2] ARM: OMAP: clocks: Delay clk inits atleast until slab is initialized

Santosh Shilimkar santosh.shilimkar at ti.com
Thu Mar 21 07:18:08 EDT 2013


On Thursday 21 March 2013 04:34 PM, Rajendra Nayak wrote:
> clk inits on OMAP happen quite early, even before slab is available.
> The dependency comes from the fact that the timer init code starts to
> use clocks and hwmod and we need clocks to be initialized by then.
> 
> There are various problems doing clk inits this early, one is,
> not being able to do dynamic clk registrations and hence the
> dependency on clk-private.h. The other is, inability to debug
> early kernel crashes without enabling DEBUG_LL and earlyprintk.
> 
> Doing early clk init also exposed another instance of a kernel
> panic due to a BUG() when CONFIG_DEBUG_SLAB is enabled.
> 
> [    0.000000] Kernel BUG at c01174f8 [verbose debug info unavailable]
> [    0.000000] Internal error: Oops - BUG: 0 [#1] SMP ARM
> [    0.000000] Modules linked in:
> [    0.000000] CPU: 0    Not tainted  (3.9.0-rc1-12179-g72d48f9 #6)
> [    0.000000] PC is at __kmalloc+0x1d4/0x248
> [    0.000000] LR is at __clk_init+0x2e0/0x364
> [    0.000000] pc : [<c01174f8>]    lr : [<c0441f54>]    psr: 600001d3
> [    0.000000] sp : c076ff28  ip : c065cefc  fp : c0441f54
> [    0.000000] r10: 0000001c  r9 : 000080d0  r8 : c076ffd4
> [    0.000000] r7 : c074b578  r6 : c0794d88  r5 : 00000040  r4 : 00000000
> [    0.000000] r3 : 00000000  r2 : c07cac70  r1 : 000080d0  r0 : 0000001c
> [    0.000000] Flags: nZCv  IRQs off  FIQs off  Mode SVC_32  ISA ARM  Segment kernel
> [    0.000000] Control: 10c53c7d  Table: 8000404a  DAC: 00000017
> [    0.000000] Process swapper (pid: 0, stack limit = 0xc076e240)
> [    0.000000] Stack: (0xc076ff28 to 0xc0770000)
> [    0.000000] ff20:                   22222222 c0794ec8 c06546e8 00000000 00000040 c0794d88
> [    0.000000] ff40: c074b578 c076ffd4 c07951c8 c076e000 00000000 c0441f54 c074b578 c076ffd4
> [    0.000000] ff60: c0793828 00000040 c0794d88 c074b578 c076ffd4 c0776900 c076e000 c07272ac
> [    0.000000] ff80: 2f800000 c074c968 c07f93d0 c0719780 c076ffa0 c076ff98 00000000 00000000
> [    0.000000] ffa0: 00000000 00000000 00000000 00000001 c074cd6c c077b1ec 8000406a c0715724
> [    0.000000] ffc0: 00000000 00000000 00000000 00000000 00000000 c074c968 10c53c7d c0776974
> [    0.000000] ffe0: c074cd6c c077b1ec 8000406a 411fc092 00000000 80008074 00000000 00000000
> [    0.000000] [<c01174f8>] (__kmalloc+0x1d4/0x248) from [<c0441f54>] (__clk_init+0x2e0/0x364)
> [    0.000000] [<c0441f54>] (__clk_init+0x2e0/0x364) from [<c07272ac>] (omap4xxx_clk_init+0xbc/0x140)
> [    0.000000] [<c07272ac>] (omap4xxx_clk_init+0xbc/0x140) from [<c0719780>] (setup_arch+0x15c/0x284)
> [    0.000000] [<c0719780>] (setup_arch+0x15c/0x284) from [<c0715724>] (start_kernel+0x7c/0x334)
> [    0.000000] [<c0715724>] (start_kernel+0x7c/0x334) from [<80008074>] (0x80008074)
> [    0.000000] Code: e5883004 e1a00006 e28dd00c e8bd8ff0 (e7f001f2)
> [    0.000000] ---[ end trace 1b75b31a2719ed1c ]---
> [    0.000000] Kernel panic - not syncing: Attempted to kill the idle task!
> 
> It was a know issue, that slab allocations would fail when common
> clock core tries to cache parent pointers for mux clocks on OMAP,
> and hence a patch 'clk: Allow late cache allocation for clk->parents,
> commit 7975059d' was added to work this problem around.
> A BUG() within kmalloc() with CONFIG_DEBUG_SLAB enabled was completely
> overlooked causing this regression.
> 
> More details on the issue reported can be found here,
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg85932.html
> 
> With all these issues around clk inits happening way too early, it
> makes sense to atleast move them to a point where dynamic memory
> allocations are possible. So move them to a point just before the
> timer code starts using clocks and hwmod.
> 
> This should atleast pave way for clk inits on OMAP moving to dynamic
> clock registrations instead of using the static macros defined in
> clk-private.h.
> 
> The issue with kernel panic while CONFIG_DEBUG_SLAB is enabled
> was reported by Piotr Haber and Tony Lindgren and this patch
> fixes the reported issue as well.
> 
> Reported-by: Piotr Haber <phaber at broadcom.com>
> Reported-by: Tony Lindgren <tony at atomide.com>
> Signed-off-by: Rajendra Nayak <rnayak at ti.com>
> ---
> applies on 3.9-rc3 and tested on omap4 pandaES, omap3 beagle XM,
> and am335x bone.
> 
Acked-by: Santosh Shilimkar <santosh.shilimkar at ti.com>




More information about the linux-arm-kernel mailing list