[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1335379853-10122-3-git-send-email-lars@metafoo.de>
Date: Wed, 25 Apr 2012 20:50:53 +0200
From: Lars-Peter Clausen <lars@...afoo.de>
To: Vinod Koul <vinod.koul@...el.com>,
Russell King <linux@....linux.org.uk>
Cc: Viresh Kumar <viresh.kumar@...com>,
Srinidhi Kasagar <srinidhi.kasagar@...ricsson.com>,
Linus Walleij <linus.walleij@...ricsson.com>,
Shawn Guo <shawn.guo@...aro.org>,
Javier Martin <javier.martin@...ta-silicon.com>,
Richard Zhao <richard.zhao@...aro.org>,
Yong Wang <yong.y.wang@...el.com>,
Kuninori Morimoto <kuninori.morimoto.gx@...esas.com>,
linux-kernel@...r.kernel.org, Lars-Peter Clausen <lars@...afoo.de>
Subject: [PATCH 3/3] dmaengine: Fixup dmaengine_prep_slave_single() to be actually useful
From: Kuninori Morimoto <kuninori.morimoto.gx@...esas.com>
dmaengine_prep_slave_single() is a helper function which is supposed to be used
to prepare a transfer of a single contingous buffer. Currently the function
takes a pointer to such a buffer from which it builds a scatterlist and passes
it on to device_prep_slave_sg. The dmaengine framework requires that any
scatterlist that is passed to device_prep_slave_sg is mapped and it may not be
unmapped until the DMA operation has completed. This is not the here and any use
of dmaengine_prep_slave_single() will lead to undefined behaviour (Most likely a
system crash).
This patch changes dmaengine_prep_slave_single() to take a dma_addr_t instead of
a pointer to a buffer and moves the responsibility of mapping and unmapping the
buffer up to the caller.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@...esas.com>
Signed-off-by: Lars-Peter Clausen <lars@...afoo.de>
---
Changes since v1:
* Drop call to sg_set_page
* Slightly reword commit message
---
include/linux/dmaengine.h | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index 676f967..0e6b595 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -615,11 +615,13 @@ static inline int dmaengine_slave_config(struct dma_chan *chan,
}
static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_single(
- struct dma_chan *chan, void *buf, size_t len,
+ struct dma_chan *chan, dma_addr_t buf, size_t len,
enum dma_transfer_direction dir, unsigned long flags)
{
struct scatterlist sg;
- sg_init_one(&sg, buf, len);
+ sg_init_table(&sg, 1);
+ sg_dma_address(&sg) = buf;
+ sg_dma_len(&sg) = len;
return chan->device->device_prep_slave_sg(chan, &sg, 1,
dir, flags, NULL);
--
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists