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