public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/vc4: Return -EBUSY if there's already a pending flip event.
@ 2016-05-02 19:25 robert.foss
  2016-05-02 19:25 ` robert.foss
  0 siblings, 1 reply; 7+ messages in thread
From: robert.foss @ 2016-05-02 19:25 UTC (permalink / raw)
  To: daniel.vetter, airlied, eric, aniel.vetter, fengguang.wu,
	maarten.lankhorst, julia.lawall, alexander.deucher, daniels,
	derekf, varadgautam
  Cc: dri-devel, linux-kernel, Robert Foss

From: Robert Foss <robert.foss@collabora.com>


As per the docs, atomic_commit should return -EBUSY "if an asycnhronous
update is requested and there is an earlier update pending".


This patch is based on the rockchip patch below:
    http://article.gmane.org/gmane.comp.video.dri.devel/151678

Note: This patch was resent as the original submission wasn't addressed
      to the apparopriate recipients.

Robert Foss (1):
  drm/vc4: Return -EBUSY if there's already a pending flip event.

 drivers/gpu/drm/vc4/vc4_crtc.c |  6 ++++++
 drivers/gpu/drm/vc4/vc4_drv.h  |  1 +
 drivers/gpu/drm/vc4/vc4_kms.c  | 20 ++++++++++++++++++--
 3 files changed, 25 insertions(+), 2 deletions(-)

-- 
2.5.0

^ permalink raw reply	[flat|nested] 7+ messages in thread
* [PATCH] drm/vc4: Return -EBUSY if there's already a pending flip event.
@ 2016-04-26 17:47 robert.foss
  0 siblings, 0 replies; 7+ messages in thread
From: robert.foss @ 2016-04-26 17:47 UTC (permalink / raw)
  Cc: linux-kernel, Robert Foss

From: Robert Foss <robert.foss@collabora.com>

As per the docs, atomic_commit should return -EBUSY "if an asycnhronous
update is requested and there is an earlier update pending".


This patch is based on the rockchip patch below:
    http://article.gmane.org/gmane.comp.video.dri.devel/151678

Signed-off-by: Robert Foss <robert.foss@collabora.com>
---
 drivers/gpu/drm/vc4/vc4_crtc.c |  6 ++++++
 drivers/gpu/drm/vc4/vc4_drv.h  |  1 +
 drivers/gpu/drm/vc4/vc4_kms.c  | 20 ++++++++++++++++++--
 3 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
index 355ee4b..43193a3 100644
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
@@ -802,3 +802,9 @@ struct platform_driver vc4_crtc_driver = {
 		.of_match_table = vc4_crtc_dt_match,
 	},
 };
+
+bool vc4_crtc_has_pending_event(struct drm_crtc *crtc)
+{
+	assert_spin_locked(&crtc->dev->event_lock);
+	return to_vc4_crtc(crtc)->event;
+}
diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
index fa2ad15..54c1fb5 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.h
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
@@ -414,6 +414,7 @@ extern struct platform_driver vc4_crtc_driver;
 int vc4_enable_vblank(struct drm_device *dev, unsigned int crtc_id);
 void vc4_disable_vblank(struct drm_device *dev, unsigned int crtc_id);
 int vc4_crtc_debugfs_regs(struct seq_file *m, void *arg);
+bool vc4_crtc_has_pending_event(struct drm_crtc *crtc);
 
 /* vc4_debugfs.c */
 int vc4_debugfs_init(struct drm_minor *minor);
diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
index 4718ae5..dc157a1e 100644
--- a/drivers/gpu/drm/vc4/vc4_kms.c
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
@@ -107,10 +107,26 @@ static int vc4_atomic_commit(struct drm_device *dev,
 			     bool async)
 {
 	struct vc4_dev *vc4 = to_vc4_dev(dev);
-	int ret;
-	int i;
 	uint64_t wait_seqno = 0;
 	struct vc4_commit *c;
+	struct drm_crtc_state *crtc_state;
+	struct drm_crtc *crtc;
+	unsigned long flags;
+	int i, ret;
+
+	if (async) {
+		for_each_crtc_in_state(state, crtc, crtc_state, i) {
+
+			spin_lock_irqsave(&dev->event_lock, flags);
+
+			if (crtc->state->event || 
+				vc4_crtc_has_pending_event(crtc)) {
+				spin_unlock_irqrestore(&dev->event_lock, flags);
+				return -EBUSY;
+			}
+			spin_unlock_irqrestore(&dev->event_lock, flags);
+		}
+	}
 
 	c = commit_init(state);
 	if (!c)
-- 
2.5.0

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

end of thread, other threads:[~2016-05-03 17:12 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-05-02 19:25 [PATCH] drm/vc4: Return -EBUSY if there's already a pending flip event robert.foss
2016-05-02 19:25 ` robert.foss
2016-05-03  0:57   ` Eric Anholt
2016-05-03 14:20     ` Robert Foss
2016-05-03 17:11       ` Eric Anholt
2016-05-03  7:11   ` Maarten Lankhorst
  -- strict thread matches above, loose matches on Subject: below --
2016-04-26 17:47 robert.foss

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox