Lines Matching refs:sg

17  * @sg:		The current sg entry
20 * Usually the next entry will be @sg@ + 1, but if this sg element is part
25 struct scatterlist *sg_next(struct scatterlist *sg)
27 if (sg_is_last(sg))
30 sg++;
31 if (unlikely(sg_is_chain(sg)))
32 sg = sg_chain_ptr(sg);
34 return sg;
40 * @sg: The scatterlist
43 * Allows to know how many entries are in sg, taking into account
47 int sg_nents(struct scatterlist *sg)
50 for (nents = 0; sg; sg = sg_next(sg))
59 * @sg: The scatterlist
63 * Determines the number of entries in sg that are required to meet
67 * the number of sg entries needed, negative error on failure
70 int sg_nents_for_len(struct scatterlist *sg, u64 len)
78 for (nents = 0, total = 0; sg; sg = sg_next(sg)) {
80 total += sg->length;
105 struct scatterlist *sg, *ret = NULL;
108 for_each_sg(sgl, sg, nents, i)
109 ret = sg;
122 * If this is part of a chained sg table, sg_mark_end() should be
134 * sg_init_one - Initialize a single entry sg list
135 * @sg: SG entry
140 void sg_init_one(struct scatterlist *sg, const void *buf, unsigned int buflen)
142 sg_init_table(sg, 1);
143 sg_set_buf(sg, buf, buflen);
171 static void sg_kfree(struct scatterlist *sg, unsigned int nents)
174 kmemleak_free(sg);
175 free_page((unsigned long) sg);
177 kfree(sg);
181 * __sg_free_table - Free a previously mapped sg table
182 * @table: The sg table header to use
190 * Free an sg table previously allocated and setup with
212 * then assign 'next' to the sg table after the current one.
239 * sg_free_append_table - Free a previously allocated append sg table.
240 * @table: The mapped sg append table header
252 * sg_free_table - Free a previously allocated sg table
253 * @table: The mapped sg table header
264 * __sg_alloc_table - Allocate and initialize an sg table with given allocator
265 * @table: The sg table header to use
266 * @nents: Number of entries in sg list
290 struct scatterlist *sg, *prv;
318 sg = first_chunk;
321 sg = alloc_fn(alloc_size, gfp_mask);
323 if (unlikely(!sg)) {
336 sg_init_table(sg, alloc_size);
340 * If this is the first mapping, assign the sg table header.
344 sg_chain(prv, prv_max_ents, sg);
346 table->sgl = sg;
352 sg_mark_end(&sg[sg_size - 1]);
354 prv = sg;
364 * sg_alloc_table - Allocate and initialize an sg table
365 * @table: The sg table header to use
366 * @nents: Number of entries in sg list
370 * Allocate and initialize an sg table. If @nents@ is larger than
371 * SG_MAX_SINGLE_ALLOC a chained sg table will be setup.
426 * sg_alloc_append_table_from_pages - Allocate and initialize an append sg
428 * @sgt_append: The sg append table to use
438 * In the first call it allocate and initialize an sg table from a list of
443 * returned sg table is released by sg_free_append_table
556 * sg_alloc_table_from_pages_segment - Allocate and initialize an sg table from
559 * @sgt: The sg table header to use
568 * Allocate and initialize an sg table from a list of pages. Contiguous
573 * The returned sg table is released by sg_free_table.
615 struct scatterlist *sgl, *sg;
637 sg = sgl;
646 sg_set_page(sg, page, elem_len, 0);
648 sg = sg_next(sg);
687 struct scatterlist *sg;
691 for_each_sg(sgl, sg, nents, i) {
692 if (!sg)
694 page = sg_page(sg);
732 piter->sg = sglist;
737 static int sg_page_count(struct scatterlist *sg)
739 return PAGE_ALIGN(sg->offset + sg->length) >> PAGE_SHIFT;
744 if (!piter->__nents || !piter->sg)
750 while (piter->sg_pgoffset >= sg_page_count(piter->sg)) {
751 piter->sg_pgoffset -= sg_page_count(piter->sg);
752 piter->sg = sg_next(piter->sg);
753 if (!--piter->__nents || !piter->sg)
761 static int sg_dma_page_count(struct scatterlist *sg)
763 return PAGE_ALIGN(sg->offset + sg_dma_len(sg)) >> PAGE_SHIFT;
770 if (!piter->__nents || !piter->sg)
776 while (piter->sg_pgoffset >= sg_dma_page_count(piter->sg)) {
777 piter->sg_pgoffset -= sg_dma_page_count(piter->sg);
778 piter->sg = sg_next(piter->sg);
779 if (!--piter->__nents || !piter->sg)
788 * sg_miter_start - start mapping iteration over a sg list
789 * @miter: sg mapping iter to be started
790 * @sgl: sg list to iterate over
791 * @nents: number of sg entries
792 * @flags: sg iterator flags
814 struct scatterlist *sg;
819 sg = miter->piter.sg;
821 miter->__offset = miter->piter.sg_pgoffset ? 0 : sg->offset;
824 miter->__remaining = sg->offset + sg->length -
836 * @miter: sg mapping iter to be skipped
848 * true if @miter contains the valid mapping. false if end of sg
873 * @miter: sg mapping iter to proceed
884 * true if @miter contains the next mapping. false if end of sg
912 * @miter: sg mapping iter to be stopped
956 * @to_buffer: transfer direction (true == from an sg list to a
957 * buffer, false == from a buffer to an sg list)
1113 struct scatterlist *sg = sgtable->sgl + sgtable->nents;
1141 sg_set_page(sg, page, seg, off);
1143 sg++;
1168 struct scatterlist *sg = sgtable->sgl + sgtable->nents;
1185 sg_set_page(sg, bv[i].bv_page, len, off);
1187 sg++;
1214 struct scatterlist *sg = sgtable->sgl + sgtable->nents;
1244 sg_set_page(sg, page, len, off);
1246 sg++;
1274 struct scatterlist *sg = sgtable->sgl + sgtable->nents;
1296 sg_set_page(sg, folio_page(folio, 0), len, offset);
1298 sg++;