From: Mandeep Singh Baines Date: Thu, 29 Nov 2012 05:18:57 +0000 (-0800) Subject: CHROMIUM: drm/exynos: remove KDS calls from destroy_fb X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=1cc84420cfd8b3e98d23314213282ad70a2b9b55;p=people%2Faperard%2Flinux-chromebook.git CHROMIUM: drm/exynos: remove KDS calls from destroy_fb 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 Change-Id: I4f0b327a8cbc6f5db775b5fc24475305d19e3610 Reviewed-on: https://gerrit.chromium.org/gerrit/38898 --- diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 4053193591563..8646d993925ca 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c @@ -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 diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h b/drivers/gpu/drm/exynos/exynos_drm_drv.h index abcee02564063..8cbeba8447b0e 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.h +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h @@ -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 }; diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c index ebc8412a4893b..127e1148a9084 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fb.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c @@ -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"); diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.h b/drivers/gpu/drm/exynos/exynos_drm_fb.h index bcd8200ac9b55..dc3d73f6cd594 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fb.h +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.h @@ -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