• Takashi Iwai's avatar
    ALSA: usb-audio: Work around for XRUN with low latency playback · 4267c5a8
    Takashi Iwai authored
    The recent change for low latency playback works in most of test cases
    but it turned out still to hit errors on some use cases, most notably
    with JACK with small buffer sizes.  This is because USB-audio driver
    fills up and submits full URBs at the beginning, while the URBs would
    return immediately and try to fill more -- that can easily trigger
    XRUN.  It was more or less expected, but in the small buffer size, the
    problem became pretty obvious.
    
    Fixing this behavior properly would require the change of the
    fundamental driver design, so it's no trivial task, unfortunately.
    Instead, here we work around the problem just by switching back to the
    old method when the given configuration is too fragile with the low
    latency stream handling.  As a threshold, we calculate the total
    buffer bytes in all plus one URBs, and check whether it's beyond the
    PCM buffer bytes.  The one extra URB is needed because XRUN happens at
    the next submission after the first round.
    
    Fixes: 307cc9ba ("ALSA: usb-audio: Reduce latency at playback start, take#2")
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20210827203311.5987-1-tiwai@suse.de
    
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    4267c5a8