driver: rknpu: Avoid taking an uninitialized lock
------------[ cut here ]------------ DEBUG_LOCKS_WARN_ON(lock->magic != lock) WARNING: CPU: 5 PID: 1 at kernel/locking/mutex.c:604 __mutex_lock_common+0x5fc/0x142c Modules linked in: CPU: 5 PID: 1 Comm: swapper/0 Not tainted 6.1.43 #211 Hardware name: Rockchip RK3588 EVB1 LP4 V10 Board (DT) pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : __mutex_lock_common+0x5fc/0x142c lr : __mutex_lock_common+0x5fc/0x142c sp : ffffffc00b06b6a0 x29: ffffffc00b06b710 x28: 0000000000000000 x27: 0000000000000000 x26: 0000000000000000 x25: ffffffc00aee2000 x24: ffffffc0097b2d28 x23: ffffff8108be1780 x22: 0000000000000008 x21: 0000000000000000 x20: 0000000000000000 x19: ffffff81011ca458 x18: ffffffc00b0450b8 x17: 0000000000000013 x16: ffffffffffffffff x15: 0000000000000004 x14: ffffffc00a08bf18 x13: 0000000000003fff x12: 0000000000000003 x11: 00000000ffffbfff x10: c0000000ffffbfff x9 : fcad3029a1246100 x8 : fcad3029a1246100 x7 : 4e5241575f534b43 x6 : ffffffc009579a44 x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000 x2 : 0000000000000000 x1 : ffffffc00b06b430 x0 : 0000000000000028 Call trace: __mutex_lock_common+0x5fc/0x142c mutex_lock_nested+0x38/0x44 rockchip_opp_dvfs_lock+0x1c/0x28 rknpu_devfreq_lock+0x14/0x20 rknpu_power_on+0x70/0x2a4 rknpu_probe+0x60c/0x8cc platform_probe+0xa8/0xd0 really_probe+0x174/0x350 __driver_probe_device+0xa0/0x128 driver_probe_device+0x44/0x218 __driver_attach+0xfc/0x1c8 bus_for_each_dev+0x80/0xcc driver_attach+0x24/0x30 bus_add_driver+0x10c/0x1f8 driver_register+0x78/0x114 __platform_driver_register+0x24/0x30 rknpu_init+0x1c/0x28 do_one_initcall+0xf8/0x348 do_initcall_level+0xd0/0x17c do_initcalls+0x54/0x94 do_basic_setup+0x1c/0x28 kernel_init_freeable+0x16c/0x1f0 kernel_init+0x20/0x1a0 ret_from_fork+0x10/0x20 Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com> Change-Id: Ic0247477705a9111f5617eb9fbbc438843feb79c
This commit is contained in:
@@ -235,13 +235,15 @@ static const struct of_device_id rockchip_npu_of_match[] = {
|
||||
#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE
|
||||
void rknpu_devfreq_lock(struct rknpu_device *rknpu_dev)
|
||||
{
|
||||
rockchip_opp_dvfs_lock(&rknpu_dev->opp_info);
|
||||
if (rknpu_dev->devfreq)
|
||||
rockchip_opp_dvfs_lock(&rknpu_dev->opp_info);
|
||||
}
|
||||
EXPORT_SYMBOL(rknpu_devfreq_lock);
|
||||
|
||||
void rknpu_devfreq_unlock(struct rknpu_device *rknpu_dev)
|
||||
{
|
||||
rockchip_opp_dvfs_unlock(&rknpu_dev->opp_info);
|
||||
if (rknpu_dev->devfreq)
|
||||
rockchip_opp_dvfs_unlock(&rknpu_dev->opp_info);
|
||||
}
|
||||
EXPORT_SYMBOL(rknpu_devfreq_unlock);
|
||||
|
||||
@@ -332,6 +334,7 @@ int rknpu_devfreq_init(struct rknpu_device *rknpu_dev)
|
||||
(void *)rknpu_dev);
|
||||
if (IS_ERR(rknpu_dev->devfreq)) {
|
||||
LOG_DEV_ERROR(dev, "failed to add devfreq\n");
|
||||
rknpu_dev->devfreq = NULL;
|
||||
ret = PTR_ERR(rknpu_dev->devfreq);
|
||||
goto err_remove_governor;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user