diff options
author | Christoph Hellwig <hch@lst.de> | 2022-11-09 08:25:17 +0100 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2022-11-21 09:36:19 +0100 |
commit | 3306877aff07363f9bede7f9edf2c4ea4f5b20be (patch) | |
tree | f617af373b56998ed49ba63bbcec167ca87c33dc /sound/core | |
parent | c08004eede4b2d8a42a9a14ee50904f47cb239a1 (diff) | |
download | lwn-3306877aff07363f9bede7f9edf2c4ea4f5b20be.tar.gz lwn-3306877aff07363f9bede7f9edf2c4ea4f5b20be.zip |
ALSA: memalloc: don't pass bogus GFP_ flags to dma_alloc_*
dma_alloc_coherent/dma_alloc_wc is an opaque allocator that only uses
the GFP_ flags for allocation context control. Don't pass __GFP_COMP
which makes no sense for an allocation that can't in any way be
converted to a page pointer.
Note that for dma_alloc_noncoherent and dma_alloc_noncontigous in
combination with the DMA mmap helpers __GFP_COMP looks sketchy as well,
so I would suggest to drop that as well after a careful audit.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'sound/core')
-rw-r--r-- | sound/core/memalloc.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index 03cffe771366..fe03cf796e8b 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c @@ -20,7 +20,6 @@ #define DEFAULT_GFP \ (GFP_KERNEL | \ - __GFP_COMP | /* compound page lets parts be mapped */ \ __GFP_RETRY_MAYFAIL | /* don't trigger OOM-killer */ \ __GFP_NOWARN) /* no stack trace print - this call is non-critical */ @@ -542,7 +541,7 @@ static void *snd_dma_noncontig_alloc(struct snd_dma_buffer *dmab, size_t size) void *p; sgt = dma_alloc_noncontiguous(dmab->dev.dev, size, dmab->dev.dir, - DEFAULT_GFP, 0); + DEFAULT_GFP | __GFP_COMP, 0); if (!sgt) { #ifdef CONFIG_SND_DMA_SGBUF if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_WC_SG) @@ -810,7 +809,7 @@ static void *snd_dma_noncoherent_alloc(struct snd_dma_buffer *dmab, size_t size) void *p; p = dma_alloc_noncoherent(dmab->dev.dev, size, &dmab->addr, - dmab->dev.dir, DEFAULT_GFP); + dmab->dev.dir, DEFAULT_GFP | __GFP_COMP); if (p) dmab->dev.need_sync = dma_need_sync(dmab->dev.dev, dmab->addr); return p; |