Re: [PATCH v6 2/2] ALSA: control: add ioctl to retrieve full card components
Takashi Iwai <[email protected]> Fri, 31 Jul 2026 12:59:32 +0200
| Newsgroups | org.alsa-project.alsa-devel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-sound |
|---|---|
| Message-ID | <[email protected]> |
On Mon, 20 Jul 2026 12:35:05 +0200, Maciej Strozek wrote: > > The fixed-size components field in SNDRV_CTL_IOCTL_CARD_INFO can be too > small on systems with many audio devices. > > Keep the existing struct snd_ctl_card_info ABI intact and add a new > ioctl SNDRV_CTL_IOCTL_CARD_BYTES that carries a variable-length payload > selected by a type discriminator. The first defined type > SND_CTL_CARD_BTYPE_COMPONENTS returns the full components string. The > ioctl is designed to be reused for other variable-length card payloads > in the future. > > The user-space caller may set data_allocated == 0 (or data == NULL) to > query the required length; otherwise the kernel copies the payload into > the user buffer and writes back the actual length in data_len. > > When the legacy components field in struct snd_ctl_card_info is > truncated, '>' is written just before the NUL terminator to signal to > user-space that the full string is available via the new ioctl. > > card->components is now dynamically allocated and grown in 32 byte > increments via krealloc(), capped at 512 bytes. > > Link: https://github.com/alsa-project/alsa-lib/pull/494 > Suggested-by: Jaroslav Kysela <[email protected]> > Suggested-by: Takashi Iwai <[email protected]> > Signed-off-by: Maciej Strozek <[email protected]> > --- > Changes for v6: > - take the snd_ioctl_rwsem write lock in snd_component_add() > Changes for v5: > - use __u64 and u64_to_user_ptr() instead of 32bit compat layer > - handle a NULL card->components > Changes for v4: > - replaced snd_ctl_card_components with snd_ctl_card_bytes for possible > future extensions > - support query mode (data_allocated == 0 or data == NULL) > - added compat 32-bit > - renamed card->components_ptr / components_ptr_alloc_size to > card->components / components_alloc_size > Changes for v3: > - change components field to a dynamic array resizable in 32 byte > increments > - removed SNDRV_CTL_COMPONENTS_LEN define > - sanity check if 'components' requests more than 512 bytes > - added a commit to clean up trailing whitespaces > - alsa-utils link no longer needed > Changes for v2: > - do not modify existing card->components field > - add a new ioctl and struct to keep the full components string > - handle the split/trim in snd_ctl_card_info() Looks OK for me. Jaroslav, could you review, too? If nothing obvious is found, I'm going to take for 7.3. thanks, Takashi