diff options
author | Bhaktipriya Shridhar <bhaktipriya96@gmail.com> | 2016-07-02 04:39:23 -0400 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2016-08-11 10:54:56 -0400 |
commit | 71668292151efc7ca867e6b6ac0cb603f1d59e42 (patch) | |
tree | b9bbf15d9ee6c851beb9b191aa69e5a6914a8543 | |
parent | b59ac9a3dbcf22c38b0bb958a62bf6b787a449a8 (diff) |
fbdev: Remove deprecated create_singlethread_workqueue
The workqueue "esd_wq" has only a single workitem(&md->esd_work)
and hence doesn't require ordering. Also, it is not being used on a
memory reclaim path. Hence, the singlethreaded workqueue has been
replaced with the use of system_wq.
System workqueues have been able to handle high level of concurrency
for a long time now and hence it's not required to have a singlethreaded
workqueue just to gain concurrency. Unlike a dedicated per-cpu workqueue
created with create_singlethread_workqueue(), system_wq allows multiple
work items to overlap executions even on the same CPU; however, a
per-cpu workqueue doesn't have any CPU locality or global ordering
guarantee unless the target CPU is explicitly specified and thus the
increase of local concurrency shouldn't make any difference.
mipid_esd_stop_check () calls cancel_delayed_work() in mipid_cleanup()
to ensure that there are no pending tasks while disconnecting the driver.
Signed-off-by: Bhaktipriya Shridhar <bhaktipriya96@gmail.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r-- | drivers/video/fbdev/omap/lcd_mipid.c | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/drivers/video/fbdev/omap/lcd_mipid.c b/drivers/video/fbdev/omap/lcd_mipid.c index 0e4cee9a8d79..c81f150589e1 100644 --- a/drivers/video/fbdev/omap/lcd_mipid.c +++ b/drivers/video/fbdev/omap/lcd_mipid.c | |||
@@ -60,7 +60,6 @@ struct mipid_device { | |||
60 | struct mutex mutex; | 60 | struct mutex mutex; |
61 | struct lcd_panel panel; | 61 | struct lcd_panel panel; |
62 | 62 | ||
63 | struct workqueue_struct *esd_wq; | ||
64 | struct delayed_work esd_work; | 63 | struct delayed_work esd_work; |
65 | void (*esd_check)(struct mipid_device *m); | 64 | void (*esd_check)(struct mipid_device *m); |
66 | }; | 65 | }; |
@@ -390,7 +389,7 @@ static void ls041y3_esd_check(struct mipid_device *md) | |||
390 | static void mipid_esd_start_check(struct mipid_device *md) | 389 | static void mipid_esd_start_check(struct mipid_device *md) |
391 | { | 390 | { |
392 | if (md->esd_check != NULL) | 391 | if (md->esd_check != NULL) |
393 | queue_delayed_work(md->esd_wq, &md->esd_work, | 392 | schedule_delayed_work(&md->esd_work, |
394 | MIPID_ESD_CHECK_PERIOD); | 393 | MIPID_ESD_CHECK_PERIOD); |
395 | } | 394 | } |
396 | 395 | ||
@@ -476,11 +475,6 @@ static int mipid_init(struct lcd_panel *panel, | |||
476 | struct mipid_device *md = to_mipid_device(panel); | 475 | struct mipid_device *md = to_mipid_device(panel); |
477 | 476 | ||
478 | md->fbdev = fbdev; | 477 | md->fbdev = fbdev; |
479 | md->esd_wq = create_singlethread_workqueue("mipid_esd"); | ||
480 | if (md->esd_wq == NULL) { | ||
481 | dev_err(&md->spi->dev, "can't create ESD workqueue\n"); | ||
482 | return -ENOMEM; | ||
483 | } | ||
484 | INIT_DELAYED_WORK(&md->esd_work, mipid_esd_work); | 478 | INIT_DELAYED_WORK(&md->esd_work, mipid_esd_work); |
485 | mutex_init(&md->mutex); | 479 | mutex_init(&md->mutex); |
486 | 480 | ||
@@ -500,7 +494,6 @@ static void mipid_cleanup(struct lcd_panel *panel) | |||
500 | 494 | ||
501 | if (md->enabled) | 495 | if (md->enabled) |
502 | mipid_esd_stop_check(md); | 496 | mipid_esd_stop_check(md); |
503 | destroy_workqueue(md->esd_wq); | ||
504 | } | 497 | } |
505 | 498 | ||
506 | static struct lcd_panel mipid_panel = { | 499 | static struct lcd_panel mipid_panel = { |