From cb63625683c020da3fff9ccfe4410ed6211d0fab Mon Sep 17 00:00:00 2001 From: Russell King Date: Thu, 19 Nov 2009 20:58:31 +0000 Subject: [PATCH] --- yaml --- r: 172399 b: refs/heads/master c: ebd7a845fa4332da3ebcbe8cf1b09bb43413420e h: refs/heads/master i: 172397: 2bd083289ccab3fda1997e1acba89592766cd0c7 172395: 5b0a732cca2dda924638068c061f2dd1bb05b648 172391: 74aaa3aedbfe377306e164d4254f0f38f6a0400b 172383: 698488a629b7dea237140a26a3b94aad1c93cbee v: v3 --- [refs] | 2 +- trunk/arch/arm/mm/dma-mapping.c | 31 ++++++++++++------------------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/[refs] b/[refs] index 8c8133f9ddff..ce3a5a955d5b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 88c58f3b92bc7c26439802c300d39b6377739d81 +refs/heads/master: ebd7a845fa4332da3ebcbe8cf1b09bb43413420e diff --git a/trunk/arch/arm/mm/dma-mapping.c b/trunk/arch/arm/mm/dma-mapping.c index 19357f76ce89..3a8e527c774c 100644 --- a/trunk/arch/arm/mm/dma-mapping.c +++ b/trunk/arch/arm/mm/dma-mapping.c @@ -189,18 +189,24 @@ __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, struct page *page; struct arm_vmregion *c; - if (!consistent_pte[0]) { - printk(KERN_ERR "%s: not initialised\n", __func__); - dump_stack(); - return NULL; - } - size = PAGE_ALIGN(size); page = __dma_alloc_buffer(dev, size, gfp); if (!page) goto no_page; + if (arch_is_coherent()) { + *handle = page_to_dma(dev, page); + return page_address(page); + } + + if (!consistent_pte[0]) { + printk(KERN_ERR "%s: not initialised\n", __func__); + dump_stack(); + __dma_free_buffer(page, size); + return NULL; + } + /* * Allocate a virtual address in the consistent mapping region. */ @@ -342,19 +348,6 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gf if (dma_alloc_from_coherent(dev, size, handle, &memory)) return memory; - if (arch_is_coherent()) { - struct page *page; - - page = __dma_alloc_buffer(dev, PAGE_ALIGN(size), gfp); - if (!page) { - *handle = ~0; - return NULL; - } - - *handle = page_to_dma(dev, page); - return page_address(page); - } - return __dma_alloc(dev, size, handle, gfp, pgprot_noncached(pgprot_kernel)); }