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 /drivers/video/fbdev | |
| 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>
Diffstat (limited to 'drivers/video/fbdev')
| -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 = { |
