Commit c4824ae7 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: pcm: Fix mmap capability check

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.

Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210720092640.12338-1-tiwai@suse.de


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 114613f6
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -246,13 +246,19 @@ 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;

	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,
				 struct snd_pcm_hw_params *params)