From: Chris Wright Subject: [PATCH] make sure dma_map_single doesn't sleep Date: Wed, 10 Aug 2005 00:02:35 -0700 Message-ID: <20050810070234.GF7901@shell0.pdx.osdl.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org dma_map_single can't sleep since it may be called with locks held, or interrupts off, etc. Thus it shouldn't make sleeping allocations. Signed-off-by: Chris Wright diff -r 38c7c25b3cb9 linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c --- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c Tue Aug 9 13:53:15 2005 +++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c Wed Aug 10 01:35:28 2005 @@ -182,8 +182,8 @@ if ((((unsigned int)ptr & ~PAGE_MASK) + size) <= PAGE_SIZE) { dma = virt_to_bus(ptr); } else { - BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, 0)) == NULL); - BUG_ON((ent = kmalloc(sizeof(*ent), GFP_KERNEL)) == NULL); + BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, GFP_ATOMIC)) == NULL); + BUG_ON((ent = kmalloc(sizeof(*ent), GFP_ATOMIC)) == NULL); if (direction != DMA_FROM_DEVICE) memcpy(bnc, ptr, size); ent->dma = dma; diff -r 38c7c25b3cb9 linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c --- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c Tue Aug 9 13:53:15 2005 +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c Wed Aug 10 01:35:28 2005 @@ -234,8 +234,8 @@ if (((((unsigned long)ptr) & ~PAGE_MASK) + size) <= PAGE_SIZE) { dma = virt_to_bus(ptr); } else { - BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, 0)) == NULL); - BUG_ON((ent = kmalloc(sizeof(*ent), GFP_KERNEL)) == NULL); + BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, GFP_ATOMIC)) == NULL); + BUG_ON((ent = kmalloc(sizeof(*ent), GFP_ATOMIC)) == NULL); if (direction != DMA_FROM_DEVICE) memcpy(bnc, ptr, size); ent->dma = dma;