Commit 8e1741c6 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: memalloc: Fix dma_need_sync() checks



dma_need_sync() checks each DMA address.  Fix the incorrect usages
for non-contiguous and non-coherent page allocations.
Fortunately, there are no actual call sites that need manual syncs
yet.

Fixes: a25684a9 ("ALSA: memalloc: Support for non-contiguous page allocation")
Fixes: 73325f60 ("ALSA: memalloc: Support for non-coherent page allocation")
Cc: <stable@vger.kernel.org>
Reported-by: default avatarEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
Link: https://lore.kernel.org/r/20220210123344.8756-2-tiwai@suse.de


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 52517d9c
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -511,7 +511,8 @@ static void *snd_dma_noncontig_alloc(struct snd_dma_buffer *dmab, size_t size)
				      DEFAULT_GFP, 0);
	if (!sgt)
		return NULL;
	dmab->dev.need_sync = dma_need_sync(dmab->dev.dev, dmab->dev.dir);
	dmab->dev.need_sync = dma_need_sync(dmab->dev.dev,
					    sg_dma_address(sgt->sgl));
	p = dma_vmap_noncontiguous(dmab->dev.dev, size, sgt);
	if (p)
		dmab->private_data = sgt;
@@ -671,9 +672,13 @@ static const struct snd_malloc_ops snd_dma_sg_wc_ops = {
 */
static void *snd_dma_noncoherent_alloc(struct snd_dma_buffer *dmab, size_t size)
{
	dmab->dev.need_sync = dma_need_sync(dmab->dev.dev, dmab->dev.dir);
	return dma_alloc_noncoherent(dmab->dev.dev, size, &dmab->addr,
	void *p;

	p = dma_alloc_noncoherent(dmab->dev.dev, size, &dmab->addr,
				  dmab->dev.dir, DEFAULT_GFP);
	if (p)
		dmab->dev.need_sync = dma_need_sync(dmab->dev.dev, dmab->addr);
	return p;
}

static void snd_dma_noncoherent_free(struct snd_dma_buffer *dmab)