[RFC] PCMCIA locking updates for 2.6.34

Wolfram Sang w.sang at pengutronix.de
Sat Jan 16 14:41:21 EST 2010


Hi Dominik,

On Sat, Jan 16, 2010 at 01:41:43PM +0100, Dominik Brodowski wrote:

> 
> on top of what had already been discussed for 2.6.34, here are 12 patches
> trying to fix the locking mess the PCMCIA subsystem used to be. As a
> side-effect, the PCMCIA ioctl will be disabled for all except the ARM
> architecture, and even there you need !SMP and !PREEMPT. Hopefully, we'll be
> able to remove the ioctl from ARM too.
> 
> Everything is available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git#locking

I pulled and tested this branch. Sadly, it doesn't work for me. If I insert a
(previously working) network card, io-resources get allocated, but the driver
does not even print its success-string. Luckily, I had hung-task detection
enabled:

[   54.276728] pcmcia_socket pcmcia_socket0: pccard: PCMCIA card inserted into slot 0
[   54.276747] pcmcia_socket pcmcia_socket0: cs: memory probe 0x0d4000-0x0dffff: clean.
[   54.288227] pcmcia_socket pcmcia_socket0: cs: memory probe 0x60000000-0x60ffffff: clean.
[   54.318694] pcmcia_socket pcmcia_socket0: cs: memory probe 0xa0000000-0xa0ffffff: clean.
[   54.349945] pcmcia_socket pcmcia_socket0: cs: memory probe 0xffd10000-0xffdeffff: clean.
[   54.381320] pcmcia 0.0: pcmcia: registering new device pcmcia0.0
[  240.110047] INFO: task modprobe:2669 blocked for more than 120 seconds.
[  240.110056] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[  240.110065] modprobe      D bf05c428     0  2669      1 0x00000000
[  240.110078]  bd823c40 00000086 c1d6637d bf05c428 bf800140 bf87d890 bf05c534 bf87d890
[  240.110096]  bf05c538 bd823c64 8050eac3 bf05c538 bf05c538 bf87d890 ffffffff bf05c534
[  240.110112]  bf03d020 bf05c428 bd823c74 8050ed2e bf03d020 bf03d000 bd823cac c1d66e58
[  240.110128] Call Trace:
[  240.110155]  [<c1d6637d>] ? alloc_io_space+0x32d/0x3a0 [pcmcia]
[  240.110170]  [<8050eac3>] __mutex_lock_slowpath+0x53/0x90
[  240.110181]  [<8050ed2e>] mutex_lock+0x1e/0x30
[  240.110195]  [<c1d66e58>] pcmcia_request_io+0x28/0x420 [pcmcia]
[  240.110204]  [<8050ed23>] ? mutex_lock+0x13/0x30
[  240.110218]  [<c1d69b23>] ? read_cis_cache+0xa3/0x200 [pcmcia]
[  240.110239]  [<c1b60f30>] pcnet_confcheck+0x110/0x174 [pcnet_cs]
[  240.110253]  [<c1d65f49>] pcmcia_do_loop_config+0x69/0x80 [pcmcia]
[  240.110267]  [<c1d6a47d>] pccard_loop_tuple+0xed/0x150 [pcmcia]
[  240.110282]  [<c1d65ee0>] ? pcmcia_do_loop_config+0x0/0x80 [pcmcia]
[  240.110296]  [<c1d666a9>] pcmcia_loop_config+0xb9/0xd0 [pcmcia]
[  240.110310]  [<c1d65ee0>] ? pcmcia_do_loop_config+0x0/0x80 [pcmcia]
[  240.110327]  [<c1b60e20>] ? pcnet_confcheck+0x0/0x174 [pcnet_cs]
[  240.110344]  [<c1b6016d>] pcnet_probe+0x9d/0xbf0 [pcnet_cs]
[  240.110358]  [<c1d69b23>] ? read_cis_cache+0xa3/0x200 [pcmcia]
[  240.110373]  [<c1d6a31f>] ? pccard_read_tuple+0xaf/0x120 [pcmcia]
[  240.110388]  [<80292491>] ? ida_get_new_above+0x81/0x1f0
[  240.110402]  [<c1d63de8>] pcmcia_device_probe+0xf8/0x2b0 [pcmcia]
[  240.110412]  [<8050ed23>] ? mutex_lock+0x13/0x30
[  240.110425]  [<803bae00>] ? driver_sysfs_add+0x50/0x70
[  240.110435]  [<803baf73>] driver_probe_device+0x93/0x280
[  240.110445]  [<802934d9>] ? kobject_add_internal+0xb9/0x240
[  240.110456]  [<803bb1e9>] __driver_attach+0x89/0x90
[  240.110466]  [<803ba683>] bus_for_each_dev+0x53/0x80
[  240.110476]  [<803bad4e>] driver_attach+0x1e/0x20
[  240.110486]  [<803bb160>] ? __driver_attach+0x0/0x90
[  240.110495]  [<803b9f17>] bus_add_driver+0x207/0x300
[  240.110510]  [<c1d63a40>] ? pcmcia_device_remove+0x0/0x1e0 [pcmcia]
[  240.110520]  [<803bb4ca>] driver_register+0x7a/0x170
[  240.110535]  [<c1d65bd4>] pcmcia_register_driver+0xb4/0x170 [pcmcia]
[  240.110549]  [<8016d1c5>] ? tracepoint_module_notify+0x25/0x30
[  240.110561]  [<8014c64d>] ? notifier_call_chain+0x3d/0x80
[  240.110578]  [<c1b6f000>] ? init_pcnet_cs+0x0/0xf [pcnet_cs]
[  240.110596]  [<c1b6f00d>] init_pcnet_cs+0xd/0xf [pcnet_cs]
[  240.110606]  [<80101118>] do_one_initcall+0x28/0x180
[  240.110617]  [<8014cb4f>] ? blocking_notifier_call_chain+0x1f/0x30
[  240.110630]  [<8015f00f>] sys_init_module+0xaf/0x210
[  240.110640]  [<80102bd0>] sysenter_do_call+0x12/0x26

A deadlock? At this stage, the pcmcia-host is stuck. Card removal is detected,
but the resources don't get freed. Let me know if I can provide more info or
can do more testing.

Regards,

   Wolfram

-- 
Pengutronix e.K.                           | Wolfram Sang                |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-pcmcia/attachments/20100116/dd0865b4/attachment.sig>


More information about the linux-pcmcia mailing list