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