From cb2eba21751306e5f50c4ea2f8e63cfabcfb63cb Mon Sep 17 00:00:00 2001 From: Dmitry Torokhov Date: Tue, 26 Jul 2011 16:08:56 -0700 Subject: [PATCH] --- yaml --- r: 260433 b: refs/heads/master c: beda94da38d2a3bf7f40c01f0a8e6d86067c91cc h: refs/heads/master i: 260431: 30fc3a3e8c9f941cb1c352a39647b17abe53b279 v: v3 --- [refs] | 2 +- trunk/drivers/misc/vmw_balloon.c | 31 +++++++++++-------------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/[refs] b/[refs] index 1cdb61965e3a..2023ce10d171 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f7b1371eb6b3ff72e38de220663b22f7cc9df296 +refs/heads/master: beda94da38d2a3bf7f40c01f0a8e6d86067c91cc diff --git a/trunk/drivers/misc/vmw_balloon.c b/trunk/drivers/misc/vmw_balloon.c index 6df5a55da110..053d36caf955 100644 --- a/trunk/drivers/misc/vmw_balloon.c +++ b/trunk/drivers/misc/vmw_balloon.c @@ -45,7 +45,7 @@ MODULE_AUTHOR("VMware, Inc."); MODULE_DESCRIPTION("VMware Memory Control (Balloon) Driver"); -MODULE_VERSION("1.2.1.2-k"); +MODULE_VERSION("1.2.1.3-k"); MODULE_ALIAS("dmi:*:svnVMware*:*"); MODULE_ALIAS("vmware_vmmemctl"); MODULE_LICENSE("GPL"); @@ -215,7 +215,6 @@ struct vmballoon { }; static struct vmballoon balloon; -static struct workqueue_struct *vmballoon_wq; /* * Send "start" command to the host, communicating supported version @@ -674,7 +673,12 @@ static void vmballoon_work(struct work_struct *work) vmballoon_deflate(b); } - queue_delayed_work(vmballoon_wq, dwork, round_jiffies_relative(HZ)); + /* + * We are using a freezable workqueue so that balloon operations are + * stopped while the system transitions to/from sleep/hibernation. + */ + queue_delayed_work(system_freezable_wq, + dwork, round_jiffies_relative(HZ)); } /* @@ -785,12 +789,6 @@ static int __init vmballoon_init(void) if (x86_hyper != &x86_hyper_vmware) return -ENODEV; - vmballoon_wq = create_freezable_workqueue("vmmemctl"); - if (!vmballoon_wq) { - pr_err("failed to create workqueue\n"); - return -ENOMEM; - } - INIT_LIST_HEAD(&balloon.pages); INIT_LIST_HEAD(&balloon.refused_pages); @@ -805,34 +803,27 @@ static int __init vmballoon_init(void) */ if (!vmballoon_send_start(&balloon)) { pr_err("failed to send start command to the host\n"); - error = -EIO; - goto fail; + return -EIO; } if (!vmballoon_send_guest_id(&balloon)) { pr_err("failed to send guest ID to the host\n"); - error = -EIO; - goto fail; + return -EIO; } error = vmballoon_debugfs_init(&balloon); if (error) - goto fail; + return error; - queue_delayed_work(vmballoon_wq, &balloon.dwork, 0); + queue_delayed_work(system_freezable_wq, &balloon.dwork, 0); return 0; - -fail: - destroy_workqueue(vmballoon_wq); - return error; } module_init(vmballoon_init); static void __exit vmballoon_exit(void) { cancel_delayed_work_sync(&balloon.dwork); - destroy_workqueue(vmballoon_wq); vmballoon_debugfs_exit(&balloon);