From: Takashi Iwai <tiwai@suse.de>
To: Jaroslav Kysela <perex@perex.cz>
Cc: Jakub Kicinski <kuba@kernel.org>, Takashi Iwai <tiwai@suse.com>,
alsa-devel@alsa-project.org, linux-usb@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
regressions@lists.linux.dev
Subject: Re: USB sound card freezes USB after resume from suspend
Date: Wed, 26 Apr 2023 10:14:13 +0200 [thread overview]
Message-ID: <87leifjc16.wl-tiwai@suse.de> (raw)
In-Reply-To: <7645c6c8-a21c-23d7-5c19-cd2892b98481@perex.cz>
On Wed, 26 Apr 2023 10:01:11 +0200,
Jaroslav Kysela wrote:
>
> On 26. 04. 23 7:24, Takashi Iwai wrote:
> > On Tue, 25 Apr 2023 20:19:24 +0200,
> > Jakub Kicinski wrote:
> >>
> >> Hi!
> >>
> >> For a few weeks now I can't use any USB devices if I suspend my laptop
> >> with my USB sound card active and resuming it without it connected.
> >>
> >> USB worker threads seems to be sitting in:
> >>
> >> [<0>] snd_pcm_dev_disconnect+0x1e8/0x280 [snd_pcm]
> >> [<0>] snd_device_disconnect_all+0x42/0x80 [snd]
> >> [<0>] snd_card_disconnect+0x128/0x290 [snd]
> >> [<0>] usb_audio_disconnect+0x11a/0x2c0 [snd_usb_audio]
> >> [<0>] usb_unbind_interface+0x8c/0x270
> >> [<0>] device_release_driver_internal+0x1b2/0x230
> >> [<0>] bus_remove_device+0xd8/0x150
> >> [<0>] device_del+0x18b/0x410
> >> [<0>] usb_disable_device+0xc6/0x1e0
> >> [<0>] usb_disconnect+0xda/0x2c0
> >> [<0>] usb_disconnect+0xbf/0x2c0
> >> [<0>] usb_disconnect+0xbf/0x2c0
> >> [<0>] usb_disconnect+0xbf/0x2c0
> >> [<0>] hub_event+0xf01/0x1cd0
> >> [<0>] process_one_work+0x1c4/0x3d0
> >> [<0>] worker_thread+0x4d/0x380
> >> [<0>] kthread+0xe6/0x110
> >> [<0>] ret_from_fork+0x29/0x50
> >>
> >> Which is:
> >>
> >> snd_pcm_dev_disconnect (/usr/src/debug/kernel-6.2.12/linux-6.2.12-300.fc38.x86_64/sound/core/pcm.c:818 /usr/src/debug/kernel-6.2.12/linux-6.2.12-300.fc38.x86_64/sound/core/pcm.c:812 /usr/src/debug/kernel-6.2.12/linux-6.2.12-300.fc38.x86_64/sound/core/pcm.c:1129) snd_pcm
> >>
> >> It happens on Fedora 37 and Fedora 38, it seems to have coincided with
> >> the 6.2 kernel but I'm not 100% sure.
> >>
> >> The USB devices come back after half an hour or so, silently.
> >> There's nothing of note in dmesg.
> >
> > AFAIK, there has been no similar report, so far.
> >
> > Is it a regression? If yes, could you figure out which kernel version
> > starts showing the problem (or at best bisection)?
>
> It seems that it may be related to free_chmap():
>
> (gdb) l *(snd_pcm_dev_disconnect+0x1e8)
> 0xef0 is in snd_pcm_dev_disconnect (sound/core/pcm.c:817).
> 812 static void free_chmap(struct snd_pcm_str *pstr)
> 813 {
> 814 if (pstr->chmap_kctl) {
> 815 struct snd_card *card = pstr->pcm->card;
> 816
> 817 down_write(&card->controls_rwsem);
> 818 snd_ctl_remove(card, pstr->chmap_kctl);
> 819 up_write(&card->controls_rwsem);
> 820 pstr->chmap_kctl = NULL;
> 821 }
>
> I think that the chmap should be freed only in snd_pcm_free_stream()
> to avoid possible nested mutex locks. This operation does not belong
> to disconnect.
A good point, it'll be a patch like below.
But we still need to figure out what's actually happening there.
> But I cannot reproduce this lock here.
Here too. Could be tied with the config or the device?
thanks,
Takashi
-- 8< --
--- a/sound/core/pcm.c
+++ b/sound/core/pcm.c
@@ -1126,7 +1126,6 @@ static int snd_pcm_dev_disconnect(struct snd_device *device)
pcm_call_notify(pcm, n_disconnect);
for (cidx = 0; cidx < 2; cidx++) {
snd_unregister_device(&pcm->streams[cidx].dev);
- free_chmap(&pcm->streams[cidx]);
}
mutex_unlock(&pcm->open_mutex);
mutex_unlock(®ister_mutex);
next prev parent reply other threads:[~2023-04-26 8:15 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-25 18:19 USB sound card freezes USB after resume from suspend Jakub Kicinski
2023-04-26 5:24 ` Takashi Iwai
2023-04-26 5:24 ` Takashi Iwai
2023-04-26 5:46 ` Geraldo Nascimento
2023-04-26 6:02 ` Takashi Iwai
2023-04-26 6:05 ` Geraldo Nascimento
2023-04-26 8:01 ` Jaroslav Kysela
2023-04-26 8:14 ` Takashi Iwai [this message]
2023-04-26 11:04 ` Jaroslav Kysela
2023-04-26 13:59 ` Jakub Kicinski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87leifjc16.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@alsa-project.org \
--cc=gregkh@linuxfoundation.org \
--cc=kuba@kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=perex@perex.cz \
--cc=regressions@lists.linux.dev \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.