From 04f5d6f61d33c3620b8e449380c90b0cf2cd6aaa Mon Sep 17 00:00:00 2001 From: Glauber Costa Date: Wed, 9 Apr 2008 13:18:06 -0300 Subject: [PATCH] --- yaml --- r: 91038 b: refs/heads/master c: 8f19ca1341a6d89bd96e2e69e6e10f46d3258089 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/pci-dma_32.c | 6 ++++-- trunk/arch/x86/kernel/pci-dma_64.c | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 2962850876bb..fd303bbcb79f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5fa78ca75d8e67063948a01b51594a0904af5710 +refs/heads/master: 8f19ca1341a6d89bd96e2e69e6e10f46d3258089 diff --git a/trunk/arch/x86/kernel/pci-dma_32.c b/trunk/arch/x86/kernel/pci-dma_32.c index 11f100a5f034..5450bd142cb0 100644 --- a/trunk/arch/x86/kernel/pci-dma_32.c +++ b/trunk/arch/x86/kernel/pci-dma_32.c @@ -79,7 +79,7 @@ void *dma_alloc_coherent(struct device *dev, size_t size, unsigned long dma_mask = 0; /* ignore region specifiers */ - gfp &= ~(__GFP_DMA | __GFP_HIGHMEM); + gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32); if (dma_alloc_from_coherent_mem(dev, size, dma_handle, &ret)) return ret; @@ -91,7 +91,9 @@ void *dma_alloc_coherent(struct device *dev, size_t size, if (dma_mask == 0) dma_mask = DMA_32BIT_MASK; - again: + /* Don't invoke OOM killer */ + gfp |= __GFP_NORETRY; +again: page = dma_alloc_pages(dev, gfp, order); if (page == NULL) return NULL; diff --git a/trunk/arch/x86/kernel/pci-dma_64.c b/trunk/arch/x86/kernel/pci-dma_64.c index 13a31a4a4c17..b956f5945d67 100644 --- a/trunk/arch/x86/kernel/pci-dma_64.c +++ b/trunk/arch/x86/kernel/pci-dma_64.c @@ -49,6 +49,8 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, unsigned long dma_mask = 0; u64 bus; + /* ignore region specifiers */ + gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32); if (dma_alloc_from_coherent_mem(dev, size, dma_handle, &memory)) return memory;