Heiner Kallweit
033919e0f8
[media] media: rc: fix deadlock when module ir_lirc_codec is removed
When removing module ir_lirc_codec I got this deadlock warning.
Fix this by introducing a separate mutex to protect access
to available_protocols instead of using ir_raw_handler_lock
for this purpose.
======================================================
[ INFO: possible circular locking dependency detected ]
4.7.0-next-20160729 #1 Not tainted
-------------------------------------------------------
rmmod/2542 is trying to acquire lock:
(&dev->lock){+.+.+.}, at: [<ffffffffa03b1267>]
ir_raw_handler_unregister+0x77/0xd0 [rc_core]
but task is already holding lock:
(ir_raw_handler_lock){+.+.+.}, at: [<ffffffffa03b1212>]
ir_raw_handler_unregister+0x22/0xd0 [rc_core]
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (ir_raw_handler_lock){+.+.+.}:
[<ffffffff810ab1f2>] lock_acquire+0xb2/0x1e0
[<ffffffff815c087f>] mutex_lock_nested+0x5f/0x360
[<ffffffffa03b1403>] ir_raw_get_allowed_protocols+0x13/0x30 [rc_core]
[<ffffffffa03af8ea>] store_protocols+0x2fa/0x480 [rc_core]
[<ffffffff8143e143>] dev_attr_store+0x13/0x20
[<ffffffff81213c50>] sysfs_kf_write+0x40/0x50
[<ffffffff81212f60>] kernfs_fop_write+0x150/0x1e0
[<ffffffff81197613>] __vfs_write+0x23/0x120
[<ffffffff81198740>] vfs_write+0xb0/0x190
[<ffffffff81199a34>] SyS_write+0x44/0xa0
[<ffffffff815c55a5>] entry_SYSCALL_64_fastpath+0x18/0xa8
-> #0 (&dev->lock){+.+.+.}:
[<ffffffff810aac8c>] __lock_acquire+0x10fc/0x1270
[<ffffffff810ab1f2>] lock_acquire+0xb2/0x1e0
[<ffffffff815c087f>] mutex_lock_nested+0x5f/0x360
[<ffffffffa03b1267>] ir_raw_handler_unregister+0x77/0xd0 [rc_core]
[<ffffffffa03c8c05>] ir_lirc_codec_exit+0x10/0x12 [ir_lirc_codec]
[<ffffffff810e1b88>] SyS_delete_module+0x168/0x220
[<ffffffff815c55a5>] entry_SYSCALL_64_fastpath+0x18/0xa8
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(ir_raw_handler_lock);
lock(&dev->lock);
lock(ir_raw_handler_lock);
lock(&dev->lock);
*** DEADLOCK ***
1 lock held by rmmod/2542:
#0: (ir_raw_handler_lock){+.+.+.}, at: [<ffffffffa03b1212>]
ir_raw_handler_unregister+0x22/0xd0 [rc_core]
stack backtrace:
CPU: 0 PID: 2542 Comm: rmmod Not tainted 4.7.0-next-20160729 #1
Hardware name: ZOTAC ZBOX-CI321NANO/ZBOX-CI321NANO, BIOS B246P105 06/01/2015
0000000000000000 ffff88006e607cc0 ffffffff812715f5 ffffffff8232b230
ffffffff8232b230 ffff88006e607d00 ffffffff810a846e 00000000790107f0
ffff880079010818 ffff8800790107f0 1efeb9f4f0dd2e6f ffff880079010000
Call Trace:
[<ffffffff812715f5>] dump_stack+0x68/0x93
[<ffffffff810a846e>] print_circular_bug+0x1be/0x210
[<ffffffff810aac8c>] __lock_acquire+0x10fc/0x1270
[<ffffffff810bcead>] ? debug_lockdep_rcu_enabled+0x1d/0x20
[<ffffffff810ab1f2>] lock_acquire+0xb2/0x1e0
[<ffffffffa03b1267>] ? ir_raw_handler_unregister+0x77/0xd0 [rc_core]
[<ffffffff815c087f>] mutex_lock_nested+0x5f/0x360
[<ffffffffa03b1267>] ? ir_raw_handler_unregister+0x77/0xd0 [rc_core]
[<ffffffff810a980e>] ? trace_hardirqs_on_caller+0xee/0x1b0
[<ffffffffa03b1267>] ir_raw_handler_unregister+0x77/0xd0 [rc_core]
[<ffffffffa03c8c05>] ir_lirc_codec_exit+0x10/0x12 [ir_lirc_codec]
[<ffffffff810e1b88>] SyS_delete_module+0x168/0x220
[<ffffffff815c55a5>] entry_SYSCALL_64_fastpath+0x18/0xa8
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
2016-09-22 11:23:13 -03:00
..
2016-08-05 23:29:05 -04:00
2016-07-27 14:03:52 -07:00
2016-07-19 11:30:26 -07:00
2016-08-05 23:26:16 -04:00
2016-07-25 11:09:19 -07:00
2016-08-07 14:41:02 -06:00
2016-07-18 10:13:02 +02:00
2016-08-01 18:36:01 -04:00
2016-08-05 09:48:22 -04:00
2016-08-02 17:31:41 -04:00
2016-08-01 18:36:01 -04:00
2016-08-05 23:26:16 -04:00
2016-07-30 21:01:36 -07:00
2016-08-01 14:28:42 -04:00
2016-07-28 15:45:17 -07:00
2016-07-18 14:10:49 +02:00
2016-07-27 13:40:47 -07:00
2016-08-04 08:50:07 -04:00
2016-08-04 08:50:07 -04:00
2016-07-26 19:16:01 -07:00
2016-08-24 06:35:52 -03:00
2016-07-28 10:49:23 +02:00
2016-08-01 16:49:13 -04:00
2016-07-29 13:55:30 -07:00
2016-07-30 21:01:36 -07:00
2016-07-29 13:29:06 -07:00
2016-07-30 12:56:26 -07:00
2016-08-04 20:26:31 -04:00
2016-09-19 16:26:21 -03:00
2016-08-04 08:50:07 -04:00
2016-08-04 08:50:07 -04:00
2016-07-30 21:01:36 -07:00
2016-07-20 17:37:01 -06:00
2016-07-30 21:01:36 -07:00
2016-07-28 21:27:31 +05:30
2016-08-07 14:41:02 -06:00
2016-09-22 11:23:13 -03:00
2016-08-02 17:05:11 -04:00
2016-08-02 17:31:41 -04:00
2016-08-01 18:36:01 -04:00
2016-08-06 09:20:13 -04:00
2016-07-31 21:36:58 -04:00
2016-08-04 19:51:49 -04:00
2016-08-06 09:20:13 -04:00
2016-07-20 23:39:36 -07:00
2016-08-05 10:34:13 -04:00
2016-08-07 14:41:02 -06:00
2016-08-02 17:12:29 -04:00
2016-08-05 11:21:36 -07:00
2016-08-04 08:50:07 -04:00
2016-08-04 21:33:58 -04:00
2016-07-29 13:55:30 -07:00
2016-07-31 21:36:58 -04:00
2016-07-28 17:06:51 -07:00
2016-08-06 00:01:33 -04:00
2016-07-27 18:52:54 +02:00
2016-08-01 18:36:01 -04:00
2016-07-23 10:25:54 +09:00
2016-08-06 00:01:33 -04:00
2016-08-02 19:35:38 -04:00
2016-08-06 00:01:33 -04:00
2016-08-04 08:50:07 -04:00
2016-08-05 09:48:22 -04:00
2016-08-02 16:11:27 -04:00
2016-08-05 23:47:27 -04:00
2016-08-01 18:36:01 -04:00
2016-08-01 18:37:45 -04:00
2016-09-22 10:12:50 -03:00
2016-08-07 14:41:02 -06:00
2016-08-04 08:50:07 -04:00
2016-09-19 16:25:54 -03:00
2016-07-19 10:54:45 -06:00
2016-08-06 09:20:13 -04:00
2016-08-04 08:50:07 -04:00
2016-08-06 09:20:13 -04:00
2016-08-02 19:35:40 -04:00
2016-07-27 10:47:43 +02:00
2016-08-04 08:50:07 -04:00
2016-08-06 09:20:13 -04:00