Thread (6 messages) 6 messages, 4 authors, 2009-09-04

Re: INFO: possible recursive locking detected ps2_command

From: Zdenek Kabelac <hidden>
Date: 2009-09-03 22:48:46
Also in: lkml

2008/8/8 Dmitry Torokhov [off-list ref]:
On Fri, Aug 08, 2008 at 12:49:49PM +0200, Peter Zijlstra wrote:
quoted
On Thu, 2008-07-31 at 23:04 -0400, Dmitry Torokhov wrote:
quoted
On Thu, Jul 31, 2008 at 02:57:39PM -0700, Andrew Morton wrote:
quoted
(cc linux-input)

On Thu, 31 Jul 2008 11:41:25 +0200
"Zdenek Kabelac" [off-list ref] wrote:
quoted
Hi

During mouse unplugging from psaux connector from the laptops' docking
station I've got attached INFO trace.
(laptops still has synaptics device)
Dell?
quoted
quoted
Also for unknown reason to me  psaux mouse & synaptic device do not
work somehow together - is it hw limitation
of /dev/input/mice  interface?
(USB mouse and synaptics do work quite well together)

[ INFO: possible recursive locking detected ]
2.6.27-rc1 #48
(it's 2.6.27-rc1)
Peter, here is the trace we talked about long time ago. For some reason
lockdep annotation only works once. If reconnect is forced or psmouse
module is reloaded lockdep starts complaining about passthrough port.
Bit puzzling - and I don't have any ps2 hardware around to test with
(nor do I normally use modules - but that is fixable of course).

Does Rabin's patch help?

  http://lkml.org/lkml/2008/8/7/329
I doubt it resolves problem fully because it only takes care of module
unload. I can easily trip lockdep by reconnecting the device. Just to
give some more details about the problem:

 - synaptics touchpads have a pass-through port that allows to connect
  either external mouse or maybe a trackpoint device. Both devices
  are represented by 'serio' structures and are handled by the same
  driver (psmouse).

 - as far as I know we have proper locking there and lockdep
  annotatinos were added to lockdep to reflect the nesting of the
  serio ports.

 - if child port (pass-through port) is destroyed and recreated (due
  to module unload, or because user requested reconnect through sysfs
  or system-initiated reconnect) lockdep starts complaining although
  the new child port should still have the same "depth" as the old
  one.
Well just noticed this issue again in my log - during resume operation
- thus no external mouse connection in the game this time:

platform dock.2: completing resume
platform dock.1: completing resume
platform dock.0: completing resume
PM: Finishing wakeup.
Restarting tasks ... done.
PM: Removing info for No Bus:vcs63
PM: Removing info for No Bus:vcsa63
psmouse.c: Failed to enable mouse on isa0060/serio1
PM: Removing info for No Bus:mouse1
PM: Removing info for No Bus:event8
PM: Removing info for No Bus:input8

=============================================
[ INFO: possible recursive locking detected ]
2.6.31-rc8-00043-gf2332bf #30
---------------------------------------------
kseriod/207 is trying to acquire lock:
 (&ps2dev->cmd_mutex){+.+...}, at: [<ffffffff8132675b>] ps2_command+0x5b/0x470

but task is already holding lock:
 (&ps2dev->cmd_mutex){+.+...}, at: [<ffffffff8132675b>] ps2_command+0x5b/0x470

other info that might help us debug this:
4 locks held by kseriod/207:
 #0:  (serio_mutex){+.+.+.}, at: [<ffffffff8132453e>] serio_thread+0x3e/0x400
 #1:  (&serio->drv_mutex){+.+.+.}, at: [<ffffffff81323b00>]
serio_connect_driver+0x30/0x60
 #2:  (psmouse_mutex){+.+.+.}, at: [<ffffffffa00c5f85>]
psmouse_connect+0x35/0x370 [psmouse]
 #3:  (&ps2dev->cmd_mutex){+.+...}, at: [<ffffffff8132675b>]
ps2_command+0x5b/0x470

stack backtrace:
Pid: 207, comm: kseriod Not tainted 2.6.31-rc8-00043-gf2332bf #30
Call Trace:
 [<ffffffff8107f0ba>] __lock_acquire+0xe6a/0x1090
 [<ffffffff8107f37a>] lock_acquire+0x9a/0x180
 [<ffffffff8132675b>] ? ps2_command+0x5b/0x470
 [<ffffffff813da81f>] __mutex_lock_common+0x5f/0x4a0
 [<ffffffff8132675b>] ? ps2_command+0x5b/0x470
 [<ffffffff8100f4b8>] ? dump_trace+0x118/0x2f0
 [<ffffffff8132675b>] ? ps2_command+0x5b/0x470
 [<ffffffff813dad41>] mutex_lock_nested+0x41/0x50
 [<ffffffff8132675b>] ps2_command+0x5b/0x470
 [<ffffffffa00c47b3>] psmouse_sliced_command+0x33/0x90 [psmouse]
 [<ffffffffa00c6a9c>] synaptics_pt_write+0x2c/0x60 [psmouse]
 [<ffffffff81326636>] ps2_sendbyte+0x66/0x130
 [<ffffffff8107d7ed>] ? trace_hardirqs_on_caller+0x15d/0x1a0
 [<ffffffff8107d83d>] ? trace_hardirqs_on+0xd/0x10
 [<ffffffff813267f9>] ps2_command+0xf9/0x470
 [<ffffffff8107d83d>] ? trace_hardirqs_on+0xd/0x10
 [<ffffffff813dcbbb>] ? _spin_unlock_irq+0x3b/0x60
 [<ffffffffa00c494c>] psmouse_probe+0x2c/0xa0 [psmouse]
 [<ffffffff81323d86>] ? serio_open+0x16/0x50
 [<ffffffffa00c6108>] psmouse_connect+0x1b8/0x370 [psmouse]
 [<ffffffff81323b0b>] serio_connect_driver+0x3b/0x60
 [<ffffffff81323b50>] serio_driver_probe+0x20/0x30
 [<ffffffff812d2379>] driver_probe_device+0x89/0x180
 [<ffffffff812d2520>] ? __device_attach+0x0/0x60
 [<ffffffff812d2573>] __device_attach+0x53/0x60
 [<ffffffff812d13dc>] bus_for_each_drv+0x6c/0xa0
 [<ffffffff812d2639>] device_attach+0x89/0x90
 [<ffffffff81323cbd>] serio_find_driver+0x1d/0x50
 [<ffffffff813240c7>] serio_reconnect_port+0x57/0x90
 [<ffffffff81324758>] serio_thread+0x258/0x400
 [<ffffffff81069540>] ? autoremove_wake_function+0x0/0x40
 [<ffffffff81324500>] ? serio_thread+0x0/0x400
 [<ffffffff810690e6>] kthread+0xa6/0xb0
 [<ffffffff8100d2da>] child_rip+0xa/0x20
 [<ffffffff8100cc40>] ? restore_args+0x0/0x30
 [<ffffffff81069040>] ? kthread+0x0/0xb0
 [<ffffffff8100d2d0>] ? child_rip+0x0/0x20
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help