Thread (23 messages) 23 messages, 3 authors, 2015-06-17

[PATCH v5 05/14] crypto: marvell/CESA: add TDMA support

From: Boris Brezillon <hidden>
Date: 2015-06-17 07:15:14
Also in: linux-crypto, linux-devicetree, lkml

On Wed, 17 Jun 2015 13:56:33 +0800
Herbert Xu [off-list ref] wrote:
On Wed, Jun 17, 2015 at 01:05:27PM +0800, Herbert Xu wrote:
quoted
On Tue, Jun 16, 2015 at 11:58:59AM +0200, Boris Brezillon wrote:
quoted
+	ret = dma_map_sg(cesa_dev->dev, req->src, creq->src_nents,
+			 DMA_TO_DEVICE);
+	if (ret != creq->src_nents)
+		return -ENOMEM;
Hmm it doesn't quite work like that.  It returns zero on error,
otherwise it returns the number (n) of mapped entries which may be
less than what you gave it due to merging.  You're then supposed
to use only the first n entries which should contain everything.
Please take a look at Documentation/DMA-API-HOWTO.txt, it has
everything you need to know about the dma_map_sg interface.
Yep, I read it, but apparently not carefully enough ;-).
I'll fix that.

Note that I did not ignore your previous comment on purpose (checking
for !ret to verify if the sg entries were successfully mapped), but I
have a specific case in the hash code where the requested len is 0
(final request) and thus the src_nents is 0 too. Which means I'm
expecting the dma_sg_map to return 0.

Anyway, now I'm doing the following test:

if (creq->src_nents && !ret)
	return -ENOMEM;

Best Regards,

Boris

-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help