.. | .. |
---|
683 | 683 | .fops = &vtpmx_fops, |
---|
684 | 684 | }; |
---|
685 | 685 | |
---|
686 | | -static int vtpmx_init(void) |
---|
687 | | -{ |
---|
688 | | - return misc_register(&vtpmx_miscdev); |
---|
689 | | -} |
---|
690 | | - |
---|
691 | | -static void vtpmx_cleanup(void) |
---|
692 | | -{ |
---|
693 | | - misc_deregister(&vtpmx_miscdev); |
---|
694 | | -} |
---|
695 | | - |
---|
696 | 686 | static int __init vtpm_module_init(void) |
---|
697 | 687 | { |
---|
698 | 688 | int rc; |
---|
699 | 689 | |
---|
700 | | - rc = vtpmx_init(); |
---|
701 | | - if (rc) { |
---|
702 | | - pr_err("couldn't create vtpmx device\n"); |
---|
703 | | - return rc; |
---|
704 | | - } |
---|
705 | | - |
---|
706 | 690 | workqueue = create_workqueue("tpm-vtpm"); |
---|
707 | 691 | if (!workqueue) { |
---|
708 | 692 | pr_err("couldn't create workqueue\n"); |
---|
709 | | - rc = -ENOMEM; |
---|
710 | | - goto err_vtpmx_cleanup; |
---|
| 693 | + return -ENOMEM; |
---|
711 | 694 | } |
---|
712 | 695 | |
---|
713 | | - return 0; |
---|
714 | | - |
---|
715 | | -err_vtpmx_cleanup: |
---|
716 | | - vtpmx_cleanup(); |
---|
| 696 | + rc = misc_register(&vtpmx_miscdev); |
---|
| 697 | + if (rc) { |
---|
| 698 | + pr_err("couldn't create vtpmx device\n"); |
---|
| 699 | + destroy_workqueue(workqueue); |
---|
| 700 | + } |
---|
717 | 701 | |
---|
718 | 702 | return rc; |
---|
719 | 703 | } |
---|
.. | .. |
---|
721 | 705 | static void __exit vtpm_module_exit(void) |
---|
722 | 706 | { |
---|
723 | 707 | destroy_workqueue(workqueue); |
---|
724 | | - vtpmx_cleanup(); |
---|
| 708 | + misc_deregister(&vtpmx_miscdev); |
---|
725 | 709 | } |
---|
726 | 710 | |
---|
727 | 711 | module_init(vtpm_module_init); |
---|