aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crypto/pcrypt.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c
index c9662e25595e..7153a50bce27 100644
--- a/crypto/pcrypt.c
+++ b/crypto/pcrypt.c
@@ -25,9 +25,11 @@
25#include <linux/module.h> 25#include <linux/module.h>
26#include <linux/slab.h> 26#include <linux/slab.h>
27#include <linux/notifier.h> 27#include <linux/notifier.h>
28#include <linux/kobject.h>
28#include <crypto/pcrypt.h> 29#include <crypto/pcrypt.h>
29 30
30struct pcrypt_instance { 31struct pcrypt_instance {
32 const char *name;
31 struct padata_instance *pinst; 33 struct padata_instance *pinst;
32 struct workqueue_struct *wq; 34 struct workqueue_struct *wq;
33 35
@@ -55,7 +57,7 @@ struct pcrypt_instance {
55 57
56static struct pcrypt_instance pencrypt; 58static struct pcrypt_instance pencrypt;
57static struct pcrypt_instance pdecrypt; 59static struct pcrypt_instance pdecrypt;
58 60static struct kset *pcrypt_kset;
59 61
60struct pcrypt_instance_ctx { 62struct pcrypt_instance_ctx {
61 struct crypto_spawn spawn; 63 struct crypto_spawn spawn;
@@ -429,12 +431,25 @@ static int pcrypt_cpumask_change_notify(struct notifier_block *self,
429 return 0; 431 return 0;
430} 432}
431 433
434static int pcrypt_sysfs_add(struct padata_instance *pinst, const char *name)
435{
436 int ret;
437
438 pinst->kobj.kset = pcrypt_kset;
439 ret = kobject_add(&pinst->kobj, NULL, name);
440 if (!ret)
441 kobject_uevent(&pinst->kobj, KOBJ_ADD);
442
443 return ret;
444}
445
432static int __pcrypt_init_instance(struct pcrypt_instance *pcrypt, 446static int __pcrypt_init_instance(struct pcrypt_instance *pcrypt,
433 const char *name) 447 const char *name)
434{ 448{
435 int ret = -ENOMEM; 449 int ret = -ENOMEM;
436 struct pcrypt_cpumask *mask; 450 struct pcrypt_cpumask *mask;
437 451
452 pcrypt->name = name;
438 pcrypt->wq = create_workqueue(name); 453 pcrypt->wq = create_workqueue(name);
439 if (!pcrypt->wq) 454 if (!pcrypt->wq)
440 goto err; 455 goto err;
@@ -459,7 +474,13 @@ static int __pcrypt_init_instance(struct pcrypt_instance *pcrypt,
459 if (ret) 474 if (ret)
460 goto err_free_cpumask; 475 goto err_free_cpumask;
461 476
477 ret = pcrypt_sysfs_add(pcrypt->pinst, name);
478 if (ret)
479 goto err_unregister_notifier;
480
462 return ret; 481 return ret;
482err_unregister_notifier:
483 padata_unregister_cpumask_notifier(pcrypt->pinst, &pcrypt->nblock);
463err_free_cpumask: 484err_free_cpumask:
464 free_cpumask_var(mask->mask); 485 free_cpumask_var(mask->mask);
465 kfree(mask); 486 kfree(mask);
@@ -473,6 +494,7 @@ err:
473 494
474static void __pcrypt_deinit_instance(struct pcrypt_instance *pcrypt) 495static void __pcrypt_deinit_instance(struct pcrypt_instance *pcrypt)
475{ 496{
497 kobject_put(&pcrypt->pinst->kobj);
476 free_cpumask_var(pcrypt->cb_cpumask->mask); 498 free_cpumask_var(pcrypt->cb_cpumask->mask);
477 kfree(pcrypt->cb_cpumask); 499 kfree(pcrypt->cb_cpumask);
478 500
@@ -491,11 +513,15 @@ static struct crypto_template pcrypt_tmpl = {
491 513
492static int __init pcrypt_init(void) 514static int __init pcrypt_init(void)
493{ 515{
494 int err; 516 int err = -ENOMEM;
517
518 pcrypt_kset = kset_create_and_add("pcrypt", NULL, kernel_kobj);
519 if (!pcrypt_kset)
520 goto err;
495 521
496 err = __pcrypt_init_instance(&pencrypt, "pencrypt"); 522 err = __pcrypt_init_instance(&pencrypt, "pencrypt");
497 if (err) 523 if (err)
498 goto err; 524 goto err_unreg_kset;
499 525
500 err = __pcrypt_init_instance(&pdecrypt, "pdecrypt"); 526 err = __pcrypt_init_instance(&pdecrypt, "pdecrypt");
501 if (err) 527 if (err)
@@ -508,6 +534,8 @@ static int __init pcrypt_init(void)
508 534
509err_deinit_pencrypt: 535err_deinit_pencrypt:
510 __pcrypt_deinit_instance(&pencrypt); 536 __pcrypt_deinit_instance(&pencrypt);
537err_unreg_kset:
538 kset_unregister(pcrypt_kset);
511err: 539err:
512 return err; 540 return err;
513} 541}
@@ -517,6 +545,7 @@ static void __exit pcrypt_exit(void)
517 __pcrypt_deinit_instance(&pencrypt); 545 __pcrypt_deinit_instance(&pencrypt);
518 __pcrypt_deinit_instance(&pdecrypt); 546 __pcrypt_deinit_instance(&pdecrypt);
519 547
548 kset_unregister(pcrypt_kset);
520 crypto_unregister_template(&pcrypt_tmpl); 549 crypto_unregister_template(&pcrypt_tmpl);
521} 550}
522 551