Please ignore this mail. Thanks, Bhaktipriya On Tue, Jun 28, 2016 at 10:53 PM, Bhaktipriya Shridhar <bhaktipriya96@xxxxxxxxx> wrote: > The workqueue "workqueue" has only a single workitem(&ddata->ulps_work) per > panel_drv_data 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. > > Occurrences of the label err_bl have also been removed because with the > usage of system_wq, calls to destroy_workqueue() have been dropped, > which makes the label unnecessary. > > Workitem is sync cancelled in dsicm_cancel_ulps_work() which is called > in dsicm_remove() to ensure that there are no workitems pending when the > driver is disconnected. > > Signed-off-by: Bhaktipriya Shridhar <bhaktipriya96@xxxxxxxxx> > --- > drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c | 15 ++------------- > 1 file changed, 2 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c > index 2b11807..e614d5b 100644 > --- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c > +++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c > @@ -76,8 +76,6 @@ struct panel_drv_data { > > bool intro_printed; > > - struct workqueue_struct *workqueue; > - > bool ulps_enabled; > unsigned ulps_timeout; > struct delayed_work ulps_work; > @@ -233,7 +231,7 @@ static int dsicm_set_update_window(struct panel_drv_data *ddata, > static void dsicm_queue_ulps_work(struct panel_drv_data *ddata) > { > if (ddata->ulps_timeout > 0) > - queue_delayed_work(ddata->workqueue, &ddata->ulps_work, > + schedule_delayed_work(&ddata->ulps_work, > msecs_to_jiffies(ddata->ulps_timeout)); > } > > @@ -1245,11 +1243,6 @@ static int dsicm_probe(struct platform_device *pdev) > dev_dbg(dev, "Using GPIO TE\n"); > } > > - ddata->workqueue = create_singlethread_workqueue("dsicm_wq"); > - if (ddata->workqueue == NULL) { > - dev_err(dev, "can't create workqueue\n"); > - return -ENOMEM; > - } > INIT_DELAYED_WORK(&ddata->ulps_work, dsicm_ulps_work); > > dsicm_hw_reset(ddata); > @@ -1263,7 +1256,7 @@ static int dsicm_probe(struct platform_device *pdev) > dev, ddata, &dsicm_bl_ops, &props); > if (IS_ERR(bldev)) { > r = PTR_ERR(bldev); > - goto err_bl; > + goto err_reg; > } > > ddata->bldev = bldev; > @@ -1286,8 +1279,6 @@ static int dsicm_probe(struct platform_device *pdev) > err_sysfs_create: > if (bldev != NULL) > backlight_device_unregister(bldev); > -err_bl: > - destroy_workqueue(ddata->workqueue); > err_reg: > return r; > } > @@ -1317,8 +1308,6 @@ static int __exit dsicm_remove(struct platform_device *pdev) > omap_dss_put_device(ddata->in); > > dsicm_cancel_ulps_work(ddata); > - destroy_workqueue(ddata->workqueue); > - > /* reset, to be sure that the panel is in a valid state */ > dsicm_hw_reset(ddata); > > -- > 2.1.4 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel