Skip to content

Commit

Permalink
pcrypt: Added sysfs interface to pcrypt
Browse files Browse the repository at this point in the history
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@acm.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  • Loading branch information
Dan Kruchinin authored and herbertx committed Jul 19, 2010
1 parent 5e017dc commit a3fb1e3
Showing 1 changed file with 32 additions and 3 deletions.
35 changes: 32 additions & 3 deletions crypto/pcrypt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -473,6 +494,7 @@ static int __pcrypt_init_instance(struct pcrypt_instance *pcrypt,

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);

Expand All @@ -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)
Expand All @@ -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;
}
Expand All @@ -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);
}

Expand Down

0 comments on commit a3fb1e3

Please sign in to comment.