From 2f1ce49f3b72324cf11905f72220d500d330a64c Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Thu, 21 May 2015 15:10:59 +0800 Subject: 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 --- crypto/scatterwalk.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/crypto/scatterwalk.c b/crypto/scatterwalk.c index 3bd749c7..db920b59 100644 --- a/crypto/scatterwalk.c +++ b/crypto/scatterwalk.c @@ -146,3 +146,25 @@ int scatterwalk_bytes_sglen(struct scatterlist *sg, int num_bytes) return n; } EXPORT_SYMBOL_GPL(scatterwalk_bytes_sglen); + +struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2], + struct scatterlist *src, + unsigned int len) +{ + for (;;) { + if (!len) + return src; + + if (src->length > len) + break; + + len -= src->length; + src = sg_next(src); + } + + sg_set_page(dst, sg_page(src), src->length - len, src->offset + len); + scatterwalk_crypto_chain(dst, sg_next(src), 0, 2); + + return dst; +} +EXPORT_SYMBOL_GPL(scatterwalk_ffwd); -- cgit v1.2.3