• Rajanikanth H.V's avatar
    ab8500_btemp: Demote initcall sequence · 15642204
    Rajanikanth H.V authored
    commit eeb0751c upstream.
    
    Power supply subsystem creates thermal zone device for the property
    'POWER_SUPPLY_PROP_TEMP' which requires thermal subsystem to be ready
    before 'ab8500 battery temperature monitor' driver is initialized. ab8500
    btemp driver is initialized with subsys_initcall whereas thermal subsystem
    is initialized with fs_initcall which causes
    thermal_zone_device_register(...) to crash since the required structure
    'thermal_class' is not initialized yet:
    
    Unable to handle kernel NULL pointer dereference at virtual address 000000a4
    pgd = c0004000
    [000000a4] *pgd=00000000
    Internal error: Oops: 5 [#1] PREEMPT SMP ARM
    Modules linked in:
    CPU: 0    Tainted: G        W     (3.8.0-rc4-00001-g632fda8-dirty #1)
    PC is at _raw_spin_lock+0x18/0x54
    LR is at get_device_parent+0x50/0x1b8
    pc : [<c02f1dd0>]    lr : [<c01cb248>]    psr: 60000013
    sp : ef04bdc8  ip : 00000000  fp : c0446180
    r10: ef216e38  r9 : c03af5d0  r8 : ef275c18
    r7 : 00000000  r6 : c0476c14  r5 : ef275c18  r4 : ef095840
    r3 : ef04a000  r2 : 00000001  r1 : 00000000  r0 : 000000a4
    Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
    Control: 10c5787d  Table: 0000404a  DAC: 00000015
    Process swapper/0 (pid: 1, stack limit = 0xef04a238)
    Stack: (0xef04bdc8 to 0xef04c000)
    [...]
    [<c02f1dd0>] (_raw_spin_lock+0x18/0x54) from [<c01cb248>] (get_device_parent+0x50/0x1b8)
    [<c01cb248>] (get_device_parent+0x50/0x1b8) from [<c01cb8d8>] (device_add+0xa4/0x574)
    [<c01cb8d8>] (device_add+0xa4/0x574) from [<c020b91c>] (thermal_zone_device_register+0x118/0x938)
    [<c020b91c>] (thermal_zone_device_register+0x118/0x938) from [<c0202030>] (power_supply_register+0x170/0x1f8)
    [<c0202030>] (power_supply_register+0x170/0x1f8) from [<c02055ec>] (ab8500_btemp_probe+0x208/0x47c)
    [<c02055ec>] (ab8500_btemp_probe+0x208/0x47c) from [<c01cf0dc>] (platform_drv_probe+0x14/0x18)
    [<c01cf0dc>] (platform_drv_probe+0x14/0x18) from [<c01cde70>] (driver_probe_device+0x74/0x20c)
    [<c01cde70>] (driver_probe_device+0x74/0x20c) from [<c01ce094>] (__driver_attach+0x8c/0x90)
    [<c01ce094>] (__driver_attach+0x8c/0x90) from [<c01cc640>] (bus_for_each_dev+0x4c/0x80)
    [<c01cc640>] (bus_for_each_dev+0x4c/0x80) from [<c01cd6b4>] (bus_add_driver+0x16c/0x23c)
    [<c01cd6b4>] (bus_add_driver+0x16c/0x23c) from [<c01ce54c>] (driver_register+0x78/0x14c)
    [<c01ce54c>] (driver_register+0x78/0x14c) from [<c00086ac>] (do_one_initcall+0xfc/0x164)
    [<c00086ac>] (do_one_initcall+0xfc/0x164) from [<c02e89c8>] (kernel_init+0x120/0x2b8)
    [<c02e89c8>] (kernel_init+0x120/0x2b8) from [<c000e358>] (ret_from_fork+0x14/0x3c)
    Code: e3c3303f e5932004 e2822001 e5832004 (e1903f9f)
    ---[ end trace ed9df72941b5bada ]---
    Signed-off-by: default avatarRajanikanth H.V <rajanikanth.hv@stericsson.com>
    Signed-off-by: default avatarAnton Vorontsov <anton@enomsg.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    15642204
ab8500_btemp.c 29.4 KB