Skip to content

Commit

Permalink
ALSA: pcm: Fix mmap capability check
Browse files Browse the repository at this point in the history
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: <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
tiwai committed Jul 20, 2021
1 parent 114613f commit c4824ae
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions sound/core/pcm_native.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit c4824ae

Please sign in to comment.