X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=crypto%2Fscatterwalk.c;h=79ca2278c2a38a6c022d7d3ccbae30981434e238;hb=fbc2edb05354480a88aa39db8a6acb5782fa1a1b;hp=7281b8a93ad3a4c486f3ca18721e73f79094659e;hpb=e644dae645e167d154c0526358940986682a72b0;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git diff --git a/crypto/scatterwalk.c b/crypto/scatterwalk.c index 7281b8a..79ca227 100644 --- a/crypto/scatterwalk.c +++ b/crypto/scatterwalk.c @@ -124,3 +124,25 @@ void scatterwalk_map_and_copy(void *buf, struct scatterlist *sg, scatterwalk_done(&walk, out, 0); } EXPORT_SYMBOL_GPL(scatterwalk_map_and_copy); + +int scatterwalk_bytes_sglen(struct scatterlist *sg, int num_bytes) +{ + int offset = 0, n = 0; + + /* num_bytes is too small */ + if (num_bytes < sg->length) + return -1; + + do { + offset += sg->length; + n++; + sg = scatterwalk_sg_next(sg); + + /* num_bytes is too large */ + if (unlikely(!sg && (num_bytes < offset))) + return -1; + } while (sg && (num_bytes > offset)); + + return n; +} +EXPORT_SYMBOL_GPL(scatterwalk_bytes_sglen);