Re: 2.6.26-rc1 regression: ISA DMA broken (bisected)

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Takashi Iwai
Date: Thursday, May 8, 2008 - 11:06 pm

At Fri, 09 May 2008 03:37:54 +0200,
Rene Herman wrote:

Thanks for catching it.  Yeah, the patch looks buggy.  We had an
implicit assumption that dev = NULL for ISA devices that require 24bit
DMA.

How about the patch below?  It's against the latest Linus git tree.


thanks,

Takashi


[PATCH] x86: Fix dma_alloc_coherent() for ISA devices

The recent work on x86 dma_alloc_coherent() breaks the ISA DMA buffer
allocation, which is represented by "dev = NULL" and requires 24bit
DMA implicitly.

Signed-off-by: Takashi Iwai <tiwai@suse.de>

---

diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
index 0c37f16..c5ef1af 100644
--- a/arch/x86/kernel/pci-dma.c
+++ b/arch/x86/kernel/pci-dma.c
@@ -385,11 +385,13 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
 	if (dma_alloc_from_coherent_mem(dev, size, dma_handle, &memory))
 		return memory;
 
-	if (!dev)
+	if (!dev) {
 		dev = &fallback_dev;
+		gfp |= GFP_DMA;
+	}
 	dma_mask = dev->coherent_dma_mask;
 	if (dma_mask == 0)
-		dma_mask = DMA_32BIT_MASK;
+		dma_mask = (gfp & GFP_DMA) ? DMA_24BIT_MASK : DMA_32BIT_MASK;
 
 	/* Device not DMA able */
 	if (dev->dma_mask == NULL)
@@ -403,7 +405,7 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
 	   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 <= DMA_32BIT_MASK)
+	if (dma_mask <= DMA_32BIT_MASK && !(gfp & GFP_DMA))
 		gfp |= GFP_DMA32;
 #endif
 
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
2.6.26-rc1 regression: ISA DMA broken (bisected), Rene Herman, (Thu May 8, 6:37 pm)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Takashi Iwai, (Thu May 8, 11:06 pm)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Ingo Molnar, (Fri May 9, 1:55 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Ingo Molnar, (Fri May 9, 1:58 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Rene Herman, (Fri May 9, 5:03 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Ingo Molnar, (Fri May 9, 5:28 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Pete Clements, (Fri May 9, 5:29 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Glauber Costa, (Fri May 9, 5:48 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Jesse Barnes, (Fri May 9, 10:20 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Rene Herman, (Fri May 9, 4:00 pm)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Ingo Molnar, (Tue May 13, 7:36 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Rene Herman, (Tue May 13, 8:26 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Bjorn Helgaas, (Tue May 13, 9:59 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Rene Herman, (Tue May 13, 10:33 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Bjorn Helgaas, (Tue May 13, 4:18 pm)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Takashi Iwai, (Wed May 14, 2:25 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Rene Herman, (Wed May 14, 5:46 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Takashi Iwai, (Wed May 14, 6:01 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Bjorn Helgaas, (Wed May 14, 8:26 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Rene Herman, (Wed May 14, 8:40 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Takashi Iwai, (Wed May 14, 8:53 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Rene Herman, (Wed May 14, 11:41 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Bjorn Helgaas, (Wed May 14, 11:50 am)
Re: 2.6.26-rc1 regression: ISA DMA broken (bisected), Rene Herman, (Wed May 14, 12:09 pm)
[DEVICE MODEL] dev-&gt;dma_mask, Rene Herman, (Fri May 30, 2:28 pm)
[PATCH] ISA: set 24-bit dma_mask for ISA devices., Rene Herman, (Fri May 30, 3:37 pm)
Re: [PATCH] ISA: set 24-bit dma_mask for ISA devices., Andrew Morton, (Fri May 30, 3:55 pm)
Re: [PATCH] ISA: set 24-bit dma_mask for ISA devices., Rene Herman, (Fri May 30, 4:50 pm)
[PATCH] ISA: set 24-bit dma_mask for ISA devices., Rene Herman, (Fri May 30, 4:55 pm)
Re: [PATCH] ISA: set 24-bit dma_mask for ISA devices., Takashi Iwai, (Sat May 31, 1:56 am)