aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2009-07-07 12:30:33 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2009-07-07 12:30:33 +0800
commitf2ac72e8268d9559c3114d5a22679f91f80a2238 (patch)
treee52b3b65b62b48f8a77c9a522d9e55f04bcf6259
parentcrypto: ansi_prng - alloc cipher just in init (diff)
downloadlinux-dev-f2ac72e8268d9559c3114d5a22679f91f80a2238.tar.xz
linux-dev-f2ac72e8268d9559c3114d5a22679f91f80a2238.zip
crypto: api - Add new template create function
This patch introduces the template->create function intended to replace the existing alloc function. The intention is for create to handle the registration directly, whereas currently the caller of alloc has to handle the registration. This allows type-specific code to be run prior to registration. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--crypto/algboss.c5
-rw-r--r--include/crypto/algapi.h1
2 files changed, 6 insertions, 0 deletions
diff --git a/crypto/algboss.c b/crypto/algboss.c
index 9908dd830c26..412241ce4cfa 100644
--- a/crypto/algboss.c
+++ b/crypto/algboss.c
@@ -68,6 +68,11 @@ static int cryptomgr_probe(void *data)
goto err;
do {
+ if (tmpl->create) {
+ err = tmpl->create(tmpl, param->tb);
+ continue;
+ }
+
inst = tmpl->alloc(param->tb);
if (IS_ERR(inst))
err = PTR_ERR(inst);
diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h
index 010545436efa..ce010a346420 100644
--- a/include/crypto/algapi.h
+++ b/include/crypto/algapi.h
@@ -52,6 +52,7 @@ struct crypto_template {
struct crypto_instance *(*alloc)(struct rtattr **tb);
void (*free)(struct crypto_instance *inst);
+ int (*create)(struct crypto_template *tmpl, struct rtattr **tb);
char name[CRYPTO_MAX_ALG_NAME];
};