Re: INFO: possible recursive locking detected ps2_command

From: Zdenek Kabelac
Date: Thu Sep 03 2009 - 18:48:53 EST


2008/8/8 Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>:
> On Fri, Aug 08, 2008 at 12:49:49PM +0200, Peter Zijlstra wrote:
>> On Thu, 2008-07-31 at 23:04 -0400, Dmitry Torokhov wrote:
>> > On Thu, Jul 31, 2008 at 02:57:39PM -0700, Andrew Morton wrote:
>> > >
>> > > (cc linux-input)
>> > >
>> > > On Thu, 31 Jul 2008 11:41:25 +0200
>> > > "Zdenek Kabelac" <zdenek.kabelac@xxxxxxxxx> wrote:
>> > >
>> > > > Hi
>> > > >
>> > > > During mouse unplugging from psaux connector from the laptops' docking
>> > > > station I've got attached INFO trace.
>> > > > (laptops still has synaptics device)
>> > > >
>> >
>> > Dell?
>> >
>> > > > 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
--
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/