aboutsummaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2015-05-21 03:10:59 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2015-05-21 23:25:50 -0400
commitfc42bcba97bae738f905b83741134a63af7e6c02 (patch)
tree8ace4b3690395cd811f3cd63a96b77e066e4cb5f /crypto
parent66d948e732f665c905678d810833d4f0a5071537 (diff)
crypto: scatterwalk - Add scatterwalk_ffwd helper
This patch adds the scatterwalk_ffwd helper which can create an SG list that starts in the middle of an existing SG list. The new list may either be part of the existing list or be a chain that latches onto part of the existing list. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto')
-rw-r--r--crypto/scatterwalk.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/crypto/scatterwalk.c b/crypto/scatterwalk.c
index 3bd749c7bb70..db920b59a6c3 100644
--- a/crypto/scatterwalk.c
+++ b/crypto/scatterwalk.c
@@ -146,3 +146,25 @@ int scatterwalk_bytes_sglen(struct scatterlist *sg, int num_bytes)
146 return n; 146 return n;
147} 147}
148EXPORT_SYMBOL_GPL(scatterwalk_bytes_sglen); 148EXPORT_SYMBOL_GPL(scatterwalk_bytes_sglen);
149
150struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2],
151 struct scatterlist *src,
152 unsigned int len)
153{
154 for (;;) {
155 if (!len)
156 return src;
157
158 if (src->length > len)
159 break;
160
161 len -= src->length;
162 src = sg_next(src);
163 }
164
165 sg_set_page(dst, sg_page(src), src->length - len, src->offset + len);
166 scatterwalk_crypto_chain(dst, sg_next(src), 0, 2);
167
168 return dst;
169}
170EXPORT_SYMBOL_GPL(scatterwalk_ffwd);