From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v4] drm/i915: Implement inter-engine read-read optimisations Date: Fri, 27 Mar 2015 11:22:15 +0000 Message-ID: <55153D67.6070501@linux.intel.com> References: <1426586098-12124-1-git-send-email-chris@chris-wilson.co.uk> <1426755584-24895-1-git-send-email-chris@chris-wilson.co.uk> <55144545.8080905@linux.intel.com> <20150326213140.GF18055@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 C05B26EB53 for ; Fri, 27 Mar 2015 04:22:21 -0700 (PDT) In-Reply-To: <20150326213140.GF18055@nuc-i3427.alporthouse.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org, Lionel Landwerlin List-Id: intel-gfx@lists.freedesktop.org Ck9uIDAzLzI2LzIwMTUgMDk6MzEgUE0sIENocmlzIFdpbHNvbiB3cm90ZToKPiBPbiBUaHUsIE1h ciAyNiwgMjAxNSBhdCAwNTo0MzozM1BNICswMDAwLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPj4+ IC1zdGF0aWMgaW50Cj4+PiAtaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nX190YWlsKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+PiAtewo+Pj4gLQlpZiAoIW9iai0+YWN0 aXZlKQo+Pj4gLQkJcmV0dXJuIDA7Cj4+PiAtCj4+PiAtCS8qIE1hbnVhbGx5IG1hbmFnZSB0aGUg d3JpdGUgZmx1c2ggYXMgd2UgbWF5IGhhdmUgbm90IHlldAo+Pj4gLQkgKiByZXRpcmVkIHRoZSBi dWZmZXIuCj4+PiAtCSAqCj4+PiAtCSAqIE5vdGUgdGhhdCB0aGUgbGFzdF93cml0ZV9yZXEgaXMg YWx3YXlzIHRoZSBlYXJsaWVyIG9mCj4+PiAtCSAqIHRoZSB0d28gKHJlYWQvd3JpdGUpIHJlcXVl c3RzLCBzbyBpZiB3ZSBoYXZlZCBzdWNjZXNzZnVsbHkgd2FpdGVkLAo+Pj4gLQkgKiB3ZSBrbm93 IHdlIGhhdmUgcGFzc2VkIHRoZSBsYXN0IHdyaXRlLgo+Pj4gLQkgKi8KPj4+IC0JaTkxNV9nZW1f cmVxdWVzdF9hc3NpZ24oJm9iai0+bGFzdF93cml0ZV9yZXEsIE5VTEwpOwo+Pj4gLQo+Pj4gLQly ZXR1cm4gMDsKPj4+ICsJcmV0dXJuIF9faTkxNV93YWl0X3JlcXVlc3QocmVxLCByZXNldF9jb3Vu dGVyLAo+Pj4gKwkJCQkgICBpbnRlcnJ1cHRpYmxlLCBOVUxMLCBOVUxMKTsKPj4+ICAgfQo+Pgo+ PiBOZXQgY29kZSBjb21tZW50cyAtLysgZm9yIHRoaXMgcGF0Y2ggbmVlZHMgaW1wcm92ZW1lbnQu IDopIEFib3ZlIHlvdQo+PiBkZWxldGVkIGEgY2h1bmsgYnV0IGJlbG93IGFkZGVkIG5vdGhpbmcu Cj4KPiBJIGRpZC4gSXQncyBub3QgYWRkZWQgaGVyZSBhcyB0aGlzIGNvZGUgaXMgYnVnZ3kuCgpJ biBhIGxhdGVyIHZlcnNpb24gb3IgeW91IG1lYW4gZmV3IGxpbmVzIGF0IGk5MTVfZ2VtX29iamVj dF9zeW5jPwoKPj4gSSB0aGluayBzb21ldGhpbmcgaGlnaCBsZXZlbCBpcyBuZWVkZWQgdG8gZXhw bGFpbiB0aGUgYWN0aXZlIGxpc3RzCj4+IGFuZCB0cmFja2luZyBldGMuCj4KPiBHRU0gb2JqZWN0 IGRvbWFpbiBtYW5hZ2VtZW50IGFuZCBldmljdGlvbi4KPgo+Pj4gICAvKioKPj4+IEBAIC0xNDA1 LDE4ICsxMzgxLDM5IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgaW50Cj4+PiAgIGk5MTVfZ2VtX29i amVjdF93YWl0X3JlbmRlcmluZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+Pj4g ICAJCQkgICAgICAgYm9vbCByZWFkb25seSkKPj4+ICAgewo+Pj4gLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcTsKPj4+IC0JaW50IHJldDsKPj4+ICsJaW50IHJldCwgaTsKPj4+Cj4+ PiAtCXJlcSA9IHJlYWRvbmx5ID8gb2JqLT5sYXN0X3dyaXRlX3JlcSA6IG9iai0+bGFzdF9yZWFk X3JlcTsKPj4+IC0JaWYgKCFyZXEpCj4+PiArCWlmICghb2JqLT5hY3RpdmUpCj4+PiAgIAkJcmV0 dXJuIDA7Cj4+Pgo+Pj4gLQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChyZXEpOwo+Pj4gLQlpZiAo cmV0KQo+Pj4gLQkJcmV0dXJuIHJldDsKPj4+ICsJaWYgKHJlYWRvbmx5KSB7Cj4+PiArCQlpZiAo b2JqLT5sYXN0X3dyaXRlX3JlcSAhPSBOVUxMKSB7Cj4+PiArCQkJcmV0ID0gaTkxNV93YWl0X3Jl cXVlc3Qob2JqLT5sYXN0X3dyaXRlX3JlcSk7Cj4+PiArCQkJaWYgKHJldCkKPj4+ICsJCQkJcmV0 dXJuIHJldDsKPj4+ICsKPj4+ICsJCQlpID0gb2JqLT5sYXN0X3dyaXRlX3JlcS0+cmluZy0+aWQ7 Cj4+PiArCQkJaWYgKG9iai0+bGFzdF9yZWFkX3JlcVtpXSA9PSBvYmotPmxhc3Rfd3JpdGVfcmVx KQo+Pj4gKwkJCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlX19yZWFkKG9iaiwgaSk7Cj4+PiArCQkJ ZWxzZQo+Pj4gKwkJCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlX193cml0ZShvYmopOwo+Pgo+PiBB Ym92ZSBtZW50aW9uZWQgY29tbWVudHMgd291bGQgZXNwZWNpYWxseSBoZWxwIHVuZGVyc3RhbmQg dGhlCj4+IG9yZGVyaW5nIHJ1bGVzIGhlcmUuCj4+Cj4+PiArCQl9Cj4+PiArCX0gZWxzZSB7Cj4+ PiArCQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgewo+Pj4gKwkJCWlmIChv YmotPmxhc3RfcmVhZF9yZXFbaV0gPT0gTlVMTCkKPj4+ICsJCQkJY29udGludWU7Cj4+PiArCj4+ PiArCQkJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3Qob2JqLT5sYXN0X3JlYWRfcmVxW2ldKTsKPj4+ ICsJCQlpZiAocmV0KQo+Pj4gKwkJCQlyZXR1cm4gcmV0Owo+Pj4gKwo+Pj4gKwkJCWk5MTVfZ2Vt X29iamVjdF9yZXRpcmVfX3JlYWQob2JqLCBpKTsKPj4+ICsJCX0KPj4KPj4gSSB0aGluayB3aXRo IG9wdGltaXN0aWMgc3Bpbm5pbmcgdGhpcyBjb3VsZCBlbmQgdXAgZG9pbmcgbnVtX3JpbmdzCj4+ IHNwaW5zIGV0YyBpbiBzZXF1ZW5jZS4gV291bGQgaXQgYmUgd29ydGggc21hcnRpbmcgaXQgdXAg c29tZWhvdz8KPgo+IEhtbS4gR29vZCBwb2ludC4gT2J2aW91c2x5IHRoZSBnb2FsIG9mIHRoZSBv cHRpbWlzYXRpb24gaXMgdG8gaGF2ZSBtb3JlCj4gb3Bwb3J0dW5pdGllcyB3aGVyZSB3ZSBuZXZl ciBoYXZlIHRvIHdhaXQgYXQgYXQgYWxsLiBXcml0aW5nIGEgbmV3Cj4gaTkxNV93YWl0X3JlcXVl c3RzKCkgd2lsbCBhZGQgYSBsb3Qgb2YgY29kZSwgZGVmaW5pdGVseSBzb21ldGhpbmcgSSB3YW50 Cj4gdG8gcG9zdHBvbmUuIEJ1dCBnaXZlbiB0aGUgc2VxdWVudGlhbCB3YWl0LCBsYXRlciBvbmVz IGFyZSBtb3JlIGxpa2VseQo+IHRvIGFscmVhZHkgYmUgY29tcGxldGUuCgpKdXN0IGJlY2F1c2Ug b2YgZWxhcHNlZCB0aW1lIEkgc3VwcG9zZSwgbm90IGJlY2F1c2Ugb2YgYW55IGNvbmNlcHR1YWwg CmNvcnJlbGF0aW9ucyBiZXR3ZWVuIGV4ZWN1dGlvbiB0aW1lIGFuZCByaW5ncy4gSWYgd2UgaGF2 ZSB0aHJlZSBiYXRjaGVzIApvbiB0aHJlZSByaW5ncyB3aXRoIGV4ZWN1dGlvbiB0aW1lcyBsaWtl OgoKMDogPT0KMTogPT09PQoyOiA9PT09PT09PQoKSXQgd2lsbCBlbmQgdXAgInNwaW4gYSBiaXQg d2FpdCBhIGJpdCIgdGhyZWUgdGltZXMuCgpCdXQgaXQgaXMgcHJvYmFibHkgbm90IGxpa2VseSBz byBJIGRlZmVyIHRvIHlvdXIgb3BpbmlvbiB0aGF0IGl0IGlzIE9LIAp0byBwb3N0cG9uZSBzbWFy dGluZyB0aGlzIHVwLgoKPj4+ICsJCUJVR19PTihvYmotPmFjdGl2ZSk7Cj4+Cj4+IEJldHRlciBX QVJOIGFuZCBoYWx0IHRoZSBkcml2ZXIgaW5kaXJlY3RseSBpZiB1bmF2b2lkYWJsZS4KPgo+IEl0 J3MgYSBkZWJ1ZyBsZWZ0b3ZlciwgaXQncyBnb25lLgo+Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmV0 dXJuIDA7Cj4+Pgo+Pj4gLQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nX190 YWlsKG9iaik7Cj4+PiAgIH0KPj4+Cj4+PiAgIC8qIEEgbm9uYmxvY2tpbmcgdmFyaWFudCBvZiB0 aGUgYWJvdmUgd2FpdC4gVGhpcyBpcyBhIGhpZ2hseSBkYW5nZXJvdXMgcm91dGluZQo+Pj4gQEAg LTE0MjcsMzcgKzE0MjQsNzEgQEAgaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nX19ub25i bG9ja2luZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+Pj4gICAJCQkJCSAgICBz dHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYsCj4+PiAgIAkJCQkJICAgIGJv b2wgcmVhZG9ubHkpCj4+PiAgIHsKPj4+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpy ZXE7Cj4+PiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKPj4+ICAg CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4+ PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdHNbSTkxNV9OVU1fUklOR1Nd Owo+Pj4gICAJdW5zaWduZWQgcmVzZXRfY291bnRlcjsKPj4+IC0JaW50IHJldDsKPj4+ICsJaW50 IHJldCwgaSwgbiA9IDA7Cj4+Pgo+Pj4gICAJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+ c3RydWN0X211dGV4KSk7Cj4+PiAgIAlCVUdfT04oIWRldl9wcml2LT5tbS5pbnRlcnJ1cHRpYmxl KTsKPj4+Cj4+PiAtCXJlcSA9IHJlYWRvbmx5ID8gb2JqLT5sYXN0X3dyaXRlX3JlcSA6IG9iai0+ bGFzdF9yZWFkX3JlcTsKPj4+IC0JaWYgKCFyZXEpCj4+PiArCWlmICghb2JqLT5hY3RpdmUpCj4+ PiAgIAkJcmV0dXJuIDA7Cj4+Pgo+Pj4gICAJcmV0ID0gaTkxNV9nZW1fY2hlY2tfd2VkZ2UoJmRl dl9wcml2LT5ncHVfZXJyb3IsIHRydWUpOwo+Pj4gICAJaWYgKHJldCkKPj4+ICAgCQlyZXR1cm4g cmV0Owo+Pj4KPj4+IC0JcmV0ID0gaTkxNV9nZW1fY2hlY2tfb2xyKHJlcSk7Cj4+PiAtCWlmIChy ZXQpCj4+PiAtCQlyZXR1cm4gcmV0Owo+Pj4gLQo+Pj4gICAJcmVzZXRfY291bnRlciA9IGF0b21p Y19yZWFkKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOwo+Pj4gLQlpOTE1X2dl bV9yZXF1ZXN0X3JlZmVyZW5jZShyZXEpOwo+Pgo+PiBHb29kIHBsYWNlIGZvciBhIGNvbW1lbnQ6 IEJ1aWxkIGFuIGFycmF5IG9mIHJlcXVlc3RzIHRvIGJlIHdhaXRlZCB1cG9uIGV0Yy4uCj4KPiBD b2RlIGNvbW1lbnRzIG5lZWQgdG8gZXhwbGFpbiB3aHkuCgpJIHN1cHBvc2UgdGhhdCBtZWFucyBp dCBpcyB0b3RhbGx5IG9idmlvdXMgd2hhdCBhbGwgdGhpcyBjb2RlIGRvZXMgc2luY2UgCnRoZXJl IGFyZSBubyBjb21tZW50cz8gOkQKClNvbWV0aW1lcyBpdCBjYW4gaGVscCB0byBzYXkgd2hhdCB5 b3UgYXJlIGRvaW5nIGlmIGl0IGlzIGEgYmxvY2sgb2YgY29kZSAKaW4gcXVlc3Rpb24uIFlvdSBj YW4gZXZlbiBhZGQgd2h5IHRvIHRoZSB3aGF0LiBJIHRoaW5rIGl0IGhlbHBzIHRoZSAKcmV2aWV3 ZXIgb3IgYW55b25lIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGluIHRoZSBmdXR1cmUu Cgo+Pj4gKwo+Pj4gKwlpZiAocmVhZG9ubHkpIHsKPj4+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcnE7Cj4+PiArCj4+PiArCQlycSA9IG9iai0+bGFzdF93cml0ZV9yZXE7Cj4+PiAr CQlpZiAocnEgPT0gTlVMTCkKPj4+ICsJCQlyZXR1cm4gMDsKPj4+ICsKPj4+ICsJCXJldCA9IGk5 MTVfZ2VtX2NoZWNrX29scihycSk7Cj4+PiArCQlpZiAocmV0KQo+Pj4gKwkJCWdvdG8gZXJyOwo+ Pj4gKwo+Pj4gKwkJcmVxdWVzdHNbbisrXSA9IGk5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNlKHJx KTsKPj4+ICsJfSBlbHNlIHsKPj4+ICsJCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsg aSsrKSB7Cj4+PiArCQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTsKPj4+ICsKPj4+ ICsJCQlycSA9IG9iai0+bGFzdF9yZWFkX3JlcVtpXTsKPj4+ICsJCQlpZiAocnEgPT0gTlVMTCkK Pj4+ICsJCQkJY29udGludWU7Cj4+PiArCj4+PiArCQkJcmV0ID0gaTkxNV9nZW1fY2hlY2tfb2xy KHJxKTsKPj4+ICsJCQlpZiAocmV0KQo+Pj4gKwkJCQlnb3RvIGVycjsKPj4+ICsKPj4+ICsJCQly ZXF1ZXN0c1tuKytdID0gaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2UocnEpOwo+Pj4gKwkJfQo+ Pj4gKwl9Cj4+Cj4+IEkgd29uZGVyIGlmIG1lcmdpbmcgdGhlIHRyYWNrZWQgcmVxdWVzdHMgdG8g YSBzaW5nbGUgYXJyYXksIHJvdWdobHkKPj4gc29tZXRoaW5nIGxpa2U6Cj4+Cj4+IAlvYmotPmxh c3RfcmVxWzEgKyBOVU1fUklOR1NdCj4+Cj4+IGFuZDoKPj4KPj4gCUxBU1RfV1JJVEVfUkVRID0g MAo+PiAJTEFTVF9SRUFEX1JFUShyaW5nKSA9IDEgKyByaW5nCj4+Cj4+IENvdWxkIG1ha2UgdGhl IGFib3ZlIGxvZ2ljIG1vcmUgY29tcGFjdCBhbmQgaG93IHdvdWxkIGl0IGxvb2sKPj4gZWxzZXdo ZXJlIGluIHRoZSBjb2RlPyBEZWZpbml0ZWx5IGxvb2tzIGxpa2UgaXQgd291bGQgd29yayBmb3Ig dGhlCj4+IGFib3ZlIGxvb3A6Cj4+Cj4+IAlmb3IgKGkgPSBMQVNUX1dSSVRFX1JFUTsgaSA8PSBM QVNUX1RSQUNLRURfUkVRVUVTVDsgaSsrKSB7Cj4+IAkJcnEgPSBvYmotPmxhc3RfcmVxW2ldOwo+ PiAJCWlmIChycSA9PSBOVUxMICYmIHJlYWRvbmx5KQo+PiAJCQlyZXR1cm4gMDsKPj4gCQllbHNl IGlmIChycSA9PSBOVUxMKQo+PiAJCQljb250aW51ZTsKPj4gCQkuLi4KPj4gCQlyZXF1ZXN0c1tu KytdID0gLi4uCj4+IAkJaWYgKHJlYWRvbmx5KQo+PiAJCQlicmVhazsKPj4gCX0KPj4KPj4gTm90 IHN1cmUsIG1pZ2h0IG5vdCBiZSB0aGF0IGdyZWF0IGlkZWEuCj4KPiBOYWguIEkgdGhpbmsgaXQn cyBvbmx5IGEgd2luIGhlcmUuIEVsc2V3aGVyZSB0aGVyZSBpcyBncmVhdGVyCj4gZGlmZXJyZW50 aWF0aW9uIGJldHdlZW4gcmVhZC93cml0ZS4gQ29uY2VwdHVhbGx5IGl0IGlzIGV2ZW4KPgo+IAlz dHJ1Y3Qgewo+IAkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0Owo+IAkJc3Ry dWN0IGxpc3RfaGVhZCBhY3RpdmVfbGluazsKPiAJfSByZWFkW0k5MTVfTlVNX1JJTkdTXTsKPiAJ c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICp3cml0ZV9yZXF1ZXN0LCAqZmVuY2VfcmVxdWVz dDsKPgo+Pj4gICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4+PiAtCXJldCA9 IF9faTkxNV93YWl0X3JlcXVlc3QocmVxLCByZXNldF9jb3VudGVyLCB0cnVlLCBOVUxMLCBmaWxl X3ByaXYpOwo+Pj4gKwlmb3IgKGkgPSAwOyByZXQgPT0gMCAmJiBpIDwgbjsgaSsrKQo+Pj4gKwkJ cmV0ID0gX19pOTE1X3dhaXRfcmVxdWVzdChyZXF1ZXN0c1tpXSwgcmVzZXRfY291bnRlciwgdHJ1 ZSwKPj4+ICsJCQkJCSAgTlVMTCwgZmlsZV9wcml2KTsKPj4KPj4gQW5vdGhlciBjaGFuY2UgZm9y IG1vcmUgb3B0aW1hbCAiZ3JvdXAiIHdhaXRpbmcuCj4+Cj4+PiAgIAltdXRleF9sb2NrKCZkZXYt PnN0cnVjdF9tdXRleCk7Cj4+PiAtCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UocmVxKTsK Pj4+IC0JaWYgKHJldCkKPj4+IC0JCXJldHVybiByZXQ7Cj4+Pgo+Pj4gLQlyZXR1cm4gaTkxNV9n ZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nX190YWlsKG9iaik7Cj4+PiArZXJyOgo+Pj4gKwlmb3Ig KGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4+PiArCQlpZiAocmV0ID09IDApIHsKPj4+ICsJCQlpbnQg cmluZyA9IHJlcXVlc3RzW2ldLT5yaW5nLT5pZDsKPj4+ICsJCQlpZiAob2JqLT5sYXN0X3JlYWRf cmVxW3JpbmddID09IHJlcXVlc3RzW2ldKQo+Pj4gKwkJCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJl X19yZWFkKG9iaiwgcmluZyk7Cj4+PiArCQkJaWYgKG9iai0+bGFzdF93cml0ZV9yZXEgPT0gcmVx dWVzdHNbaV0pCj4+PiArCQkJCWk5MTVfZ2VtX29iamVjdF9yZXRpcmVfX3dyaXRlKG9iaik7Cj4+ PiArCQl9Cj4+Cj4+IFdoYXQgaWYgb25lIHdhaXQgc3VjY2VlZGVkIGFuZCBvbmUgZmFpbGVkLCBu byBuZWVkIHRvIHVwZGF0ZSBhbnl0aGluZz8KPgo+IFRvbyBtdWNoIGNvbXBsaWNhdGlvbiBmb3Ig YW4gZXJyb3IgcGF0aC4gVGhpcyBqdXN0IGFpbXMgdG8gb3B0aW1pc2UgdGhlCj4gYm9va2tlZXBp bmcgZm9yIGFuIG9iamVjdCBhZnRlciBhIHdhaXQuCj4KPj4+IC1zdGF0aWMgdm9pZAo+Pj4gLWk5 MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAo+Pj4gLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+Pj4gK3Zv aWQgaTkxNV92bWFfbW92ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4+PiArCQkJ ICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+Pj4gICB7Cj4+PiAtCXN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwo+Pj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpv bGRfcmluZzsKPj4+IC0KPj4+IC0JQlVHX09OKHJpbmcgPT0gTlVMTCk7Cj4+PiAtCj4+PiAtCXJl cSA9IGludGVsX3JpbmdfZ2V0X3JlcXVlc3QocmluZyk7Cj4+PiAtCW9sZF9yaW5nID0gaTkxNV9n ZW1fcmVxdWVzdF9nZXRfcmluZyhvYmotPmxhc3RfcmVhZF9yZXEpOwo+Pj4gLQo+Pj4gLQlpZiAo b2xkX3JpbmcgIT0gcmluZyAmJiBvYmotPmxhc3Rfd3JpdGVfcmVxKSB7Cj4+PiAtCQkvKiBLZWVw IHRoZSByZXF1ZXN0IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHJpbmcgKi8KPj4+IC0JCWk5MTVf Z2VtX3JlcXVlc3RfYXNzaWduKCZvYmotPmxhc3Rfd3JpdGVfcmVxLCByZXEpOwo+Pj4gLQl9Cj4+ PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9iajsKPj4+Cj4+PiAg IAkvKiBBZGQgYSByZWZlcmVuY2UgaWYgd2UncmUgbmV3bHkgZW50ZXJpbmcgdGhlIGFjdGl2ZSBs aXN0LiAqLwo+Pj4gLQlpZiAoIW9iai0+YWN0aXZlKSB7Cj4+PiArCWlmIChvYmotPmxhc3RfcmVh ZF9yZXFbcmluZy0+aWRdID09IE5VTEwgJiYgb2JqLT5hY3RpdmUrKyA9PSAwKQo+Pj4gICAJCWRy bV9nZW1fb2JqZWN0X3JlZmVyZW5jZSgmb2JqLT5iYXNlKTsKPj4+IC0JCW9iai0+YWN0aXZlID0g MTsKPj4+IC0JfQo+Pj4gKwlCVUdfT04ob2JqLT5hY3RpdmUgPT0gMCB8fCBvYmotPmFjdGl2ZSA+ IEk5MTVfTlVNX1JJTkdTKTsKPj4KPj4gTWF5YmUgd2UgbmVlZCBJOTE1X1dBUk5fQU5EX0hBTFQo KSB3aGljaCB3b3VsZCBiZSBhIFdBUk4oKSBwbHVzIHB1dAo+PiB0aGUgZHJpdmVyIGluIGhhbHRl ZCBzdGF0ZT8KPgo+IFRoaXMganVzdCBtYWdpY2FsbHkgZXZhcG9yYXRlcyBieSBtb3Zpbmcgb3Zl ciB0byBhbiBvYmotPmFjdGl2ZQo+IGJpdGZpZWxkLiBZb3UnbGwgbG92ZSB2NSwgYnV0IGhhdGUg djYgKHdoaWNoIGFidXNlcyBhIGxvdHMgbW9yZSBpbnRlcm5hbAo+IGtub3dsZWRnZSBvZiByZXF1 ZXN0IG1hbmFnZW1lbnQpLgo+Cj4+PiArCWlmICh0byA9PSBOVUxMKSB7Cj4+PiArCQlyZXQgPSBp OTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqLCByZWFkb25seSk7Cj4+PiArCX0gZWxz ZSBpZiAocmVhZG9ubHkpIHsKPj4+ICsJCXJldCA9IF9faTkxNV9nZW1fb2JqZWN0X3N5bmMob2Jq LCB0bywKPj4+ICsJCQkJCSAgICAgb2JqLT5sYXN0X3dyaXRlX3JlcSk7Cj4+PiArCX0gZWxzZSB7 Cj4+PiArCQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgewo+Pj4gKwkJCXJl dCA9IF9faTkxNV9nZW1fb2JqZWN0X3N5bmMob2JqLCB0bywKPj4+ICsJCQkJCQkgICAgIG9iai0+ bGFzdF9yZWFkX3JlcVtpXSk7Cj4+Cj4+IEhlcmUgSSB0aGluayBpcyBhbm90aGVyIG9wcG9ydHVu aXR5IHRvIHdhaXQgZm9yIGFsbCBvZiB0aGVtIGF0IG9uY2UuCj4+IFZpYSBhIF9faTkxNV9nZW1f b2JqZWN0X3N5bmMgaGVscGVyIHdoaWNoIHdvdWxkIHRha2UgYW4gYXJyYXksIG9yIGEKPj4gcmlu Zy9yZXF1ZXN0IG1hc2suIE5vdCBzdXJlIGlmIGl0IHdvdWxkIGJlIHdvcnRoIGl0IHRob3VnaC4K Pgo+IE5vLiBUaGlzIGlzIG1vcmUgY29tcGxpY2F0ZWQgc3RpbGwgc2luY2Ugd2UgaGF2ZSB0aGUg c2VtYXBob3JlcyB0byBhbHNvCj4gZGVhbCB3aWxsLiBEZWZpbml0ZWx5IHdvcnRoIHdhaXRpbmcg Zm9yIGEgdGVzdGNhc2UuCj4KPj4+IC0JYXJncy0+YnVzeSA9IG9iai0+YWN0aXZlOwo+Pj4gLQlp ZiAob2JqLT5sYXN0X3JlYWRfcmVxKSB7Cj4+PiAtCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpy aW5nOwo+Pj4gICAJCUJVSUxEX0JVR19PTihJOTE1X05VTV9SSU5HUyA+IDE2KTsKPj4+IC0JCXJp bmcgPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF9yZWFkX3JlcSk7Cj4+PiAt CQlhcmdzLT5idXN5IHw9IGludGVsX3JpbmdfZmxhZyhyaW5nKSA8PCAxNjsKPj4+ICsKPj4+ICsJ CWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7Cj4+PiArCQkJaWYgKG9iai0+ bGFzdF9yZWFkX3JlcVtpXSA9PSBOVUxMKQo+Pj4gKwkJCQljb250aW51ZTsKPj4+ICsKPj4+ICsJ CQlhcmdzLT5idXN5IHw9IDEgPDwgKDE2ICsgaSkgfCAxOwo+Pgo+PiBEb2Vzbid0IGxvb2sgbGlr ZSBlcXVpdmFsZW50IGJpdHMgd2lsbCBiZSBzZXQ/IFdoYXQgaXMgdGhlICJ8IDEiIGF0Cj4+IHRo ZSBlbmQgZm9yPwo+Cj4gTm8uIEl0J3MgZGVzaWduZWQgZm9yLiBUaGlzIGlzIHdoYXQgdXNlcnNw YWNlcyBleHBlY3RzIGFuZCBpcyByZXF1aXJlZAo+IHRvIGhlbHAgd29ya2Fyb3VuZCAjNzA3NjQu Cj4KPiBJIHdhbnQgdG8gcmVwbGFjZSB0aGUgKHwgMSkgd2l0aAo+ICh8IGludGVsX3JpbmdfZmxh ZyhvYmotPmxhc3Rfd3JpdGVfcmVxdWVzdC0+cmluZyk7IGJ1dCBpdCBleGlzdHMgYmVjYXVzZQo+ IHdlIGNvdWxkbid0IGJlIHN1cmUgaWYgYW55IHVzZXJzcGFjZSBkZXBlbmRlZCBvbiBleGFjdGx5 ICgwLCAxKS4KCkkgZG9uJ3QgZ2V0IGl0LCBpdCBpcyBleHBvcnRlZCB0byB1c2Vyc3BhY2UgYW5k IG5vdyBpdCBpcyBkaWZmZXJlbnQsIHdoeSAKaXMgdGhhdCBPSz8KCj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jCj4+PiBpbmRleCAwZWZiMTlhOWI5YTUuLjFhMzc1NmU2YmVhNCAx MDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+Pj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4+PiBAQCAtOTY3NCw3 ICs5Njc0LDcgQEAgc3RhdGljIGJvb2wgdXNlX21taW9fZmxpcChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nLAo+Pj4gICAJZWxzZSBpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQo+Pj4gICAJ CXJldHVybiB0cnVlOwo+Pj4gICAJZWxzZQo+Pj4gLQkJcmV0dXJuIHJpbmcgIT0gaTkxNV9nZW1f cmVxdWVzdF9nZXRfcmluZyhvYmotPmxhc3RfcmVhZF9yZXEpOwo+Pj4gKwkJcmV0dXJuIHJpbmcg IT0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfcmluZyhvYmotPmxhc3Rfd3JpdGVfcmVxKTsKPj4+ICAg fQo+Pgo+PiBXaHkgdGhpcz8KPgo+IEJlY2F1c2UgdGhhdCBpcyBjb3JyZWN0LgoKT0sgSSdsbCB0 aGluayBhYm91dCBpdC4KClJlZ2FyZHMsCgpUdnJ0a28KCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=