• Shawn Guo's avatar
    ARM: imx: initialize clk_init_data.flags for clk-fixup-mux · bdb1b5f2
    Shawn Guo authored
    The clk_init_data.flags of clk-fixup-mux is left there without
    initialization.  It may hold some random data and cause clock framework
    interpret the clock in an unexpected way.  At least on imx6sl, the
    following division by zero error with sched_clock is seen because of it.
    
    Division by zero in kernel.
    CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.11.0-rc3+ #19
    Backtrace:
    [<80011af0>] (dump_backtrace+0x0/0x10c) from [<80011c90>] (show_stack+0x18/0x1c)
     r6:3b9aca00 r5:00000020 r4:00000000 r3:00000000
    [<80011c78>] (show_stack+0x0/0x1c) from [<8055e02c>] (dump_stack+0x78/0x94)
    [<8055dfb4>] (dump_stack+0x0/0x94) from [<80011924>] (__div0+0x18/0x20)
     r4:00000000 r3:00000000
    [<8001190c>] (__div0+0x0/0x20) from [<8026c408>] (Ldiv0_64+0x8/0x18)
    [<8006330c>] (clocks_calc_mult_shift+0x0/0xf8) from [<8072f604>] (setup_sched_clock+0x88/0x1f0)
    [<8072f57c>] (setup_sched_clock+0x0/0x1f0) from [<8071ad48>] (mxc_timer_init+0xe8/0x17c)
    [<8071ac60>] (mxc_timer_init+0x0/0x17c) from [<807290b0>] (imx6sl_clocks_init+0x1db8/0x1dc0)
     r8:807a9ca4 r7:00000000 r6:80777564 r5:8100c1f4 r4:c0820000
    [<807272f8>] (imx6sl_clocks_init+0x0/0x1dc0) from [<807420ac>] (of_clk_init+0x40/0x6c)
    [<8074206c>] (of_clk_init+0x0/0x6c) from [<807290cc>] (imx6sl_timer_init+0x14/0x18)
     r5:807a8e80 r4:ffffffff
    [<807290b8>] (imx6sl_timer_init+0x0/0x18) from [<80716e1c>] (time_init+0x24/0x34)
    [<80716df8>] (time_init+0x0/0x34) from [<80713738>] (start_kernel+0x1b0/0x310)
    [<80713588>] (start_kernel+0x0/0x310) from [<80008074>] (0x80008074)
     r7:80770b08 r6:80754cd4 r5:8076c8c4 r4:10c53c7d
    sched_clock: 32 bits at 0 Hz, resolution 0ns, wraps every 0ms
    
    Fix the bug by initializing init.flags as zero.
    Signed-off-by: default avatarShawn Guo <shawn.guo@linaro.org>
    bdb1b5f2
clk-fixup-mux.c 2.62 KB