From: George G. Davis Date: Wed, 28 Sep 2016 07:51:56 +0000 (+0100) Subject: drivers: dma-coherent: Fix DMA coherent size for less than page X-Git-Tag: v4.9-rc1~148^2~1 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=9ca5d4fd08d1c560a46ff649221a891065039891;p=karo-tx-linux.git drivers: dma-coherent: Fix DMA coherent size for less than page We fix a bug in dma_mmap_from_coherent() that appears when we map non page aligned DMA memory. It cuts off the non aligned part (this is different to dma_alloc_coherent() that always rounds up to full pages). So for mappings of less than a page we get -ENXIO as dma_mmap_from_coherent() assumes we want to map zero pages. Signed-off-by: George G. Davis Signed-off-by: Jiada Wang Signed-off-by: Mark Craske Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/base/dma-coherent.c b/drivers/base/dma-coherent.c index db122a06edc5..2789f7a95b93 100644 --- a/drivers/base/dma-coherent.c +++ b/drivers/base/dma-coherent.c @@ -262,7 +262,7 @@ int dma_mmap_from_coherent(struct device *dev, struct vm_area_struct *vma, unsigned long off = vma->vm_pgoff; int start = (vaddr - mem->virt_base) >> PAGE_SHIFT; int user_count = vma_pages(vma); - int count = size >> PAGE_SHIFT; + int count = PAGE_ALIGN(size) >> PAGE_SHIFT; *ret = -ENXIO; if (off < count && user_count <= count - off) {