CHROMIUM: drm/exynos: remove KDS calls from destroy_fb
authorMandeep Singh Baines <msb@chromium.org>
Thu, 29 Nov 2012 05:18:57 +0000 (21:18 -0800)
committerGerrit <chrome-bot@google.com>
Fri, 30 Nov 2012 22:42:48 +0000 (14:42 -0800)
The reference counting of exynos_fb makes the KDS code redundant.

BUG=chrome-os-partner:15349,chrome-os-partner:14965
TEST=Multiple VT switch, sign in/out.

Signed-off-by: Mandeep Singh Baines <msb@chromium.org>
Change-Id: I4f0b327a8cbc6f5db775b5fc24475305d19e3610
Reviewed-on: https://gerrit.chromium.org/gerrit/38898

drivers/gpu/drm/exynos/exynos_drm_drv.c
drivers/gpu/drm/exynos/exynos_drm_drv.h
drivers/gpu/drm/exynos/exynos_drm_fb.c
drivers/gpu/drm/exynos/exynos_drm_fb.h

index 4053193..8646d99 100644 (file)
@@ -71,12 +71,6 @@ static int exynos_drm_load(struct drm_device *dev, unsigned long flags)
                ret = -ENOMEM;
                goto err_kds;
        }
-       if (kds_callback_init(&private->kds_cb_rm_fb, 0,
-                             exynos_drm_kds_callback_rm_fb) < 0) {
-               DRM_ERROR("kds alloc queue failed.\n");
-               ret = -ENOMEM;
-               goto err_kds_rm_fb;
-       }
 #endif
 
        DRM_INIT_WAITQUEUE(&private->wait_vsync_queue);
@@ -144,8 +138,6 @@ err_vblank:
 err_crtc:
        drm_mode_config_cleanup(dev);
 #ifdef CONFIG_DMA_SHARED_BUFFER_USES_KDS
-       kds_callback_term(&private->kds_cb_rm_fb);
-err_kds_rm_fb:
        kds_callback_term(&private->kds_cb);
 err_kds:
 #endif
index abcee02..8cbeba8 100644 (file)
@@ -148,7 +148,6 @@ struct exynos_drm_private {
 
 #ifdef CONFIG_DMA_SHARED_BUFFER_USES_KDS
        struct kds_callback kds_cb;
-       struct kds_callback kds_cb_rm_fb;
 #endif
 #ifdef CONFIG_DRM_EXYNOS_DEBUG
        struct {
@@ -239,7 +238,6 @@ struct exynos_drm_fb {
 #ifdef CONFIG_DMA_SHARED_BUFFER_USES_KDS
        struct drm_crtc                 *crtc;
        struct kds_resource_set         *kds_res_set;
-       struct kds_resource_set         *kds_res_set_rm_fb;
        struct dma_buf                  *dma_buf;
 #endif
 };
index ebc8412..127e114 100644 (file)
@@ -121,34 +121,6 @@ void exynos_drm_wait_for_vsync(struct drm_device *drm_dev)
        /* TODO: Add wait for vsync for HDMI*/
 }
 
-#ifdef CONFIG_DMA_SHARED_BUFFER_USES_KDS
-void exynos_drm_kds_callback_rm_fb(void *callback_parameter,
-                                  void *callback_extra_parameter)
-{
-       struct drm_framebuffer *fb = callback_parameter;
-       struct exynos_drm_fb *exynos_fb = to_exynos_fb(fb);
-       int i, nr;
-
-       kds_resource_set_release(&exynos_fb->kds_res_set_rm_fb);
-
-       dma_buf_put(exynos_fb->dma_buf);
-
-       if (exynos_drm_fb_unmap(fb))
-               DRM_ERROR("Couldn't unmap buffer\n");
-
-       nr = exynos_drm_format_num_buffers(fb->pixel_format);
-
-       for (i = 0; i < nr; i++) {
-               struct drm_gem_object *obj;
-
-               obj = &exynos_fb->exynos_gem_obj[i]->base;
-               drm_gem_object_unreference_unlocked(obj);
-       }
-
-       kfree(exynos_fb);
-}
-#endif
-
 void exynos_drm_fb_release(struct kref *kref)
 {
        struct exynos_drm_fb *exynos_fb;
@@ -172,21 +144,6 @@ static void exynos_drm_fb_release_work_fn(struct work_struct *work)
 
        drm_framebuffer_cleanup(fb);
 
-#ifdef CONFIG_DMA_SHARED_BUFFER_USES_KDS
-       if (exynos_fb->dma_buf) {
-               struct dma_buf *buf = exynos_fb->dma_buf;
-               unsigned long shared = ~0UL;
-               struct kds_resource *res_list = get_dma_buf_kds_resource(buf);
-
-               /* Waiting for the KDS resource*/
-               kds_async_waitall(&exynos_fb->kds_res_set_rm_fb,
-                                 KDS_FLAG_LOCKED_WAIT, &dev_priv->kds_cb_rm_fb,
-                                 fb, NULL, 1, &shared, &res_list);
-
-               return;
-       }
-#endif
-
        /*
         * We need to wait for non-kds buffers (i.e. some mode-set cases).
         * Otherwise, we risk umapping a buffer that is being scanned-out.
@@ -194,7 +151,10 @@ static void exynos_drm_fb_release_work_fn(struct work_struct *work)
         * a fimd vblank (so is wrong for hdmi).
         * TODO(msb) fix this.
         */
-       exynos_drm_wait_for_vsync(fb->dev);
+#ifdef CONFIG_DMA_SHARED_BUFFER_USES_KDS
+       if (!exynos_fb->dma_buf)
+#endif
+               exynos_drm_wait_for_vsync(fb->dev);
 
        if (exynos_drm_fb_unmap(fb))
                DRM_ERROR("Couldn't unmap buffer\n");
index bcd8200..dc3d73f 100644 (file)
@@ -53,7 +53,4 @@ void exynos_drm_mode_config_init(struct drm_device *dev);
 
 void exynos_drm_wait_for_vsync(struct drm_device *drm_dev);
 
-void exynos_drm_kds_callback_rm_fb(void *callback_parameter,
-                                  void *callback_extra_parameter);
-
 #endif