You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
[PATCH] x86_64: Use the DMA32 zone for dma_alloc_coherent()/pci_alloc_consistent
Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
07808b74e7
commit
47492d3667
@@ -220,6 +220,12 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
|||||||
uses the normal dma_mask for alloc_coherent. */
|
uses the normal dma_mask for alloc_coherent. */
|
||||||
dma_mask &= *dev->dma_mask;
|
dma_mask &= *dev->dma_mask;
|
||||||
|
|
||||||
|
/* Why <=? Even when the mask is smaller than 4GB it is often larger
|
||||||
|
than 16MB and in this case we have a chance of finding fitting memory
|
||||||
|
in the next higher zone first. If not retry with true GFP_DMA. -AK */
|
||||||
|
if (dma_mask <= 0xffffffff)
|
||||||
|
gfp |= GFP_DMA32;
|
||||||
|
|
||||||
again:
|
again:
|
||||||
memory = dma_alloc_pages(dev, gfp, get_order(size));
|
memory = dma_alloc_pages(dev, gfp, get_order(size));
|
||||||
if (memory == NULL)
|
if (memory == NULL)
|
||||||
@@ -245,7 +251,7 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!(gfp & GFP_DMA)) {
|
if (!(gfp & GFP_DMA)) {
|
||||||
gfp |= GFP_DMA;
|
gfp = (gfp & ~GFP_DMA32) | GFP_DMA;
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user