Vmware balloon: switch to using sysem-wide freezable workqueue
Subsystems (2)
PATCH 1/1 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.
Signed-off-by Dmitry Torokhov <[email protected]>
--- drivers/misc/vmw_balloon.c | 31 +++++++++++-------------------- 1 files changed, 11 insertions(+), 20 deletions(-)
drivers/misc/vmw_balloon.c +11 -20
@@ -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 freezable workqueue so that balloon operations are +* stopped while 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);
Signature · 1 line
1.7.4.1
Quoted 5 lines · Dmitry Torokhov
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.
Signed-off-by Dmitry Torokhov <[email protected]>
Acked-by Tejun Heo <[email protected]>
Thank you.
Signature · 1 line
tejun