Message ID | 20221113163535.884299-7-hch@lst.de (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | [1/7] media: videobuf-dma-contig: use dma_mmap_coherent | expand |
On Sun, 13 Nov 2022 17:35:34 +0100, Christoph Hellwig wrote: > > 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. The addition of __GFP_COMP there was really old, it was Hugh's commit f3d48f0373c1 at 2005: [PATCH] unpaged: fix sound Bad page states It mentions something about sparc32/64. I hope this isn't relevant any longer (honestly I have no idea about that). > 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. Yeah, that's a cargo-cult copy&paste from the old idiom. Should be killed altogether. Thanks! Takashi
On Mon, Nov 14, 2022 at 10:04:37AM +0100, Takashi Iwai wrote: > It mentions something about sparc32/64. I hope this isn't relevant > any longer (honestly I have no idea about that). It shouldn't. sparc is using fairly generic code now.
diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index 03cffe7713667..fe03cf796e8bb 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;
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> --- sound/core/memalloc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)