lkml.org 
[lkml]   [2005]   [Aug]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH] Use sg_init_one where appropriate
On Sat, Aug 27, 2005 at 02:06:26PM +0200, Ingo Oeser wrote:
>In short: please remove all "const" markers from the function,
> try to uninline it somewhere and resend.

Indeed, only buflen should be const, thanks for pointing it out.
A new patch is below.

>And while you are at it, please check, wether this can be uninlined,
>since it does a lot of things and is called from quite some sites
>then.

I wouldn't quite agree, four lines isn't exactly "a lot of things". And
I guess that there would have been objections when the function was
first created [1]. Anyway, using sg_init_one more and changing it to be a
regular function seems like orthogonal issues to me.

Regards,
David Härdeman
[1] http://www.ussg.iu.edu/hypermail/linux/kernel/0409.1/0257.html




This patch uses sg_init_one in some places where it was duplicated.

Signed-off-by: David Härdeman <david@2gen.com>

----
crypto/hmac.c | 23 ++++++-----------------
crypto/tcrypt.c | 29 ++++++++---------------------
drivers/md/dm-crypt.c | 11 ++++-------
drivers/net/wireless/airo.c | 5 ++---
drivers/scsi/arm/scsi.h | 6 ++----
drivers/scsi/libata-core.c | 10 ++--------
drivers/scsi/sg.c | 5 ++---
drivers/usb/misc/usbtest.c | 6 ++----
include/linux/scatterlist.h | 3 ++-
net/ipv6/addrconf.c | 9 +++------
net/sunrpc/auth_gss/gss_krb5_crypto.c | 22 ++++++----------------
11 files changed, 39 insertions(+), 90 deletions(-)


Index: linux-sginitone/include/linux/scatterlist.h
===================================================================
--- linux-sginitone.orig/include/linux/scatterlist.h 2005-03-02 08:38:32.000000000 +0100
+++ linux-sginitone/include/linux/scatterlist.h 2005-08-27 20:29:46.000000000 +0200
@@ -2,7 +2,8 @@
#define _LINUX_SCATTERLIST_H

static inline void sg_init_one(struct scatterlist *sg,
- u8 *buf, unsigned int buflen)
+ u8 *buf,
+ const unsigned int buflen)
{
memset(sg, 0, sizeof(*sg));

Index: linux-sginitone/crypto/hmac.c
===================================================================
--- linux-sginitone.orig/crypto/hmac.c 2005-03-02 08:38:09.000000000 +0100
+++ linux-sginitone/crypto/hmac.c 2005-08-27 00:32:26.000000000 +0200
@@ -19,17 +19,15 @@
#include <linux/highmem.h>
#include <linux/slab.h>
#include <asm/scatterlist.h>
+#include <linux/scatterlist.h>
#include "internal.h"

static void hash_key(struct crypto_tfm *tfm, u8 *key, unsigned int keylen)
{
struct scatterlist tmp;
-
- tmp.page = virt_to_page(key);
- tmp.offset = offset_in_page(key);
- tmp.length = keylen;
+
+ sg_init_one(tmp, key, keylen);
crypto_digest_digest(tfm, &tmp, 1, key);
-
}

int crypto_alloc_hmac_block(struct crypto_tfm *tfm)
@@ -70,10 +68,7 @@
for (i = 0; i < crypto_tfm_alg_blocksize(tfm); i++)
ipad[i] ^= 0x36;

- tmp.page = virt_to_page(ipad);
- tmp.offset = offset_in_page(ipad);
- tmp.length = crypto_tfm_alg_blocksize(tfm);
-
+ sg_init_one(tmp, ipad, crypto_tfm_alg_blocksize(tfm));
crypto_digest_init(tfm);
crypto_digest_update(tfm, &tmp, 1);
}
@@ -104,17 +99,11 @@
for (i = 0; i < crypto_tfm_alg_blocksize(tfm); i++)
opad[i] ^= 0x5c;

- tmp.page = virt_to_page(opad);
- tmp.offset = offset_in_page(opad);
- tmp.length = crypto_tfm_alg_blocksize(tfm);
-
+ sg_init_one(tmp, opad, crypto_tfm_alg_blocksize(tfm));
crypto_digest_init(tfm);
crypto_digest_update(tfm, &tmp, 1);

- tmp.page = virt_to_page(out);
- tmp.offset = offset_in_page(out);
- tmp.length = crypto_tfm_alg_digestsize(tfm);
-
+ sg_init_one(tmp, out, crypto_tfm_alg_blocksize(tfm));
crypto_digest_update(tfm, &tmp, 1);
crypto_digest_final(tfm, out);
}
Index: linux-sginitone/crypto/tcrypt.c
===================================================================
--- linux-sginitone.orig/crypto/tcrypt.c 2005-08-19 22:40:05.000000000 +0200
+++ linux-sginitone/crypto/tcrypt.c 2005-08-27 00:45:05.000000000 +0200
@@ -21,6 +21,7 @@
#include <linux/mm.h>
#include <linux/slab.h>
#include <asm/scatterlist.h>
+#include <linux/scatterlist.h>
#include <linux/string.h>
#include <linux/crypto.h>
#include <linux/highmem.h>
@@ -109,9 +110,7 @@
memset (result, 0, 64);

p = hash_tv[i].plaintext;
- sg[0].page = virt_to_page (p);
- sg[0].offset = offset_in_page (p);
- sg[0].length = hash_tv[i].psize;
+ sg_init_one(&sg[0], p, hash_tv[i].psize);

crypto_digest_init (tfm);
if (tfm->crt_u.digest.dit_setkey) {
@@ -146,9 +145,7 @@
hash_tv[i].tap[k]);
temp += hash_tv[i].tap[k];
p = &xbuf[IDX[k]];
- sg[k].page = virt_to_page (p);
- sg[k].offset = offset_in_page (p);
- sg[k].length = hash_tv[i].tap[k];
+ sg_init_one(&sg[k], p, hash_tv[i].tap[k]);
}

crypto_digest_digest (tfm, sg, hash_tv[i].np, result);
@@ -203,9 +200,7 @@

p = hmac_tv[i].plaintext;
klen = hmac_tv[i].ksize;
- sg[0].page = virt_to_page(p);
- sg[0].offset = offset_in_page(p);
- sg[0].length = hmac_tv[i].psize;
+ sg_init_one(&sg[0], p, hmac_tv[i].psize);

crypto_hmac(tfm, hmac_tv[i].key, &klen, sg, 1, result);

@@ -234,9 +229,7 @@
hmac_tv[i].tap[k]);
temp += hmac_tv[i].tap[k];
p = &xbuf[IDX[k]];
- sg[k].page = virt_to_page (p);
- sg[k].offset = offset_in_page (p);
- sg[k].length = hmac_tv[i].tap[k];
+ sg_init_one(&sg[k], p, hmac_tv[i].tap[k]);
}

crypto_hmac(tfm, hmac_tv[i].key, &klen, sg, hmac_tv[i].np,
@@ -321,9 +314,7 @@
}

p = cipher_tv[i].input;
- sg[0].page = virt_to_page(p);
- sg[0].offset = offset_in_page(p);
- sg[0].length = cipher_tv[i].ilen;
+ sg_init_one(&sg[0], p, cipher_tv[i].ilen);

if (!mode) {
crypto_cipher_set_iv(tfm, cipher_tv[i].iv,
@@ -379,9 +370,7 @@
cipher_tv[i].tap[k]);
temp += cipher_tv[i].tap[k];
p = &xbuf[IDX[k]];
- sg[k].page = virt_to_page (p);
- sg[k].offset = offset_in_page (p);
- sg[k].length = cipher_tv[i].tap[k];
+ sg_init_one(&sk[k], p, cipher_tv[i].tap[k]);
}

if (!mode) {
@@ -538,9 +527,7 @@
for (i = 0; i < NUMVEC; i++) {
for (j = 0; j < VECSIZE; j++)
test_vec[i][j] = ++b;
- sg[i].page = virt_to_page(test_vec[i]);
- sg[i].offset = offset_in_page(test_vec[i]);
- sg[i].length = VECSIZE;
+ sg_init_one(&sg[i], test_vec[i], VECSIZE);
}

seed = SEEDTESTVAL;
Index: linux-sginitone/drivers/md/dm-crypt.c
===================================================================
--- linux-sginitone.orig/drivers/md/dm-crypt.c 2005-08-19 22:40:06.000000000 +0200
+++ linux-sginitone/drivers/md/dm-crypt.c 2005-08-27 01:20:31.000000000 +0200
@@ -16,6 +16,7 @@
#include <linux/workqueue.h>
#include <asm/atomic.h>
#include <asm/scatterlist.h>
+#include <linux/scatterlist.h>
#include <asm/page.h>

#include "dm.h"
@@ -164,9 +165,7 @@
return -ENOMEM;
}

- sg.page = virt_to_page(cc->key);
- sg.offset = offset_in_page(cc->key);
- sg.length = cc->key_size;
+ sg_init_one(&sg, cc->key, cc->key_size);
crypto_digest_digest(hash_tfm, &sg, 1, salt);
crypto_free_tfm(hash_tfm);

@@ -206,14 +205,12 @@

static int crypt_iv_essiv_gen(struct crypt_config *cc, u8 *iv, sector_t sector)
{
- struct scatterlist sg = { NULL, };
+ struct scatterlist sg;

memset(iv, 0, cc->iv_size);
*(u64 *)iv = cpu_to_le64(sector);

- sg.page = virt_to_page(iv);
- sg.offset = offset_in_page(iv);
- sg.length = cc->iv_size;
+ sg_init_one(&sg, iv, cc->iv_size);
crypto_cipher_encrypt((struct crypto_tfm *)cc->iv_gen_private,
&sg, &sg, cc->iv_size);

Index: linux-sginitone/drivers/scsi/arm/scsi.h
===================================================================
--- linux-sginitone.orig/drivers/scsi/arm/scsi.h 2005-08-19 22:40:06.000000000 +0200
+++ linux-sginitone/drivers/scsi/arm/scsi.h 2005-08-27 01:15:07.000000000 +0200
@@ -11,6 +11,7 @@
*/

#define BELT_AND_BRACES
+#include <linux/scatterlist.h>

/*
* The scatter-gather list handling. This contains all
@@ -22,10 +23,7 @@

BUG_ON(bufs + 1 > max);

- sg->page = virt_to_page(SCp->ptr);
- sg->offset = offset_in_page(SCp->ptr);
- sg->length = SCp->this_residual;
-
+ sg_init_one(sg, SCp->ptr, SCp->this_residual);
if (bufs)
memcpy(sg + 1, SCp->buffer + 1,
sizeof(struct scatterlist) * bufs);
Index: linux-sginitone/drivers/scsi/sg.c
===================================================================
--- linux-sginitone.orig/drivers/scsi/sg.c 2005-08-19 22:40:07.000000000 +0200
+++ linux-sginitone/drivers/scsi/sg.c 2005-08-27 01:09:38.000000000 +0200
@@ -49,6 +49,7 @@
#include <linux/seq_file.h>
#include <linux/blkdev.h>
#include <linux/delay.h>
+#include <linux/scatterlist.h>

#include "scsi.h"
#include <scsi/scsi_dbg.h>
@@ -1993,9 +1994,7 @@
if (!p)
break;
}
- sclp->page = virt_to_page(p);
- sclp->offset = offset_in_page(p);
- sclp->length = ret_sz;
+ sg_init_one(sclp, p, ret_sz);

SCSI_LOG_TIMEOUT(5, printk("sg_build_build: k=%d, a=0x%p, len=%d\n",
k, sg_scatg2virt(sclp), ret_sz));
Index: linux-sginitone/drivers/usb/misc/usbtest.c
===================================================================
--- linux-sginitone.orig/drivers/usb/misc/usbtest.c 2005-08-19 22:40:07.000000000 +0200
+++ linux-sginitone/drivers/usb/misc/usbtest.c 2005-08-27 01:20:09.000000000 +0200
@@ -10,6 +10,7 @@
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <asm/scatterlist.h>
+#include <linux/scatterlist.h>

#include <linux/usb.h>

@@ -381,7 +382,6 @@
sg = kmalloc (nents * sizeof *sg, SLAB_KERNEL);
if (!sg)
return NULL;
- memset (sg, 0, nents * sizeof *sg);

for (i = 0; i < nents; i++) {
char *buf;
@@ -394,9 +394,7 @@
memset (buf, 0, size);

/* kmalloc pages are always physically contiguous! */
- sg [i].page = virt_to_page (buf);
- sg [i].offset = offset_in_page (buf);
- sg [i].length = size;
+ sg_init_one(&sg[i], buf, size);

if (vary) {
size += vary;
Index: linux-sginitone/net/ipv6/addrconf.c
===================================================================
--- linux-sginitone.orig/net/ipv6/addrconf.c 2005-08-19 22:40:37.000000000 +0200
+++ linux-sginitone/net/ipv6/addrconf.c 2005-08-27 00:47:56.000000000 +0200
@@ -75,6 +75,7 @@
#include <linux/random.h>
#include <linux/crypto.h>
#include <asm/scatterlist.h>
+#include <linux/scatterlist.h>
#endif

#include <asm/uaccess.h>
@@ -1217,12 +1218,8 @@
struct net_device *dev;
struct scatterlist sg[2];

- sg[0].page = virt_to_page(idev->entropy);
- sg[0].offset = offset_in_page(idev->entropy);
- sg[0].length = 8;
- sg[1].page = virt_to_page(idev->work_eui64);
- sg[1].offset = offset_in_page(idev->work_eui64);
- sg[1].length = 8;
+ sg_init_one(&sg[0], idev->entropy, 8);
+ sg_init_one(&sg[1], idev->work_eui64, 8);

dev = idev->dev;

Index: linux-sginitone/net/sunrpc/auth_gss/gss_krb5_crypto.c
===================================================================
--- linux-sginitone.orig/net/sunrpc/auth_gss/gss_krb5_crypto.c 2005-03-02 08:37:47.000000000 +0100
+++ linux-sginitone/net/sunrpc/auth_gss/gss_krb5_crypto.c 2005-08-27 00:54:09.000000000 +0200
@@ -38,6 +38,7 @@
#include <linux/mm.h>
#include <linux/slab.h>
#include <asm/scatterlist.h>
+#include <linux/scatterlist.h>
#include <linux/crypto.h>
#include <linux/highmem.h>
#include <linux/pagemap.h>
@@ -75,9 +76,7 @@
memcpy(local_iv, iv, crypto_tfm_alg_ivsize(tfm));

memcpy(out, in, length);
- sg[0].page = virt_to_page(out);
- sg[0].offset = offset_in_page(out);
- sg[0].length = length;
+ sg_init_one(&sg[0], out, length);

ret = crypto_cipher_encrypt_iv(tfm, sg, sg, length, local_iv);

@@ -117,9 +116,7 @@
memcpy(local_iv,iv, crypto_tfm_alg_ivsize(tfm));

memcpy(out, in, length);
- sg[0].page = virt_to_page(out);
- sg[0].offset = offset_in_page(out);
- sg[0].length = length;
+ sg_init_one(&sg[0], out, length);

ret = crypto_cipher_decrypt_iv(tfm, sg, sg, length, local_iv);

@@ -132,13 +129,6 @@

EXPORT_SYMBOL(krb5_decrypt);

-static void
-buf_to_sg(struct scatterlist *sg, char *ptr, int len) {
- sg->page = virt_to_page(ptr);
- sg->offset = offset_in_page(ptr);
- sg->length = len;
-}
-
/* checksum the plaintext data and hdrlen bytes of the token header */
s32
make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body,
@@ -167,10 +157,10 @@
goto out;

crypto_digest_init(tfm);
- buf_to_sg(sg, header, hdrlen);
+ sg_init_one(sg, header, hdrlen);
crypto_digest_update(tfm, sg, 1);
if (body->head[0].iov_len) {
- buf_to_sg(sg, body->head[0].iov_base, body->head[0].iov_len);
+ sg_init_one(sg, body->head[0].iov_base, body->head[0].iov_len);
crypto_digest_update(tfm, sg, 1);
}

@@ -195,7 +185,7 @@
} while(len != 0);
}
if (body->tail[0].iov_len) {
- buf_to_sg(sg, body->tail[0].iov_base, body->tail[0].iov_len);
+ sg_init_one(sg, body->tail[0].iov_base, body->tail[0].iov_len);
crypto_digest_update(tfm, sg, 1);
}
crypto_digest_final(tfm, cksum->data);
Index: linux-sginitone/drivers/net/wireless/airo.c
===================================================================
--- linux-sginitone.orig/drivers/net/wireless/airo.c 2005-08-19 22:40:06.000000000 +0200
+++ linux-sginitone/drivers/net/wireless/airo.c 2005-08-27 01:27:51.000000000 +0200
@@ -35,6 +35,7 @@
#include <linux/interrupt.h>
#include <linux/in.h>
#include <linux/bitops.h>
+#include <linux/scatterlist.h>
#include <asm/io.h>
#include <asm/system.h>

@@ -1589,9 +1590,7 @@
aes_counter[12] = (u8)(counter >> 24);
counter++;
memcpy (plain, aes_counter, 16);
- sg[0].page = virt_to_page(plain);
- sg[0].offset = ((long) plain & ~PAGE_MASK);
- sg[0].length = 16;
+ sg_init_one(&sg[0], plain, 16);
crypto_cipher_encrypt(tfm, sg, sg, 16);
cipher = kmap(sg[0].page) + sg[0].offset;
for (j=0; (j<16) && (i< (sizeof(context->coeff)/sizeof(context->coeff[0]))); ) {
Index: linux-sginitone/drivers/scsi/libata-core.c
===================================================================
--- linux-sginitone.orig/drivers/scsi/libata-core.c 2005-08-19 22:40:07.000000000 +0200
+++ linux-sginitone/drivers/scsi/libata-core.c 2005-08-27 01:38:56.000000000 +0200
@@ -38,6 +38,7 @@
#include <linux/completion.h>
#include <linux/suspend.h>
#include <linux/workqueue.h>
+#include <linux/scatterlist.h>
#include <scsi/scsi.h>
#include "scsi.h"
#include "scsi_priv.h"
@@ -2251,19 +2252,12 @@
*/
void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf, unsigned int buflen)
{
- struct scatterlist *sg;
-
qc->flags |= ATA_QCFLAG_SINGLE;

- memset(&qc->sgent, 0, sizeof(qc->sgent));
qc->sg = &qc->sgent;
qc->n_elem = 1;
qc->buf_virt = buf;
-
- sg = qc->sg;
- sg->page = virt_to_page(buf);
- sg->offset = (unsigned long) buf & ~PAGE_MASK;
- sg->length = buflen;
+ sg_init_one(qc->sg, buf, buflen);
}

/**
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-08-27 20:53    [from the cache]
©2003-2011 Jasper Spaans