x86_64: Fail dma_alloc_coherent on dma less devices
authorAndi Kleen <ak@suse.de>
Wed, 15 Aug 2007 00:40:34 +0000 (02:40 +0200)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Sat, 18 Aug 2007 17:25:25 +0000 (10:25 -0700)
This should fix an oops with PCMCIA PATA devices

http://bugzilla.kernel.org/show_bug.cgi?id=8424

This is not a full fix for the problem, but probably
still the right thing to do.

[ I'm almost certain it's *not* the right thing to do, but it avoids an
  oops, and I want comments from others on what the right thing would
  actually be..  I suspect we should just remove the use of dma_mask
  entirely in this function, and just use coherent_dma_mask.  - Linus ]

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/x86_64/kernel/pci-dma.c

index 05d745ede561320a6c50d0a47c5a3cbb26cdf1f1..29711445c8187464c6c00b14938451c23732df3e 100644 (file)
@@ -82,6 +82,10 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
        if (dma_mask == 0)
                dma_mask = DMA_32BIT_MASK;
 
+       /* Device not DMA able */
+       if (dev->dma_mask == NULL)
+               return NULL;
+
        /* Don't invoke OOM killer */
        gfp |= __GFP_NORETRY;