Loading crypto/scatterwalk.c +27 −0 Original line number Diff line number Diff line Loading @@ -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) Loading include/crypto/scatterwalk.h +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
crypto/scatterwalk.c +27 −0 Original line number Diff line number Diff line Loading @@ -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) Loading
include/crypto/scatterwalk.h +3 −0 Original line number Diff line number Diff line Loading @@ -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