From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abdiel Janulgue Subject: Re: [PATCH v4] drm/i915: Adjust size of PIPE_CONTROL used for gen8 render seqno write Date: Wed, 13 Apr 2016 15:09:21 +0300 Message-ID: <570E36F1.8020309@linux.intel.com> References: <1460469115-26002-1-git-send-email-michal.winiarski@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 223A26E8B7 for ; Wed, 13 Apr 2016 12:09:22 +0000 (UTC) In-Reply-To: <1460469115-26002-1-git-send-email-michal.winiarski@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: =?UTF-8?B?TWljaGHFgiBXaW5pYXJza2k=?= , intel-gfx@lists.freedesktop.org Cc: Mika Kuoppala , stable@vger.kernel.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiAwNC8xMi8yMDE2IDA0OjUxIFBNLCBNaWNoYcWCIFdpbmlhcnNraSB3cm90ZToKPiBXZSBz dGFydGVkIHRvIHVzZSBQSVBFX0NPTlRST0wgdG8gd3JpdGUgcmVuZGVyIHJpbmcgc2Vxbm8gaW4g b3JkZXIgdG8KPiBjb21iYXQgc2Vxbm8gd3JpdGUgdnMgaW50ZXJydXB0IGdlbmVyYXRpb24gcHJv YmxlbXMuIFRoaXMgd2FzIGludHJvZHVjZWQKPiBieSBjb21taXQgN2MxN2QzNzczNzRkICgiZHJt L2k5MTU6IFVzZSBvcmRlcmVkIHNlcW5vIHdyaXRlIGludGVycnVwdAo+IGdlbmVyYXRpb24gb24g Z2VuOCsgZXhlY2xpc3RzIikuCj4gCj4gT24gZ2VuOCsgc2l6ZSBvZiBQSVBFX0NPTlRST0wgd2l0 aCBQb3N0IFN5bmMgT3BlcmF0aW9uIHNob3VsZCBiZQo+IDYgZHdvcmRzLiBXaGVuIHdlJ3JlIHVz aW5nIG9sZGVyIDUtZHdvcmQgdmFyaWFudCBpdCdzIHBvc3NpYmxlIHRvCj4gb2JzZXJ2ZSBpbmNv bnNpc3RlbnQgdmFsdWVzIHdyaXR0ZW4gYnkgUElQRV9DT05UUk9MIHdpdGggUG9zdAo+IFN5bmMg T3BlcmF0aW9uIGZyb20gdXNlciBiYXRjaGVzLCByZXN1bHRpbmcgaW4gcmVuZGVyaW5nIGNvcnJ1 cHRpb25zLgo+IAo+IHYyOiBGaXggQkFUIGZhaWx1cmVzCj4gdjM6IENvbW1lbnRzIG9uIGFsaWdu bWVudCBhbmQgdGhyYXNoaW5nIGhpZ2ggZHdvcmQgb2Ygc2Vxbm8gKENocmlzKQo+IHY0OiBVcGRh dGVkIGNvbW1pdCBtc2cgKE1pa2EpCj4gCj4gVGVzdGNhc2U6IGlndC9nZW1fcGlwZV9jb250cm9s X3N0b3JlX2xvb3AvKi1xd29yZC13cml0ZQo+IElzc3VlOiBWSVotNzM5Mwo+IENjOiBzdGFibGVA dmdlci5rZXJuZWwub3JnCj4gQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNv LnVrPgo+IENjOiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGludGVsLmNvbT4KPiBDYzog QWJkaWVsIEphbnVsZ3VlIDxhYmRpZWwuamFudWxndWVAbGludXguaW50ZWwuY29tPgoKVGVzdGVk LWJ5OiBBYmRpZWwgSmFudWxndWUgPGFiZGllbC5qYW51bGd1ZUBsaW51eC5pbnRlbC5jb20+CgoK PiBTaWduZWQtb2ZmLWJ5OiBNaWNoYcWCIFdpbmlhcnNraSA8bWljaGFsLndpbmlhcnNraUBpbnRl bC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIHwgMTAgKysr KysrKystLQo+ICAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygt KQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gaW5kZXggMGQ2ZGM1ZS4uMzBhYmU1MyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gQEAgLTE5NDUsMTUgKzE5NDUsMTggQEAg c3RhdGljIGludCBnZW44X2VtaXRfcmVxdWVzdF9yZW5kZXIoc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpyZXF1ZXN0KQo+ICAJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPSBy ZXF1ZXN0LT5yaW5nYnVmOwo+ICAJaW50IHJldDsKPiAgCj4gLQlyZXQgPSBpbnRlbF9sb2dpY2Fs X3JpbmdfYmVnaW4ocmVxdWVzdCwgNiArIFdBX1RBSUxfRFdPUkRTKTsKPiArCXJldCA9IGludGVs X2xvZ2ljYWxfcmluZ19iZWdpbihyZXF1ZXN0LCA4ICsgV0FfVEFJTF9EV09SRFMpOwo+ICAJaWYg KHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiArCS8qIFdlJ3JlIHVzaW5nIHF3b3JkIHdyaXRl LCBzZXFubyBzaG91bGQgYmUgYWxpZ25lZCB0byA4IGJ5dGVzLiAqLwo+ICsJQlVJTERfQlVHX09O KEk5MTVfR0VNX0hXU19JTkRFWCAmIDEpOwo+ICsKPiAgCS8qIHcvYSBmb3IgcG9zdCBzeW5jIG9w cyBmb2xsb3dpbmcgYSBHUEdQVSBvcGVyYXRpb24gd2UKPiAgCSAqIG5lZWQgYSBwcmlvciBDU19T VEFMTCwgd2hpY2ggaXMgZW1pdHRlZCBieSB0aGUgZmx1c2gKPiAgCSAqIGZvbGxvd2luZyB0aGUg YmF0Y2guCj4gIAkgKi8KPiAtCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIEdGWF9P UF9QSVBFX0NPTlRST0woNSkpOwo+ICsJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1Ziwg R0ZYX09QX1BJUEVfQ09OVFJPTCg2KSk7Cj4gIAlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5n YnVmLAo+ICAJCQkJKFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUX0lWQiB8Cj4gIAkJCQkgUElQRV9D T05UUk9MX0NTX1NUQUxMIHwKPiBAQCAtMTk2MSw3ICsxOTY0LDEwIEBAIHN0YXRpYyBpbnQgZ2Vu OF9lbWl0X3JlcXVlc3RfcmVuZGVyKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVz dCkKPiAgCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIGh3c19zZXFub19hZGRyZXNz KHJlcXVlc3QtPmVuZ2luZSkpOwo+ICAJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1Ziwg MCk7Cj4gIAlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBpOTE1X2dlbV9yZXF1ZXN0 X2dldF9zZXFubyhyZXF1ZXN0KSk7Cj4gKwkvKiBXZSdyZSB0aHJhc2hpbmcgb25lIGR3b3JkIG9m IEhXUy4gKi8KPiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIDApOwo+ICAJaW50 ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgTUlfVVNFUl9JTlRFUlJVUFQpOwo+ICsJaW50 ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgTUlfTk9PUCk7Cj4gIAlyZXR1cm4gaW50ZWxf bG9naWNhbF9yaW5nX2FkdmFuY2VfYW5kX3N1Ym1pdChyZXF1ZXN0KTsKPiAgfQo+ICAKPiAKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com ([134.134.136.20]:63217 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752095AbcDMMJu (ORCPT ); Wed, 13 Apr 2016 08:09:50 -0400 Message-ID: <570E36F1.8020309@linux.intel.com> Date: Wed, 13 Apr 2016 15:09:21 +0300 From: Abdiel Janulgue MIME-Version: 1.0 To: =?UTF-8?B?TWljaGHFgiBXaW5pYXJza2k=?= , intel-gfx@lists.freedesktop.org CC: stable@vger.kernel.org, Chris Wilson , Mika Kuoppala Subject: Re: [PATCH v4] drm/i915: Adjust size of PIPE_CONTROL used for gen8 render seqno write References: <1460469115-26002-1-git-send-email-michal.winiarski@intel.com> In-Reply-To: <1460469115-26002-1-git-send-email-michal.winiarski@intel.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org List-ID: On 04/12/2016 04:51 PM, Michał Winiarski wrote: > We started to use PIPE_CONTROL to write render ring seqno in order to > combat seqno write vs interrupt generation problems. This was introduced > by commit 7c17d377374d ("drm/i915: Use ordered seqno write interrupt > generation on gen8+ execlists"). > > On gen8+ size of PIPE_CONTROL with Post Sync Operation should be > 6 dwords. When we're using older 5-dword variant it's possible to > observe inconsistent values written by PIPE_CONTROL with Post > Sync Operation from user batches, resulting in rendering corruptions. > > v2: Fix BAT failures > v3: Comments on alignment and thrashing high dword of seqno (Chris) > v4: Updated commit msg (Mika) > > Testcase: igt/gem_pipe_control_store_loop/*-qword-write > Issue: VIZ-7393 > Cc: stable@vger.kernel.org > Cc: Chris Wilson > Cc: Mika Kuoppala > Cc: Abdiel Janulgue Tested-by: Abdiel Janulgue > Signed-off-by: Michał Winiarski > --- > drivers/gpu/drm/i915/intel_lrc.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c > index 0d6dc5e..30abe53 100644 > --- a/drivers/gpu/drm/i915/intel_lrc.c > +++ b/drivers/gpu/drm/i915/intel_lrc.c > @@ -1945,15 +1945,18 @@ static int gen8_emit_request_render(struct drm_i915_gem_request *request) > struct intel_ringbuffer *ringbuf = request->ringbuf; > int ret; > > - ret = intel_logical_ring_begin(request, 6 + WA_TAIL_DWORDS); > + ret = intel_logical_ring_begin(request, 8 + WA_TAIL_DWORDS); > if (ret) > return ret; > > + /* We're using qword write, seqno should be aligned to 8 bytes. */ > + BUILD_BUG_ON(I915_GEM_HWS_INDEX & 1); > + > /* w/a for post sync ops following a GPGPU operation we > * need a prior CS_STALL, which is emitted by the flush > * following the batch. > */ > - intel_logical_ring_emit(ringbuf, GFX_OP_PIPE_CONTROL(5)); > + intel_logical_ring_emit(ringbuf, GFX_OP_PIPE_CONTROL(6)); > intel_logical_ring_emit(ringbuf, > (PIPE_CONTROL_GLOBAL_GTT_IVB | > PIPE_CONTROL_CS_STALL | > @@ -1961,7 +1964,10 @@ static int gen8_emit_request_render(struct drm_i915_gem_request *request) > intel_logical_ring_emit(ringbuf, hws_seqno_address(request->engine)); > intel_logical_ring_emit(ringbuf, 0); > intel_logical_ring_emit(ringbuf, i915_gem_request_get_seqno(request)); > + /* We're thrashing one dword of HWS. */ > + intel_logical_ring_emit(ringbuf, 0); > intel_logical_ring_emit(ringbuf, MI_USER_INTERRUPT); > + intel_logical_ring_emit(ringbuf, MI_NOOP); > return intel_logical_ring_advance_and_submit(request); > } > >