diff options
| author | Dmitry Torokhov <dtor@vmware.com> | 2011-07-26 19:08:56 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-26 19:49:45 -0400 |
| commit | beda94da38d2a3bf7f40c01f0a8e6d86067c91cc (patch) | |
| tree | 8ba71064abc8d9ee10370ac40d66a1189dba1423 /drivers/misc | |
| parent | f7b1371eb6b3ff72e38de220663b22f7cc9df296 (diff) | |
Vmware balloon: switch to using sysem-wide freezable workqueue
With the arrival of concurrency-managed workqueues there is no need for
our driver to use dedicated workqueue; system-wide one should suffice just
fine.
[akpm@linux-foundation.org: fix comment layout & grammar]
Signed-off-by: Dmitry Torokhov <dtor@vmware.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/misc')
| -rw-r--r-- | drivers/misc/vmw_balloon.c | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c index 6df5a55da110..053d36caf955 100644 --- a/drivers/misc/vmw_balloon.c +++ b/drivers/misc/vmw_balloon.c | |||
| @@ -45,7 +45,7 @@ | |||
| 45 | 45 | ||
| 46 | MODULE_AUTHOR("VMware, Inc."); | 46 | MODULE_AUTHOR("VMware, Inc."); |
| 47 | MODULE_DESCRIPTION("VMware Memory Control (Balloon) Driver"); | 47 | MODULE_DESCRIPTION("VMware Memory Control (Balloon) Driver"); |
| 48 | MODULE_VERSION("1.2.1.2-k"); | 48 | MODULE_VERSION("1.2.1.3-k"); |
| 49 | MODULE_ALIAS("dmi:*:svnVMware*:*"); | 49 | MODULE_ALIAS("dmi:*:svnVMware*:*"); |
| 50 | MODULE_ALIAS("vmware_vmmemctl"); | 50 | MODULE_ALIAS("vmware_vmmemctl"); |
| 51 | MODULE_LICENSE("GPL"); | 51 | MODULE_LICENSE("GPL"); |
| @@ -215,7 +215,6 @@ struct vmballoon { | |||
| 215 | }; | 215 | }; |
| 216 | 216 | ||
| 217 | static struct vmballoon balloon; | 217 | static struct vmballoon balloon; |
| 218 | static struct workqueue_struct *vmballoon_wq; | ||
| 219 | 218 | ||
| 220 | /* | 219 | /* |
| 221 | * Send "start" command to the host, communicating supported version | 220 | * Send "start" command to the host, communicating supported version |
| @@ -674,7 +673,12 @@ static void vmballoon_work(struct work_struct *work) | |||
| 674 | vmballoon_deflate(b); | 673 | vmballoon_deflate(b); |
| 675 | } | 674 | } |
| 676 | 675 | ||
| 677 | queue_delayed_work(vmballoon_wq, dwork, round_jiffies_relative(HZ)); | 676 | /* |
| 677 | * We are using a freezable workqueue so that balloon operations are | ||
| 678 | * stopped while the system transitions to/from sleep/hibernation. | ||
| 679 | */ | ||
| 680 | queue_delayed_work(system_freezable_wq, | ||
| 681 | dwork, round_jiffies_relative(HZ)); | ||
| 678 | } | 682 | } |
| 679 | 683 | ||
| 680 | /* | 684 | /* |
| @@ -785,12 +789,6 @@ static int __init vmballoon_init(void) | |||
| 785 | if (x86_hyper != &x86_hyper_vmware) | 789 | if (x86_hyper != &x86_hyper_vmware) |
| 786 | return -ENODEV; | 790 | return -ENODEV; |
| 787 | 791 | ||
| 788 | vmballoon_wq = create_freezable_workqueue("vmmemctl"); | ||
| 789 | if (!vmballoon_wq) { | ||
| 790 | pr_err("failed to create workqueue\n"); | ||
| 791 | return -ENOMEM; | ||
| 792 | } | ||
| 793 | |||
| 794 | INIT_LIST_HEAD(&balloon.pages); | 792 | INIT_LIST_HEAD(&balloon.pages); |
| 795 | INIT_LIST_HEAD(&balloon.refused_pages); | 793 | INIT_LIST_HEAD(&balloon.refused_pages); |
| 796 | 794 | ||
| @@ -805,34 +803,27 @@ static int __init vmballoon_init(void) | |||
| 805 | */ | 803 | */ |
| 806 | if (!vmballoon_send_start(&balloon)) { | 804 | if (!vmballoon_send_start(&balloon)) { |
| 807 | pr_err("failed to send start command to the host\n"); | 805 | pr_err("failed to send start command to the host\n"); |
| 808 | error = -EIO; | 806 | return -EIO; |
| 809 | goto fail; | ||
| 810 | } | 807 | } |
| 811 | 808 | ||
| 812 | if (!vmballoon_send_guest_id(&balloon)) { | 809 | if (!vmballoon_send_guest_id(&balloon)) { |
| 813 | pr_err("failed to send guest ID to the host\n"); | 810 | pr_err("failed to send guest ID to the host\n"); |
| 814 | error = -EIO; | 811 | return -EIO; |
| 815 | goto fail; | ||
| 816 | } | 812 | } |
| 817 | 813 | ||
| 818 | error = vmballoon_debugfs_init(&balloon); | 814 | error = vmballoon_debugfs_init(&balloon); |
| 819 | if (error) | 815 | if (error) |
| 820 | goto fail; | 816 | return error; |
| 821 | 817 | ||
| 822 | queue_delayed_work(vmballoon_wq, &balloon.dwork, 0); | 818 | queue_delayed_work(system_freezable_wq, &balloon.dwork, 0); |
| 823 | 819 | ||
| 824 | return 0; | 820 | return 0; |
| 825 | |||
| 826 | fail: | ||
| 827 | destroy_workqueue(vmballoon_wq); | ||
| 828 | return error; | ||
| 829 | } | 821 | } |
| 830 | module_init(vmballoon_init); | 822 | module_init(vmballoon_init); |
| 831 | 823 | ||
| 832 | static void __exit vmballoon_exit(void) | 824 | static void __exit vmballoon_exit(void) |
| 833 | { | 825 | { |
| 834 | cancel_delayed_work_sync(&balloon.dwork); | 826 | cancel_delayed_work_sync(&balloon.dwork); |
| 835 | destroy_workqueue(vmballoon_wq); | ||
| 836 | 827 | ||
| 837 | vmballoon_debugfs_exit(&balloon); | 828 | vmballoon_debugfs_exit(&balloon); |
| 838 | 829 | ||
