| From dhobsong@igel.co.jp Mon Oct 29 00:53:15 2012 |
| From: Damian Hobson-Garcia <dhobsong@igel.co.jp> |
| Date: Mon, 29 Oct 2012 16:50:51 +0900 |
| Subject: [PATCH v2 34/58] x86: dma-mapping: fix broken allocation when dma_mask has been provided |
| To: greg@kroah.com, laurent.pinchart@ideasonboard.com, horms@verge.net.au |
| Cc: ltsi-dev@lists.linuxfoundation.org, dhobsong@igel.co.jp |
| Message-ID: <1351497075-32717-35-git-send-email-dhobsong@igel.co.jp> |
| |
| |
| From: Marek Szyprowski <m.szyprowski@samsung.com> |
| |
| Commit 0a2b9a6ea93 ("X86: integrate CMA with DMA-mapping subsystem") |
| broke memory allocation with dma_mask. This patch fixes possible kernel |
| ops caused by lack of resetting page variable when jumping to 'again' label. |
| |
| Reported-by: Konrad Rzeszutek Wilk <konrad@darnok.org> |
| Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> |
| Acked-by: Michal Nazarewicz <mina86@mina86.com> |
| (cherry picked from commit c080e26edc3a2a3cdfa4c430c663ee1c3bbd8fae) |
| |
| Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> |
| Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| --- |
| arch/x86/kernel/pci-dma.c | 3 ++- |
| 1 files changed, 2 insertions(+), 1 deletions(-) |
| |
| diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c |
| index 62c9457..c0f420f 100644 |
| --- a/arch/x86/kernel/pci-dma.c |
| +++ b/arch/x86/kernel/pci-dma.c |
| @@ -100,7 +100,7 @@ void *dma_generic_alloc_coherent(struct device *dev, size_t size, |
| struct dma_attrs *attrs) |
| { |
| unsigned long dma_mask; |
| - struct page *page = NULL; |
| + struct page *page; |
| unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT; |
| dma_addr_t addr; |
| |
| @@ -108,6 +108,7 @@ void *dma_generic_alloc_coherent(struct device *dev, size_t size, |
| |
| flag |= __GFP_ZERO; |
| again: |
| + page = NULL; |
| if (!(flag & GFP_ATOMIC)) |
| page = dma_alloc_from_contiguous(dev, count, get_order(size)); |
| if (!page) |
| -- |
| 1.7.5.4 |
| |