From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH] drm/vc4: Return -EBUSY if there's already a pending flip event. Date: Tue, 3 May 2016 09:11:34 +0200 Message-ID: <927f08b1-e644-86d8-1743-dd2e615c9a2a@linux.intel.com> References: <1462217122-13071-1-git-send-email-robert.foss@collabora.com> <1462217122-13071-2-git-send-email-robert.foss@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 844386E575 for ; Tue, 3 May 2016 07:11:38 +0000 (UTC) In-Reply-To: <1462217122-13071-2-git-send-email-robert.foss@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: robert.foss@collabora.com, daniel.vetter@ffwll.ch, airlied@linux.ie, eric@anholt.netaniel.vetter@ffwll.ch, fengguang.wu@intel.com, julia.lawall@lip6.fr, alexander.deucher@amd.com, daniels@collabora.com, derekf@osg.samsung.com, varadgautam@gmail.com Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T3AgMDItMDUtMTYgb20gMjE6MjUgc2NocmVlZiByb2JlcnQuZm9zc0Bjb2xsYWJvcmEuY29tOgo+ IEZyb206IFJvYmVydCBGb3NzIDxyb2JlcnQuZm9zc0Bjb2xsYWJvcmEuY29tPgo+Cj4gQXMgcGVy IHRoZSBkb2NzLCBhdG9taWNfY29tbWl0IHNob3VsZCByZXR1cm4gLUVCVVNZICJpZiBhbiBhc3lj bmhyb25vdXMKPiB1cGRhdGUgaXMgcmVxdWVzdGVkIGFuZCB0aGVyZSBpcyBhbiBlYXJsaWVyIHVw ZGF0ZSBwZW5kaW5nIi4KPgo+IFNpZ25lZC1vZmYtYnk6IFJvYmVydCBGb3NzIDxyb2JlcnQuZm9z c0Bjb2xsYWJvcmEuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMg fCAgNiArKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmggIHwgIDEgKwo+ICBk cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9rbXMuYyAgfCAyMCArKysrKysrKysrKysrKysrKystLQo+ ICAzIGZpbGVzIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfY3J0Yy5jCj4gaW5kZXggMzU1ZWU0Yi4uNDMxOTNhMyAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9jcnRjLmMKPiBAQCAtODAyLDMgKzgwMiw5IEBAIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgdmM0X2NydGNfZHJpdmVyID0gewo+ICAJCS5vZl9tYXRjaF90YWJsZSA9IHZjNF9jcnRjX2R0 X21hdGNoLAo+ICAJfSwKPiAgfTsKPiArCj4gK2Jvb2wgdmM0X2NydGNfaGFzX3BlbmRpbmdfZXZl bnQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmNy dGMtPmRldi0+ZXZlbnRfbG9jayk7Cj4gKwlyZXR1cm4gdG9fdmM0X2NydGMoY3J0YyktPmV2ZW50 Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKPiBpbmRleCBmYTJhZDE1Li41NGMxZmI1IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfZHJ2LmgKPiBAQCAtNDE0LDYgKzQxNCw3IEBAIGV4dGVybiBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIHZjNF9jcnRjX2RyaXZlcjsKPiAgaW50IHZjNF9lbmFibGVfdmJsYW5r KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjcnRjX2lkKTsKPiAgdm9pZCB2 YzRfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNy dGNfaWQpOwo+ICBpbnQgdmM0X2NydGNfZGVidWdmc19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqYXJnKTsKPiArYm9vbCB2YzRfY3J0Y19oYXNfcGVuZGluZ19ldmVudChzdHJ1Y3QgZHJt X2NydGMgKmNydGMpOwo+ICAKPiAgLyogdmM0X2RlYnVnZnMuYyAqLwo+ICBpbnQgdmM0X2RlYnVn ZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS92YzQvdmM0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMKPiBp bmRleCA0NzE4YWU1Li5kYzE1N2ExZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9rbXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jCj4gQEAgLTEw NywxMCArMTA3LDI2IEBAIHN0YXRpYyBpbnQgdmM0X2F0b21pY19jb21taXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiAgCQkJICAgICBib29sIGFzeW5jKQo+ICB7Cj4gIAlzdHJ1Y3QgdmM0X2Rl diAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwo+IC0JaW50IHJldDsKPiAtCWludCBpOwo+ICAJdWlu dDY0X3Qgd2FpdF9zZXFubyA9IDA7Cj4gIAlzdHJ1Y3QgdmM0X2NvbW1pdCAqYzsKPiArCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsK PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCWlmIChhc3lu Yykgewo+ICsJCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUs IGkpIHsKPiArCj4gKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdz KTsKPiArCj4gKwkJCWlmIChjcnRjLT5zdGF0ZS0+ZXZlbnQgfHwgCl5XaGF0J3MgdGhpcyBjaGVj ayBmb3I/IEhvdyBjYW4gdGhpcyBldmVuIGhhcHBlbiBpZiB5b3UgcmVtb3ZlIHRoZSBldmVudCBm cm9tIHRoZSBjcnRjIHN0YXRlIGluIGF0b21pY19mbHVzaD8KCn5NYWFydGVuCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755247AbcECHLk (ORCPT ); Tue, 3 May 2016 03:11:40 -0400 Received: from mga03.intel.com ([134.134.136.65]:16006 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751033AbcECHLj (ORCPT ); Tue, 3 May 2016 03:11:39 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,571,1455004800"; d="scan'208";a="96115889" Subject: Re: [PATCH] drm/vc4: Return -EBUSY if there's already a pending flip event. To: robert.foss@collabora.com, daniel.vetter@ffwll.ch, airlied@linux.ie, eric@anholt.net, aniel.vetter@ffwll.ch, fengguang.wu@intel.com, julia.lawall@lip6.fr, alexander.deucher@amd.com, daniels@collabora.com, derekf@osg.samsung.com, varadgautam@gmail.com References: <1462217122-13071-1-git-send-email-robert.foss@collabora.com> <1462217122-13071-2-git-send-email-robert.foss@collabora.com> Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org From: Maarten Lankhorst Message-ID: <927f08b1-e644-86d8-1743-dd2e615c9a2a@linux.intel.com> Date: Tue, 3 May 2016 09:11:34 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.0 MIME-Version: 1.0 In-Reply-To: <1462217122-13071-2-git-send-email-robert.foss@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Op 02-05-16 om 21:25 schreef robert.foss@collabora.com: > From: Robert Foss > > As per the docs, atomic_commit should return -EBUSY "if an asycnhronous > update is requested and there is an earlier update pending". > > Signed-off-by: Robert Foss > --- > 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 || ^What's this check for? How can this even happen if you remove the event from the crtc state in atomic_flush? ~Maarten