Re: possible recursive locking: find_ref_lock() / v4l2_ctrl_add_handler()

From: Hans Verkuil
Date: Sun Feb 10 2013 - 05:55:16 EST


On Sun February 10 2013 11:34:11 Knut Petersen wrote:
> Maybe somebody could have at that old locking warning:

It's a false warning. If someone can point me to some documentation on how to
tell lockdep that it isn't a deadlock, then that would be appreciated.

Regards,

Hans

>
> [ 9.761427] cx88/2: cx2388x MPEG-TS Driver Manager version 0.0.9 loaded
> [ 9.782848] cx88/0: cx2388x v4l2 driver version 0.0.9 loaded
> [ 9.794205] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/input/input5
> [ 9.879194] cx88[0]: subsystem: 0070:6906, board: Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 [card=69,autodetected], frontend(s): 1
> [ 9.914871] input: HDA Intel Line as /devices/pci0000:00/0000:00:1b.0/sound/card0/input6
> [ 9.932037] cx88[0]: TV tuner type -1, Radio tuner type -1
> [ 9.953646] input: HDA Intel Front Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input7
> [ 9.981718] input: HDA Intel Rear Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input8
> [ 9.996493] input: HDA Intel Line Out CLFE as /devices/pci0000:00/0000:00:1b.0/sound/card0/input9
> [ 10.003354] input: HDA Intel Line Out Surround as /devices/pci0000:00/0000:00:1b.0/sound/card0/input10
> [ 10.007987] input: HDA Intel Line Out Front as /devices/pci0000:00/0000:00:1b.0/sound/card0/input11
> [ 10.450310] tveeprom 9-0050: Hauppauge model 69100, rev B4C3, serial# 7900937
> [ 10.453751] tveeprom 9-0050: MAC address is 00:0d:fe:78:8f:09
> [ 10.457134] tveeprom 9-0050: tuner model is Conexant CX24118A (idx 123, type 4)
> [ 10.460547] tveeprom 9-0050: TV standards ATSC/DVB Digital (eeprom 0x80)
> [ 10.463936] tveeprom 9-0050: audio processor is None (idx 0)
> [ 10.467320] tveeprom 9-0050: decoder processor is CX880 (idx 20)
> [ 10.470648] tveeprom 9-0050: has no radio, has IR receiver, has no IR transmitter
> [ 10.474038] cx88[0]: hauppauge eeprom: model=69100
> [ 10.508060] Registered IR keymap rc-hauppauge
> [ 10.518107] input: cx88 IR (Hauppauge WinTV-HVR400 as /devices/pci0000:00/0000:00:1e.0/0000:05:05.2/rc/rc0/input12
> [ 10.526485] rc0: cx88 IR (Hauppauge WinTV-HVR400 as /devices/pci0000:00/0000:00:1e.0/0000:05:05.2/rc/rc0
> [ 10.530869] cx88[0]/2: cx2388x 8802 Driver Manager
> [ 10.534533] cx88[0]/2: found at 0000:05:05.2, rev: 5, irq: 17, latency: 32, mmio: 0xd2000000
> [ 10.541221] cx88[0]/0: found at 0000:05:05.0, rev: 5, irq: 17, latency: 32, mmio: 0xd0000000
> [ 10.545197] IR RC5(x) protocol handler initialized
> [ 10.557935]
> [ 10.560012] =============================================
> [ 10.560012] [ INFO: possible recursive locking detected ]
> [ 10.560012] 3.8.0-rc7-main #20 Not tainted
> [ 10.560012] ---------------------------------------------
> [ 10.560012] modprobe/469 is trying to acquire lock:
> [ 10.560012] (hdl->lock){+.+...}, at: [<f85604f6>] find_ref_lock+0x1f/0x39 [videodev]
> [ 10.560012]
> [ 10.560012] but task is already holding lock:
> [ 10.560012] (hdl->lock){+.+...}, at: [<f85622d3>] v4l2_ctrl_add_handler+0x35/0x91 [videodev]
> [ 10.560012]
> [ 10.560012] other info that might help us debug this:
> [ 10.560012] Possible unsafe locking scenario:
> [ 10.560012]
> [ 10.560012] CPU0
> [ 10.560012] ----
> [ 10.560012] lock(hdl->lock);
> [ 10.560012] lock(hdl->lock);
> [ 10.560012]
> [ 10.560012] *** DEADLOCK ***
> [ 10.560012]
> [ 10.560012] May be due to missing lock nesting notation
> [ 10.560012]
> [ 10.560012] 3 locks held by modprobe/469:
> [ 10.560012] #0: (&__lockdep_no_validate__){......}, at: [<c03cbcfc>] __driver_attach+0x31/0x6b
> [ 10.560012] #1: (&__lockdep_no_validate__){......}, at: [<c03cbd08>] __driver_attach+0x3d/0x6b
> [ 10.560012] #2: (hdl->lock){+.+...}, at: [<f85622d3>] v4l2_ctrl_add_handler+0x35/0x91 [videodev]
> [ 10.560012]
> [ 10.560012] stack backtrace:
> [ 10.560012] Pid: 469, comm: modprobe Not tainted 3.8.0-rc7-main #20
> [ 10.560012] Call Trace:
> [ 10.560012] [<c01272cb>] ? console_unlock+0x34b/0x374
> [ 10.560012] [<c015b25a>] __lock_acquire+0x1314/0x138a
> [ 10.560012] [<c015bc94>] ? mark_held_locks+0xa1/0xc8
> [ 10.560012] [<f85604f6>] ? find_ref_lock+0x1f/0x39 [videodev]
> [ 10.560012] [<c015b703>] lock_acquire+0xaf/0xcd
> [ 10.560012] [<f85604f6>] ? find_ref_lock+0x1f/0x39 [videodev]
> [ 10.560012] [<f85604f6>] ? find_ref_lock+0x1f/0x39 [videodev]
> [ 10.560012] [<c04f8ae0>] mutex_lock_nested+0x3a/0x266
> [ 10.560012] [<f85604f6>] ? find_ref_lock+0x1f/0x39 [videodev]
> [ 10.560012] [<c04f8cc8>] ? mutex_lock_nested+0x222/0x266
> [ 10.560012] [<c04f8cf1>] ? mutex_lock_nested+0x24b/0x266
> [ 10.560012] [<f85604f6>] find_ref_lock+0x1f/0x39 [videodev]
> [ 10.560012] [<f8560db7>] handler_new_ref+0x38/0x143 [videodev]
> [ 10.560012] [<f856230b>] v4l2_ctrl_add_handler+0x6d/0x91 [videodev]
> [ 10.560012] [<f85c2961>] cx8800_initdev+0x329/0x673 [cx8800]
> [ 10.560012] [<c04fd581>] ? sub_preempt_count+0x90/0x9d
> [ 10.560012] [<c04faa54>] ? _raw_spin_unlock_irqrestore+0x44/0x5b
> [ 10.560012] [<c03d0acd>] ? __pm_runtime_resume+0x40/0x48
> [ 10.560012] [<c02e6ca4>] pci_device_probe+0x5f/0x96
> [ 10.560012] [<c03cbbe7>] driver_probe_device+0x8f/0x173
> [ 10.560012] [<c03cbd1a>] __driver_attach+0x4f/0x6b
> [ 10.560012] [<c03ca895>] bus_for_each_dev+0x44/0x66
> [ 10.560012] [<c03cb82f>] driver_attach+0x1c/0x21
> [ 10.560012] [<c03cbccb>] ? driver_probe_device+0x173/0x173
> [ 10.560012] [<c03cb4a8>] bus_add_driver+0x9d/0x1c3
> [ 10.560012] [<c03cbf73>] driver_register+0x77/0xe2
> [ 10.560012] [<c02dac08>] ? __raw_spin_lock_init+0x26/0x49
> [ 10.560012] [<c02e6d84>] __pci_register_driver+0x4a/0x4d
> [ 10.560012] [<f85ca000>] ? 0xf85c9fff
> [ 10.560012] [<f85ca026>] cx8800_init+0x26/0x1000 [cx8800]
> [ 10.560012] [<c0101093>] do_one_initcall+0x75/0x11e
> [ 10.560012] [<f85ca000>] ? 0xf85c9fff
> [ 10.560012] [<f85ca000>] ? 0xf85c9fff
> [ 10.560012] [<c01638ed>] load_module+0x1669/0x198d
> [ 10.560012] [<c0163c96>] sys_init_module+0x85/0x87
> [ 10.560012] [<c04fae5d>] syscall_call+0x7/0xb
> [ 10.749996] cx88[0]/0: registered device video0 [v4l2]
> [ 10.754891] cx88[0]/0: registered device vbi0
> [ 10.759328] lirc_dev: IR Remote Control driver registered, major 250
> [ 10.763449] rc rc0: lirc_dev: driver ir-lirc-codec (cx88xx) registered at minor = 0
> [ 10.765473] IR LIRC bridge handler initialized
> [ 10.778474] cx88/2: cx2388x dvb driver version 0.0.9 loaded
> [ 10.780512] cx88/2: registering cx8802 driver, type: dvb access: shared
> [ 10.785004] cx88[0]/2: subsystem: 0070:6906, board: Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 [card=69]
> [ 10.787046] cx88[0]/2: cx2388x based DVB/ATSC card
> [ 10.794436] cx8802_alloc_frontends() allocating 1 frontend(s)
> [ 10.812315] DVB: registering new adapter (cx88[0])
> [ 10.814427] cx88-mpeg driver manager 0000:05:05.2: DVB: registering adapter 0 frontend 0 (Conexant CX24116/CX24118)...
>
>
> Affected kernels
> =============
> at least 3.6.*, 3.7.*, 3.8.-rc*
>
> Hardware / Software
> ================
> opensuse 12.1 running on an AOpen i915GMm-hfs, Pentium M Dothan, 2GB system.
>
> DVB-S hardware
> =============
> Hauppauge WinTV Nova HD-S2:
>
> 05:05.0 Multimedia video controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder (rev 05)
> Subsystem: Hauppauge computer works Inc. Device 6906
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
> Latency: 32 (5000ns min, 13750ns max), Cache Line Size: 32 bytes
> Interrupt: pin A routed to IRQ 17
> Region 0: Memory at d0000000 (32-bit, non-prefetchable) [size=16M]
> Capabilities: [44] Vital Product Data
> Unknown large resource type 04, will not decode more.
> Capabilities: [4c] Power Management version 2
> Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Kernel driver in use: cx8800
>
> 05:05.1 Multimedia controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port] (rev 05)
> Subsystem: Hauppauge computer works Inc. Device 6906
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
> Latency: 32 (1000ns min, 63750ns max), Cache Line Size: 32 bytes
> Interrupt: pin A routed to IRQ 12
> Region 0: Memory at d1000000 (32-bit, non-prefetchable) [size=16M]
> Capabilities: [4c] Power Management version 2
> Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>
> 05:05.2 Multimedia controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] (rev 05)
> Subsystem: Hauppauge computer works Inc. Device 6906
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
> Latency: 32 (1500ns min, 22000ns max), Cache Line Size: 32 bytes
> Interrupt: pin A routed to IRQ 17
> Region 0: Memory at d2000000 (32-bit, non-prefetchable) [size=16M]
> Capabilities: [4c] Power Management version 2
> Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Kernel driver in use: cx88-mpeg driver manager
>
> 05:05.4 Multimedia controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [IR Port] (rev 05)
> Subsystem: Hauppauge computer works Inc. Device 6906
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
> Latency: 32 (1500ns min, 63750ns max), Cache Line Size: 32 bytes
> Interrupt: pin A routed to IRQ 12
> Region 0: Memory at d3000000 (32-bit, non-prefetchable) [size=16M]
> Capabilities: [4c] Power Management version 2
> Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>
>
> cu,
> Knut
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/