From: Russell King - ARM Linux Date: Fri, 7 Jan 2011 15:49:20 +0000 (+0000) Subject: spi/omap: Fix DMA API usage in OMAP MCSPI driver X-Git-Tag: v2.6.38-rc1~454^2 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07fe0351702b6f0c9749e80cdbcb758686b0fe9b;p=pandora-kernel.git spi/omap: Fix DMA API usage in OMAP MCSPI driver Running the latest kernel on the 4430SDP board with DMA API debugging enabled results in this: WARNING: at lib/dma-debug.c:803 check_unmap+0x19c/0x6f0() NULL NULL: DMA-API: device driver tries to free DMA memory it has not allocated [device address=0x000000008129901a] [size=260 bytes] Modules linked in: Backtrace: [] (dump_backtrace+0x0/0x10c) from [] (dump_stack+0x18/0x1c) r7:c1839dc0 r6:c0198578 r5:c0304b17 r4:00000323 [] (dump_stack+0x0/0x1c) from [] (warn_slowpath_common+0x58/0x70) [] (warn_slowpath_common+0x0/0x70) from [] (warn_slowpath_fmt+0x38/0x40) r8:c1839e40 r7:00000000 r6:00000104 r5:00000000 r4:8129901a [] (warn_slowpath_fmt+0x0/0x40) from [] (check_unmap+0x19c/0x6f0) r3:c03110de r2:c0304e6b [] (check_unmap+0x0/0x6f0) from [] (debug_dma_unmap_page+0x74/0x80) [] (debug_dma_unmap_page+0x0/0x80) from [] (omap2_mcspi_work+0x514/0xbf0) [] (omap2_mcspi_work+0x0/0xbf0) from [] (process_one_work+0x294/0x400) [] (process_one_work+0x0/0x400) from [] (worker_thread+0x220/0x3f8) [] (worker_thread+0x0/0x3f8) from [] (kthread+0x88/0x90) [] (kthread+0x0/0x90) from [] (do_exit+0x0/0x5fc) r7:00000013 r6:c005e924 r5:c0073848 r4:c1829ee0 ---[ end trace 1b75b31a2719ed20 ]--- I've no idea why this driver uses NULL for dma_unmap_single instead of the &spi->dev that is laying around just waiting to be used in that function - but it's an easy fix. Also replace this comment with a FIXME comment: /* Do DMA mapping "early" for better error reporting and * dcache use. Note that if dma_unmap_single() ever starts * to do real work on ARM, we'd need to clean up mappings * for previous transfers on *ALL* exits of this loop... */ as the comment is not true - we do work in dma_unmap() functions, particularly on ARMv6 and above. I've corrected the existing unmap functions but if any others are required they must be added ASAP. Signed-off-by: Russell King Acked-by: Tony Lindgren Signed-off-by: Grant Likely --- Reading git-diff-tree failed