At Mon, 15 Oct 2012 20:45:44 +0200, Takashi Iwai wrote: > > At Mon, 15 Oct 2012 19:41:40 +0200, > Matthieu CASTET wrote: > > > > Hi Takashi, > > > > Takashi Iwai a écrit : > > > At Fri, 12 Oct 2012 17:42:19 +0200, > > > Matthieu CASTET wrote: > > >> Hi, > > >> > > >> > > >> Takashi Iwai a écrit : > > >>> [Added Daniel and Clemens in the loop] > > >>> > > >>> > > >>> I don't think this is needed. > > >>> > > >>> So... the below is a quick hack I did without testing at all. > > >>> Hopefully this can give some advance. > > >> Thanks for the quick patch. > > >> > > >> The patch didn't apply cleany of linus tree, of which tree is based your patch ? > > > > > > Did you try the second one? > > > The second one covers races in more places. > > > > > > The only uncovered place is the autosuspend stuff in mixer.c (for PCM, > > > it's used only in open/close, so it's no problem). I'll fix it later. > > > > > > > > I didn't have time to test your latest patches : I will test them tomorrow. > > On which git tree are they based ? gregkh/usb.git ? > > 3.7-rc1. > > > But I believe I found other races in the alsa char device handling. With the > > attached patch, if you disconnect the usb audio device between "msleep o" and > > "msleep o+", you will free the card resource (snd_card_do_free) and then use it [1]. > > > > I did in in snd_ctl_open, but the same thing could be done in snd_pcm_open, ... > > OK, we'd need a generic open/close protection. > For PCM, there is already a fix in my last patchset, so it should > work, but for other devices, the paths are still uncovered. I hacked a bit more fixes but had no time to test them due to another bug (hit an NFS problem on server). If you are interested, feel free to test topic/usb-disconnect-fix branch of sound-unstable git tree git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-unstable.git The master branch of sound-unstable tree contains all patches but is likely broken. Just pull topic/usb-disconnect-fix branch onto the upstream Linus tree. thanks, Takashi > > > Takashi > > > > > > Matthieu > > > > > > [1] > > [ 30.768341] Alignment trap: not handling instruction e1960f9f at [<c0087ba4>] > > [ 30.775878] Unhandled fault: alignment exception (0x001) at 0x6b6b6c6f > > [ 30.782775] Internal error: : 1 [#1] SMP ARM > > [ 30.787292] Modules linked in: > > [ 30.790557] CPU: 0 Tainted: G W (3.6.0-03888-g9c0226d-dirty #25) > > [ 30.798187] PC is at __lock_acquire.clone.19+0x164/0xd40 > > [ 30.803802] LR is at lock_acquire+0x5c/0x70 > > [ 30.808227] pc : [<c0087ba8>] lr : [<c0088d54>] psr: 20000093 > > [ 30.808227] sp : cd727c70 ip : 00000001 fp : cd727ccc > > [ 30.820343] r10: c05c3994 r9 : c328c218 r8 : 6b6b6b6b > > [ 30.825866] r7 : cd74f640 r6 : 6b6b6c6f r5 : c05a4d5c r4 : cd726000 > > [ 30.832763] r3 : 00000000 r2 : 00000000 r1 : 00000000 r0 : c328c218 > > [ 30.839660] Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user > > [ 30.847290] Control: 10c5387d Table: 8329c019 DAC: 00000015 > > [ 30.853363] Process arecord (pid: 635, stack limit = 0xcd7262f8) > > [ 30.859680] Stack: (0xcd727c70 to 0xcd728000) > > [ 30.864288] 7c60: 000000ec 00000000 > > c059ce68 00000001 > > [ 30.872955] 7c80: 00000000 c05c2cc0 00000009 c059ce38 60000013 00000004 > > cd727d14 cd727ca8 > > [ 30.881591] 7ca0: c00455b0 00000000 cd726000 60000013 cd74f640 c09c7d70 > > 00000024 c3297440 > > [ 30.890228] 7cc0: cd727cfc cd727cd0 c0088d54 c0087a50 00000000 00000000 > > c02e3984 00000000 > > [ 30.898864] 7ce0: c328c208 00000001 c318cf40 c328c208 cd727d24 cd727d00 > > c03d8274 c0088d04 > > [ 30.907501] 7d00: 00000001 00000000 c02e3984 c32c7a48 c328c000 c32c7a48 > > cd727d44 cd727d28 > > [ 30.916107] 7d20: c02e3984 c03d824c c32c7a48 c328c000 00000000 07400000 > > cd727d64 cd727d48 > > [ 30.924774] 7d40: c02e68cc c02e3940 c04042d0 c32c7a48 c3291b20 07400000 > > cd727d8c cd727d68 > > [ 30.933380] 7d60: c02e3494 c02e6868 c3291b20 c32c7a48 cf9f83c0 00000000 > > c00f18c8 00000000 > > [ 30.942047] 7d80: cd727db4 cd727d90 c00f1960 c02e33f8 c00eedcc 00000000 > > c32c7a48 c3291b20 > > [ 30.950683] 7da0: c32c7a50 00000001 cd727ddc cd727db8 c00eb8b0 c00f18d4 > > cd727ea0 cd727f60 > > [ 30.959320] 7dc0: 00000000 00000000 cd727e98 00000000 cd727df4 cd727de0 > > c00eb96c c00eb6ec > > [ 30.967956] 7de0: cd727ea0 cd727ee0 cd727e6c cd727df8 c00fb974 c00eb950 > > cd727e6c cd727e08 > > [ 30.976593] 7e00: c00f8bd4 c00f8b1c c00f97fc 00000000 cd727ee0 00000001 > > 00000000 cd727ee8 > > [ 30.985229] 7e20: 00000000 00000000 cf737178 c32c7a48 00000000 00000000 > > c3291b20 cd67f848 > > [ 30.993865] 7e40: 00000020 cd727ee0 c32c7a48 cd727f60 cd727e98 00000000 > > cd727ea0 cd726000 > > [ 31.002502] 7e60: cd727ed4 cd727e70 c00fc028 c00fb39c cd727ea0 cd727e80 > > 00000000 c32cad64 > > [ 31.011138] 7e80: cd74f640 00000000 cd74f968 00000000 00000004 00000000 > > cf815e58 cf74a8f8 > > [ 31.019775] 7ea0: 00000000 00000000 cd726000 cd727f60 00000001 ffffff9c > > cfb07000 ffffff9c > > [ 31.028411] 7ec0: cd726000 00000000 cd727f54 cd727ed8 c00fc730 c00fbf84 > > 00000041 00000000 > > [ 31.037048] 7ee0: cf815e58 cf74a8f8 35c12985 00000009 cfb07009 cd727e30 > > 00000000 cf4fcb38 > > [ 31.045684] 7f00: c3291b20 00000101 00000008 00000000 00000000 cd773e98 > > cd727f54 cd727f28 > > [ 31.054321] 7f20: c0109814 c03d8818 00000000 cfb07000 00000000 00026150 > > cfb07000 00000000 > > [ 31.062957] 7f40: 00000003 00000001 cd727f94 cd727f58 c00ec7bc c00fc708 > > 00000000 cd726000 > > [ 31.071594] 7f60: 00000000 00000000 00000024 00000100 becb28da b6eef8a0 > > 00026150 00000005 > > [ 31.080261] 7f80: c0014728 00000000 cd727fa4 cd727f98 c00ec880 c00ec6d8 > > 00000000 cd727fa8 > > [ 31.088897] 7fa0: c00145a0 c00ec864 becb28da b6eef8a0 becb28da 00000000 > > becb28ec ffffffff > > [ 31.097534] 7fc0: becb28da b6eef8a0 00026150 00000005 00000001 0001c3b8 > > 000260b8 ffffffff > > [ 31.106170] 7fe0: 00000000 becb28d8 b6ea8c10 b6dc078c 60000010 becb28da > > de10c4ff be918a5f > > [ 31.114807] Backtrace: > > [ 31.117401] [<c0087a44>] (__lock_acquire.clone.19+0x0/0xd40) from > > [<c0088d54>] (lock_acquire+0x5c/0x70) > > [ 31.127349] [<c0088cf8>] (lock_acquire+0x0/0x70) from [<c03d8274>] > > (_raw_spin_lock+0x34/0x44) > > [ 31.136322] r7:c328c208 r6:c318cf40 r5:00000001 r4:c328c208 > > [ 31.142364] [<c03d8240>] (_raw_spin_lock+0x0/0x44) from [<c02e3984>] > > (snd_card_file_add+0x50/0xc0) > > [ 31.151824] r5:c32c7a48 r4:c328c000 > > [ 31.155639] [<c02e3934>] (snd_card_file_add+0x0/0xc0) from [<c02e68cc>] > > (snd_ctl_open+0x70/0x190) > > [ 31.164978] r7:07400000 r6:00000000 r5:c328c000 r4:c32c7a48 > > [ 31.170989] [<c02e685c>] (snd_ctl_open+0x0/0x190) from [<c02e3494>] > > (snd_open+0xa8/0x1a0) > > [ 31.179595] r7:07400000 r6:c3291b20 r5:c32c7a48 r4:c04042d0 > > [ 31.185638] [<c02e33ec>] (snd_open+0x0/0x1a0) from [<c00f1960>] > > (chrdev_open+0x98/0x160) > > [ 31.194183] [<c00f18c8>] (chrdev_open+0x0/0x160) from [<c00eb8b0>] > > (do_dentry_open.clone.18+0x1d0/0x264) > > [ 31.204193] r7:00000001 r6:c32c7a50 r5:c3291b20 r4:c32c7a48 > > [ 31.210205] [<c00eb6e0>] (do_dentry_open.clone.18+0x0/0x264) from > > [<c00eb96c>] (finish_open+0x28/0x40) > > [ 31.220062] [<c00eb944>] (finish_open+0x0/0x40) from [<c00fb974>] > > (do_last.clone.40+0x5e4/0xbe8) > > [ 31.229309] r4:cd727ee0 r3:cd727ea0 > > [ 31.233123] [<c00fb390>] (do_last.clone.40+0x0/0xbe8) from [<c00fc028>] > > (path_openat+0xb0/0x488) > > [ 31.242401] [<c00fbf78>] (path_openat+0x0/0x488) from [<c00fc730>] > > (do_filp_open+0x34/0x88) > > [ 31.251190] [<c00fc6fc>] (do_filp_open+0x0/0x88) from [<c00ec7bc>] > > (do_sys_open+0xf0/0x18c) > > [ 31.260009] r7:00000001 r6:00000003 r5:00000000 r4:cfb07000 > > [ 31.266021] [<c00ec6cc>] (do_sys_open+0x0/0x18c) from [<c00ec880>] > > (sys_open+0x28/0x2c) > > [ 31.274475] [<c00ec858>] (sys_open+0x0/0x2c) from [<c00145a0>] > > (ret_fast_syscall+0x0/0x30) > > [ 31.283203] Code: e3580000 0affffbe e2886f41 e1960f9f (e2800001) > > [ 31.289642] ---[ end trace e749a1146c99522c ]--- > > [ 31.294525] Kernel panic - not syncing: Fatal exception > > [2 diff <text/plain (base64)>] > > diff --git a/sound/core/control.c b/sound/core/control.c > > index 2487a6b..34c80d4 100644 > > --- a/sound/core/control.c > > +++ b/sound/core/control.c > > @@ -45,6 +45,7 @@ static LIST_HEAD(snd_control_ioctls); > > static LIST_HEAD(snd_control_compat_ioctls); > > #endif > > > > +#include <linux/delay.h> > > static int snd_ctl_open(struct inode *inode, struct file *file) > > { > > unsigned long flags; > > @@ -61,6 +62,10 @@ static int snd_ctl_open(struct inode *inode, struct file *file) > > err = -ENODEV; > > goto __error1; > > } > > + printk("msleep o %p\n", card); > > + msleep(5000); > > + printk("msleep o+\n"); > > + > > err = snd_card_file_add(card, file); > > if (err < 0) { > > err = -ENODEV; -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html