[PATCH RFC 0/5] ALSA: Support for non-coherent and non-contiguous page allocation

Takashi Iwai tiwai at suse.de
Tue Aug 10 14:21:55 CEST 2021


Hi,

this is an experimental patch set to add the support for PCM buffers
with non-coherent and non-contiguous pages, typically useful for
non-x86 architectures.  The first patch improves the SG-buffer
handling, then add a new PCM info flag that disables the control and
status mmap, and implements two new buffer types,
SNDRV_DMA_TYPE_NONCONTIG and SNDRV_DMA_TYPE_NONCOHERENT.  The former
is the SG-buffer and the latter is the continuous page allocation,
corresponding to SNDRV_DMA_TYPE_DEV_SG and SNDRV_DMA_TYPE_DEV on x86.

Unlike other page types, those are directional (that need the DMA
direction at allocation time) and require the explicit sync of buffers
around the data transfer (flushing, invalidating).  The sync is
implemented inside ALSA PCM core and automatically applied at updating
the applptr and hwsync via SYNC_PTR ioctl, which should be issued
during mmap operation, so it should work transparently as long as
applications are running with alsa-lib.  For tinyALSA, we might need
to revisit the implementation.

This is currently an RFC -- more exactly, CALL FOR TESTERS, as I have
no Arm machine with the sound device for now.  The needed change for
an existing driver is simple:

* Replace the buffer type from SNDRV_DMA_TYPE_DEV to
  SNDRV_DMA_TYPE_NONCOHERENT (or from SNDRV_DMA_TYPE_DEV_SG to
  SNDRV_DMA_TYPE_NONCONTIG), which is set up typically in
  snd_pcm_set_managed_buffer*() call.

* Add SNDRV_PCM_INFO_EXPLICIT_SYNC flag to the PCM runtime
  hardware.info field

It'd be greatly appreciated if anyone can test and try the changes,
and help debugging.  Again, the code is faily untested.

The latest code is found in topic/memalloc-noncontig branch of my
sound git tree:
 git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git

The patch set is based on for-next branch, i.e. changes for 5.15 are
included.


thanks,

Takashi

===

Takashi Iwai (5):
  ALSA: memalloc: Count continuous pages in vmalloc buffer handler
  ALSA: pcm: Add SNDRV_PCM_INFO_EXPLICIT_SYNC flag
  ALSA: memalloc: Assign ops field to snd_dma_buffer
  ALSA: memalloc: Support for non-contiguous page allocation
  ALSA: memalloc: Support for non-coherent page allocation

 include/sound/memalloc.h    |  48 +++++++-
 include/uapi/sound/asound.h |   1 +
 sound/core/memalloc.c       | 223 ++++++++++++++++++++++++++++--------
 sound/core/memalloc_local.h |   1 +
 sound/core/pcm_lib.c        |   9 ++
 sound/core/pcm_memory.c     |  13 ++-
 sound/core/pcm_native.c     |  22 ++++
 7 files changed, 263 insertions(+), 54 deletions(-)

-- 
2.26.2



More information about the Alsa-devel mailing list