Lines Matching refs:walk
33 void scatterwalk_start(struct scatter_walk *walk, struct scatterlist *sg) in scatterwalk_start() argument
35 walk->sg = sg; in scatterwalk_start()
39 walk->offset = sg->offset; in scatterwalk_start()
43 void *scatterwalk_map(struct scatter_walk *walk) in scatterwalk_map() argument
45 return kmap_atomic(scatterwalk_page(walk)) + in scatterwalk_map()
46 offset_in_page(walk->offset); in scatterwalk_map()
50 static void scatterwalk_pagedone(struct scatter_walk *walk, int out, in scatterwalk_pagedone() argument
56 page = sg_page(walk->sg) + ((walk->offset - 1) >> PAGE_SHIFT); in scatterwalk_pagedone()
62 walk->offset += PAGE_SIZE - 1; in scatterwalk_pagedone()
63 walk->offset &= PAGE_MASK; in scatterwalk_pagedone()
64 if (walk->offset >= walk->sg->offset + walk->sg->length) in scatterwalk_pagedone()
65 scatterwalk_start(walk, sg_next(walk->sg)); in scatterwalk_pagedone()
69 void scatterwalk_done(struct scatter_walk *walk, int out, int more) in scatterwalk_done() argument
71 if (!(scatterwalk_pagelen(walk) & (PAGE_SIZE - 1)) || !more) in scatterwalk_done()
72 scatterwalk_pagedone(walk, out, more); in scatterwalk_done()
76 void scatterwalk_copychunks(void *buf, struct scatter_walk *walk, in scatterwalk_copychunks() argument
80 unsigned int len_this_page = scatterwalk_pagelen(walk); in scatterwalk_copychunks()
86 vaddr = scatterwalk_map(walk); in scatterwalk_copychunks()
90 scatterwalk_advance(walk, len_this_page); in scatterwalk_copychunks()
98 scatterwalk_pagedone(walk, out, 1); in scatterwalk_copychunks()
106 struct scatter_walk walk; in scatterwalk_map_and_copy() local
113 scatterwalk_start(&walk, sg); in scatterwalk_map_and_copy()
122 scatterwalk_advance(&walk, start - offset); in scatterwalk_map_and_copy()
123 scatterwalk_copychunks(buf, &walk, nbytes, out); in scatterwalk_map_and_copy()
124 scatterwalk_done(&walk, out, 0); in scatterwalk_map_and_copy()