• Vaibhav Hiremath's avatar
    ARM: OMAP2+: timer: Fix crash due to wrong arg to __omap_dm_timer_read_counter · dbc3982a
    Vaibhav Hiremath authored
    Commit 2f0778af (ARM: 7205/2: sched_clock: allow sched_clock to be
    selected at runtime) had a typo for the case when CONFIG_OMAP_32K_TIMER
    is not set.
    
    In dmtimer_read_sched_clock(), wrong argument was getting passed to
    __omap_dm_timer_read_counter() function call; instead of "&clksrc",
    we were passing "clksrc.io_base", which results into kernel crash.
    
    To reproduce kernel crash, just disable the CONFIG_OMAP_32K_TIMER config
    option (and DEBUG_LL) and build/boot the kernel.
    This will use dmtimer as a kernel clocksource and lead to kernel
    crash during boot  -
    
    [    0.000000] OMAP clocksource: GPTIMER2 at 26000000 Hz
    [    0.000000] sched_clock: 32 bits at 26MHz, resolution 38ns, wraps every
    165191ms
    [    0.000000] Unable to handle kernel paging request at virtual address
    00030ef1
    [    0.000000] pgd = c0004000
    [    0.000000] [00030ef1] *pgd=00000000
    [    0.000000] Internal error: Oops: 5 [#1] SMP
    [    0.000000] Modules linked in:
    [    0.000000] CPU: 0    Not tainted  (3.3.0-rc1-11574-g0c76665-dirty #3)
    [    0.000000] PC is at dmtimer_read_sched_clock+0x18/0x4c
    [    0.000000] LR is at update_sched_clock+0x10/0x84
    [    0.000000] pc : [<c00243b8>]    lr : [<c0018684>]    psr: 200001d3
    [    0.000000] sp : c0641f38  ip : c0641e18  fp : 0000000a
    [    0.000000] r10: 151c3303  r9 : 00000026  r8 : 76276259
    [    0.000000] r7 : 00028547  r6 : c065ac80  r5 : 431bde82  r4 : c0655968
    [    0.000000] r3 : 00030ef1  r2 : fb032000  r1 : 00000028  r0 : 00000001
    Signed-off-by: default avatarVaibhav Hiremath <hvaibhav@ti.com>
    [tony@atomide.com: updated comments]
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    dbc3982a
timer.c 12.6 KB