lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Sun, 10 Feb 2013 08:24:09 -0500
From:	Andy Walls <awalls@...metrocast.net>
To:	Hans Verkuil <hverkuil@...all.nl>
Cc:	Knut Petersen <Knut_Petersen@...nline.de>,
	linux-media@...r.kernel.org, linux-kernel@...r.kernel.org,
	Mauro Carvalho Chehab <mchehab@...hat.com>
Subject: Re: possible recursive locking: find_ref_lock() /
 v4l2_ctrl_add_handler()

On Sun, 2013-02-10 at 11:54 +0100, Hans Verkuil wrote:
> 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.

Hi Hans,

Here you go, an old patch for you:
http://permalink.gmane.org/gmane.linux.drivers.video-input-infrastructure/27027

Be warned, if lockdep has a limit on the number of classes it can
handle, then my patch could be a problem with a large number of drivers
with v4l2_ctrl_handlers loaded. I must emphasize, that is a new lock
classes per driver instance, not per hardware device instance ... IIRC.

FYI, here's some context that led up to me making the patch:
http://www.gossamer-threads.com/lists/ivtv/devel/41525#41525

Regards,
Andy

> 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@...r.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@...r.kernel.org
> 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@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ