From: Amitoj Kaur Chawla Date: Sun, 28 Feb 2016 12:56:37 +0000 (+0530) Subject: staging: unisys: visornic: Remove create_singlethread_workqueue() X-Git-Tag: v4.14-rc1~3621^2~411 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ce388d7e65b962f70b5a4f62ccf4ffaf05804eff;p=platform%2Fkernel%2Flinux-rpi.git staging: unisys: visornic: Remove create_singlethread_workqueue() With concurrency managed workqueues, use of dedicated workqueues can be replaced by using system_wq. Drop visornic_timeout_reset_workqueue by using system_wq. Since there is only one work item per devdata and different devdatas do not need to be ordered, increase of concurrency level by switching to system_wq should not break anything. cancel_work_sync() is used to ensure that work is not pending or executing on any CPU. Signed-off-by: Amitoj Kaur Chawla Acked-by: Tejun Heo Tested-by: David Kershner Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/unisys/visornic/visornic_main.c b/drivers/staging/unisys/visornic/visornic_main.c index df4f688..6749c4e 100644 --- a/drivers/staging/unisys/visornic/visornic_main.c +++ b/drivers/staging/unisys/visornic/visornic_main.c @@ -59,8 +59,6 @@ static const struct file_operations debugfs_enable_ints_fops = { .write = enable_ints_write, }; -static struct workqueue_struct *visornic_timeout_reset_workqueue; - /* GUIDS for director channel type supported by this driver. */ static struct visor_channeltype_descriptor visornic_channel_types[] = { /* Note that the only channel type we expect to be reported by the @@ -1070,7 +1068,7 @@ visornic_xmit_timeout(struct net_device *netdev) spin_unlock_irqrestore(&devdata->priv_lock, flags); return; } - queue_work(visornic_timeout_reset_workqueue, &devdata->timeout_reset); + schedule_work(&devdata->timeout_reset); spin_unlock_irqrestore(&devdata->priv_lock, flags); } @@ -1998,7 +1996,7 @@ static void visornic_remove(struct visor_device *dev) } /* going_away prevents new items being added to the workqueues */ - flush_workqueue(visornic_timeout_reset_workqueue); + cancel_work_sync(&devdata->timeout_reset); debugfs_remove_recursive(devdata->eth_debugfs_dir); @@ -2117,21 +2115,10 @@ static int visornic_init(void) if (!ret) goto cleanup_debugfs; - /* create workqueue for tx timeout reset */ - visornic_timeout_reset_workqueue = - create_singlethread_workqueue("visornic_timeout_reset"); - if (!visornic_timeout_reset_workqueue) - goto cleanup_workqueue; - err = visorbus_register_visor_driver(&visornic_driver); if (!err) return 0; -cleanup_workqueue: - if (visornic_timeout_reset_workqueue) { - flush_workqueue(visornic_timeout_reset_workqueue); - destroy_workqueue(visornic_timeout_reset_workqueue); - } cleanup_debugfs: debugfs_remove_recursive(visornic_debugfs_dir); @@ -2147,10 +2134,6 @@ static void visornic_cleanup(void) { visorbus_unregister_visor_driver(&visornic_driver); - if (visornic_timeout_reset_workqueue) { - flush_workqueue(visornic_timeout_reset_workqueue); - destroy_workqueue(visornic_timeout_reset_workqueue); - } debugfs_remove_recursive(visornic_debugfs_dir); }