• Bryan O'Donoghue's avatar
    OPP: Fix _set_required_opps when opp is NULL · ab7a781f
    Bryan O'Donoghue authored
    _set_required_opps can be called with opp NULL in _disable_opp_table().
    
    commit e37440e7 ("OPP: Call dev_pm_opp_set_opp() for required OPPs")
    requires the opp pointer to be non-NULL to function.
    
    [   81.253439] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000048
    [   81.438407] Hardware name: Qualcomm Technologies, Inc. Robotics RB5 (DT)
    [   81.445296] Workqueue: pm pm_runtime_work
    [   81.449446] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [   81.456609] pc : _set_required_opps+0x178/0x28c
    [   81.461288] lr : _set_required_opps+0x178/0x28c
    [   81.465962] sp : ffff80008078bb00
    [   81.469375] x29: ffff80008078bb00 x28: ffffd1cd71bfe308 x27: 0000000000000000
    [   81.476730] x26: ffffd1cd70ebc578 x25: ffffd1cd70a08710 x24: 00000000ffffffff
    [   81.484083] x23: 00000000ffffffff x22: 0000000000000000 x21: ffff56ff892b3c48
    [   81.491435] x20: ffff56f1071c10 x19: 0000000000000000 x18: ffffffffffffffff
    [   81.498788] x17: 2030207865646e69 x16: 2030303131207370 x15: 706f5f6465726975
    [   81.506141] x14: 7165725f7465735f x13: ffff5700f5c00000 x12: 00000000000008ac
    [   81.513495] x11: 00000000000002e4 x10: ffff5700f6700000 x9 : ffff5700f5c00000
    [   81.520848] x8 : 00000000fffdffff x7 : ffff5700f6700000 x6 : 80000000fffe0000
    [   81.528200] x5 : ffff5700fef40d08 x4 : 0000000000000000 x3 : 0000000000000000
    [   81.535551] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff56ff81298f80
    [   81.542904] Call trace:
    [   81.545437]  _set_required_opps+0x178/0x28c
    [   81.549754]  _set_opp+0x3fc/0x5c0
    [   81.553181]  dev_pm_opp_set_rate+0x90/0x26c
    [   81.557498]  core_power_v4+0x44/0x15c [venus_core]
    [   81.562509]  venus_runtime_suspend+0x40/0xd0 [venus_core]
    [   81.568135]  pm_generic_runtime_suspend+0x2c/0x44
    [   81.572983]  __rpm_callback+0x48/0x1d8
    [   81.576852]  rpm_callback+0x6c/0x78
    [   81.580453]  rpm_suspend+0x10c/0x570
    [   81.584143]  pm_runtime_work+0xc4/0xc8
    [   81.588011]  process_one_work+0x138/0x244
    [   81.592153]  worker_thread+0x320/0x438
    [   81.596021]  kthread+0x110/0x114
    [   81.599355]  ret_from_fork+0x10/0x20
    [   81.603052] Code: f10000ff fa5410e0 54fffbe1 97f05ae8 (f94026c5)
    [   81.609317] ---[ end trace 0000000000000000 ]---
    
    Fix it.
    
    Fixes: e37440e7 ("OPP: Call dev_pm_opp_set_opp() for required OPPs")
    Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
    [ Viresh: Implemented the fix differently ]
    Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Reviewed-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
    Tested-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
    ab7a781f
core.c 83.6 KB