From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gustavo Padovan Subject: Re: [RFC 5/8] drm/fence: add fence to drm_pending_event Date: Fri, 15 Apr 2016 11:59:00 -0700 Message-ID: <20160415185900.GD23954@joana> References: <1460683781-22535-1-git-send-email-gustavo@padovan.org> <1460683781-22535-6-git-send-email-gustavo@padovan.org> <20160415080948.GS2510@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f45.google.com (mail-pa0-f45.google.com [209.85.220.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id 08C856ECFD for ; Fri, 15 Apr 2016 18:59:03 +0000 (UTC) Received: by mail-pa0-f45.google.com with SMTP id r5so4066216pag.1 for ; Fri, 15 Apr 2016 11:59:03 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20160415080948.GS2510@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Daniel Stone , Arve =?iso-8859-1?B?SGr4bm5lduVn?= , Riley Andrews , Rob Clark , Greg Hackmann , John Harrison , laurent.pinchart@ideasonboard.com, seanpaul@google.com, marcheu@google.com, m.chehab@samsung.com, Maarten Lankhorst , Gustavo Padovan List-Id: dri-devel@lists.freedesktop.org MjAxNi0wNC0xNSBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+OgoKPiBPbiBUaHUsIEFw ciAxNCwgMjAxNiBhdCAwNjoyOTozOFBNIC0wNzAwLCBHdXN0YXZvIFBhZG92YW4gd3JvdGU6Cj4g PiBGcm9tOiBHdXN0YXZvIFBhZG92YW4gPGd1c3Rhdm8ucGFkb3ZhbkBjb2xsYWJvcmEuY28udWs+ Cj4gPiAKPiA+IE5vdyBhIGRybV9wZW5kaW5nX2V2ZW50IGNhbiBlaXRoZXIgc2VuZCBhIHJlYWwg ZHJtX2V2ZW50IG9yIHNpZ25hbCBhCj4gPiBmZW5jZSwgb3IgYm90aC4gSXQgYWxsb3cgdXMgdG8g c2lnbmFsIHZpYSBmZW5jZXMgd2hlbiB0aGUgYnVmZmVyIGlzCj4gPiBkaXNwbGF5ZWQgb24gdGhl IHNjcmVlbi4gV2hpY2ggaW4gdHVybiBtZWFucyB0aGF0IHRoZSBwcmV2aW91cyBidWZmZXIKPiA+ IGlzIG5vdCBpbiB1c2UgYW55bW9yZSBhbmQgY2FuIGJlIGZyZWVkIG9yIHNlbnQgYmFjayB0byBh bm90aGVyIGRyaXZlcgo+ID4gZm9yIHByb2Nlc3NpbmcuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6 IEd1c3Rhdm8gUGFkb3ZhbiA8Z3VzdGF2by5wYWRvdmFuQGNvbGxhYm9yYS5jby51az4KPiAKPiBE byB5b3UgaGF2ZSBhdG9taWMgaWd0IHRlc3RjYXNlIHRoYXQgZXhlcmNpc2UgYWxsIHRoZSBjb21i aW5hdGlvbnMgb2YKPiBkcm1fZXZlbnQgYW5kIGluL291dC1mZW5jZXMgYW5kIG1ha2Ugc3VyZSBp dCBhbGwga2VlcHMgd29ya2luZz8gVG9tZXUKPiBhbHJlYWR5IGNvbnZlcnRlZCB0aGF0IG92ZXIg dG8gYmUgYSBnZW5lcmljIHRlc3RjYXNlLgoKTm90IHlldC4gSSdsbCBjaGVjayBmb3IgdGVzdCBj YXNlcy4KCj4gCj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jIHwgMTkg KysrKysrKysrKysrKy0tLS0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jICAgfCAg NSArKystLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMgICAgfCAgNyArKysrKysrCj4g PiAgaW5jbHVkZS9kcm0vZHJtUC5oICAgICAgICAgICB8ICAxICsKPiA+ICA0IGZpbGVzIGNoYW5n ZWQsIDI0IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9t aWMuYwo+ID4gaW5kZXggNjcwMjUwMi4uMGI5NTUyNiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fYXRvbWljLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj LmMKPiA+IEBAIC0xNDMxLDcgKzE0MzEsOCBAQCBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfYXN5 bmNfY29tbWl0KTsKPiA+ICAgKi8KPiA+ICAKPiA+ICBzdGF0aWMgc3RydWN0IGRybV9wZW5kaW5n X3ZibGFua19ldmVudCAqY3JlYXRlX3ZibGFua19ldmVudCgKPiA+IC0JCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCB1aW50NjRfdCB1c2VyX2RhdGEp Cj4gPiArCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp diwKPiA+ICsJCXN0cnVjdCBmZW5jZSAqZmVuY2UsIHVpbnQ2NF90IHVzZXJfZGF0YSkKPiA+ICB7 Cj4gPiAgCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUgPSBOVUxMOwo+ID4gIAlp bnQgcmV0Owo+ID4gQEAgLTE0NDQsMTIgKzE0NDUsMTcgQEAgc3RhdGljIHN0cnVjdCBkcm1fcGVu ZGluZ192YmxhbmtfZXZlbnQgKmNyZWF0ZV92YmxhbmtfZXZlbnQoCj4gPiAgCWUtPmV2ZW50LmJh c2UubGVuZ3RoID0gc2l6ZW9mKGUtPmV2ZW50KTsKPiA+ICAJZS0+ZXZlbnQudXNlcl9kYXRhID0g dXNlcl9kYXRhOwo+ID4gIAo+ID4gLQlyZXQgPSBkcm1fZXZlbnRfcmVzZXJ2ZV9pbml0KGRldiwg ZmlsZV9wcml2LCAmZS0+YmFzZSwgJmUtPmV2ZW50LmJhc2UpOwo+ID4gLQlpZiAocmV0KSB7Cj4g PiAtCQlrZnJlZShlKTsKPiA+IC0JCXJldHVybiBOVUxMOwo+ID4gKwlpZiAoZmlsZV9wcml2KSB7 Cj4gPiArCQlyZXQgPSBkcm1fZXZlbnRfcmVzZXJ2ZV9pbml0KGRldiwgZmlsZV9wcml2LCAmZS0+ YmFzZSwKPiA+ICsJCQkJCSAgICAgJmUtPmV2ZW50LmJhc2UpOwo+ID4gKwkJaWYgKHJldCkgewo+ ID4gKwkJCWtmcmVlKGUpOwo+ID4gKwkJCXJldHVybiBOVUxMOwo+ID4gKwkJfQo+ID4gIAl9Cj4g PiAgCj4gPiArCWUtPmJhc2UuZmVuY2UgPSBmZW5jZTsKPiA+ICsKPiA+ICAJcmV0dXJuIGU7Cj4g PiAgfQo+ID4gIAo+ID4gQEAgLTE2NzYsNyArMTY4Miw4IEBAIHJldHJ5Ogo+ID4gIAkJZm9yX2Vh Y2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewo+ID4gIAkJCXN0 cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmU7Cj4gPiAgCj4gPiAtCQkJZSA9IGNyZWF0 ZV92YmxhbmtfZXZlbnQoZGV2LCBmaWxlX3ByaXYsIGFyZy0+dXNlcl9kYXRhKTsKPiA+ICsJCQll ID0gY3JlYXRlX3ZibGFua19ldmVudChkZXYsIGZpbGVfcHJpdiwgTlVMTCwKPiA+ICsJCQkJCQlh cmctPnVzZXJfZGF0YSk7Cj4gPiAgCQkJaWYgKCFlKSB7Cj4gPiAgCQkJCXJldCA9IC1FTk9NRU07 Cj4gPiAgCQkJCWdvdG8gb3V0Owo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f Zm9wcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKPiA+IGluZGV4IGFlZWY1OGUuLjM4 ZGVmNDkgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKPiA+IEBAIC04MDEsOCArODAxLDkgQEAgdm9p ZCBkcm1fc2VuZF9ldmVudF9sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRy bV9wZW5kaW5nX2V2ZW50ICplKQo+ID4gIHsKPiA+ICAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkZXYt PmV2ZW50X2xvY2spOwo+ID4gIAo+ID4gLQlpZiAoIWUtPmZpbGVfcHJpdikgewo+ID4gLQkJZS0+ ZGVzdHJveShlKTsKPiA+ICsJaWYgKCFlLT5maWxlX3ByaXYgfHwgIWUtPmV2ZW50KSB7Cj4gCj4g VGhpcyB3b3VsZCBiZSBhIGJ1ZzogZS0+ZmlsZV9wcml2ICE9IE5VTEwgaWZmIGUtPmV2ZW50ICE9 IE5VTEwuIEhvdyBkaWQKPiB0aGlzIGhhcHBlbj8KCk5vdCBzdXJlIG5vdy4gQnV0IEkgbmVlZGVk IHRoaXMgdG8gcHJldmVudCBhIGNyYXNoLCBJIGRvbid0IGhhdmUgbG9ncyBvZgppdCBhbnltb3Jl LCBJJ2xsIGNoZWNrIHRoaXMgYWdhaW4uCgo+IAo+ID4gKwkJaWYgKGUtPmRlc3Ryb3kpCj4gPiAr CQkJZS0+ZGVzdHJveShlKTsKPiA+ICAJCXJldHVybjsKPiA+ICAJfQo+ID4gIAo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ly cS5jCj4gPiBpbmRleCAzYzFhNmYxLi4wYzVkN2NiIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9pcnEuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwo+ID4g QEAgLTQxLDYgKzQxLDcgQEAKPiA+ICAKPiA+ICAjaW5jbHVkZSA8bGludXgvdmdhYXJiLmg+Cj4g PiAgI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9mZW5jZS5o Pgo+ID4gIAo+ID4gIC8qIEFjY2VzcyBtYWNybyBmb3Igc2xvdHMgaW4gdmJsYW5rIHRpbWVzdGFt cCByaW5nYnVmZmVyLiAqLwo+ID4gICNkZWZpbmUgdmJsYW5rdGltZXN0YW1wKGRldiwgcGlwZSwg Y291bnQpIFwKPiA+IEBAIC0xMTI0LDYgKzExMjUsMTIgQEAgdm9pZCBkcm1fc2VuZF92Ymxhbmtf ZXZlbnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCj4gPiAgCQlu b3cgPSBnZXRfZHJtX3RpbWVzdGFtcCgpOwo+ID4gIAl9Cj4gPiAgCWUtPnBpcGUgPSBwaXBlOwo+ ID4gKwo+ID4gKwlpZiAoZS0+YmFzZS5mZW5jZSkgewo+ID4gKwkJZmVuY2Vfc2lnbmFsKGUtPmJh c2UuZmVuY2UpOwo+ID4gKwkJZmVuY2VfcHV0KGUtPmJhc2UuZmVuY2UpOwo+ID4gKwl9Cj4gCj4g SSdkIHB1dCB0aGlzIGludG8gZHJtX3NlbmRfZXZlbnRfbG9ja2VkIGV2ZW4uIEluIGNhc2Ugd2Ug c2VuZCBvdXQgZmVuY2VzCj4gZm9yIG90aGVyIGV2ZW50cyB0b28gKGUuZy4gZXh5bm9zIHVzZXMg ZHJtX2V2ZW50IGZvciByZW5kZXJpbmcgLi4uKS4KCk9rYXkuIExvb2tpbmcgaW50byB0aGF0LgoK CUd1c3Rhdm8KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751657AbcDOS7F (ORCPT ); Fri, 15 Apr 2016 14:59:05 -0400 Received: from mail-pa0-f44.google.com ([209.85.220.44]:33025 "EHLO mail-pa0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751443AbcDOS7D (ORCPT ); Fri, 15 Apr 2016 14:59:03 -0400 Date: Fri, 15 Apr 2016 11:59:00 -0700 From: Gustavo Padovan To: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Daniel Stone , Arve =?iso-8859-1?B?SGr4bm5lduVn?= , Riley Andrews , Rob Clark , Greg Hackmann , John Harrison , laurent.pinchart@ideasonboard.com, seanpaul@google.com, marcheu@google.com, m.chehab@samsung.com, Maarten Lankhorst , Gustavo Padovan Subject: Re: [RFC 5/8] drm/fence: add fence to drm_pending_event Message-ID: <20160415185900.GD23954@joana> Mail-Followup-To: Gustavo Padovan , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Daniel Stone , Arve =?iso-8859-1?B?SGr4bm5lduVn?= , Riley Andrews , Rob Clark , Greg Hackmann , John Harrison , laurent.pinchart@ideasonboard.com, seanpaul@google.com, marcheu@google.com, m.chehab@samsung.com, Maarten Lankhorst , Gustavo Padovan References: <1460683781-22535-1-git-send-email-gustavo@padovan.org> <1460683781-22535-6-git-send-email-gustavo@padovan.org> <20160415080948.GS2510@phenom.ffwll.local> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160415080948.GS2510@phenom.ffwll.local> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2016-04-15 Daniel Vetter : > On Thu, Apr 14, 2016 at 06:29:38PM -0700, Gustavo Padovan wrote: > > From: Gustavo Padovan > > > > Now a drm_pending_event can either send a real drm_event or signal a > > fence, or both. It allow us to signal via fences when the buffer is > > displayed on the screen. Which in turn means that the previous buffer > > is not in use anymore and can be freed or sent back to another driver > > for processing. > > > > Signed-off-by: Gustavo Padovan > > Do you have atomic igt testcase that exercise all the combinations of > drm_event and in/out-fences and make sure it all keeps working? Tomeu > already converted that over to be a generic testcase. Not yet. I'll check for test cases. > > > --- > > drivers/gpu/drm/drm_atomic.c | 19 +++++++++++++------ > > drivers/gpu/drm/drm_fops.c | 5 +++-- > > drivers/gpu/drm/drm_irq.c | 7 +++++++ > > include/drm/drmP.h | 1 + > > 4 files changed, 24 insertions(+), 8 deletions(-) > > > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > > index 6702502..0b95526 100644 > > --- a/drivers/gpu/drm/drm_atomic.c > > +++ b/drivers/gpu/drm/drm_atomic.c > > @@ -1431,7 +1431,8 @@ EXPORT_SYMBOL(drm_atomic_async_commit); > > */ > > > > static struct drm_pending_vblank_event *create_vblank_event( > > - struct drm_device *dev, struct drm_file *file_priv, uint64_t user_data) > > + struct drm_device *dev, struct drm_file *file_priv, > > + struct fence *fence, uint64_t user_data) > > { > > struct drm_pending_vblank_event *e = NULL; > > int ret; > > @@ -1444,12 +1445,17 @@ static struct drm_pending_vblank_event *create_vblank_event( > > e->event.base.length = sizeof(e->event); > > e->event.user_data = user_data; > > > > - ret = drm_event_reserve_init(dev, file_priv, &e->base, &e->event.base); > > - if (ret) { > > - kfree(e); > > - return NULL; > > + if (file_priv) { > > + ret = drm_event_reserve_init(dev, file_priv, &e->base, > > + &e->event.base); > > + if (ret) { > > + kfree(e); > > + return NULL; > > + } > > } > > > > + e->base.fence = fence; > > + > > return e; > > } > > > > @@ -1676,7 +1682,8 @@ retry: > > for_each_crtc_in_state(state, crtc, crtc_state, i) { > > struct drm_pending_vblank_event *e; > > > > - e = create_vblank_event(dev, file_priv, arg->user_data); > > + e = create_vblank_event(dev, file_priv, NULL, > > + arg->user_data); > > if (!e) { > > ret = -ENOMEM; > > goto out; > > diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c > > index aeef58e..38def49 100644 > > --- a/drivers/gpu/drm/drm_fops.c > > +++ b/drivers/gpu/drm/drm_fops.c > > @@ -801,8 +801,9 @@ void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e) > > { > > assert_spin_locked(&dev->event_lock); > > > > - if (!e->file_priv) { > > - e->destroy(e); > > + if (!e->file_priv || !e->event) { > > This would be a bug: e->file_priv != NULL iff e->event != NULL. How did > this happen? Not sure now. But I needed this to prevent a crash, I don't have logs of it anymore, I'll check this again. > > > + if (e->destroy) > > + e->destroy(e); > > return; > > } > > > > diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c > > index 3c1a6f1..0c5d7cb 100644 > > --- a/drivers/gpu/drm/drm_irq.c > > +++ b/drivers/gpu/drm/drm_irq.c > > @@ -41,6 +41,7 @@ > > > > #include > > #include > > +#include > > > > /* Access macro for slots in vblank timestamp ringbuffer. */ > > #define vblanktimestamp(dev, pipe, count) \ > > @@ -1124,6 +1125,12 @@ void drm_send_vblank_event(struct drm_device *dev, unsigned int pipe, > > now = get_drm_timestamp(); > > } > > e->pipe = pipe; > > + > > + if (e->base.fence) { > > + fence_signal(e->base.fence); > > + fence_put(e->base.fence); > > + } > > I'd put this into drm_send_event_locked even. In case we send out fences > for other events too (e.g. exynos uses drm_event for rendering ...). Okay. Looking into that. Gustavo