Commit 642f149031d70415d9318b919d50b71e4724adbd
1 parent
bd6dee6f30
Exists in
master
and in
7 other branches
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
- block/ll_rw_blk.c
- crypto/hmac.c
- drivers/ata/libata-core.c
- drivers/block/cryptoloop.c
- drivers/block/ub.c
- drivers/ieee1394/dma.c
- drivers/infiniband/core/umem.c
- drivers/infiniband/hw/mthca/mthca_memfree.c
- drivers/md/dm-crypt.c
- drivers/media/common/saa7146_core.c
- drivers/media/video/ivtv/ivtv-udma.c
- drivers/media/video/videobuf-dma-sg.c
- drivers/net/mlx4/icm.c
- drivers/s390/scsi/zfcp_aux.c
- drivers/s390/scsi/zfcp_def.h
- drivers/s390/scsi/zfcp_erp.c
- drivers/scsi/ipr.c
- drivers/scsi/iscsi_tcp.c
- drivers/scsi/osst.c
- drivers/scsi/sg.c
- drivers/scsi/st.c
- fs/ecryptfs/crypto.c
- include/asm-frv/scatterlist.h
- include/linux/scatterlist.h
- net/core/skbuff.c
- net/ieee80211/ieee80211_crypt_tkip.c
- net/sctp/auth.c
- net/sctp/sm_make_chunk.c
- net/sunrpc/auth_gss/gss_krb5_crypto.c
- net/sunrpc/xdr.c
- net/xfrm/xfrm_algo.c
block/ll_rw_blk.c
... | ... | @@ -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; |
crypto/hmac.c
... | ... | @@ -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); |
drivers/block/ub.c
... | ... | @@ -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
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
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 */ |
drivers/scsi/ipr.c
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 | */ |
drivers/scsi/osst.c
... | ... | @@ -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; |
drivers/scsi/sg.c
... | ... | @@ -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)); |
drivers/scsi/st.c
... | ... | @@ -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 | /* |
net/core/skbuff.c
... | ... | @@ -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; |
net/sctp/auth.c
... | ... | @@ -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 { |
net/sunrpc/xdr.c
... | ... | @@ -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)) |