mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2025-04-19 20:58:31 +09:00
crypto: scatterwalk - Add memcpy_sglist
Add memcpy_sglist which copies one SG list to another. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
65775cf313
commit
131bdceca1
@ -86,6 +86,33 @@ void memcpy_to_sglist(struct scatterlist *sg, unsigned int start,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(memcpy_to_sglist);
|
||||
|
||||
void memcpy_sglist(struct scatterlist *dst, struct scatterlist *src,
|
||||
unsigned int nbytes)
|
||||
{
|
||||
struct scatter_walk swalk;
|
||||
struct scatter_walk dwalk;
|
||||
|
||||
if (unlikely(nbytes == 0)) /* in case sg == NULL */
|
||||
return;
|
||||
|
||||
scatterwalk_start(&swalk, src);
|
||||
scatterwalk_start(&dwalk, dst);
|
||||
|
||||
do {
|
||||
unsigned int slen, dlen;
|
||||
unsigned int len;
|
||||
|
||||
slen = scatterwalk_next(&swalk, nbytes);
|
||||
dlen = scatterwalk_next(&dwalk, nbytes);
|
||||
len = min(slen, dlen);
|
||||
memcpy(dwalk.addr, swalk.addr, len);
|
||||
scatterwalk_done_dst(&dwalk, len);
|
||||
scatterwalk_done_src(&swalk, len);
|
||||
nbytes -= len;
|
||||
} while (nbytes);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(memcpy_sglist);
|
||||
|
||||
struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2],
|
||||
struct scatterlist *src,
|
||||
unsigned int len)
|
||||
|
@ -210,6 +210,9 @@ void memcpy_from_sglist(void *buf, struct scatterlist *sg,
|
||||
void memcpy_to_sglist(struct scatterlist *sg, unsigned int start,
|
||||
const void *buf, unsigned int nbytes);
|
||||
|
||||
void memcpy_sglist(struct scatterlist *dst, struct scatterlist *src,
|
||||
unsigned int nbytes);
|
||||
|
||||
/* In new code, please use memcpy_{from,to}_sglist() directly instead. */
|
||||
static inline void scatterwalk_map_and_copy(void *buf, struct scatterlist *sg,
|
||||
unsigned int start,
|
||||
|
Loading…
x
Reference in New Issue
Block a user