Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

+30
+27
crypto/scatterwalk.c
··· 86 86 } 87 87 EXPORT_SYMBOL_GPL(memcpy_to_sglist); 88 88 89 + void memcpy_sglist(struct scatterlist *dst, struct scatterlist *src, 90 + unsigned int nbytes) 91 + { 92 + struct scatter_walk swalk; 93 + struct scatter_walk dwalk; 94 + 95 + if (unlikely(nbytes == 0)) /* in case sg == NULL */ 96 + return; 97 + 98 + scatterwalk_start(&swalk, src); 99 + scatterwalk_start(&dwalk, dst); 100 + 101 + do { 102 + unsigned int slen, dlen; 103 + unsigned int len; 104 + 105 + slen = scatterwalk_next(&swalk, nbytes); 106 + dlen = scatterwalk_next(&dwalk, nbytes); 107 + len = min(slen, dlen); 108 + memcpy(dwalk.addr, swalk.addr, len); 109 + scatterwalk_done_dst(&dwalk, len); 110 + scatterwalk_done_src(&swalk, len); 111 + nbytes -= len; 112 + } while (nbytes); 113 + } 114 + EXPORT_SYMBOL_GPL(memcpy_sglist); 115 + 89 116 struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2], 90 117 struct scatterlist *src, 91 118 unsigned int len)
+3
include/crypto/scatterwalk.h
··· 210 210 void memcpy_to_sglist(struct scatterlist *sg, unsigned int start, 211 211 const void *buf, unsigned int nbytes); 212 212 213 + void memcpy_sglist(struct scatterlist *dst, struct scatterlist *src, 214 + unsigned int nbytes); 215 + 213 216 /* In new code, please use memcpy_{from,to}_sglist() directly instead. */ 214 217 static inline void scatterwalk_map_and_copy(void *buf, struct scatterlist *sg, 215 218 unsigned int start,