On 8/1/25 04:50, Takashi Iwai wrote: > On Thu, 31 Jul 2025 23:49:11 +0200, > Sean Anderson wrote: >> >> Hi, >> >> On 9/2/22 01:52, Takashi Iwai wrote: >> > On Thu, 01 Sep 2022 17:25:41 +0200, >> > Sean Anderson wrote: >> >> >> >> >> >> >> >> On 8/28/22 3:49 AM, Takashi Iwai wrote: >> >> > On Fri, 26 Aug 2022 20:57:53 +0200, >> >> > Sean Anderson wrote: >> >> >> >> >> >> On 8/26/22 12:36 PM, Takashi Iwai wrote: >> >> >> > On Fri, 26 Aug 2022 18:22:24 +0200, >> >> >> > Sean Anderson wrote: >> >> >> >> >> >> >> >> Hi all, >> >> >> >> >> >> >> >> I have a "FiiO DigiHug USB Audio" sound card (1852:7022) [3]. I have had >> >> >> >> no problems with the audio, but I did notice a large number of message >> >> >> >> like >> >> >> >> >> >> >> >> retire_capture_urb: 4992 callbacks suppressed >> >> >> >> >> >> >> >> in my dmesg [1]. This is caused by the "Corrected urb data len." >> >> >> >> warning. >> >> >> > >> >> >> > What exact values are shown there? >> >> >> >> >> >> Unfortunately, as detailed below, I was unable to turn off ratelimiting. >> >> >> >> >> >> > The problem is that your hardware >> >> >> > (likely a buggy firmware) returns the unaligned size of bytes as the >> >> >> > data. Maybe it's worth to replace dev_warn_ratelimited() there with >> >> >> > dev_warn() and take all warnings once. Then we can see what kind of >> >> >> > values are delivered from the hardware. >> >> >> >> >> >> I'll have an attempt at that next week >> >> >> >> >> >> >> The patch adding this warning [2] makes it seem like >> >> >> >> this warning should be an uncommon occurance. However, based on the >> >> >> >> number of suppressed callbacks, this seems to be happening at a rate of >> >> >> >> around 500 Hz. >> >> >> >> >> >> >> >> Is this buggy hardware? Or is this a bug in the driver? Does there need >> >> >> >> to be a quirk? Or perhaps the warning above should be a debug instead? >> >> >> > >> >> >> > There is no quirk for that. As long as the device works with that >> >> >> > workaround (except for messages), we can simply add a quirk to not >> >> >> > warn but always apply the workaround silently for such devices. >> >> >> >> >> >> OK. I wasn't sure what the correct resolution would be. >> >> > >> >> > Actually I was wrong: the existing quirk QUIRK_FLAG_ALIGN_TRANSFER >> >> > should cover that. >> >> > >> >> > Could you try to pass quirk_flags=0x04 for the corresponding card slot >> >> > (the option takes an array) to snd-usb-audio module? Alternatively, >> >> > try to pass quirk_alias=18557022:0e510408 to snd-usb-audio? >> >> >> >> I tried both options, but neither worked. >> > >> > I have no further idea. You should try the latest kernel without >> > modification before checking further. >> > >> > And, looking at the code again, it's really strange that you get those >> > messages. Actually the transfer size *is* aligned to the audio frames >> > as default *unless* QUIRK_FLAG_ALIGN_TRANSFER is passed. And the >> > check is done rather the audio sample size alignment -- which must fit >> > within the audio frame alignment. >> > >> > So, QUIRK_FLAG_ALIGN_TRANSFER is already set for your device by some >> > reason incorrectly, or the code is doing wrong on your kernel. >> > We need to check what values are shown there actually, then check >> > whether the problem happens with the latest vanilla kernel. >> >> Sorry for the very long hiatus. I have reproduced this issue on kernel >> 6.15.8. >> >> From closer inspection this message seems to be from the first print and >> not the second one: >> >> if (urb->iso_frame_desc[i].status && printk_ratelimit()) { >> dev_dbg(&subs->dev->dev, "frame %d active: %d\n", >> i, urb->iso_frame_desc[i].status); >> // continue; >> } >> >> This probably be a dev_dbg_ratelimited. Indeed, that suppresses these >> messages. > > The use or printk_ratelimit() like the above is already discouraged, > so it makes more sense to switch to dev_dbg_ratelimited() if it > works. OK, I'll send a patch. >> The actual message that's being ratelimited is >> >> usb 3-11.2: frame 0 active: -71 >> >> which is EPROTO. Looks like that comes from xhci_hcd. With debug enabled >> I get a lot of >> >> xhci_hcd 0000:80:14.0: Transfer error for slot 36 ep 4 on endpoint >> >> The spec says this is >> >> | Asserted in the case where the host did not receive a valid response >> | from the device (Timeout, CRC, Bad PID, unexpected NYET, etc.). >> >> and I don't really know what to make of that. Should I send a patch to >> convert that dev_dbg to dev_dbg_ratelimited? Or do you want to debug >> this further? > > Usually EPROTO means something the USB controller doesn't like :) > It's often a device firmware problem, but can be other means, too. > You can try to connect to a different port or a machine, and see > whether the problem is seen consistently. As it happens, this with a different motherboard than before. So I guess this is a problem with the device? I attached a pcap. From looking through it, it seems like many of the "URB_ISOCHRONOUS in" are failing. But this is sort of strange, since the card is just a DAC+headphone amp and there is no physical input. In pactl [1] I see there is an input. It doesn't seem to function no matter what profile I use. So maybe the quirk should be that this card does not actually have an input? --Sean [1] Output of "pactl list" excluding sections not containing "FiiO" Module #49 Name: module-alsa-card Argument: device_id="0" name="usb-FiiO_DigiHug_USB_Audio-01" card_name="alsa_card.usb-FiiO_DigiHug_USB_Audio-01" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1" Usage counter: 9 Properties: module.author = "Lennart Poettering" module.description = "ALSA Card" module.version = "13.99.1" Sink #22 State: IDLE Name: alsa_output.usb-FiiO_DigiHug_USB_Audio-01.analog-stereo Description: DigiHug USB Audio Analog Stereo Driver: module-alsa-card.c Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 49 Mute: no Volume: front-left: 30419 / 46% / -20.00 dB, front-right: 30419 / 46% / -20.00 dB balance 0.00 Base Volume: 65536 / 100% / 0.00 dB Monitor Source: alsa_output.usb-FiiO_DigiHug_USB_Audio-01.analog-stereo.monitor Latency: 54206 usec, configured 40000 usec Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY Properties: alsa.resolution_bits = "16" device.api = "alsa" device.class = "sound" alsa.class = "generic" alsa.subclass = "generic-mix" alsa.name = "USB Audio" alsa.id = "USB Audio" alsa.subdevice = "0" alsa.subdevice_name = "subdevice #0" alsa.device = "0" alsa.card = "0" alsa.card_name = "DigiHug USB Audio" alsa.long_card_name = "FiiO DigiHug USB Audio at usb-0000:80:14.0-11.2, full speed" alsa.driver_name = "snd_usb_audio" device.bus_path = "pci-0000:80:14.0-usb-0:11.2:1.1" sysfs.path = "/devices/pci0000:80/0000:80:14.0/usb3/3-11/3-11.2/3-11.2:1.1/sound/card0" udev.id = "usb-FiiO_DigiHug_USB_Audio-01" device.bus = "usb" device.vendor.id = "1852" device.vendor.name = "GYROCOM C&C Co., LTD" device.product.id = "7022" device.product.name = "DigiHug USB Audio" device.serial = "FiiO_DigiHug_USB_Audio" device.string = "front:0" device.buffering.buffer_size = "352800" device.buffering.fragment_size = "176400" device.access_mode = "mmap+timer" device.profile.name = "analog-stereo" device.profile.description = "Analog Stereo" device.description = "DigiHug USB Audio Analog Stereo" module-udev-detect.discovered = "1" device.icon_name = "audio-card-usb" Ports: analog-output: Analog Output (priority: 9900) Active Port: analog-output Formats: pcm Source #44 State: RUNNING Name: alsa_output.usb-FiiO_DigiHug_USB_Audio-01.analog-stereo.monitor Description: Monitor of DigiHug USB Audio Analog Stereo Driver: module-alsa-card.c Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 49 Mute: no Volume: front-left: 65536 / 100% / 0.00 dB, front-right: 65536 / 100% / 0.00 dB balance 0.00 Base Volume: 65536 / 100% / 0.00 dB Monitor of Sink: alsa_output.usb-FiiO_DigiHug_USB_Audio-01.analog-stereo Latency: 0 usec, configured 40000 usec Flags: DECIBEL_VOLUME LATENCY Properties: device.description = "Monitor of DigiHug USB Audio Analog Stereo" device.class = "monitor" alsa.card = "0" alsa.card_name = "DigiHug USB Audio" alsa.long_card_name = "FiiO DigiHug USB Audio at usb-0000:80:14.0-11.2, full speed" alsa.driver_name = "snd_usb_audio" device.bus_path = "pci-0000:80:14.0-usb-0:11.2:1.1" sysfs.path = "/devices/pci0000:80/0000:80:14.0/usb3/3-11/3-11.2/3-11.2:1.1/sound/card0" udev.id = "usb-FiiO_DigiHug_USB_Audio-01" device.bus = "usb" device.vendor.id = "1852" device.vendor.name = "GYROCOM C&C Co., LTD" device.product.id = "7022" device.product.name = "DigiHug USB Audio" device.serial = "FiiO_DigiHug_USB_Audio" device.string = "0" module-udev-detect.discovered = "1" device.icon_name = "audio-card-usb" Formats: pcm Source #45 State: RUNNING Name: alsa_input.usb-FiiO_DigiHug_USB_Audio-01.analog-stereo Description: DigiHug USB Audio Analog Stereo Driver: module-alsa-card.c Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 49 Mute: no Volume: front-left: 65536 / 100% / 0.00 dB, front-right: 65536 / 100% / 0.00 dB balance 0.00 Base Volume: 65536 / 100% / 0.00 dB Monitor of Sink: n/a Latency: 1497109 usec, configured 40000 usec Flags: HARDWARE DECIBEL_VOLUME LATENCY Properties: alsa.resolution_bits = "16" device.api = "alsa" device.class = "sound" alsa.class = "generic" alsa.subclass = "generic-mix" alsa.name = "USB Audio" alsa.id = "USB Audio" alsa.subdevice = "0" alsa.subdevice_name = "subdevice #0" alsa.device = "0" alsa.card = "0" alsa.card_name = "DigiHug USB Audio" alsa.long_card_name = "FiiO DigiHug USB Audio at usb-0000:80:14.0-11.2, full speed" alsa.driver_name = "snd_usb_audio" device.bus_path = "pci-0000:80:14.0-usb-0:11.2:1.1" sysfs.path = "/devices/pci0000:80/0000:80:14.0/usb3/3-11/3-11.2/3-11.2:1.1/sound/card0" udev.id = "usb-FiiO_DigiHug_USB_Audio-01" device.bus = "usb" device.vendor.id = "1852" device.vendor.name = "GYROCOM C&C Co., LTD" device.product.id = "7022" device.product.name = "DigiHug USB Audio" device.serial = "FiiO_DigiHug_USB_Audio" device.string = "front:0" device.buffering.buffer_size = "352800" device.buffering.fragment_size = "176400" device.access_mode = "mmap+timer" device.profile.name = "analog-stereo" device.profile.description = "Analog Stereo" device.description = "DigiHug USB Audio Analog Stereo" module-udev-detect.discovered = "1" device.icon_name = "audio-card-usb" Ports: analog-input: Analog Input (priority: 10000) Active Port: analog-input Formats: pcm Card #24 Name: alsa_card.usb-FiiO_DigiHug_USB_Audio-01 Driver: module-alsa-card.c Owner Module: 49 Properties: alsa.card = "0" alsa.card_name = "DigiHug USB Audio" alsa.long_card_name = "FiiO DigiHug USB Audio at usb-0000:80:14.0-11.2, full speed" alsa.driver_name = "snd_usb_audio" device.bus_path = "pci-0000:80:14.0-usb-0:11.2:1.1" sysfs.path = "/devices/pci0000:80/0000:80:14.0/usb3/3-11/3-11.2/3-11.2:1.1/sound/card0" udev.id = "usb-FiiO_DigiHug_USB_Audio-01" device.bus = "usb" device.vendor.id = "1852" device.vendor.name = "GYROCOM C&C Co., LTD" device.product.id = "7022" device.product.name = "DigiHug USB Audio" device.serial = "FiiO_DigiHug_USB_Audio" device.string = "0" device.description = "DigiHug USB Audio" module-udev-detect.discovered = "1" device.icon_name = "audio-card-usb" Profiles: input:analog-stereo: Analog Stereo Input (sinks: 0, sources: 1, priority: 65, available: yes) input:iec958-stereo: Digital Stereo (IEC958) Input (sinks: 0, sources: 1, priority: 55, available: yes) output:analog-stereo: Analog Stereo Output (sinks: 1, sources: 0, priority: 6500, available: yes) output:analog-stereo+input:analog-stereo: Analog Stereo Duplex (sinks: 1, sources: 1, priority: 6565, available: yes) output:analog-stereo+input:iec958-stereo: Analog Stereo Output + Digital Stereo (IEC958) Input (sinks: 1, sources: 1, priority: 6555, available: yes) output:iec958-stereo: Digital Stereo (IEC958) Output (sinks: 1, sources: 0, priority: 5500, available: yes) output:iec958-stereo+input:analog-stereo: Digital Stereo (IEC958) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 5565, available: yes) output:iec958-stereo+input:iec958-stereo: Digital Stereo Duplex (IEC958) (sinks: 1, sources: 1, priority: 5555, available: yes) off: Off (sinks: 0, sources: 0, priority: 0, available: yes) Active Profile: output:analog-stereo+input:analog-stereo Ports: analog-input: Analog Input (priority: 10000, latency offset: 0 usec) Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo, output:iec958-stereo+input:analog-stereo iec958-stereo-input: Digital Input (S/PDIF) (priority: 0, latency offset: 0 usec) Part of profile(s): input:iec958-stereo, output:analog-stereo+input:iec958-stereo, output:iec958-stereo+input:iec958-stereo analog-output: Analog Output (priority: 9900, latency offset: 0 usec) Part of profile(s): output:analog-stereo, output:analog-stereo+input:analog-stereo, output:analog-stereo+input:iec958-stereo iec958-stereo-output: Digital Output (S/PDIF) (priority: 0, latency offset: 0 usec) Part of profile(s): output:iec958-stereo, output:iec958-stereo+input:analog-stereo, output:iec958-stereo+input:iec958-stereo
Attachment:
fiio.pcapng.gz
Description: application/gzip