mtd: nand: omap2: Fix high memory dma prefetch transfer

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Mon May 23 21:59:23 PDT 2016


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=8c6f0fc4d2d505b17fc67675f0797fe3fc6e6c26
Commit:     8c6f0fc4d2d505b17fc67675f0797fe3fc6e6c26
Parent:     03d3a1df6da660999d8f14552ac4d875e94090a3
Author:     Cooper Jr., Franklin <fcooper at ti.com>
AuthorDate: Fri Apr 15 15:28:59 2016 -0500
Committer:  Boris Brezillon <boris.brezillon at free-electrons.com>
CommitDate: Thu May 5 23:52:01 2016 +0200

    mtd: nand: omap2: Fix high memory dma prefetch transfer
    
    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 at ti.com>
    Signed-off-by: Boris Brezillon <boris.brezillon at free-electrons.com>
---
 drivers/mtd/nand/omap2.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
index d1496b1..08e1588 100644
--- a/drivers/mtd/nand/omap2.c
+++ b/drivers/mtd/nand/omap2.c
@@ -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);



More information about the linux-mtd-cvs mailing list