mirror of https://github.com/torvalds/linux.git
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);
|
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 *scatterwalk_ffwd(struct scatterlist dst[2],
|
||||||
struct scatterlist *src,
|
struct scatterlist *src,
|
||||||
unsigned int len)
|
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,
|
void memcpy_to_sglist(struct scatterlist *sg, unsigned int start,
|
||||||
const void *buf, unsigned int nbytes);
|
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. */
|
/* In new code, please use memcpy_{from,to}_sglist() directly instead. */
|
||||||
static inline void scatterwalk_map_and_copy(void *buf, struct scatterlist *sg,
|
static inline void scatterwalk_map_and_copy(void *buf, struct scatterlist *sg,
|
||||||
unsigned int start,
|
unsigned int start,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue