Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 46051C433EF for ; Thu, 18 Nov 2021 16:57:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 23BD4613AD for ; Thu, 18 Nov 2021 16:57:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233767AbhKRRAi (ORCPT ); Thu, 18 Nov 2021 12:00:38 -0500 Received: from smtp-out1.suse.de ([195.135.220.28]:53620 "EHLO smtp-out1.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231530AbhKRRAh (ORCPT ); Thu, 18 Nov 2021 12:00:37 -0500 Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out1.suse.de (Postfix) with ESMTP id 0662B218B0; Thu, 18 Nov 2021 16:57:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1637254656; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=uollSdwNuZrjyGy6XD4PPpc13ZN2a2seNewqRJkjASc=; b=d6RxH6zzv94NN93MMghg7cQvqJaPLPFXKnVFFuWU29GjGpUPz2KkgXBHvqMa7YG1fabl2p bXVaMh7HK7ezJFGVxyg2eCr8vF4zlK2BnLELzus3DGee48zpaSZnPiNjKh2IIJH5Mif+WN XawfqcYhWbc1zoXA/Ee55lDzIdTl1ns= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1637254656; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=uollSdwNuZrjyGy6XD4PPpc13ZN2a2seNewqRJkjASc=; b=pbEV1DQyVlkRdxsy1XD4XYE/Ovsrho6bLKrBFRHLheotlHTR5mV8ZBWRBEAZocsK4eYlgW uar4O8fuP97XgYDw== Received: from alsa1.suse.de (alsa1.suse.de [10.160.4.42]) by relay2.suse.de (Postfix) with ESMTP id EEFD8A3B87; Thu, 18 Nov 2021 16:57:35 +0000 (UTC) Date: Thu, 18 Nov 2021 17:57:35 +0100 Message-ID: From: Takashi Iwai To: "Kirill A. Shutemov" Cc: Linus Torvalds , Mark Brown , Liam Girdwood , Linux Kernel Mailing List Subject: Re: [GIT PULL] sound updates for 5.16-rc1 In-Reply-To: References: <20211117161855.m45mxcqszkfcetai@box.shutemov.name> <20211117174826.23eakoivl33tawb2@box.shutemov.name> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/25.3 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 18 Nov 2021 09:01:38 +0100, Takashi Iwai wrote: > > On Wed, 17 Nov 2021 19:02:47 +0100, > Takashi Iwai wrote: > > > > On Wed, 17 Nov 2021 18:48:26 +0100, > > Kirill A. Shutemov wrote: > > > > > > On Wed, Nov 17, 2021 at 05:24:28PM +0100, Takashi Iwai wrote: > > > > On Wed, 17 Nov 2021 17:18:55 +0100, > > > > Kirill A. Shutemov wrote: > > > > > > > > > > On Wed, Nov 03, 2021 at 11:24:10AM +0100, Takashi Iwai wrote: > > > > > > Linus, > > > > > > > > > > > > please pull sound updates for v5.16-rc1 from: > > > > > > > > > > > > git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-5.16-rc1 > > > > > > > > > > > > The topmost commit is df0380b9539b04c1ae8854a984098da06d5f1e67 > > > > > > > > > > > > ---------------------------------------------------------------- > > > > > > > > > > > > sound updates for 5.16-rc1 > > > > > > > > > > > > Lots of code development have been see in ASoC side as usual, while > > > > > > the continued development on memalloc helper and USB-audio low- > > > > > > latency support are found in the rest. Note that a few changes in the > > > > > > unusual places like arch/sh are included, which are a part of ASoC DAI > > > > > > format cleanups. > > > > > > > > > > > > ALSA core: > > > > > > - Continued memallloc helper updates and cleanups, now supporting > > > > > > non-coherent and non-contiguous pages > > > > > > - Fixes for races in mixer OSS layer > > > > > > > > > > > > ASoC: > > > > > > - A new version of the audio graph card which supports a wider range > > > > > > of systems > > > > > > - Several conversions to YAML DT bindings > > > > > > - Continuing cleanups to the SOF and Intel code > > > > > > - Move of the Cirrus DSP framework into drivers/firmware to allow for > > > > > > future use by non-audio DSPs > > > > > > - An overhaul of the cs42l42 driver, correcting many problems > > > > > > - DAI format terminology conversions over many drivers for cleanups > > > > > > - Support for AMD Vangogh and Yelow Cap, Cirrus CS35L41, Maxim > > > > > > MAX98520 and MAX98360A, Mediatek MT8195, Nuvoton NAU8821, nVidia > > > > > > Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, > > > > > > RT5682S, and RT9120 and Rockchip RV1126 and RK3568 > > > > > > > > > > > > USB-audio: > > > > > > - Continued improvements on low-latency playback > > > > > > - Quirks for Pioneer devices, Line6 HX-Stomp XL, Audient iD14 > > > > > > > > > > > > HD-audio: > > > > > > - Reduce excessive udelay() calls on Intel platforms; this should > > > > > > reduce the CPU load with PulseAudio > > > > > > - Quirks for HP and Clevo laptops > > > > > > > > > > > > FireWire: > > > > > > - Support for meter information on MOTU > > > > > > > > > > > > > > > > ... > > > > > > > > > > > Takashi Iwai (29): > > > > > > ALSA: hda: Reduce udelay() at SKL+ position reporting > > > > > > ALSA: hda: Use position buffer for SKL+ again > > > > > > ALSA: usb-audio: Restrict rates for the shared clocks > > > > > > ALSA: usb-audio: Fix possible race at sync of urb completions > > > > > > ALSA: usb-audio: Rename early_playback_start flag with lowlatency_playback > > > > > > ALSA: usb-audio: Disable low-latency playback for free-wheel mode > > > > > > ALSA: usb-audio: Disable low-latency mode for implicit feedback sync > > > > > > ALSA: usb-audio: Check available frames for the next packet size > > > > > > ALSA: usb-audio: Add spinlock to stop_urbs() > > > > > > ALSA: usb-audio: Improved lowlatency playback support > > > > > > > > > > This commit breaks audio playback for me. The sample plays for fraction of > > > > > a second than stops. > > > > > > > > > > I use SMSL SA300. Let me know what ifo is needed to track it down. > > > > > > > > > > Also I can test potential fixups if needed. > > > > > > > > Could you give alsa-info.sh output with the device? Run the script > > > > with --no-upload option, and attach the output. > > > > > > Attached. I run it on kernel without the commit. I hope it is fine. > > > > > > One note: I use monolitic kernel without CONFIG_MODULES. The script > > > complained about missing /proc/asound/modules and other modules related > > > stuff. > > > > It's a known problem I forgot, but this doesn't matter much. > > > > > > Also /proc/asound/card*/stream* file for that usb device, too, > > > > please. > > > > > > Attached. > > > > Thanks! > > > > > > And, which environment are you testing, more exactly? Which platform, > > > > and with PulseAudio, pipewire, JACK, or direct ALSA device use? > > > > > > Nothing fancy. Direct ALSA. I tested with 'speaker-test -c2 -t wav' during > > > bisect. > > > > Did you notice the problem with other applications, too? > > > > When you wrote "The sample plays for fraction of a second than > > stops.", it means that the speaker-test program stalls? Or it's > > shorter playbacks? > > > > Also, please test booting with snd_usb_audio.lowlatency=0 boot > > option. Does it behave like before again? > > > > > > For checking the behavior, we'd need to check hw_params in > > > > /proc/asound/card*/pcm*/sub*/* for the corresponding device during > > > > playback/capture operations. > > > > > > You need this to be collected when the problem triggers, right? > > > I will follow up with this. > > > > I'll need to test my device at first. Maybe tomorrow. > > I checked mine, and all worked fine. So this doesn't look like a > generic breakage but somehow specific to certain devices or system. > > Could you verify the lowlatency flag off? > > Also, the simple aplay invocation (e.g. with a 2-channel 16bit sample) > also goes to the same problem, I suppose? And it'd be helpful if you can gather the log (from tracing) with the patch below (from the start of speaker-test until the stall). Takashi diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index 743b8287cfcd..b48e53b490b8 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c @@ -392,6 +392,7 @@ static void notify_xrun(struct snd_usb_endpoint *ep) { struct snd_usb_substream *data_subs; + DBG("XXX XRUN!\n"); data_subs = READ_ONCE(ep->data_subs); if (data_subs && data_subs->pcm_substream) snd_pcm_stop_xrun(data_subs->pcm_substream); @@ -425,6 +426,7 @@ static void push_back_to_ready_list(struct snd_usb_endpoint *ep, { unsigned long flags; + DBG("pkt %d push back\n", ctx->index); spin_lock_irqsave(&ep->lock, flags); list_add_tail(&ctx->ready_list, &ep->ready_playback_urbs); spin_unlock_irqrestore(&ep->lock, flags); @@ -470,6 +472,8 @@ void snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep, if (ctx == NULL) return; + DBG("checking queue pkt %d (active_mask=%lx)\n", ctx->index, + ep->active_mask); /* copy over the length information */ if (implicit_fb) { for (i = 0; i < packet->packets; i++) @@ -490,6 +494,7 @@ void snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep, return; } + DBG("pkt %d submitted\n", ctx->index); err = usb_submit_urb(ctx->urb, GFP_ATOMIC); if (err < 0) { usb_audio_err(ep->chip, @@ -513,6 +518,7 @@ static void snd_complete_urb(struct urb *urb) struct snd_usb_endpoint *ep = ctx->ep; int err; + DBG("pkt complete %d\n", ctx->index); if (unlikely(urb->status == -ENOENT || /* unlinked */ urb->status == -ENODEV || /* device removed */ urb->status == -ECONNRESET || /* unlinked */ @@ -1442,6 +1448,7 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep) int err; unsigned int i; + DBG("endpoint start\n"); if (atomic_read(&ep->chip->shutdown)) return -EBADFD; @@ -1500,6 +1507,7 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep) goto __error; } + DBG("start: pkt %d submitted\n", i); err = usb_submit_urb(urb, GFP_ATOMIC); if (err < 0) { usb_audio_err(ep->chip, diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index 95ec8eec1bb0..b1651db2e1e8 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c @@ -1232,6 +1232,8 @@ static void urb_ctx_queue_advance(struct snd_usb_substream *subs, subs->hwptr_done += bytes; if (subs->hwptr_done >= subs->buffer_bytes) subs->hwptr_done -= subs->buffer_bytes; + DBG("PCM bytes=%d, queued=%d, inflight=%d, hwptr=%d\n", + bytes, ctx->queued, subs->inflight_bytes, subs->hwptr_done); } static inline void fill_playback_urb_dsd_dop(struct snd_usb_substream *subs, @@ -1389,10 +1391,17 @@ static int prepare_playback_urb(struct snd_usb_substream *subs, if (avail <= hwptr) avail += runtime->buffer_size; avail -= hwptr; + DBG("prepare: applptr=%ld, hwptr_base=%ld, buffer=%ld, hwptr=%d, avail=%d\n", + (long)runtime->control->appl_ptr, + (long)runtime->hw_ptr_base, + (long)runtime->buffer_size, + hwptr, avail); } for (i = 0; i < ctx->packets; i++) { counts = snd_usb_endpoint_next_packet_size(ep, ctx, i, avail); + DBG("prepare: pkt %d [%d]: avail=%d, counts=%d\n", + ctx->index, i, avail, counts); if (counts < 0) break; /* set up descriptor */ @@ -1530,6 +1539,7 @@ static int snd_usb_pcm_playback_ack(struct snd_pcm_substream *substream) /* When no more in-flight URBs available, try to process the pending * outputs here */ + DBG("PCM ack: active_mask=%lx\n", ep->active_mask); if (!ep->active_mask) snd_usb_queue_pending_output_urbs(ep, true); return 0; diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h index 167834133b9b..84fcd6956f76 100644 --- a/sound/usb/usbaudio.h +++ b/sound/usb/usbaudio.h @@ -184,4 +184,5 @@ extern bool snd_usb_skip_validation; #define QUIRK_FLAG_DSD_RAW (1U << 15) #define QUIRK_FLAG_SET_IFACE_FIRST (1U << 16) +#define DBG(fmt, ...) trace_printk(fmt, ##__VA_ARGS__) #endif /* __USBAUDIO_H */