linux/drivers/media/rc
Tomas Melin 37fa8716e2 [media] rc-main: fix lockdep splash for rc-main
lockdep reports a potential circular dependecy deadlock when registering input device.

Unlock mutex rc_dev->lock prior to calling ir_raw_event_register to avoid the circular
dependency since that function also calls input_register_device and rc_open.

 ======================================================
 [ INFO: possible circular locking dependency detected ]
 3.17.0-rc7+ #24 Not tainted
 -------------------------------------------------------
 modprobe/647 is trying to acquire lock:
  (input_mutex){+.+.+.}, at: [<ffffffff812ed81c>] input_register_device+0x2ba/0x381

 but task is already holding lock:
  (ir_raw_handler_lock){+.+.+.}, at: [<ffffffff813186ed>] ir_raw_event_register+0x102/0x190

 which lock already depends on the new lock.

[cut text]

 other info that might help us debug this:

 Chain exists of:
   input_mutex --> &dev->lock --> ir_raw_handler_lock

  Possible unsafe locking scenario:

        CPU0                    CPU1
        ----                    ----
   lock(ir_raw_handler_lock);
                                lock(&dev->lock);
                                lock(ir_raw_handler_lock);
   lock(input_mutex);

  *** DEADLOCK ***

 4 locks held by modprobe/647:
  #0:  (&dev->mutex){......}, at: [<ffffffff812d19f3>] device_lock+0xf/0x11
  #1:  (&dev->mutex){......}, at: [<ffffffff812d19f3>] device_lock+0xf/0x11
  #2:  (&dev->lock){+.+.+.}, at: [<ffffffff81317fff>] rc_register_device+0x55d/0x58a
  #3:  (ir_raw_handler_lock){+.+.+.}, at: [<ffffffff813186ed>] ir_raw_event_register+0x102/0x190

 stack backtrace:
 CPU: 0 PID: 647 Comm: modprobe Not tainted 3.17.0-rc7+ #24

 Call Trace:
  [<ffffffff81489d6a>] dump_stack+0x46/0x58
  [<ffffffff81487699>] print_circular_bug+0x1f8/0x209
  [<ffffffff81074353>] __lock_acquire+0xb54/0xeda
  [<ffffffff81080f17>] ? console_unlock+0x34d/0x399
  [<ffffffff81074c01>] lock_acquire+0xd9/0x111
  [<ffffffff812ed81c>] ? input_register_device+0x2ba/0x381
  [<ffffffff8148e650>] mutex_lock_interruptible_nested+0x57/0x381
  [<ffffffff812ed81c>] ? input_register_device+0x2ba/0x381
  [<ffffffff81124e03>] ? kfree+0x7c/0x96
  [<ffffffff812ed81c>] ? input_register_device+0x2ba/0x381
  [<ffffffff81072531>] ? trace_hardirqs_on+0xd/0xf
  [<ffffffff812ed81c>] input_register_device+0x2ba/0x381
  [<ffffffff8131a537>] ir_mce_kbd_register+0x109/0x139
  [<ffffffff81318728>] ir_raw_event_register+0x13d/0x190
  [<ffffffff81317e40>] rc_register_device+0x39e/0x58a
  [<ffffffff81072531>] ? trace_hardirqs_on+0xd/0xf
  [<ffffffffa00cf2e3>] nvt_probe+0x5ad/0xd52 [nuvoton_cir]
  [<ffffffffa00ced36>] ? nvt_resume+0x80/0x80 [nuvoton_cir]
  [<ffffffff81296003>] pnp_device_probe+0x8c/0xa9
  [<ffffffff812d1b94>] ? driver_sysfs_add+0x6e/0x93
  [<ffffffff812d203a>] driver_probe_device+0xa1/0x1e3
  [<ffffffff812d217c>] ? driver_probe_device+0x1e3/0x1e3
  [<ffffffff812d21ca>] __driver_attach+0x4e/0x6f
  [<ffffffff812d075b>] bus_for_each_dev+0x5a/0x8c
  [<ffffffff812d1b24>] driver_attach+0x19/0x1b
  [<ffffffff812d1879>] bus_add_driver+0xf1/0x1d6
  [<ffffffff812d2817>] driver_register+0x87/0xbe
  [<ffffffffa0120000>] ? 0xffffffffa0120000
  [<ffffffff81295da4>] pnp_register_driver+0x1c/0x1e
  [<ffffffffa0120010>] nvt_init+0x10/0x1000 [nuvoton_cir]
  [<ffffffff8100030e>] do_one_initcall+0xea/0x18c
  [<ffffffff8111497f>] ? __vunmap+0x9d/0xc7
  [<ffffffff810a3ca1>] load_module+0x1c21/0x1f2c
  [<ffffffff810a0bce>] ? show_initstate+0x44/0x44
  [<ffffffff810a404e>] SyS_init_module+0xa2/0xb1
  [<ffffffff81490ed2>] system_call_fastpath+0x16/0x1b

Signed-off-by: Tomas Melin <tomas.melin@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2014-10-30 16:57:43 -02:00
..
img-ir [media] img-ir: fix sparse warnings 2014-09-03 08:54:27 -03:00
keymaps media updates for v3.18-rc1 2014-10-10 22:04:49 -04:00
ati_remote.c
ene_ir.c [media] ene_ir: use true/false for boolean vars 2014-09-03 17:59:20 -03:00
ene_ir.h
fintek-cir.c [media] fintek-cir: just return 0 instead of using a var 2014-09-03 17:59:54 -03:00
fintek-cir.h
gpio-ir-recv.c
iguanair.c
imon.c [media] imon: fix usbdev leaks 2014-09-23 16:13:43 -03:00
ir-hix5hd2.c [media] ir-hix5hd2: fix build on c6x arch 2014-10-09 13:45:03 -03:00
ir-jvc-decoder.c
ir-lirc-codec.c
ir-mce_kbd-decoder.c
ir-nec-decoder.c
ir-rc5-decoder.c [media] ir-rc5-decoder: print where decoding fails 2014-07-30 15:49:35 -03:00
ir-rc6-decoder.c
ir-rx51.c
ir-sanyo-decoder.c
ir-sharp-decoder.c
ir-sony-decoder.c
ir-xmp-decoder.c
ite-cir.c [media] ite-cir: just return 0 instead of using a var 2014-09-03 17:59:54 -03:00
ite-cir.h
Kconfig [media] rc: Introduce hix5hd2 IR transmitter driver 2014-09-23 17:03:57 -03:00
lirc_dev.c [media] lirc_dev: fix sparse warnings 2014-09-03 10:29:49 -03:00
Makefile [media] rc: Introduce hix5hd2 IR transmitter driver 2014-09-23 17:03:57 -03:00
mceusb.c [media] mceusb: fix usbdev leak 2014-09-23 16:13:38 -03:00
nuvoton-cir.c [media] nuvoton-cir: just return 0 instead of using a var 2014-09-03 17:59:55 -03:00
nuvoton-cir.h
rc-core-priv.h
rc-ir-raw.c
rc-loopback.c
rc-main.c [media] rc-main: fix lockdep splash for rc-main 2014-10-30 16:57:43 -02:00
redrat3.c
st_rc.c [media] st_rc: fix address space casting 2014-09-26 06:47:53 -03:00
streamzap.c [media] rc-core: use USB API functions rather than constants 2014-09-22 17:27:01 -03:00
sunxi-cir.c
ttusbir.c
winbond-cir.c