OSDN Git Service

devfreq_boost: Introduce devfreq boost driver
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / lib / scatterlist.c
1 /*
2  * Copyright (C) 2007 Jens Axboe <jens.axboe@oracle.com>
3  *
4  * Scatterlist handling helpers.
5  *
6  * This source code is licensed under the GNU General Public License,
7  * Version 2. See the file COPYING for more details.
8  */
9 #include <linux/export.h>
10 #include <linux/slab.h>
11 #include <linux/scatterlist.h>
12 #include <linux/highmem.h>
13 #include <linux/kmemleak.h>
14
15 /**
16  * sg_next - return the next scatterlist entry in a list
17  * @sg:         The current sg entry
18  *
19  * Description:
20  *   Usually the next entry will be @sg@ + 1, but if this sg element is part
21  *   of a chained scatterlist, it could jump to the start of a new
22  *   scatterlist array.
23  *
24  **/
25 struct scatterlist *sg_next(struct scatterlist *sg)
26 {
27 #ifdef CONFIG_DEBUG_SG
28         BUG_ON(sg->sg_magic != SG_MAGIC);
29 #endif
30         if (sg_is_last(sg))
31                 return NULL;
32
33         sg++;
34         if (unlikely(sg_is_chain(sg)))
35                 sg = sg_chain_ptr(sg);
36
37         return sg;
38 }
39 EXPORT_SYMBOL(sg_next);
40
41 /**
42  * sg_nents - return total count of entries in scatterlist
43  * @sg:         The scatterlist
44  *
45  * Description:
46  * Allows to know how many entries are in sg, taking into acount
47  * chaining as well
48  *
49  **/
50 int sg_nents(struct scatterlist *sg)
51 {
52         int nents;
53         for (nents = 0; sg; sg = sg_next(sg))
54                 nents++;
55         return nents;
56 }
57 EXPORT_SYMBOL(sg_nents);
58
59 /**
60  * sg_nents_for_len - return total count of entries in scatterlist
61  *                    needed to satisfy the supplied length
62  * @sg:         The scatterlist
63  * @len:        The total required length
64  *
65  * Description:
66  * Determines the number of entries in sg that are required to meet
67  * the supplied length, taking into acount chaining as well
68  *
69  * Returns:
70  *   the number of sg entries needed, negative error on failure
71  *
72  **/
73 int sg_nents_for_len(struct scatterlist *sg, u64 len)
74 {
75         int nents;
76         u64 total;
77
78         if (!len)
79                 return 0;
80
81         for (nents = 0, total = 0; sg; sg = sg_next(sg)) {
82                 nents++;
83                 total += sg->length;
84                 if (total >= len)
85                         return nents;
86         }
87
88         return -EINVAL;
89 }
90 EXPORT_SYMBOL(sg_nents_for_len);
91
92 /**
93  * sg_last - return the last scatterlist entry in a list
94  * @sgl:        First entry in the scatterlist
95  * @nents:      Number of entries in the scatterlist
96  *
97  * Description:
98  *   Should only be used casually, it (currently) scans the entire list
99  *   to get the last entry.
100  *
101  *   Note that the @sgl@ pointer passed in need not be the first one,
102  *   the important bit is that @nents@ denotes the number of entries that
103  *   exist from @sgl@.
104  *
105  **/
106 struct scatterlist *sg_last(struct scatterlist *sgl, unsigned int nents)
107 {
108         struct scatterlist *sg, *ret = NULL;
109         unsigned int i;
110
111         for_each_sg(sgl, sg, nents, i)
112                 ret = sg;
113
114 #ifdef CONFIG_DEBUG_SG
115         BUG_ON(sgl[0].sg_magic != SG_MAGIC);
116         BUG_ON(!sg_is_last(ret));
117 #endif
118         return ret;
119 }
120 EXPORT_SYMBOL(sg_last);
121
122 /**
123  * sg_init_table - Initialize SG table
124  * @sgl:           The SG table
125  * @nents:         Number of entries in table
126  *
127  * Notes:
128  *   If this is part of a chained sg table, sg_mark_end() should be
129  *   used only on the last table part.
130  *
131  **/
132 void sg_init_table(struct scatterlist *sgl, unsigned int nents)
133 {
134         memset(sgl, 0, sizeof(*sgl) * nents);
135 #ifdef CONFIG_DEBUG_SG
136         {
137                 unsigned int i;
138                 for (i = 0; i < nents; i++)
139                         sgl[i].sg_magic = SG_MAGIC;
140         }
141 #endif
142         sg_mark_end(&sgl[nents - 1]);
143 }
144 EXPORT_SYMBOL(sg_init_table);
145
146 /**
147  * sg_init_one - Initialize a single entry sg list
148  * @sg:          SG entry
149  * @buf:         Virtual address for IO
150  * @buflen:      IO length
151  *
152  **/
153 void sg_init_one(struct scatterlist *sg, const void *buf, unsigned int buflen)
154 {
155         sg_init_table(sg, 1);
156         sg_set_buf(sg, buf, buflen);
157 }
158 EXPORT_SYMBOL(sg_init_one);
159
160 /*
161  * The default behaviour of sg_alloc_table() is to use these kmalloc/kfree
162  * helpers.
163  */
164 static struct scatterlist *sg_kmalloc(unsigned int nents, gfp_t gfp_mask)
165 {
166         return kmalloc(nents * sizeof(struct scatterlist), gfp_mask);
167 }
168
169 static void sg_kfree(struct scatterlist *sg, unsigned int nents)
170 {
171         kfree(sg);
172 }
173
174 /**
175  * __sg_free_table - Free a previously mapped sg table
176  * @table:      The sg table header to use
177  * @max_ents:   The maximum number of entries per single scatterlist
178  * @skip_first_chunk: don't free the (preallocated) first scatterlist chunk
179  * @free_fn:    Free function
180  *
181  *  Description:
182  *    Free an sg table previously allocated and setup with
183  *    __sg_alloc_table().  The @max_ents value must be identical to
184  *    that previously used with __sg_alloc_table().
185  *
186  **/
187 void __sg_free_table(struct sg_table *table, unsigned int max_ents,
188                      bool skip_first_chunk, sg_free_fn *free_fn)
189 {
190         struct scatterlist *sgl, *next;
191
192         if (unlikely(!table->sgl))
193                 return;
194
195         sgl = table->sgl;
196         while (table->orig_nents) {
197                 unsigned int alloc_size = table->orig_nents;
198                 unsigned int sg_size;
199
200                 /*
201                  * If we have more than max_ents segments left,
202                  * then assign 'next' to the sg table after the current one.
203                  * sg_size is then one less than alloc size, since the last
204                  * element is the chain pointer.
205                  */
206                 if (alloc_size > max_ents) {
207                         next = sg_chain_ptr(&sgl[max_ents - 1]);
208                         alloc_size = max_ents;
209                         sg_size = alloc_size - 1;
210                 } else {
211                         sg_size = alloc_size;
212                         next = NULL;
213                 }
214
215                 table->orig_nents -= sg_size;
216                 if (skip_first_chunk)
217                         skip_first_chunk = false;
218                 else
219                         free_fn(sgl, alloc_size);
220                 sgl = next;
221         }
222
223         table->sgl = NULL;
224 }
225 EXPORT_SYMBOL(__sg_free_table);
226
227 /**
228  * sg_free_table - Free a previously allocated sg table
229  * @table:      The mapped sg table header
230  *
231  **/
232 void sg_free_table(struct sg_table *table)
233 {
234         __sg_free_table(table, SG_MAX_SINGLE_ALLOC, false, sg_kfree);
235 }
236 EXPORT_SYMBOL(sg_free_table);
237
238 /**
239  * __sg_alloc_table - Allocate and initialize an sg table with given allocator
240  * @table:      The sg table header to use
241  * @nents:      Number of entries in sg list
242  * @max_ents:   The maximum number of entries the allocator returns per call
243  * @gfp_mask:   GFP allocation mask
244  * @alloc_fn:   Allocator to use
245  *
246  * Description:
247  *   This function returns a @table @nents long. The allocator is
248  *   defined to return scatterlist chunks of maximum size @max_ents.
249  *   Thus if @nents is bigger than @max_ents, the scatterlists will be
250  *   chained in units of @max_ents.
251  *
252  * Notes:
253  *   If this function returns non-0 (eg failure), the caller must call
254  *   __sg_free_table() to cleanup any leftover allocations.
255  *
256  **/
257 int __sg_alloc_table(struct sg_table *table, unsigned int nents,
258                      unsigned int max_ents, struct scatterlist *first_chunk,
259                      gfp_t gfp_mask, sg_alloc_fn *alloc_fn)
260 {
261         struct scatterlist *sg, *prv;
262         unsigned int left;
263
264         memset(table, 0, sizeof(*table));
265
266         if (nents == 0)
267                 return -EINVAL;
268 #ifndef CONFIG_ARCH_HAS_SG_CHAIN
269         if (WARN_ON_ONCE(nents > max_ents))
270                 return -EINVAL;
271 #endif
272
273         left = nents;
274         prv = NULL;
275         do {
276                 unsigned int sg_size, alloc_size = left;
277
278                 if (alloc_size > max_ents) {
279                         alloc_size = max_ents;
280                         sg_size = alloc_size - 1;
281                 } else
282                         sg_size = alloc_size;
283
284                 left -= sg_size;
285
286                 if (first_chunk) {
287                         sg = first_chunk;
288                         first_chunk = NULL;
289                 } else {
290                         sg = alloc_fn(alloc_size, gfp_mask);
291                 }
292                 if (unlikely(!sg)) {
293                         /*
294                          * Adjust entry count to reflect that the last
295                          * entry of the previous table won't be used for
296                          * linkage.  Without this, sg_kfree() may get
297                          * confused.
298                          */
299                         if (prv)
300                                 table->nents = ++table->orig_nents;
301
302                         return -ENOMEM;
303                 }
304
305                 sg_init_table(sg, alloc_size);
306                 table->nents = table->orig_nents += sg_size;
307
308                 /*
309                  * If this is the first mapping, assign the sg table header.
310                  * If this is not the first mapping, chain previous part.
311                  */
312                 if (prv)
313                         sg_chain(prv, max_ents, sg);
314                 else
315                         table->sgl = sg;
316
317                 /*
318                  * If no more entries after this one, mark the end
319                  */
320                 if (!left)
321                         sg_mark_end(&sg[sg_size - 1]);
322
323                 prv = sg;
324         } while (left);
325
326         return 0;
327 }
328 EXPORT_SYMBOL(__sg_alloc_table);
329
330 /**
331  * sg_alloc_table - Allocate and initialize an sg table
332  * @table:      The sg table header to use
333  * @nents:      Number of entries in sg list
334  * @gfp_mask:   GFP allocation mask
335  *
336  *  Description:
337  *    Allocate and initialize an sg table. If @nents@ is larger than
338  *    SG_MAX_SINGLE_ALLOC a chained sg table will be setup.
339  *
340  **/
341 int sg_alloc_table(struct sg_table *table, unsigned int nents, gfp_t gfp_mask)
342 {
343         int ret;
344
345         ret = __sg_alloc_table(table, nents, SG_MAX_SINGLE_ALLOC,
346                                NULL, gfp_mask, sg_kmalloc);
347         if (unlikely(ret))
348                 __sg_free_table(table, SG_MAX_SINGLE_ALLOC, false, sg_kfree);
349
350         return ret;
351 }
352 EXPORT_SYMBOL(sg_alloc_table);
353
354 /**
355  * sg_alloc_table_from_pages - Allocate and initialize an sg table from
356  *                             an array of pages
357  * @sgt:        The sg table header to use
358  * @pages:      Pointer to an array of page pointers
359  * @n_pages:    Number of pages in the pages array
360  * @offset:     Offset from start of the first page to the start of a buffer
361  * @size:       Number of valid bytes in the buffer (after offset)
362  * @gfp_mask:   GFP allocation mask
363  *
364  *  Description:
365  *    Allocate and initialize an sg table from a list of pages. Contiguous
366  *    ranges of the pages are squashed into a single scatterlist node. A user
367  *    may provide an offset at a start and a size of valid data in a buffer
368  *    specified by the page array. The returned sg table is released by
369  *    sg_free_table.
370  *
371  * Returns:
372  *   0 on success, negative error on failure
373  */
374 int sg_alloc_table_from_pages(struct sg_table *sgt,
375         struct page **pages, unsigned int n_pages,
376         unsigned long offset, unsigned long size,
377         gfp_t gfp_mask)
378 {
379         unsigned int chunks;
380         unsigned int i;
381         unsigned int cur_page;
382         int ret;
383         struct scatterlist *s;
384
385         /* compute number of contiguous chunks */
386         chunks = 1;
387         for (i = 1; i < n_pages; ++i)
388                 if (page_to_pfn(pages[i]) != page_to_pfn(pages[i - 1]) + 1)
389                         ++chunks;
390
391         ret = sg_alloc_table(sgt, chunks, gfp_mask);
392         if (unlikely(ret))
393                 return ret;
394
395         /* merging chunks and putting them into the scatterlist */
396         cur_page = 0;
397         for_each_sg(sgt->sgl, s, sgt->orig_nents, i) {
398                 unsigned long chunk_size;
399                 unsigned int j;
400
401                 /* look for the end of the current chunk */
402                 for (j = cur_page + 1; j < n_pages; ++j)
403                         if (page_to_pfn(pages[j]) !=
404                             page_to_pfn(pages[j - 1]) + 1)
405                                 break;
406
407                 chunk_size = ((j - cur_page) << PAGE_SHIFT) - offset;
408                 sg_set_page(s, pages[cur_page], min(size, chunk_size), offset);
409                 size -= chunk_size;
410                 offset = 0;
411                 cur_page = j;
412         }
413
414         return 0;
415 }
416 EXPORT_SYMBOL(sg_alloc_table_from_pages);
417
418 void __sg_page_iter_start(struct sg_page_iter *piter,
419                           struct scatterlist *sglist, unsigned int nents,
420                           unsigned long pgoffset)
421 {
422         piter->__pg_advance = 0;
423         piter->__nents = nents;
424
425         piter->sg = sglist;
426         piter->sg_pgoffset = pgoffset;
427 }
428 EXPORT_SYMBOL(__sg_page_iter_start);
429
430 static int sg_page_count(struct scatterlist *sg)
431 {
432         return PAGE_ALIGN(sg->offset + sg->length) >> PAGE_SHIFT;
433 }
434
435 bool __sg_page_iter_next(struct sg_page_iter *piter)
436 {
437         if (!piter->__nents || !piter->sg)
438                 return false;
439
440         piter->sg_pgoffset += piter->__pg_advance;
441         piter->__pg_advance = 1;
442
443         while (piter->sg_pgoffset >= sg_page_count(piter->sg)) {
444                 piter->sg_pgoffset -= sg_page_count(piter->sg);
445                 piter->sg = sg_next(piter->sg);
446                 if (!--piter->__nents || !piter->sg)
447                         return false;
448         }
449
450         return true;
451 }
452 EXPORT_SYMBOL(__sg_page_iter_next);
453
454 /**
455  * sg_miter_start - start mapping iteration over a sg list
456  * @miter: sg mapping iter to be started
457  * @sgl: sg list to iterate over
458  * @nents: number of sg entries
459  *
460  * Description:
461  *   Starts mapping iterator @miter.
462  *
463  * Context:
464  *   Don't care.
465  */
466 void sg_miter_start(struct sg_mapping_iter *miter, struct scatterlist *sgl,
467                     unsigned int nents, unsigned int flags)
468 {
469         memset(miter, 0, sizeof(struct sg_mapping_iter));
470
471         __sg_page_iter_start(&miter->piter, sgl, nents, 0);
472         WARN_ON(!(flags & (SG_MITER_TO_SG | SG_MITER_FROM_SG)));
473         miter->__flags = flags;
474 }
475 EXPORT_SYMBOL(sg_miter_start);
476
477 static bool sg_miter_get_next_page(struct sg_mapping_iter *miter)
478 {
479         if (!miter->__remaining) {
480                 struct scatterlist *sg;
481
482                 if (!__sg_page_iter_next(&miter->piter))
483                         return false;
484
485                 sg = miter->piter.sg;
486
487                 miter->__offset = miter->piter.sg_pgoffset ? 0 : sg->offset;
488                 miter->piter.sg_pgoffset += miter->__offset >> PAGE_SHIFT;
489                 miter->__offset &= PAGE_SIZE - 1;
490                 miter->__remaining = sg->offset + sg->length -
491                                      (miter->piter.sg_pgoffset << PAGE_SHIFT) -
492                                      miter->__offset;
493                 miter->__remaining = min_t(unsigned long, miter->__remaining,
494                                            PAGE_SIZE - miter->__offset);
495         }
496
497         return true;
498 }
499
500 /**
501  * sg_miter_skip - reposition mapping iterator
502  * @miter: sg mapping iter to be skipped
503  * @offset: number of bytes to plus the current location
504  *
505  * Description:
506  *   Sets the offset of @miter to its current location plus @offset bytes.
507  *   If mapping iterator @miter has been proceeded by sg_miter_next(), this
508  *   stops @miter.
509  *
510  * Context:
511  *   Don't care if @miter is stopped, or not proceeded yet.
512  *   Otherwise, preemption disabled if the SG_MITER_ATOMIC is set.
513  *
514  * Returns:
515  *   true if @miter contains the valid mapping.  false if end of sg
516  *   list is reached.
517  */
518 bool sg_miter_skip(struct sg_mapping_iter *miter, off_t offset)
519 {
520         sg_miter_stop(miter);
521
522         while (offset) {
523                 off_t consumed;
524
525                 if (!sg_miter_get_next_page(miter))
526                         return false;
527
528                 consumed = min_t(off_t, offset, miter->__remaining);
529                 miter->__offset += consumed;
530                 miter->__remaining -= consumed;
531                 offset -= consumed;
532         }
533
534         return true;
535 }
536 EXPORT_SYMBOL(sg_miter_skip);
537
538 /**
539  * sg_miter_next - proceed mapping iterator to the next mapping
540  * @miter: sg mapping iter to proceed
541  *
542  * Description:
543  *   Proceeds @miter to the next mapping.  @miter should have been started
544  *   using sg_miter_start().  On successful return, @miter->page,
545  *   @miter->addr and @miter->length point to the current mapping.
546  *
547  * Context:
548  *   Preemption disabled if SG_MITER_ATOMIC.  Preemption must stay disabled
549  *   till @miter is stopped.  May sleep if !SG_MITER_ATOMIC.
550  *
551  * Returns:
552  *   true if @miter contains the next mapping.  false if end of sg
553  *   list is reached.
554  */
555 bool sg_miter_next(struct sg_mapping_iter *miter)
556 {
557         sg_miter_stop(miter);
558
559         /*
560          * Get to the next page if necessary.
561          * __remaining, __offset is adjusted by sg_miter_stop
562          */
563         if (!sg_miter_get_next_page(miter))
564                 return false;
565
566         miter->page = sg_page_iter_page(&miter->piter);
567         miter->consumed = miter->length = miter->__remaining;
568
569         if (miter->__flags & SG_MITER_ATOMIC)
570                 miter->addr = kmap_atomic(miter->page) + miter->__offset;
571         else
572                 miter->addr = kmap(miter->page) + miter->__offset;
573
574         return true;
575 }
576 EXPORT_SYMBOL(sg_miter_next);
577
578 /**
579  * sg_miter_stop - stop mapping iteration
580  * @miter: sg mapping iter to be stopped
581  *
582  * Description:
583  *   Stops mapping iterator @miter.  @miter should have been started
584  *   started using sg_miter_start().  A stopped iteration can be
585  *   resumed by calling sg_miter_next() on it.  This is useful when
586  *   resources (kmap) need to be released during iteration.
587  *
588  * Context:
589  *   Preemption disabled if the SG_MITER_ATOMIC is set.  Don't care
590  *   otherwise.
591  */
592 void sg_miter_stop(struct sg_mapping_iter *miter)
593 {
594         WARN_ON(miter->consumed > miter->length);
595
596         /* drop resources from the last iteration */
597         if (miter->addr) {
598                 miter->__offset += miter->consumed;
599                 miter->__remaining -= miter->consumed;
600
601                 if ((miter->__flags & SG_MITER_TO_SG) &&
602                     !PageSlab(miter->page))
603                         flush_kernel_dcache_page(miter->page);
604
605                 if (miter->__flags & SG_MITER_ATOMIC) {
606                         WARN_ON_ONCE(preemptible());
607                         kunmap_atomic(miter->addr);
608                 } else
609                         kunmap(miter->page);
610
611                 miter->page = NULL;
612                 miter->addr = NULL;
613                 miter->length = 0;
614                 miter->consumed = 0;
615         }
616 }
617 EXPORT_SYMBOL(sg_miter_stop);
618
619 /**
620  * sg_copy_buffer - Copy data between a linear buffer and an SG list
621  * @sgl:                 The SG list
622  * @nents:               Number of SG entries
623  * @buf:                 Where to copy from
624  * @buflen:              The number of bytes to copy
625  * @skip:                Number of bytes to skip before copying
626  * @to_buffer:           transfer direction (true == from an sg list to a
627  *                       buffer, false == from a buffer to an sg list
628  *
629  * Returns the number of copied bytes.
630  *
631  **/
632 size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents, void *buf,
633                       size_t buflen, off_t skip, bool to_buffer)
634 {
635         unsigned int offset = 0;
636         struct sg_mapping_iter miter;
637         unsigned long flags;
638         unsigned int sg_flags = SG_MITER_ATOMIC;
639
640         if (to_buffer)
641                 sg_flags |= SG_MITER_FROM_SG;
642         else
643                 sg_flags |= SG_MITER_TO_SG;
644
645         sg_miter_start(&miter, sgl, nents, sg_flags);
646
647         if (!sg_miter_skip(&miter, skip))
648                 return false;
649
650         local_irq_save(flags);
651
652         while (sg_miter_next(&miter) && offset < buflen) {
653                 unsigned int len;
654
655                 len = min(miter.length, buflen - offset);
656
657                 if (to_buffer)
658                         memcpy(buf + offset, miter.addr, len);
659                 else
660                         memcpy(miter.addr, buf + offset, len);
661
662                 offset += len;
663         }
664
665         sg_miter_stop(&miter);
666
667         local_irq_restore(flags);
668         return offset;
669 }
670 EXPORT_SYMBOL(sg_copy_buffer);
671
672 /**
673  * sg_copy_from_buffer - Copy from a linear buffer to an SG list
674  * @sgl:                 The SG list
675  * @nents:               Number of SG entries
676  * @buf:                 Where to copy from
677  * @buflen:              The number of bytes to copy
678  *
679  * Returns the number of copied bytes.
680  *
681  **/
682 size_t sg_copy_from_buffer(struct scatterlist *sgl, unsigned int nents,
683                            const void *buf, size_t buflen)
684 {
685         return sg_copy_buffer(sgl, nents, (void *)buf, buflen, 0, false);
686 }
687 EXPORT_SYMBOL(sg_copy_from_buffer);
688
689 /**
690  * sg_copy_to_buffer - Copy from an SG list to a linear buffer
691  * @sgl:                 The SG list
692  * @nents:               Number of SG entries
693  * @buf:                 Where to copy to
694  * @buflen:              The number of bytes to copy
695  *
696  * Returns the number of copied bytes.
697  *
698  **/
699 size_t sg_copy_to_buffer(struct scatterlist *sgl, unsigned int nents,
700                          void *buf, size_t buflen)
701 {
702         return sg_copy_buffer(sgl, nents, buf, buflen, 0, true);
703 }
704 EXPORT_SYMBOL(sg_copy_to_buffer);
705
706 /**
707  * sg_pcopy_from_buffer - Copy from a linear buffer to an SG list
708  * @sgl:                 The SG list
709  * @nents:               Number of SG entries
710  * @buf:                 Where to copy from
711  * @buflen:              The number of bytes to copy
712  * @skip:                Number of bytes to skip before copying
713  *
714  * Returns the number of copied bytes.
715  *
716  **/
717 size_t sg_pcopy_from_buffer(struct scatterlist *sgl, unsigned int nents,
718                             const void *buf, size_t buflen, off_t skip)
719 {
720         return sg_copy_buffer(sgl, nents, (void *)buf, buflen, skip, false);
721 }
722 EXPORT_SYMBOL(sg_pcopy_from_buffer);
723
724 /**
725  * sg_pcopy_to_buffer - Copy from an SG list to a linear buffer
726  * @sgl:                 The SG list
727  * @nents:               Number of SG entries
728  * @buf:                 Where to copy to
729  * @buflen:              The number of bytes to copy
730  * @skip:                Number of bytes to skip before copying
731  *
732  * Returns the number of copied bytes.
733  *
734  **/
735 size_t sg_pcopy_to_buffer(struct scatterlist *sgl, unsigned int nents,
736                           void *buf, size_t buflen, off_t skip)
737 {
738         return sg_copy_buffer(sgl, nents, buf, buflen, skip, true);
739 }
740 EXPORT_SYMBOL(sg_pcopy_to_buffer);