At Wed, 07 Jan 2015 14:59:14 +0100, Oliver Neukum wrote:
On Mon, 2015-01-05 at 11:49 +0100, Takashi Iwai wrote:
At Mon, 22 Dec 2014 18:53:43 +0100, Stefan Seyfried wrote:
[45117.334757] ------------[ cut here ]------------ [45117.334778] WARNING: CPU: 2 PID: 7158 at ../drivers/usb/core/urb.c:339 usb_submit_urb+0x5f/0x70() [45117.334782] URB e7bc54c0 submitted while active [45117.334786] Modules linked in: snd_seq_midi snd_seq_midi_event snd_usb_audio(O) snd_usbmidi_lib(O) snd_rawmidi snd_hrtimer nfsv3 nfs_acl rpcsec_gss_krb5 auth_rpcgss oid_registry nfsv4 dns_resolver bnep bluetooth 6lowpan_iphc rfkill fuse nfs lockd sunrpc fscache iscsi_ibft iscsi_boot_sysfs af_packet snd_hda_codec_realtek snd_hda_codec_generic snd_hda_intel snd_hda_controller snd_hda_codec snd_hwdep snd_pcm_oss snd_pcm snd_seq snd_seq_device snd_timer snd_mixer_oss snd tpm_infineon tpm_tis soundcore gpio_ich iTCO_wdt iTCO_vendor_support ppdev i2c_i801 tpm coretemp serio_raw pcspkr lpc_ich mfd_core r8169 mii shpchp parport_pc parport ite_cir rc_core dm_mod sr_mod cdrom i915 i2c_algo_bit video drm_kms_helper drm thermal button processor sg [45117.334903] CPU: 2 PID: 7158 Comm: aconnect Tainted: G O 3.16.6-2-desktop #1 [45117.334907] Hardware name: FOXCONN TPS01/TPS01, BIOS 080015 03/23/2010 [45117.334911] c0984bfa db46dce4 c078deaf db46dcf4 c024c884 c09a135c db46dd10 00001bf6 [45117.334923] c0984bfa 00000153 c061ac4f c061ac4f 00000009 e7bc5f48 e7bc54c0 e7bc5f40 [45117.334935] db46dcfc c024c8d3 00000009 db46dcf4 c09a135c db46dd10 db46dd14 c061ac4f [45117.334947] Call Trace: [45117.334971] [<c0205df6>] try_stack_unwind+0x156/0x170 [45117.334991] [<c020482a>] dump_trace+0x5a/0x1b0 [45117.335001] [<c0205e56>] show_trace_log_lvl+0x46/0x50 [45117.335094] [<c02049d1>] show_stack_log_lvl+0x51/0xe0 [45117.335132] [<c0205eb7>] show_stack+0x27/0x50 [45117.335161] [<c078deaf>] dump_stack+0x45/0x65 [45117.335184] [<c024c884>] warn_slowpath_common+0x84/0xa0 [45117.335199] [<c024c8d3>] warn_slowpath_fmt+0x33/0x40 [45117.335213] [<c061ac4f>] usb_submit_urb+0x5f/0x70 [45117.335239] [<f7adf104>] snd_usbmidi_submit_urb+0x14/0x60 [snd_usbmidi_lib] [45117.335274] [<f7adfb0e>] snd_usbmidi_input_start.part.12+0x4e/0x70 [snd_usbmidi_lib] [45117.335303] [<f7ae0a6b>] substream_open.isra.23+0x11b/0x1c0 [snd_usbmidi_lib] [45117.335341] [<f7e3cbba>] open_substream+0xda/0x170 [snd_rawmidi] [45117.335373] [<f7e3d301>] rawmidi_open_priv+0x51/0x110 [snd_rawmidi] [45117.335408] [<f7e3d45e>] snd_rawmidi_kernel_open+0x9e/0x110 [snd_rawmidi] [45117.335459] [<f7c9029a>] midisynth_subscribe+0x3a/0xf0 [snd_seq_midi] [45117.335497] [<f77d19ab>] subscribe_port.isra.1+0x6b/0xc0 [snd_seq] [45117.335578] [<f77d2529>] snd_seq_port_connect+0x159/0x2e0 [snd_seq] [45117.335655] [<f77ce3b4>] snd_seq_ioctl_subscribe_port+0xc4/0x140 [snd_seq] [45117.335703] [<f77cc8dd>] snd_seq_do_ioctl+0x9d/0xe0 [snd_seq] [45117.335740] [<c03965c2>] do_vfs_ioctl+0x2f2/0x4f0 [45117.335781] [<c0396820>] SyS_ioctl+0x60/0x90 [45117.335802] [<c07940c3>] sysenter_do_call+0x12/0x12 [45117.335836] [<b776de4c>] 0xb776de4b [45117.335846] ---[ end trace 63e1175b9ba4593d ]---
Unfortunately, the code is sufficiently complex (for my untrained eye) that I did not dare trying to patch it myself :-)
Again an ad hoc fix would be something like below. Could you give it a try?
Takashi,
looking at this:
/* * Prepare for suspend. Typically called from the USB suspend callback. */ void snd_usbmidi_suspend(struct list_head *p) { struct snd_usb_midi *umidi;
umidi = list_entry(p, struct snd_usb_midi, list); mutex_lock(&umidi->mutex); snd_usbmidi_input_stop(p); mutex_unlock(&umidi->mutex); } EXPORT_SYMBOL(snd_usbmidi_suspend);
It seems to me that the error_timer needs to be deleted on suspend() just as on disconnect() What do you think?
Yes, a good catch. Seife's explained that it's likely related with suspend, so this can be the cause. Worth to try. Takashi --- diff --git a/sound/usb/midi.c b/sound/usb/midi.c index 5bfb695547f8..54ffa4cc8142 100644 --- a/sound/usb/midi.c +++ b/sound/usb/midi.c @@ -2253,6 +2253,7 @@ void snd_usbmidi_suspend(struct list_head *p) umidi = list_entry(p, struct snd_usb_midi, list); mutex_lock(&umidi->mutex); snd_usbmidi_input_stop(p); + del_timer_sync(&umidi->error_timer); mutex_unlock(&umidi->mutex); } EXPORT_SYMBOL(snd_usbmidi_suspend); -- To unsubscribe, e-mail: opensuse-kernel+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-kernel+owner@opensuse.org