All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC] drm/exynos: abort commit when framebuffer is removed from plane
@ 2014-06-19 15:13 Rahul Sharma
  2014-07-08 10:03 ` Rahul Sharma
  2014-07-08 15:55 ` Inki Dae
  0 siblings, 2 replies; 5+ messages in thread
From: Rahul Sharma @ 2014-06-19 15:13 UTC (permalink / raw)
  To: dri-devel
  Cc: linux-samsung-soc, inki.dae, kgene.kim, joshi, r.sh.open,
	Rahul Sharma

This situation arises when userspace remove the frambuffer object
and call setmode ioctl.

drm_mode_rmfb --> drm_plane_force_disable --> plane->crtc = NULL;
and
drm_mode_setcrtc --> exynos_plane_commit --> passes plane->crtc to
exynos_drm_crtc_plane_commit which is NULL.

This crashes the system.

Signed-off-by: Rahul Sharma <rahul.sharma@samsung.com>
---
This works fine but I am not confident on the correctness of the
solution.

 drivers/gpu/drm/exynos/exynos_drm_crtc.c |    6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
index 95c9435..da4efe4 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
@@ -165,6 +165,12 @@ static int exynos_drm_crtc_mode_set_commit(struct drm_crtc *crtc, int x, int y,
 		return -EPERM;
 	}
 
+	/* when framebuffer is removed, commit should not proceed. */
+	if(!plane->fb){
+		DRM_ERROR("framebuffer has been removed from plane.\n");
+		return -EFAULT;
+	}
+
 	crtc_w = crtc->primary->fb->width - x;
 	crtc_h = crtc->primary->fb->height - y;
 
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-07-09 14:39 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-19 15:13 [RFC] drm/exynos: abort commit when framebuffer is removed from plane Rahul Sharma
2014-07-08 10:03 ` Rahul Sharma
2014-07-08 15:55 ` Inki Dae
2014-07-09 11:06   ` Rahul Sharma
2014-07-09 14:39     ` Inki Dae

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.