On 20. 07. 21 11:26, Takashi Iwai wrote: > The hw_support_mmap() doesn't cover all memory allocation types and > might use a wrong device pointer for checking the capability. > Check the all memory allocation types more completely. This change breaks mmap for the snd-dummy driver (fake_buffer). It seems that we need this fix? diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 6a2971a7e6a1..09c0e2a6489c 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -246,7 +246,7 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream) if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_MMAP)) return false; - if (substream->ops->mmap) + if (substream->ops->mmap || substream->ops->page) return true; switch (substream->dma_buffer.dev.type) { Jaroslav > > Cc: <stable@xxxxxxxxxxxxxxx> > Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> > --- > sound/core/pcm_native.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c > index c88c4316c417..6919d2943b9d 100644 > --- a/sound/core/pcm_native.c > +++ b/sound/core/pcm_native.c > @@ -246,12 +246,18 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream) > if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_MMAP)) > return false; > > - if (substream->ops->mmap || > - (substream->dma_buffer.dev.type != SNDRV_DMA_TYPE_DEV && > - substream->dma_buffer.dev.type != SNDRV_DMA_TYPE_DEV_UC)) > + if (substream->ops->mmap) > return true; > > - return dma_can_mmap(substream->dma_buffer.dev.dev); > + switch (substream->dma_buffer.dev.type) { > + case SNDRV_DMA_TYPE_UNKNOWN: > + return false; > + case SNDRV_DMA_TYPE_CONTINUOUS: > + case SNDRV_DMA_TYPE_VMALLOC: > + return true; > + default: > + return dma_can_mmap(substream->dma_buffer.dev.dev); > + } > } > > static int constrain_mask_params(struct snd_pcm_substream *substream, > -- Jaroslav Kysela <perex@xxxxxxxx> Linux Sound Maintainer; ALSA Project; Red Hat, Inc.