1
0
Fork 0

MLK-20098-2: imx/drm/dcss: fix uninitialized spinlock

After activating CONFIG_DEBUG_SPINLOCK, the following warning was thrown
in kernel log:

[    1.261079] BUG: spinlock bad magic on CPU#0, kworker/0:2/1285
[    1.266928]  lock: 0xffff8000b92f0190, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
[    1.275113] CPU: 0 PID: 1285 Comm: kworker/0:2 Not tainted 4.14.62-05296-gd695a5b #460
[    1.283032] Hardware name: Freescale i.MX8MQ EVK (DT)
[    1.288094] Workqueue: pm pm_runtime_work
[    1.292111] Call trace:
[    1.294567] [<ffff00000808a7d0>] dump_backtrace+0x0/0x3d8
[    1.299974] [<ffff00000808abbc>] show_stack+0x14/0x20
[    1.305032] [<ffff000008dccd40>] dump_stack+0x8c/0xac
[    1.310091] [<ffff000008119858>] spin_dump+0x70/0x90
[    1.315060] [<ffff000008119978>] do_raw_spin_lock+0xc0/0x108
[    1.320726] [<ffff000008de6380>] _raw_spin_lock_irqsave+0x28/0x38
[    1.326825] [<ffff000008677434>] dcss_ctxld_kick+0x2c/0x200
[    1.332402] [<ffff000008677a3c>] dcss_ctxld_suspend+0x1c/0xa0
[    1.338153] [<ffff000008676648>] dcss_runtime_suspend+0x18/0x68
[    1.344079] [<ffff0000086f3740>] pm_generic_runtime_suspend+0x28/0x40
[    1.350523] [<ffff0000086f6558>] __rpm_callback+0xe0/0x268
[    1.356015] [<ffff0000086f6700>] rpm_callback+0x20/0x80
[    1.361246] [<ffff0000086f56ec>] rpm_suspend+0xf4/0x4b8
[    1.366474] [<ffff0000086f5cac>] rpm_idle+0x124/0x168
[    1.371531] [<ffff0000086f70b8>] pm_runtime_work+0xa0/0xb8
[    1.377025] [<ffff0000080ec874>] process_one_work+0x1d4/0x360
[    1.382774] [<ffff0000080eca48>] worker_thread+0x48/0x478
[    1.388180] [<ffff0000080f2e10>] kthread+0x138/0x140
[    1.393151] [<ffff000008084f48>] ret_from_fork+0x10/0x18

The reason was an uninitialized spinlock.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@nxp.com>
pull/10/head
Laurentiu Palcu 2018-10-26 11:52:10 +03:00 committed by Jason Liu
parent f347734899
commit 493d5ef800
1 changed files with 2 additions and 0 deletions

View File

@ -260,6 +260,8 @@ int dcss_ctxld_init(struct dcss_soc *dcss, unsigned long ctxld_base)
dcss->ctxld_priv = priv;
priv->dcss = dcss;
spin_lock_init(&priv->lock);
ret = dcss_ctxld_alloc_ctx(priv);
if (ret) {
dev_err(dcss->dev, "ctxld: cannot allocate context memory.\n");