Skip to content

Commit

Permalink
[PATCH] x86_64: Use the DMA32 zone for dma_alloc_coherent()/pci_alloc…
Browse files Browse the repository at this point in the history
…_consistent

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Andi Kleen authored and Linus Torvalds committed Nov 15, 2005
1 parent 07808b7 commit 47492d3
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion arch/x86_64/kernel/pci-gart.c
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
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:
memory = dma_alloc_pages(dev, gfp, get_order(size));
if (memory == NULL)
Expand All @@ -245,7 +251,7 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
}

if (!(gfp & GFP_DMA)) {
gfp |= GFP_DMA;
gfp = (gfp & ~GFP_DMA32) | GFP_DMA;
goto again;
}
return NULL;
Expand Down

0 comments on commit 47492d3

Please sign in to comment.