drm/tilcdc: Flush flip-work workqueue before drm_flip_work_cleanup()
authorJyri Sarha <jsarha@ti.com>
Tue, 6 Sep 2016 19:55:33 +0000 (22:55 +0300)
committerJyri Sarha <jsarha@ti.com>
Wed, 7 Sep 2016 12:54:41 +0000 (15:54 +0300)
Flush flip-work workqueue before drm_flip_work_cleanup(). It causes a
nasty warning if there is unfinished flip-work in the queue when
drm_flip_work_cleanup() is called. The flush_workqueue() has to be
called before drm_crtc_cleanup() for unref_worker() to be able to do
its job.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/tilcdc/tilcdc_crtc.c

index 5579d97b08e603f334fd5117f185fd4833a9858a..41ce411a64f90255c346cd638bf62e65b47767c5 100644 (file)
@@ -18,6 +18,7 @@
 #include "drm_flip_work.h"
 #include <drm/drm_plane_helper.h>
 #include <drm/drm_atomic_helper.h>
+#include <linux/workqueue.h>
 
 #include "tilcdc_drv.h"
 #include "tilcdc_regs.h"
@@ -227,9 +228,12 @@ static bool tilcdc_crtc_is_on(struct drm_crtc *crtc)
 static void tilcdc_crtc_destroy(struct drm_crtc *crtc)
 {
        struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
+       struct tilcdc_drm_private *priv = crtc->dev->dev_private;
 
        tilcdc_crtc_disable(crtc);
 
+       flush_workqueue(priv->wq);
+
        of_node_put(crtc->port);
        drm_crtc_cleanup(crtc);
        drm_flip_work_cleanup(&tilcdc_crtc->unref_work);