From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v99 4/4] drm/i915: Treat ringbuffer writes as write to normal memory Date: Fri, 30 Oct 2015 15:19:23 +0200 Message-ID: <87611oqysk.fsf@gaia.fi.intel.com> References: <1445419281-28521-1-git-send-email-chris@chris-wilson.co.uk> <1445419281-28521-4-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id C11D9721D3 for ; Fri, 30 Oct 2015 06:20:15 -0700 (PDT) In-Reply-To: <1445419281-28521-4-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , daniel.vetter@ffwll.ch Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gUmluZ2J1 ZmZlcnMgYXJlIG5vdyBiZWluZyB3cml0dGVuIHRvIGVpdGhlciB0aHJvdWdoIExMQyBvciBXQyBw YXRocywgc28KPiB0cmVhdGluZyB0aGVtIGFzIHNpbXBseSBpb21lbSBpcyBubyBsb25nZXIgYWRl cXVhdGUuIEhvd2V2ZXIsIGZvciB0aGUKPiBvbGRlciAhbGxjIGhhcmR3YXJlLCB0aGUgaGFyZHdh cmUgaXMgZG9jdW1lbnRhdGVkIGFzIHRyZWF0aW5nIHRoZSBUQUlMCj4gcmVnaXN0ZXIgdXBkYXRl IGFzIHNlcmlhbGlzaW5nLCBzbyB3ZSBjYW4gcmVsYXggdGhlIGJhcnJpZXJzIHdoZW4gZmlsbGlu Zwo+IHRoZSByaW5ncyAoYnV0IGV2ZW4gaWYgaXQgd2VyZSBub3QsIGl0IGlzIHN0aWxsIGFuIHVu Y2FjaGVkIHJlZ2lzdGVyIHdyaXRlCj4gYW5kIHNvIHNlcmlhbGlzaW5nIGFueXdheS4pLgo+Cj4g Rm9yIHNpbXBsaWNpdHksIGxldCdzIGlnbm9yZSB0aGUgaW9tZW0gYW5ub3RhdGlvbi4KPgo+IHYy OiBSZW1vdmUgaW9tZW0gZnJvbSByaW5nYnVmZmVyLT52aXJ0dWFsX2FkZHJlc3MKPgoKaW9tZW0g YW5ub3RhdGlvbiBpcyBmb3Igc3BhcnNlLiBpOTE1X2lycS5jCnN0aWxsIHVzZXMgaW9yZWFkMzIg dGh1cyBtaXhpbmcgdGhlIGFkZHJlc3Mgc3BhY2VzLgoKSSBzZWUgdGhpcyBoYXMgYWxyZWFkeSBy LWIgYnV0IHNvbWV0aGluZyBsaWtlIHRoaXMKYXMgYSBmb2xsb3d1cCB3b3VsZCBtYWtlIHNwYXJz ZSBxdWlldDoKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA2ZTBhNTY4Li5iNWU5MzgzIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTI4MzEsNyArMjgzMSw3IEBAIHNlbWFwaG9yZV93 YWl0c19mb3Ioc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKdTMyICpzZXFubykKICAgICAg ICBoZWFkICY9IHJpbmctPmJ1ZmZlci0+c2l6ZSAtIDE7CiAKICAgICAgICAgICAgICAgIC8qIFRo aXMgaGVyZSBzZWVtcyB0byBibG93IHVwICovCi0gICAgICAgICAgICAgICAgICBjbWQgPSBpb3Jl YWQzMihyaW5nLT5idWZmZXItPnZpcnR1YWxfc3RhcnQgKyBoZWFkKTsKKyAgICAgICAgICAgICAg ICAgICAgICBjbWQgPSBpbnRlbF9yaW5nYnVmZmVyX3JlYWQocmluZy0+YnVmZmVyLCBoZWFkKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtZCA9PSBpcGVocikKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtMjg0MSwxMSArMjg0MSwxMSBAQCBz ZW1hcGhvcmVfd2FpdHNfZm9yKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MKKnJpbmcsIHUzMiAqc2Vx bm8pCiAgICAgICBpZiAoIWkpCiAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICpzZXFu byA9IGlvcmVhZDMyKHJpbmctPmJ1ZmZlci0+dmlydHVhbF9zdGFydCArIGhlYWQgKyA0KSArIDE7 CisgICAgICAgKnNlcW5vID0gaW50ZWxfcmluZ2J1ZmZlcl9yZWFkKHJpbmctPmJ1ZmZlciwgaGVh ZCArIDQpICsgMTsKICAgICAgICBpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gOCkg ewotICAgICAgICAgIG9mZnNldCA9IGlvcmVhZDMyKHJpbmctPmJ1ZmZlci0+dmlydHVhbF9zdGFy dCArIGhlYWQgKyAxMik7CisgICAgICAgICAgICAgICAgIG9mZnNldCA9IGludGVsX3JpbmdidWZm ZXJfcmVhZChyaW5nLT5idWZmZXIsIGhlYWQgKwoxMik7CiAgICAgICAgICAgICAgICBvZmZzZXQg PDw9IDMyOwotICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGlvcmVhZDMyKHJpbmctPmJ1 ZmZlci0+dmlydHVhbF9zdGFydCArCmhlYWQgKyA4KTsKKyAgICAgIG9mZnNldCA9IGludGVsX3Jp bmdidWZmZXJfcmVhZChyaW5nLT5idWZmZXIsIGhlYWQgKyA4KTsKICAgICAgIH0KICAgICAgIHJl dHVybiBzZW1hcGhvcmVfd2FpdF90b19zaWduYWxsZXJfcmluZyhyaW5nLCBpcGVociwgb2Zmc2V0 KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIu YwpiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwppbmRleCBlYTZmOGE3 Li40OGZkZmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVm ZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCkBAIC0x OTk5LDcgKzE5OTksNyBAQCB2b2lkIGludGVsX3VucGluX3JpbmdidWZmZXJfb2JqKHN0cnVjdApp bnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmKQogICAgICAgICAgICAgICAgIGlmIChIQVNfTExDKHJp bmdidWYtPm9iai0+YmFzZS5kZXYpICYmCiAgICAgICAgICAgICAgICAgIXJpbmdidWYtPm9iai0+ c3RvbGVuKQogICAgICAgICAgICAgICAgICAgICAgICB2dW5tYXAocmluZ2J1Zi0+dmlydHVhbF9z dGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpb3VubWFwKHJpbmdidWYtPnZpcnR1YWxfc3RhcnQpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW91bm1hcCgodm9pZCBfX2lvbWVtCiopcmluZ2J1 Zi0+dmlydHVhbF9zdGFydCk7CiAgICAgICAgcmluZ2J1Zi0+dmlydHVhbF9zdGFydCA9IE5VTEw7 CiAgICAgICAgaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4ocmluZ2J1Zi0+b2JqKTsKIH0KQEAg LTIwNTksNyArMjA1OSw3IEBAIGludCBpbnRlbF9waW5fYW5kX21hcF9yaW5nYnVmZmVyX29iaihz dHJ1Y3QKZHJtX2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0 OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICByaW5n YnVmLT52aXJ0dWFsX3N0YXJ0ID0KICAgICAgICAgICAgICAgIGlvcmVtYXBfd2MoZGV2X3ByaXYt Pmd0dC5tYXBwYWJsZV9iYXNlICsKKwogICAgICAgICAgICAgICAgcmluZ2J1Zi0+dmlydHVhbF9z dGFydCA9ICh2b2lkIF9fZm9yY2UKICAgICAgICAgICAgICAgICopaW9yZW1hcF93YyhkZXZfcHJp di0+Z3R0Lm1hcHBhYmxlX2Jhc2UgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopLAogICAgICAgICAgICAgICAgcmluZ2J1Zi0+ c2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaW5nYnVmLT52aXJ0dWFsX3N0YXJ0 ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4ob2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAogICAgICAgICAgICAgICAgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKaW5kZXggYTE1ZjZjMi4uMzM1ZTYz MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaApAQCAtNDQ4LDYgKzQ0 OCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcmluZ2J1ZmZlcl9hZHZhbmNlKHN0cnVj dAogICAgICAgICAgICAgICAgaW50ZWxfcmluZ2J1ZmZlciAqcmIpCiAgICAgICAgICAgICAgICBy Yi0+dGFpbCAmPSByYi0+c2l6ZSAtIDE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIGludGVsX3Jp bmdidWZmZXJfcmVhZChjb25zdCBzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlcgoqcmIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1MzIgb2Zmc2V0KQoreworICAg ICAgIFdBUk5fT04ob2Zmc2V0ID49IHJiLT5zaXplKTsKKyAgICAgICByZXR1cm4gKih1aW50MzJf dCAqKShyYi0+dmlydHVhbF9zdGFydCArIG9mZnNldCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9p ZCBpbnRlbF9yaW5nX2VtaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkYXRhKQogewoKLU1pa2EK Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ Cj4gUmV2aWV3ZWQtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRl bC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICB8 ICA3ICstLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmggICAgICAgIHwg IDYgKysrLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyB8ICA3 ICstLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwgMTkg KysrKysrKysrKysrKy0tLS0tLQo+ICA0IGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyks IDIxIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCBkMzg3 NDZjNTM3MGQuLjEwMDIwNTA1YmU3NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4g QEAgLTcxMywxMyArNzEzLDggQEAgaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2VfYW5kX3N1Ym1p dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCj4gIAo+ICBzdGF0aWMgdm9p ZCBfX3dyYXBfcmluZ19idWZmZXIoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYpCj4g IHsKPiAtCXVpbnQzMl90IF9faW9tZW0gKnZpcnQ7Cj4gIAlpbnQgcmVtID0gcmluZ2J1Zi0+c2l6 ZSAtIHJpbmdidWYtPnRhaWw7Cj4gLQo+IC0JdmlydCA9IHJpbmdidWYtPnZpcnR1YWxfc3RhcnQg KyByaW5nYnVmLT50YWlsOwo+IC0JcmVtIC89IDQ7Cj4gLQl3aGlsZSAocmVtLS0pCj4gLQkJaW93 cml0ZTMyKE1JX05PT1AsIHZpcnQrKyk7Cj4gKwltZW1zZXQocmluZ2J1Zi0+dmlydHVhbF9zdGFy dCArIHJpbmdidWYtPnRhaWwsIDAsIHJlbSk7Cj4gIAo+ICAJcmluZ2J1Zi0+dGFpbCA9IDA7Cj4g IAlpbnRlbF9yaW5nX3VwZGF0ZV9zcGFjZShyaW5nYnVmKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuaAo+IGluZGV4IDY0Zjg5Zjk5ODJhMi4uOGI1NmZiOTM0NzYzIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbHJjLmgKPiBAQCAtNTMsOCArNTMsOSBAQCBpbnQgbG9naWNhbF9yaW5nX2ZsdXNo X2FsbF9jYWNoZXMoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwo+ICAgKi8KPiAg c3RhdGljIGlubGluZSB2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19hZHZhbmNlKHN0cnVjdCBpbnRl bF9yaW5nYnVmZmVyICpyaW5nYnVmKQo+ICB7Cj4gLQlyaW5nYnVmLT50YWlsICY9IHJpbmdidWYt PnNpemUgLSAxOwo+ICsJaW50ZWxfcmluZ2J1ZmZlcl9hZHZhbmNlKHJpbmdidWYpOwo+ICB9Cj4g Kwo+ICAvKioKPiAgICogaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQoKSAtIHdyaXRlIGEgRFdPUkQg dG8gdGhlIHJpbmdidWZmZXIuCj4gICAqIEByaW5nYnVmOiBSaW5nYnVmZmVyIHRvIHdyaXRlIHRv Lgo+IEBAIC02Myw4ICs2NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9sb2dpY2FsX3Jp bmdfYWR2YW5jZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZikKPiAgc3RhdGljIGlu bGluZSB2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVy ICpyaW5nYnVmLAo+ICAJCQkJCSAgIHUzMiBkYXRhKQo+ICB7Cj4gLQlpb3dyaXRlMzIoZGF0YSwg cmluZ2J1Zi0+dmlydHVhbF9zdGFydCArIHJpbmdidWYtPnRhaWwpOwo+IC0JcmluZ2J1Zi0+dGFp bCArPSA0Owo+ICsJaW50ZWxfcmluZ2J1ZmZlcl9lbWl0KHJpbmdidWYsIGRhdGEpOwo+ICB9Cj4g IAo+ICAvKiBMb2dpY2FsIFJpbmcgQ29udGV4dHMgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5jCj4gaW5kZXggNDlhYTUyNDQwZGIyLi4wZWFhYWI5MmRlYTAgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gQEAgLTIxODAsMTMgKzIx ODAsOCBAQCBzdGF0aWMgaW50IHJpbmdfd2FpdF9mb3Jfc3BhY2Uoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZywgaW50IG4pCj4gIAo+ICBzdGF0aWMgdm9pZCBfX3dyYXBfcmluZ19idWZmZXIo c3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYpCj4gIHsKPiAtCXVpbnQzMl90IF9faW9t ZW0gKnZpcnQ7Cj4gIAlpbnQgcmVtID0gcmluZ2J1Zi0+c2l6ZSAtIHJpbmdidWYtPnRhaWw7Cj4g LQo+IC0JdmlydCA9IHJpbmdidWYtPnZpcnR1YWxfc3RhcnQgKyByaW5nYnVmLT50YWlsOwo+IC0J cmVtIC89IDQ7Cj4gLQl3aGlsZSAocmVtLS0pCj4gLQkJaW93cml0ZTMyKE1JX05PT1AsIHZpcnQr Kyk7Cj4gKwltZW1zZXQocmluZ2J1Zi0+dmlydHVhbF9zdGFydCArIHJpbmdidWYtPnRhaWwsIDAs IHJlbSk7Cj4gIAo+ICAJcmluZ2J1Zi0+dGFpbCA9IDA7Cj4gIAlpbnRlbF9yaW5nX3VwZGF0ZV9z cGFjZShyaW5nYnVmKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4g aW5kZXggMmU4NWZkYTk0OTYzLi4xMGY4MGRmNWYxMjEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gQEAgLTk3LDcgKzk3LDcgQEAgc3RydWN0IGludGVsX3Jp bmdfaGFuZ2NoZWNrIHsKPiAgCj4gIHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyIHsKPiAgCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gLQl2b2lkIF9faW9tZW0gKnZpcnR1YWxfc3Rh cnQ7Cj4gKwl2b2lkICp2aXJ0dWFsX3N0YXJ0Owo+ICAKPiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmc7Cj4gIAo+IEBAIC00MjcsMTcgKzQyNywyNCBAQCBpbnQgaW50ZWxfcmluZ19hbGxv Y19yZXF1ZXN0X2V4dHJhcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpOwo+ ICAKPiAgaW50IF9fbXVzdF9jaGVjayBpbnRlbF9yaW5nX2JlZ2luKHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxLCBpbnQgbik7Cj4gIGludCBfX211c3RfY2hlY2sgaW50ZWxfcmluZ19j YWNoZWxpbmVfYWxpZ24oc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwo+ICtzdGF0 aWMgaW5saW5lIHZvaWQgaW50ZWxfcmluZ2J1ZmZlcl9lbWl0KHN0cnVjdCBpbnRlbF9yaW5nYnVm ZmVyICpyYiwKPiArCQkJCQkgdTMyIGRhdGEpCj4gK3sKPiArCSoodWludDMyX3QgKikocmItPnZp cnR1YWxfc3RhcnQgKyByYi0+dGFpbCkgPSBkYXRhOwo+ICsJcmItPnRhaWwgKz0gNDsKPiArfQo+ ICtzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcmluZ2J1ZmZlcl9hZHZhbmNlKHN0cnVjdCBpbnRl bF9yaW5nYnVmZmVyICpyYikKPiArewo+ICsJcmItPnRhaWwgJj0gcmItPnNpemUgLSAxOwo+ICt9 Cj4gIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9yaW5nX2VtaXQoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZywKPiAgCQkJCSAgIHUzMiBkYXRhKQo+ICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfcmlu Z2J1ZmZlciAqcmluZ2J1ZiA9IHJpbmctPmJ1ZmZlcjsKPiAtCWlvd3JpdGUzMihkYXRhLCByaW5n YnVmLT52aXJ0dWFsX3N0YXJ0ICsgcmluZ2J1Zi0+dGFpbCk7Cj4gLQlyaW5nYnVmLT50YWlsICs9 IDQ7Cj4gKwlpbnRlbF9yaW5nYnVmZmVyX2VtaXQocmluZy0+YnVmZmVyLCBkYXRhKTsKPiAgfQo+ ICBzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcmluZ19hZHZhbmNlKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcpCj4gIHsKPiAtCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0g cmluZy0+YnVmZmVyOwo+IC0JcmluZ2J1Zi0+dGFpbCAmPSByaW5nYnVmLT5zaXplIC0gMTsKPiAr CWludGVsX3JpbmdidWZmZXJfYWR2YW5jZShyaW5nLT5idWZmZXIpOwo+ICB9Cj4gIGludCBfX2lu dGVsX3Jpbmdfc3BhY2UoaW50IGhlYWQsIGludCB0YWlsLCBpbnQgc2l6ZSk7Cj4gIHZvaWQgaW50 ZWxfcmluZ191cGRhdGVfc3BhY2Uoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYpOwo+ IC0tIAo+IDIuNi4xCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=