mtd: nand: omap2: Fix high memory dma prefetch transfer
authorCooper Jr., Franklin <fcooper@ti.com>
Fri, 15 Apr 2016 20:28:59 +0000 (15:28 -0500)
committerBoris Brezillon <boris.brezillon@free-electrons.com>
Thu, 5 May 2016 21:52:01 +0000 (23:52 +0200)
Based on DMA documentation and testing using high memory buffer when doing
dma transfers can lead to various issues including kernel panics.

To workaround this simply use cpu copy.

Signed-off-by: Franklin S Cooper Jr <fcooper@ti.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
drivers/mtd/nand/omap2.c

index d1496b1276dfce6eb6591f58b6b563aecdb05265..08e158895635cddda0bbea4e6973cfb8dd727e74 100644 (file)
@@ -473,17 +473,8 @@ static inline int omap_nand_dma_transfer(struct mtd_info *mtd, void *addr,
        int ret;
        u32 val;
 
-       if (addr >= high_memory) {
-               struct page *p1;
-
-               if (((size_t)addr & PAGE_MASK) !=
-                       ((size_t)(addr + len - 1) & PAGE_MASK))
-                       goto out_copy;
-               p1 = vmalloc_to_page(addr);
-               if (!p1)
-                       goto out_copy;
-               addr = page_address(p1) + ((size_t)addr & ~PAGE_MASK);
-       }
+       if (!virt_addr_valid(addr))
+               goto out_copy;
 
        sg_init_one(&sg, addr, len);
        n = dma_map_sg(info->dma->device->dev, &sg, 1, dir);