[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20100714143415.3770997d@leibniz>
Date: Wed, 14 Jul 2010 14:34:15 +0400
From: Dan Kruchinin <dkruchinin@....org>
To: Steffen Klassert <steffen.klassert@...unet.com>,
Herbert Xu <herbert@...dor.apana.org.au>
Cc: Andrew Morton <akpm@...ux-foundation.org>,
linux-crypto@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: [PATCH 3/3] Added sysfs interface to pcrypt.
Added sysfs interface to pcrypt. Now pcrypt subsystem creates two
sysfs directories with corresponding padata sysfs objects:
/sys/kernel/pcrypt/[pencrypt|pdecrypt]
Signed-off-by: Dan Kruchinin <dkruchinin@....org>
---
crypto/pcrypt.c | 35 ++++++++++++++++++++++++++++++++---
1 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c
index c9662e2..7153a50 100644
--- a/crypto/pcrypt.c
+++ b/crypto/pcrypt.c
@@ -25,9 +25,11 @@
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/notifier.h>
+#include <linux/kobject.h>
#include <crypto/pcrypt.h>
struct pcrypt_instance {
+ const char *name;
struct padata_instance *pinst;
struct workqueue_struct *wq;
@@ -55,7 +57,7 @@ struct pcrypt_instance {
static struct pcrypt_instance pencrypt;
static struct pcrypt_instance pdecrypt;
-
+static struct kset *pcrypt_kset;
struct pcrypt_instance_ctx {
struct crypto_spawn spawn;
@@ -429,12 +431,25 @@ static int pcrypt_cpumask_change_notify(struct notifier_block *self,
return 0;
}
+static int pcrypt_sysfs_add(struct padata_instance *pinst, const char *name)
+{
+ int ret;
+
+ pinst->kobj.kset = pcrypt_kset;
+ ret = kobject_add(&pinst->kobj, NULL, name);
+ if (!ret)
+ kobject_uevent(&pinst->kobj, KOBJ_ADD);
+
+ return ret;
+}
+
static int __pcrypt_init_instance(struct pcrypt_instance *pcrypt,
const char *name)
{
int ret = -ENOMEM;
struct pcrypt_cpumask *mask;
+ pcrypt->name = name;
pcrypt->wq = create_workqueue(name);
if (!pcrypt->wq)
goto err;
@@ -459,7 +474,13 @@ static int __pcrypt_init_instance(struct pcrypt_instance *pcrypt,
if (ret)
goto err_free_cpumask;
+ ret = pcrypt_sysfs_add(pcrypt->pinst, name);
+ if (ret)
+ goto err_unregister_notifier;
+
return ret;
+err_unregister_notifier:
+ padata_unregister_cpumask_notifier(pcrypt->pinst, &pcrypt->nblock);
err_free_cpumask:
free_cpumask_var(mask->mask);
kfree(mask);
@@ -473,6 +494,7 @@ err:
static void __pcrypt_deinit_instance(struct pcrypt_instance *pcrypt)
{
+ kobject_put(&pcrypt->pinst->kobj);
free_cpumask_var(pcrypt->cb_cpumask->mask);
kfree(pcrypt->cb_cpumask);
@@ -491,11 +513,15 @@ static struct crypto_template pcrypt_tmpl = {
static int __init pcrypt_init(void)
{
- int err;
+ int err = -ENOMEM;
+
+ pcrypt_kset = kset_create_and_add("pcrypt", NULL, kernel_kobj);
+ if (!pcrypt_kset)
+ goto err;
err = __pcrypt_init_instance(&pencrypt, "pencrypt");
if (err)
- goto err;
+ goto err_unreg_kset;
err = __pcrypt_init_instance(&pdecrypt, "pdecrypt");
if (err)
@@ -508,6 +534,8 @@ static int __init pcrypt_init(void)
err_deinit_pencrypt:
__pcrypt_deinit_instance(&pencrypt);
+err_unreg_kset:
+ kset_unregister(pcrypt_kset);
err:
return err;
}
@@ -517,6 +545,7 @@ static void __exit pcrypt_exit(void)
__pcrypt_deinit_instance(&pencrypt);
__pcrypt_deinit_instance(&pdecrypt);
+ kset_unregister(pcrypt_kset);
crypto_unregister_template(&pcrypt_tmpl);
}
--
1.7.1
--
W.B.R.
Dan Kruchinin
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists