Commit 642f149031d70415d9318b919d50b71e4724adbd

Authored by Jens Axboe
1 parent bd6dee6f30

SG: Change sg_set_page() to take length and offset argument

Most drivers need to set length and offset as well, so may as well fold
those three lines into one.

Add sg_assign_page() for those two locations that only needed to set
the page, where the offset/length is set outside of the function context.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>

Showing 31 changed files with 98 additions and 161 deletions Side-by-side Diff

... ... @@ -1366,9 +1366,7 @@
1366 1366 sg = sg_next(sg);
1367 1367 }
1368 1368  
1369   - sg_set_page(sg, bvec->bv_page);
1370   - sg->length = nbytes;
1371   - sg->offset = bvec->bv_offset;
  1369 + sg_set_page(sg, bvec->bv_page, nbytes, bvec->bv_offset);
1372 1370 nsegs++;
1373 1371 }
1374 1372 bvprv = bvec;
... ... @@ -160,8 +160,7 @@
160 160  
161 161 sg_set_buf(sg1, ipad, bs);
162 162  
163   - sg_set_page(&sg[1], (void *) sg);
164   - sg1[1].length = 0;
  163 + sg_set_page(&sg[1], (void *) sg, 0, 0);
165 164 sg_set_buf(sg2, opad, bs + ds);
166 165  
167 166 err = crypto_hash_digest(&desc, sg1, nbytes + bs, digest);
drivers/ata/libata-core.c
... ... @@ -4689,8 +4689,8 @@
4689 4689 * data in this function or read data in ata_sg_clean.
4690 4690 */
4691 4691 offset = lsg->offset + lsg->length - qc->pad_len;
4692   - sg_set_page(psg, nth_page(sg_page(lsg), offset >> PAGE_SHIFT));
4693   - psg->offset = offset_in_page(offset);
  4692 + sg_set_page(psg, nth_page(sg_page(lsg), offset >> PAGE_SHIFT),
  4693 + qc->pad_len, offset_in_page(offset));
4694 4694  
4695 4695 if (qc->tf.flags & ATA_TFLAG_WRITE) {
4696 4696 void *addr = kmap_atomic(sg_page(psg), KM_IRQ0);
drivers/block/cryptoloop.c
... ... @@ -150,13 +150,8 @@
150 150 u32 iv[4] = { 0, };
151 151 iv[0] = cpu_to_le32(IV & 0xffffffff);
152 152  
153   - sg_set_page(&sg_in, in_page);
154   - sg_in.offset = in_offs;
155   - sg_in.length = sz;
156   -
157   - sg_set_page(&sg_out, out_page);
158   - sg_out.offset = out_offs;
159   - sg_out.length = sz;
  153 + sg_set_page(&sg_in, in_page, sz, in_offs);
  154 + sg_set_page(&sg_out, out_page, sz, out_offs);
160 155  
161 156 desc.info = iv;
162 157 err = encdecfunc(&desc, &sg_out, &sg_in, sz);
... ... @@ -1428,9 +1428,8 @@
1428 1428 scmd->state = UB_CMDST_INIT;
1429 1429 scmd->nsg = 1;
1430 1430 sg = &scmd->sgv[0];
1431   - sg_set_page(sg, virt_to_page(sc->top_sense));
1432   - sg->offset = (unsigned long)sc->top_sense & (PAGE_SIZE-1);
1433   - sg->length = UB_SENSE_SIZE;
  1431 + sg_set_page(sg, virt_to_page(sc->top_sense), UB_SENSE_SIZE,
  1432 + (unsigned long)sc->top_sense & (PAGE_SIZE-1));
1434 1433 scmd->len = UB_SENSE_SIZE;
1435 1434 scmd->lun = cmd->lun;
1436 1435 scmd->done = ub_top_sense_done;
... ... @@ -1864,9 +1863,7 @@
1864 1863 cmd->state = UB_CMDST_INIT;
1865 1864 cmd->nsg = 1;
1866 1865 sg = &cmd->sgv[0];
1867   - sg_set_page(sg, virt_to_page(p));
1868   - sg->offset = (unsigned long)p & (PAGE_SIZE-1);
1869   - sg->length = 8;
  1866 + sg_set_page(sg, virt_to_page(p), 8, (unsigned long)p & (PAGE_SIZE-1));
1870 1867 cmd->len = 8;
1871 1868 cmd->lun = lun;
1872 1869 cmd->done = ub_probe_done;
drivers/ieee1394/dma.c
... ... @@ -111,8 +111,8 @@
111 111 unsigned long va =
112 112 (unsigned long)dma->kvirt + (i << PAGE_SHIFT);
113 113  
114   - sg_set_page(&dma->sglist[i], vmalloc_to_page((void *)va));
115   - dma->sglist[i].length = PAGE_SIZE;
  114 + sg_set_page(&dma->sglist[i], vmalloc_to_page((void *)va),
  115 + PAGE_SIZE, 0);
116 116 }
117 117  
118 118 /* map sglist to the IOMMU */
drivers/infiniband/core/umem.c
... ... @@ -171,9 +171,7 @@
171 171 if (vma_list &&
172 172 !is_vm_hugetlb_page(vma_list[i + off]))
173 173 umem->hugetlb = 0;
174   - sg_set_page(&chunk->page_list[i], page_list[i + off]);
175   - chunk->page_list[i].offset = 0;
176   - chunk->page_list[i].length = PAGE_SIZE;
  174 + sg_set_page(&chunk->page_list[i], page_list[i + off], PAGE_SIZE, 0);
177 175 }
178 176  
179 177 chunk->nmap = ib_dma_map_sg(context->device,
drivers/infiniband/hw/mthca/mthca_memfree.c
... ... @@ -113,9 +113,7 @@
113 113 if (!page)
114 114 return -ENOMEM;
115 115  
116   - sg_set_page(mem, page);
117   - mem->length = PAGE_SIZE << order;
118   - mem->offset = 0;
  116 + sg_set_page(mem, page, PAGE_SIZE << order, 0);
119 117 return 0;
120 118 }
121 119  
... ... @@ -481,9 +479,8 @@
481 479 if (ret < 0)
482 480 goto out;
483 481  
484   - sg_set_page(&db_tab->page[i].mem, pages[0]);
485   - db_tab->page[i].mem.length = MTHCA_ICM_PAGE_SIZE;
486   - db_tab->page[i].mem.offset = uaddr & ~PAGE_MASK;
  482 + sg_set_page(&db_tab->page[i].mem, pages[0], MTHCA_ICM_PAGE_SIZE,
  483 + uaddr & ~PAGE_MASK);
487 484  
488 485 ret = pci_map_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE);
489 486 if (ret < 0) {
drivers/md/dm-crypt.c
... ... @@ -351,14 +351,10 @@
351 351 struct scatterlist sg_in, sg_out;
352 352  
353 353 sg_init_table(&sg_in, 1);
354   - sg_set_page(&sg_in, bv_in->bv_page);
355   - sg_in.offset = bv_in->bv_offset + ctx->offset_in;
356   - sg_in.length = 1 << SECTOR_SHIFT;
  354 + sg_set_page(&sg_in, bv_in->bv_page, 1 << SECTOR_SHIFT, bv_in->bv_offset + ctx->offset_in);
357 355  
358 356 sg_init_table(&sg_out, 1);
359   - sg_set_page(&sg_out, bv_out->bv_page);
360   - sg_out.offset = bv_out->bv_offset + ctx->offset_out;
361   - sg_out.length = 1 << SECTOR_SHIFT;
  357 + sg_set_page(&sg_out, bv_out->bv_page, 1 << SECTOR_SHIFT, bv_out->bv_offset + ctx->offset_out);
362 358  
363 359 ctx->offset_in += sg_in.length;
364 360 if (ctx->offset_in >= bv_in->bv_len) {
drivers/media/common/saa7146_core.c
... ... @@ -118,8 +118,7 @@
118 118 if (NULL == pg)
119 119 goto err;
120 120 BUG_ON(PageHighMem(pg));
121   - sg_set_page(&sglist[i], pg);
122   - sglist[i].length = PAGE_SIZE;
  121 + sg_set_page(&sglist[i], pg, PAGE_SIZE, 0);
123 122 }
124 123 return sglist;
125 124  
drivers/media/video/ivtv/ivtv-udma.c
... ... @@ -49,8 +49,6 @@
49 49 unsigned int len = (i == dma_page->page_count - 1) ?
50 50 dma_page->tail : PAGE_SIZE - offset;
51 51  
52   - dma->SGlist[map_offset].length = len;
53   - dma->SGlist[map_offset].offset = offset;
54 52 if (PageHighMem(dma->map[map_offset])) {
55 53 void *src;
56 54  
57 55  
... ... @@ -63,10 +61,10 @@
63 61 memcpy(page_address(dma->bouncemap[map_offset]) + offset, src, len);
64 62 kunmap_atomic(src, KM_BOUNCE_READ);
65 63 local_irq_restore(flags);
66   - sg_set_page(&dma->SGlist[map_offset], dma->bouncemap[map_offset]);
  64 + sg_set_page(&dma->SGlist[map_offset], dma->bouncemap[map_offset], len, offset);
67 65 }
68 66 else {
69   - sg_set_page(&dma->SGlist[map_offset], dma->map[map_offset]);
  67 + sg_set_page(&dma->SGlist[map_offset], dma->map[map_offset], len, offset);
70 68 }
71 69 offset = 0;
72 70 map_offset++;
drivers/media/video/videobuf-dma-sg.c
... ... @@ -67,8 +67,7 @@
67 67 if (NULL == pg)
68 68 goto err;
69 69 BUG_ON(PageHighMem(pg));
70   - sg_set_page(&sglist[i], pg);
71   - sglist[i].length = PAGE_SIZE;
  70 + sg_set_page(&sglist[i], pg, PAGE_SIZE, 0);
72 71 }
73 72 return sglist;
74 73  
75 74  
... ... @@ -95,16 +94,13 @@
95 94 if (PageHighMem(pages[0]))
96 95 /* DMA to highmem pages might not work */
97 96 goto highmem;
98   - sg_set_page(&sglist[0], pages[0]);
99   - sglist[0].offset = offset;
100   - sglist[0].length = PAGE_SIZE - offset;
  97 + sg_set_page(&sglist[0], pages[0], PAGE_SIZE - offset, offset);
101 98 for (i = 1; i < nr_pages; i++) {
102 99 if (NULL == pages[i])
103 100 goto nopage;
104 101 if (PageHighMem(pages[i]))
105 102 goto highmem;
106   - sg_set_page(&sglist[i], pages[i]);
107   - sglist[i].length = PAGE_SIZE;
  103 + sg_set_page(&sglist[i], pages[i], PAGE_SIZE, 0);
108 104 }
109 105 return sglist;
110 106  
drivers/net/mlx4/icm.c
... ... @@ -101,9 +101,7 @@
101 101 if (!page)
102 102 return -ENOMEM;
103 103  
104   - sg_set_page(mem, page);
105   - mem->length = PAGE_SIZE << order;
106   - mem->offset = 0;
  104 + sg_set_page(mem, page, PAGE_SIZE << order, 0);
107 105 return 0;
108 106 }
109 107  
drivers/s390/scsi/zfcp_aux.c
... ... @@ -562,8 +562,6 @@
562 562 sg_init_table(sg_list->sg, sg_list->count);
563 563  
564 564 for (i = 0, sg = sg_list->sg; i < sg_list->count; i++, sg++) {
565   - sg->length = min(size, PAGE_SIZE);
566   - sg->offset = 0;
567 565 address = (void *) get_zeroed_page(GFP_KERNEL);
568 566 if (address == NULL) {
569 567 sg_list->count = i;
... ... @@ -571,7 +569,7 @@
571 569 retval = -ENOMEM;
572 570 goto out;
573 571 }
574   - zfcp_address_to_sg(address, sg);
  572 + zfcp_address_to_sg(address, sg, min(size, PAGE_SIZE));
575 573 size -= sg->length;
576 574 }
577 575  
... ... @@ -1523,10 +1521,8 @@
1523 1521 data->ct.req = &data->req;
1524 1522 data->ct.resp = &data->resp;
1525 1523 data->ct.req_count = data->ct.resp_count = 1;
1526   - zfcp_address_to_sg(&data->ct_iu_req, &data->req);
1527   - zfcp_address_to_sg(&data->ct_iu_resp, &data->resp);
1528   - data->req.length = sizeof(struct ct_iu_gid_pn_req);
1529   - data->resp.length = sizeof(struct ct_iu_gid_pn_resp);
  1524 + zfcp_address_to_sg(&data->ct_iu_req, &data->req, sizeof(struct ct_iu_gid_pn_req));
  1525 + zfcp_address_to_sg(&data->ct_iu_resp, &data->resp, sizeof(struct ct_iu_gid_pn_resp));
1530 1526  
1531 1527 *gid_pn = data;
1532 1528 return 0;
drivers/s390/scsi/zfcp_def.h
... ... @@ -74,8 +74,7 @@
74 74 static inline void
75 75 zfcp_address_to_sg(void *address, struct scatterlist *list)
76 76 {
77   - sg_set_page(list, virt_to_page(address));
78   - list->offset = ((unsigned long) address) & (PAGE_SIZE - 1);
  77 + sg_set_buf(list, address, 0);
79 78 }
80 79  
81 80 #define REQUEST_LIST_SIZE 128
drivers/s390/scsi/zfcp_erp.c
... ... @@ -322,9 +322,9 @@
322 322 if (address == NULL)
323 323 goto nomem;
324 324  
325   - zfcp_address_to_sg(address, send_els->req);
  325 + zfcp_address_to_sg(address, send_els->req, sizeof(struct zfcp_ls_adisc));
326 326 address += PAGE_SIZE >> 1;
327   - zfcp_address_to_sg(address, send_els->resp);
  327 + zfcp_address_to_sg(address, send_els->resp, sizeof(struct zfcp_ls_adisc_acc));
328 328 send_els->req_count = send_els->resp_count = 1;
329 329  
330 330 send_els->adapter = adapter;
... ... @@ -335,9 +335,6 @@
335 335  
336 336 adisc = zfcp_sg_to_address(send_els->req);
337 337 send_els->ls_code = adisc->code = ZFCP_LS_ADISC;
338   -
339   - send_els->req->length = sizeof(struct zfcp_ls_adisc);
340   - send_els->resp->length = sizeof(struct zfcp_ls_adisc_acc);
341 338  
342 339 /* acc. to FC-FS, hard_nport_id in ADISC should not be set for ports
343 340 without FC-AL-2 capability, so we don't set it */
... ... @@ -2890,7 +2890,7 @@
2890 2890 return NULL;
2891 2891 }
2892 2892  
2893   - sg_set_page(&scatterlist[i], page);
  2893 + sg_set_page(&scatterlist[i], page, 0, 0);
2894 2894 }
2895 2895  
2896 2896 return sglist;
drivers/scsi/iscsi_tcp.c
... ... @@ -79,9 +79,7 @@
79 79 iscsi_buf_init_sg(struct iscsi_buf *ibuf, struct scatterlist *sg)
80 80 {
81 81 sg_init_table(&ibuf->sg, 1);
82   - sg_set_page(&ibuf->sg, sg_page(sg));
83   - ibuf->sg.offset = sg->offset;
84   - ibuf->sg.length = sg->length;
  82 + sg_set_page(&ibuf->sg, sg_page(sg), sg->length, sg->offset);
85 83 /*
86 84 * Fastpath: sg element fits into single page
87 85 */
... ... @@ -5256,8 +5256,7 @@
5256 5256  
5257 5257 STbuffer->sg[0].offset = 0;
5258 5258 if (page != NULL) {
5259   - sg_set_page(&STbuffer->sg[0], page);
5260   - STbuffer->sg[0].length = b_size;
  5259 + sg_set_page(&STbuffer->sg[0], page, b_size, 0);
5261 5260 STbuffer->b_data = page_address(page);
5262 5261 break;
5263 5262 }
... ... @@ -5285,8 +5284,7 @@
5285 5284 normalize_buffer(STbuffer);
5286 5285 return 0;
5287 5286 }
5288   - sg_set_page(&STbuffer->sg[segs], page);
5289   - STbuffer->sg[segs].length = (OS_FRAME_SIZE - got <= PAGE_SIZE / 2) ? (OS_FRAME_SIZE - got) : b_size;
  5287 + sg_set_page(&STbuffer->sg[segs], page, (OS_FRAME_SIZE - got <= PAGE_SIZE / 2) ? (OS_FRAME_SIZE - got) : b_size, 0);
5290 5288 got += STbuffer->sg[segs].length;
5291 5289 STbuffer->buffer_size = got;
5292 5290 STbuffer->sg_segs = ++segs;
... ... @@ -1717,16 +1717,12 @@
1717 1717 goto out_unlock; */
1718 1718 }
1719 1719  
1720   - sg_set_page(sgl, pages[0]);
1721   - sgl[0].offset = uaddr & ~PAGE_MASK;
  1720 + sg_set_page(sgl, pages[0], 0, uaddr & ~PAGE_MASK);
1722 1721 if (nr_pages > 1) {
1723 1722 sgl[0].length = PAGE_SIZE - sgl[0].offset;
1724 1723 count -= sgl[0].length;
1725   - for (i=1; i < nr_pages ; i++) {
1726   - sg_set_page(&sgl[i], pages[i]);
1727   - sgl[i].length = count < PAGE_SIZE ? count : PAGE_SIZE;
1728   - count -= PAGE_SIZE;
1729   - }
  1724 + for (i=1; i < nr_pages ; i++)
  1725 + sg_set_page(&sgl[i], pages[i], count < PAGE_SIZE ? count : PAGE_SIZE, 0);
1730 1726 }
1731 1727 else {
1732 1728 sgl[0].length = count;
... ... @@ -1854,8 +1850,7 @@
1854 1850 scatter_elem_sz_prev = ret_sz;
1855 1851 }
1856 1852 }
1857   - sg_set_page(sg, p);
1858   - sg->length = (ret_sz > num) ? num : ret_sz;
  1853 + sg_set_page(sg, p, (ret_sz > num) ? num : ret_sz, 0);
1859 1854  
1860 1855 SCSI_LOG_TIMEOUT(5, printk("sg_build_indirect: k=%d, num=%d, "
1861 1856 "ret_sz=%d\n", k, num, ret_sz));
... ... @@ -3797,13 +3797,11 @@
3797 3797 sg = &(STbp->sg[0]);
3798 3798 frp = STbp->frp;
3799 3799 for (i=count=0; count < length; i++) {
3800   - sg_set_page(&sg[i], frp[i].page);
3801 3800 if (length - count > frp[i].length)
3802   - sg[i].length = frp[i].length;
  3801 + sg_set_page(&sg[i], frp[i].page, frp[i].length, 0);
3803 3802 else
3804   - sg[i].length = length - count;
  3803 + sg_set_page(&sg[i], frp[i].page, length - count, 0);
3805 3804 count += sg[i].length;
3806   - sg[i].offset = 0;
3807 3805 }
3808 3806 STbp->sg_segs = i;
3809 3807 STbp->frp_sg_current = length;
3810 3808  
... ... @@ -4446,15 +4444,13 @@
4446 4444 }
4447 4445  
4448 4446 /* Populate the scatter/gather list */
4449   - sg_set_page(&sgl[0], pages[0]);
4450   - sgl[0].offset = uaddr & ~PAGE_MASK;
  4447 + sg_set_page(&sgl[0], pages[0], 0, uaddr & ~PAGE_MASK);
4451 4448 if (nr_pages > 1) {
4452 4449 sgl[0].length = PAGE_SIZE - sgl[0].offset;
4453 4450 count -= sgl[0].length;
4454 4451 for (i=1; i < nr_pages ; i++) {
4455   - sg_set_page(&sgl[i], pages[i]);;
4456   - sgl[i].offset = 0;
4457   - sgl[i].length = count < PAGE_SIZE ? count : PAGE_SIZE;
  4452 + sg_set_page(&sgl[i], pages[i],
  4453 + count < PAGE_SIZE ? count : PAGE_SIZE, 0);;
4458 4454 count -= PAGE_SIZE;
4459 4455 }
4460 4456 }
fs/ecryptfs/crypto.c
... ... @@ -282,10 +282,8 @@
282 282 while (size > 0 && i < sg_size) {
283 283 pg = virt_to_page(addr);
284 284 offset = offset_in_page(addr);
285   - if (sg) {
286   - sg_set_page(&sg[i], pg);
287   - sg[i].offset = offset;
288   - }
  285 + if (sg)
  286 + sg_set_page(&sg[i], pg, 0, offset);
289 287 remainder_of_page = PAGE_CACHE_SIZE - offset;
290 288 if (size >= remainder_of_page) {
291 289 if (sg)
... ... @@ -716,12 +714,8 @@
716 714 sg_init_table(&src_sg, 1);
717 715 sg_init_table(&dst_sg, 1);
718 716  
719   - sg_set_page(&src_sg, src_page);
720   - src_sg.offset = src_offset;
721   - src_sg.length = size;
722   - sg_set_page(&dst_sg, dst_page);
723   - dst_sg.offset = dst_offset;
724   - dst_sg.length = size;
  717 + sg_set_page(&src_sg, src_page, size, src_offset);
  718 + sg_set_page(&dst_sg, dst_page, size, dst_offset);
725 719 return encrypt_scatterlist(crypt_stat, &dst_sg, &src_sg, size, iv);
726 720 }
727 721  
728 722  
729 723  
... ... @@ -746,14 +740,11 @@
746 740 struct scatterlist src_sg, dst_sg;
747 741  
748 742 sg_init_table(&src_sg, 1);
  743 + sg_set_page(&src_sg, src_page, size, src_offset);
  744 +
749 745 sg_init_table(&dst_sg, 1);
  746 + sg_set_page(&dst_sg, dst_page, size, dst_offset);
750 747  
751   - sg_set_page(&src_sg, src_page);
752   - src_sg.offset = src_offset;
753   - src_sg.length = size;
754   - sg_set_page(&dst_sg, dst_page);
755   - dst_sg.offset = dst_offset;
756   - dst_sg.length = size;
757 748 return decrypt_scatterlist(crypt_stat, &dst_sg, &src_sg, size, iv);
758 749 }
759 750  
include/asm-frv/scatterlist.h
... ... @@ -16,8 +16,7 @@
16 16 *
17 17 * can be rewritten as
18 18 *
19   - * sg_set_page(virt_to_page(some_ptr));
20   - * sg->offset = (unsigned long) some_ptr & ~PAGE_MASK;
  19 + * sg_set_buf(sg, some_ptr, length);
21 20 *
22 21 * and that's it. There's no excuse for not highmem enabling YOUR driver. /jens
23 22 */
include/linux/scatterlist.h
... ... @@ -26,18 +26,16 @@
26 26 #define SG_MAGIC 0x87654321
27 27  
28 28 /**
29   - * sg_set_page - Set sg entry to point at given page
30   - * @sg: SG entry
31   - * @page: The page
  29 + * sg_assign_page - Assign a given page to an SG entry
  30 + * @sg: SG entry
  31 + * @page: The page
32 32 *
33 33 * Description:
34   - * Use this function to set an sg entry pointing at a page, never assign
35   - * the page directly. We encode sg table information in the lower bits
36   - * of the page pointer. See sg_page() for looking up the page belonging
37   - * to an sg entry.
  34 + * Assign page to sg entry. Also see sg_set_page(), the most commonly used
  35 + * variant.
38 36 *
39 37 **/
40   -static inline void sg_set_page(struct scatterlist *sg, struct page *page)
  38 +static inline void sg_assign_page(struct scatterlist *sg, struct page *page)
41 39 {
42 40 unsigned long page_link = sg->page_link & 0x3;
43 41  
... ... @@ -52,6 +50,28 @@
52 50 sg->page_link = page_link | (unsigned long) page;
53 51 }
54 52  
  53 +/**
  54 + * sg_set_page - Set sg entry to point at given page
  55 + * @sg: SG entry
  56 + * @page: The page
  57 + * @len: Length of data
  58 + * @offset: Offset into page
  59 + *
  60 + * Description:
  61 + * Use this function to set an sg entry pointing at a page, never assign
  62 + * the page directly. We encode sg table information in the lower bits
  63 + * of the page pointer. See sg_page() for looking up the page belonging
  64 + * to an sg entry.
  65 + *
  66 + **/
  67 +static inline void sg_set_page(struct scatterlist *sg, struct page *page,
  68 + unsigned int len, unsigned int offset)
  69 +{
  70 + sg_assign_page(sg, page);
  71 + sg->offset = offset;
  72 + sg->length = len;
  73 +}
  74 +
55 75 #define sg_page(sg) ((struct page *) ((sg)->page_link & ~0x3))
56 76  
57 77 /**
... ... @@ -64,9 +84,7 @@
64 84 static inline void sg_set_buf(struct scatterlist *sg, const void *buf,
65 85 unsigned int buflen)
66 86 {
67   - sg_set_page(sg, virt_to_page(buf));
68   - sg->offset = offset_in_page(buf);
69   - sg->length = buflen;
  87 + sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf));
70 88 }
71 89  
72 90 /*
... ... @@ -2045,9 +2045,7 @@
2045 2045 if (copy > 0) {
2046 2046 if (copy > len)
2047 2047 copy = len;
2048   - sg_set_page(&sg[elt], virt_to_page(skb->data + offset));
2049   - sg[elt].offset = (unsigned long)(skb->data + offset) % PAGE_SIZE;
2050   - sg[elt].length = copy;
  2048 + sg_set_buf(sg, skb->data + offset, copy);
2051 2049 elt++;
2052 2050 if ((len -= copy) == 0)
2053 2051 return elt;
... ... @@ -2065,9 +2063,8 @@
2065 2063  
2066 2064 if (copy > len)
2067 2065 copy = len;
2068   - sg_set_page(&sg[elt], frag->page);
2069   - sg[elt].offset = frag->page_offset+offset-start;
2070   - sg[elt].length = copy;
  2066 + sg_set_page(&sg[elt], frag->page, copy,
  2067 + frag->page_offset+offset-start);
2071 2068 elt++;
2072 2069 if (!(len -= copy))
2073 2070 return elt;
net/ieee80211/ieee80211_crypt_tkip.c
... ... @@ -537,13 +537,8 @@
537 537 return -1;
538 538 }
539 539 sg_init_table(sg, 2);
540   - sg_set_page(&sg[0], virt_to_page(hdr));
541   - sg[0].offset = offset_in_page(hdr);
542   - sg[0].length = 16;
543   -
544   - sg_set_page(&sg[1], virt_to_page(data));
545   - sg[1].offset = offset_in_page(data);
546   - sg[1].length = data_len;
  540 + sg_set_buf(&sg[0], hdr, 16);
  541 + sg_set_buf(&sg[1], data, data_len);
547 542  
548 543 if (crypto_hash_setkey(tfm_michael, key, 8))
549 544 return -1;
... ... @@ -727,9 +727,7 @@
727 727 /* set up scatter list */
728 728 end = skb_tail_pointer(skb);
729 729 sg_init_table(&sg, 1);
730   - sg_set_page(&sg, virt_to_page(auth));
731   - sg.offset = (unsigned long)(auth) % PAGE_SIZE;
732   - sg.length = end - (unsigned char *)auth;
  730 + sg_set_buf(&sg, auth, end - (unsigned char *)auth);
733 731  
734 732 desc.tfm = asoc->ep->auth_hmacs[hmac_id];
735 733 desc.flags = 0;
net/sctp/sm_make_chunk.c
... ... @@ -1514,9 +1514,7 @@
1514 1514  
1515 1515 /* Sign the message. */
1516 1516 sg_init_table(&sg, 1);
1517   - sg_set_page(&sg, virt_to_page(&cookie->c));
1518   - sg.offset = (unsigned long)(&cookie->c) % PAGE_SIZE;
1519   - sg.length = bodysize;
  1517 + sg_set_buf(&sg, &cookie->c, bodysize);
1520 1518 keylen = SCTP_SECRET_SIZE;
1521 1519 key = (char *)ep->secret_key[ep->current_key];
1522 1520 desc.tfm = sctp_sk(ep->base.sk)->hmac;
... ... @@ -1587,9 +1585,7 @@
1587 1585 /* Check the signature. */
1588 1586 keylen = SCTP_SECRET_SIZE;
1589 1587 sg_init_table(&sg, 1);
1590   - sg_set_page(&sg, virt_to_page(bear_cookie));
1591   - sg.offset = (unsigned long)(bear_cookie) % PAGE_SIZE;
1592   - sg.length = bodysize;
  1588 + sg_set_buf(&sg, bear_cookie, bodysize);
1593 1589 key = (char *)ep->secret_key[ep->current_key];
1594 1590 desc.tfm = sctp_sk(ep->base.sk)->hmac;
1595 1591 desc.flags = 0;
net/sunrpc/auth_gss/gss_krb5_crypto.c
... ... @@ -199,7 +199,7 @@
199 199 } else {
200 200 in_page = sg_page(sg);
201 201 }
202   - sg_set_page(&desc->infrags[desc->fragno], in_page);
  202 + sg_assign_page(&desc->infrags[desc->fragno], in_page);
203 203 desc->fragno++;
204 204 desc->fraglen += sg->length;
205 205 desc->pos += sg->length;
206 206  
... ... @@ -215,11 +215,10 @@
215 215 if (ret)
216 216 return ret;
217 217 if (fraglen) {
218   - sg_set_page(&desc->outfrags[0], sg_page(sg));
219   - desc->outfrags[0].offset = sg->offset + sg->length - fraglen;
220   - desc->outfrags[0].length = fraglen;
  218 + sg_set_page(&desc->outfrags[0], sg_page(sg), fraglen,
  219 + sg->offset + sg->length - fraglen);
221 220 desc->infrags[0] = desc->outfrags[0];
222   - sg_set_page(&desc->infrags[0], in_page);
  221 + sg_assign_page(&desc->infrags[0], in_page);
223 222 desc->fragno = 1;
224 223 desc->fraglen = fraglen;
225 224 } else {
... ... @@ -287,9 +286,8 @@
287 286 if (ret)
288 287 return ret;
289 288 if (fraglen) {
290   - sg_set_page(&desc->frags[0], sg_page(sg));
291   - desc->frags[0].offset = sg->offset + sg->length - fraglen;
292   - desc->frags[0].length = fraglen;
  289 + sg_set_page(&desc->frags[0], sg_page(sg), fraglen,
  290 + sg->offset + sg->length - fraglen);
293 291 desc->fragno = 1;
294 292 desc->fraglen = fraglen;
295 293 } else {
... ... @@ -1059,9 +1059,7 @@
1059 1059 do {
1060 1060 if (thislen > page_len)
1061 1061 thislen = page_len;
1062   - sg_set_page(sg, buf->pages[i]);
1063   - sg->offset = page_offset;
1064   - sg->length = thislen;
  1062 + sg_set_page(sg, buf->pages[i], thislen, page_offset);
1065 1063 ret = actor(sg, data);
1066 1064 if (ret)
1067 1065 goto out;
net/xfrm/xfrm_algo.c
... ... @@ -553,9 +553,7 @@
553 553 if (copy > len)
554 554 copy = len;
555 555  
556   - sg_set_page(&sg, virt_to_page(skb->data + offset));
557   - sg.offset = (unsigned long)(skb->data + offset) % PAGE_SIZE;
558   - sg.length = copy;
  556 + sg_set_buf(&sg, skb->data + offset, copy);
559 557  
560 558 err = icv_update(desc, &sg, copy);
561 559 if (unlikely(err))
... ... @@ -578,9 +576,8 @@
578 576 if (copy > len)
579 577 copy = len;
580 578  
581   - sg_set_page(&sg, frag->page);
582   - sg.offset = frag->page_offset + offset-start;
583   - sg.length = copy;
  579 + sg_set_page(&sg, frag->page, copy,
  580 + frag->page_offset + offset-start);
584 581  
585 582 err = icv_update(desc, &sg, copy);
586 583 if (unlikely(err))