From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v2 03/22] drm/i915: Micro-optimise gen8_ppgtt_insert_entries() Date: Mon, 13 Feb 2017 16:58:06 +0200 Message-ID: <87a89qp281.fsf@gaia.fi.intel.com> References: <20170210193845.14281-1-chris@chris-wilson.co.uk> <20170210193845.14281-3-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6D4136E41F for ; Mon, 13 Feb 2017 15:00:10 +0000 (UTC) In-Reply-To: <20170210193845.14281-3-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 , intel-gfx@lists.freedesktop.org Cc: matthew.auld@intel.com List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gSW1wcm92 ZSB0aGUgc2cgaXRlcmF0aW9uIGFuZCBpbiBodGUgcHJvY2VzcyBlbGltaW5hdGUgYSBidWcgaW4K PiBtaXNjb21wdXRpbmcgdGhlIHBtbDQgbGVuZ3RoIGFzIG9yaWdfbmVudHM8PFBBR0VfU0hJRlQg aXMgbm8gbG9uZ2VyIHRoZQo+IGZ1bGwgbGVuZ3RoIG9mIHRoZSBzZyB0YWJsZS4KPgo+IFNpZ25l ZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyB8IDE1NyArKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDgyIGluc2VydGlvbnMo KyksIDc1IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBp bmRleCBjYTFmNWZhNjk4NGYuLmZjYjhkNjM1YWVjMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5jCj4gQEAgLTc1MSw5ICs3NTEsOSBAQCBzdGF0aWMgYm9vbCBnZW44X3BwZ3R0 X2NsZWFyX3B0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJdW5zaWduZWQgaW50 IG51bV9lbnRyaWVzID0gZ2VuOF9wdGVfY291bnQoc3RhcnQsIGxlbmd0aCk7Cj4gIAl1bnNpZ25l ZCBpbnQgcHRlID0gZ2VuOF9wdGVfaW5kZXgoc3RhcnQpOwo+ICAJdW5zaWduZWQgaW50IHB0ZV9l bmQgPSBwdGUgKyBudW1fZW50cmllczsKPiAtCWdlbjhfcHRlX3QgKnB0X3ZhZGRyOwo+IC0JZ2Vu OF9wdGVfdCBzY3JhdGNoX3B0ZSA9IGdlbjhfcHRlX2VuY29kZSh2bS0+c2NyYXRjaF9wYWdlLmRh ZGRyLAo+IC0JCQkJCQkgSTkxNV9DQUNIRV9MTEMpOwo+ICsJZ2VuOF9wdGVfdCBzY3JhdGNoX3B0 ZSA9Cj4gKwkJZ2VuOF9wdGVfZW5jb2RlKHZtLT5zY3JhdGNoX3BhZ2UuZGFkZHIsIEk5MTVfQ0FD SEVfTExDKTsKClBsZWFzZSBjb25zdCB0aGUgc2NyYXRjaF9wdGUgYW5kIHB0ZV9lbmQgd2hpbGUg eW91IGFyZSBoZXJlLgoKPiArCWdlbjhfcHRlX3QgKnZhZGRyOwo+ICAKPiAgCWlmIChXQVJOX09O KCFweF9wYWdlKHB0KSkpCj4gIAkJcmV0dXJuIGZhbHNlOwo+IEBAIC03NjYsMTIgKzc2NiwxMCBA QCBzdGF0aWMgYm9vbCBnZW44X3BwZ3R0X2NsZWFyX3B0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtLAo+ICAJCQlyZXR1cm4gdHJ1ZTsKPiAgCX0KPiAgCj4gLQlwdF92YWRkciA9IGttYXBf cHgocHQpOwo+IC0KPiArCXZhZGRyID0ga21hcF9weChwdCk7Cj4gIAl3aGlsZSAocHRlIDwgcHRl X2VuZCkKPiAtCQlwdF92YWRkcltwdGUrK10gPSBzY3JhdGNoX3B0ZTsKPiAtCj4gLQlrdW5tYXBf cHgocHBndHQsIHB0X3ZhZGRyKTsKPiArCQl2YWRkcltwdGUrK10gPSBzY3JhdGNoX3B0ZTsKPiAr CWt1bm1hcF9weChwcGd0dCwgdmFkZHIpOwo+ICAKPiAgCXJldHVybiBmYWxzZTsKPiAgfQo+IEBA IC04NzksNzEgKzg3Nyw5MyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFyX3JhbmdlKHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCWdlbjhfcHBndHRfY2xlYXJfcGRwKHZt LCAmcHBndHQtPnBkcCwgc3RhcnQsIGxlbmd0aCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkCj4g LWdlbjhfcHBndHRfaW5zZXJ0X3B0ZV9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtLAo+ICtzdHJ1Y3Qgc2d0X2RtYSB7Cj4gKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ICsJ ZG1hX2FkZHJfdCBkbWEsIG1heDsKPiArfTsKPiArCj4gK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUg Ym9vbAo+ICtnZW44X3BwZ3R0X2luc2VydF9wdGVfZW50cmllcyhzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQsCj4gIAkJCSAgICAgIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIg KnBkcCwKPiAtCQkJICAgICAgc3RydWN0IHNnX3BhZ2VfaXRlciAqc2dfaXRlciwKPiAtCQkJICAg ICAgdWludDY0X3Qgc3RhcnQsCj4gKwkJCSAgICAgIHN0cnVjdCBzZ3RfZG1hICppdGVyLAo+ICsJ CQkgICAgICB1NjQgc3RhcnQsCj4gIAkJCSAgICAgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNo ZV9sZXZlbCkKPiAgewo+IC0Jc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gaTkxNV92bV90 b19wcGd0dCh2bSk7Cj4gLQlnZW44X3B0ZV90ICpwdF92YWRkcjsKPiAtCXVuc2lnbmVkIHBkcGUg PSBnZW44X3BkcGVfaW5kZXgoc3RhcnQpOwo+IC0JdW5zaWduZWQgcGRlID0gZ2VuOF9wZGVfaW5k ZXgoc3RhcnQpOwo+IC0JdW5zaWduZWQgcHRlID0gZ2VuOF9wdGVfaW5kZXgoc3RhcnQpOwo+ICsJ dW5zaWduZWQgaW50IHBkcGUgPSBnZW44X3BkcGVfaW5kZXgoc3RhcnQpOwo+ICsJdW5zaWduZWQg aW50IHBkZSA9IGdlbjhfcGRlX2luZGV4KHN0YXJ0KTsKPiArCXVuc2lnbmVkIGludCBwdGUgPSBn ZW44X3B0ZV9pbmRleChzdGFydCk7Cj4gKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQ7 Cj4gKwljb25zdCBnZW44X3B0ZV90IHB0ZV9lbmNvZGUgPSBnZW44X3B0ZV9lbmNvZGUoMCwgY2Fj aGVfbGV2ZWwpOwo+ICsJZ2VuOF9wdGVfdCAqdmFkZHI7Cj4gKwlib29sIHJldCA9IHRydWU7Cj4g IAo+IC0JcHRfdmFkZHIgPSBOVUxMOwo+ICsJcGQgPSBwZHAtPnBhZ2VfZGlyZWN0b3J5W3BkcGVd Owo+ICsJdmFkZHIgPSBrbWFwX3B4KHBkLT5wYWdlX3RhYmxlW3BkZV0pOwo+ICsJZG8gewo+ICsJ CXZhZGRyW3B0ZV0gPSBwdGVfZW5jb2RlIHwgaXRlci0+ZG1hOwo+ICsJCWl0ZXItPmRtYSArPSBQ QUdFX1NJWkU7Cj4gKwkJaWYgKGl0ZXItPmRtYSA+PSBpdGVyLT5tYXgpIHsKPiArCQkJaXRlci0+ c2cgPSBfX3NnX25leHQoaXRlci0+c2cpOwo+ICsJCQlpZiAoIWl0ZXItPnNnKSB7Cj4gKwkJCQly ZXQgPSBmYWxzZTsKPiArCQkJCWJyZWFrOwoKV2UgbmV2ZXIgZXhpdCB3aXRoIHJldCA9IHRydWUg aW4gdGhpcyBsb29wLgoKPiArCQkJfQo+ICAKPiAtCXdoaWxlIChfX3NnX3BhZ2VfaXRlcl9uZXh0 KHNnX2l0ZXIpKSB7Cj4gLQkJaWYgKHB0X3ZhZGRyID09IE5VTEwpIHsKPiAtCQkJc3RydWN0IGk5 MTVfcGFnZV9kaXJlY3RvcnkgKnBkID0gcGRwLT5wYWdlX2RpcmVjdG9yeVtwZHBlXTsKPiAtCQkJ c3RydWN0IGk5MTVfcGFnZV90YWJsZSAqcHQgPSBwZC0+cGFnZV90YWJsZVtwZGVdOwo+IC0JCQlw dF92YWRkciA9IGttYXBfcHgocHQpOwo+ICsJCQlpdGVyLT5kbWEgPSBzZ19kbWFfYWRkcmVzcyhp dGVyLT5zZyk7Cj4gKwkJCWl0ZXItPm1heCA9IGl0ZXItPmRtYSArIGl0ZXItPnNnLT5sZW5ndGg7 Cj4gIAkJfQo+ICAKPiAtCQlwdF92YWRkcltwdGVdID0KPiAtCQkJZ2VuOF9wdGVfZW5jb2RlKHNn X3BhZ2VfaXRlcl9kbWFfYWRkcmVzcyhzZ19pdGVyKSwKPiAtCQkJCQljYWNoZV9sZXZlbCk7Cj4g IAkJaWYgKCsrcHRlID09IEdFTjhfUFRFUykgewo+IC0JCQlrdW5tYXBfcHgocHBndHQsIHB0X3Zh ZGRyKTsKPiAtCQkJcHRfdmFkZHIgPSBOVUxMOwo+ICAJCQlpZiAoKytwZGUgPT0gSTkxNV9QREVT KSB7Cj4gLQkJCQlpZiAoKytwZHBlID09IEk5MTVfUERQRVNfUEVSX1BEUCh2bS0+aTkxNSkpCj4g LQkJCQkJYnJlYWs7Cj4gKwkJCQlwZCA9IHBkcC0+cGFnZV9kaXJlY3RvcnlbKytwZHBlXTsKPiAg CQkJCXBkZSA9IDA7Cj4gIAkJCX0KPiArCj4gKwkJCWt1bm1hcF9weChwcGd0dCwgdmFkZHIpOwo+ ICsJCQl2YWRkciA9IGttYXBfcHgocGQtPnBhZ2VfdGFibGVbcGRlXSk7Cj4gIAkJCXB0ZSA9IDA7 Cj4gIAkJfQo+IC0JfQo+ICsJfSB3aGlsZSAoMSk7Cj4gKwlrdW5tYXBfcHgocHBndHQsIHZhZGRy KTsKPiAgCj4gLQlpZiAocHRfdmFkZHIpCj4gLQkJa3VubWFwX3B4KHBwZ3R0LCBwdF92YWRkcik7 Cj4gKwlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2luc2Vy dF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+IC0JCQkJICAgICAgc3Ry dWN0IHNnX3RhYmxlICpwYWdlcywKPiAtCQkJCSAgICAgIHVpbnQ2NF90IHN0YXJ0LAo+IC0JCQkJ ICAgICAgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAo+IC0JCQkJICAgICAgdTMy IHVudXNlZCkKPiArc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9pbnNlcnRfM2x2bChzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSwKPiArCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCj4g KwkJCQkgICB1aW50NjRfdCBzdGFydCwKPiArCQkJCSAgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBj YWNoZV9sZXZlbCwKPiArCQkJCSAgIHUzMiB1bnVzZWQpCj4gIHsKPiAgCXN0cnVjdCBpOTE1X2h3 X3BwZ3R0ICpwcGd0dCA9IGk5MTVfdm1fdG9fcHBndHQodm0pOwo+IC0Jc3RydWN0IHNnX3BhZ2Vf aXRlciBzZ19pdGVyOwo+ICsJc3RydWN0IHNndF9kbWEgaXRlciA9IHsKPiArCQkuc2cgPSBwYWdl cy0+c2dsLAo+ICsJCS5kbWEgPSBzZ19kbWFfYWRkcmVzcyhpdGVyLnNnKSwKPiArCQkubWF4ID0g aXRlci5kbWEgKyBpdGVyLnNnLT5sZW5ndGgsCj4gKwl9Owo+ICAKPiAtCV9fc2dfcGFnZV9pdGVy X3N0YXJ0KCZzZ19pdGVyLCBwYWdlcy0+c2dsLCBzZ19uZW50cyhwYWdlcy0+c2dsKSwgMCk7Cj4g KwlnZW44X3BwZ3R0X2luc2VydF9wdGVfZW50cmllcyhwcGd0dCwgJnBwZ3R0LT5wZHAsICZpdGVy LAo+ICsJCQkJICAgICAgc3RhcnQsIGNhY2hlX2xldmVsKTsKPiArfQo+ICAKPiAtCWlmICghVVNF U19GVUxMXzQ4QklUX1BQR1RUKHZtLT5pOTE1KSkgewo+IC0JCWdlbjhfcHBndHRfaW5zZXJ0X3B0 ZV9lbnRyaWVzKHZtLCAmcHBndHQtPnBkcCwgJnNnX2l0ZXIsIHN0YXJ0LAo+IC0JCQkJCSAgICAg IGNhY2hlX2xldmVsKTsKPiAtCX0gZWxzZSB7Cj4gLQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rv cnlfcG9pbnRlciAqcGRwOwo+IC0JCXVpbnQ2NF90IHBtbDRlOwo+IC0JCXVpbnQ2NF90IGxlbmd0 aCA9ICh1aW50NjRfdClwYWdlcy0+b3JpZ19uZW50cyA8PCBQQUdFX1NISUZUOwo+ICtzdGF0aWMg dm9pZCBnZW44X3BwZ3R0X2luc2VydF80bHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt LAo+ICsJCQkJICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKPiArCQkJCSAgIHVpbnQ2NF90IHN0 YXJ0LAo+ICsJCQkJICAgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAo+ICsJCQkJ ICAgdTMyIHVudXNlZCkKPiArewo+ICsJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gaTkx NV92bV90b19wcGd0dCh2bSk7Cj4gKwlzdHJ1Y3Qgc2d0X2RtYSBpdGVyID0gewo+ICsJCS5zZyA9 IHBhZ2VzLT5zZ2wsCj4gKwkJLmRtYSA9IHNnX2RtYV9hZGRyZXNzKGl0ZXIuc2cpLAo+ICsJCS5t YXggPSBpdGVyLmRtYSArIGl0ZXIuc2ctPmxlbmd0aCwKPiArCX07Cj4gKwlzdHJ1Y3QgaTkxNV9w YWdlX2RpcmVjdG9yeV9wb2ludGVyICoqcGRwcyA9IHBwZ3R0LT5wbWw0LnBkcHM7Cj4gKwl1bnNp Z25lZCBpbnQgcG1sNGUgPSBnZW44X3BtbDRlX2luZGV4KHN0YXJ0KTsKPiAgCj4gLQkJZ2VuOF9m b3JfZWFjaF9wbWw0ZShwZHAsICZwcGd0dC0+cG1sNCwgc3RhcnQsIGxlbmd0aCwgcG1sNGUpIHsK PiAtCQkJZ2VuOF9wcGd0dF9pbnNlcnRfcHRlX2VudHJpZXModm0sIHBkcCwgJnNnX2l0ZXIsCj4g LQkJCQkJCSAgICAgIHN0YXJ0LCBjYWNoZV9sZXZlbCk7Cj4gLQkJfQo+IC0JfQo+ICsJd2hpbGUg KGdlbjhfcHBndHRfaW5zZXJ0X3B0ZV9lbnRyaWVzKHBwZ3R0LCBwZHBzW3BtbDRlKytdLCAmaXRl ciwKPiArCQkJCQkgICAgIHN0YXJ0LCBjYWNoZV9sZXZlbCkpCj4gKwkJOwo+ICB9Cj4gIAo+ICBz dGF0aWMgdm9pZCBnZW44X2ZyZWVfcGFnZV90YWJsZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+IEBAIC0xNTkxLDcgKzE2MTEsNiBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRf aW5pdChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIAlwcGd0dC0+YmFzZS5zdGFydCA9 IDA7Cj4gIAlwcGd0dC0+YmFzZS5jbGVhbnVwID0gZ2VuOF9wcGd0dF9jbGVhbnVwOwo+ICAJcHBn dHQtPmJhc2UuYWxsb2NhdGVfdmFfcmFuZ2UgPSBnZW44X2FsbG9jX3ZhX3JhbmdlOwo+IC0JcHBn dHQtPmJhc2UuaW5zZXJ0X2VudHJpZXMgPSBnZW44X3BwZ3R0X2luc2VydF9lbnRyaWVzOwo+ICAJ cHBndHQtPmJhc2UuY2xlYXJfcmFuZ2UgPSBnZW44X3BwZ3R0X2NsZWFyX3JhbmdlOwo+ICAJcHBn dHQtPmJhc2UudW5iaW5kX3ZtYSA9IHBwZ3R0X3VuYmluZF92bWE7Cj4gIAlwcGd0dC0+YmFzZS5i aW5kX3ZtYSA9IHBwZ3R0X2JpbmRfdm1hOwo+IEBAIC0xNjA2LDYgKzE2MjUsOCBAQCBzdGF0aWMg aW50IGdlbjhfcHBndHRfaW5pdChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIAo+ICAJ CXBwZ3R0LT5iYXNlLnRvdGFsID0gMVVMTCA8PCA0ODsKPiAgCQlwcGd0dC0+c3dpdGNoX21tID0g Z2VuOF80OGJfbW1fc3dpdGNoOwo+ICsKPiArCQlwcGd0dC0+YmFzZS5pbnNlcnRfZW50cmllcyA9 IGdlbjhfcHBndHRfaW5zZXJ0XzRsdmw7Cj4gIAl9IGVsc2Ugewo+ICAJCXJldCA9IF9fcGRwX2lu aXQoZGV2X3ByaXYsICZwcGd0dC0+cGRwKTsKPiAgCQlpZiAocmV0KQo+IEBAIC0xNjIyLDYgKzE2 NDMsOCBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfaW5pdChzdHJ1Y3QgaTkxNV9od19wcGd0dCAq cHBndHQpCj4gIAkJCWlmIChyZXQpCj4gIAkJCQlnb3RvIGZyZWVfc2NyYXRjaDsKPiAgCQl9Cj4g Kwo+ICsJCXBwZ3R0LT5iYXNlLmluc2VydF9lbnRyaWVzID0gZ2VuOF9wcGd0dF9pbnNlcnRfM2x2 bDsKPiAgCX0KPiAgCj4gIAlpZiAoaW50ZWxfdmdwdV9hY3RpdmUoZGV2X3ByaXYpKQo+IEBAIC0x ODg4LDExICsxOTExLDYgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhcl9yYW5nZShzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCX0KPiAgfQo+ICAKPiAtc3RydWN0IHNndF9k bWEgewo+IC0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiAtCWRtYV9hZGRyX3QgZG1hLCBtYXg7 Cj4gLX07Cj4gLQo+ICBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2luc2VydF9lbnRyaWVzKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkJICAgICAgc3RydWN0IHNnX3RhYmxlICpw YWdlcywKPiAgCQkJCSAgICAgIHVpbnQ2NF90IHN0YXJ0LAo+IEBAIC0yNDM0LDI2ICsyNDUyLDE1 IEBAIHN0YXRpYyB2b2lkIGdlbjhfZ2d0dF9pbnNlcnRfZW50cmllcyhzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKPiAgCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSBpOTE1X3ZtX3RvX2dn dHQodm0pOwo+ICAJc3RydWN0IHNndF9pdGVyIHNndF9pdGVyOwo+ICAJZ2VuOF9wdGVfdCBfX2lv bWVtICpndHRfZW50cmllczsKPiAtCWdlbjhfcHRlX3QgZ3R0X2VudHJ5Owo+ICsJZ2VuOF9wdGVf dCBwdGVfZW5jb2RlID0gZ2VuOF9wdGVfZW5jb2RlKDAsIGxldmVsKTsKCkNvbnN0IHdvdWxkIGRv IGhlcmUgYWxzbyBmb3IgY29uc2lzdGVuY3kuCgotTWlrYQoKPiAgCWRtYV9hZGRyX3QgYWRkcjsK PiAtCWludCBpID0gMDsKPiAtCj4gLQlndHRfZW50cmllcyA9IChnZW44X3B0ZV90IF9faW9tZW0g KilnZ3R0LT5nc20gKyAoc3RhcnQgPj4gUEFHRV9TSElGVCk7Cj4gIAo+IC0JZm9yX2VhY2hfc2d0 X2RtYShhZGRyLCBzZ3RfaXRlciwgc3QpIHsKPiAtCQlndHRfZW50cnkgPSBnZW44X3B0ZV9lbmNv ZGUoYWRkciwgbGV2ZWwpOwo+IC0JCWdlbjhfc2V0X3B0ZSgmZ3R0X2VudHJpZXNbaSsrXSwgZ3R0 X2VudHJ5KTsKPiAtCX0KPiArCWd0dF9lbnRyaWVzID0gKGdlbjhfcHRlX3QgX19pb21lbSAqKWdn dHQtPmdzbTsKPiArCWd0dF9lbnRyaWVzICs9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Cj4gKwlmb3Jf ZWFjaF9zZ3RfZG1hKGFkZHIsIHNndF9pdGVyLCBzdCkKPiArCQlnZW44X3NldF9wdGUoZ3R0X2Vu dHJpZXMrKywgcHRlX2VuY29kZSB8IGFkZHIpOwo+ICAKPiAtCS8qCj4gLQkgKiBYWFg6IFRoaXMg c2VydmVzIGFzIGEgcG9zdGluZyByZWFkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBQVEUgaGFzCj4g LQkgKiBhY3R1YWxseSBiZWVuIHVwZGF0ZWQuIFRoZXJlIGlzIHNvbWUgY29uY2VybiB0aGF0IGV2 ZW4gdGhvdWdoCj4gLQkgKiByZWdpc3RlcnMgYW5kIFBURXMgYXJlIHdpdGhpbiB0aGUgc2FtZSBC QVIgdGhhdCB0aGV5IGFyZSBwb3RlbnRpYWxseQo+IC0JICogb2YgTlVNQSBhY2Nlc3MgcGF0dGVy bnMuIFRoZXJlZm9yZSwgZXZlbiB3aXRoIHRoZSB3YXkgd2UgYXNzdW1lCj4gLQkgKiBoYXJkd2Fy ZSBzaG91bGQgd29yaywgd2UgbXVzdCBrZWVwIHRoaXMgcG9zdGluZyByZWFkIGZvciBwYXJhbm9p YS4KPiAtCSAqLwo+IC0JaWYgKGkgIT0gMCkKPiAtCQlXQVJOX09OKHJlYWRxKCZndHRfZW50cmll c1tpLTFdKSAhPSBndHRfZW50cnkpOwo+ICsJd21iKCk7Cj4gIAo+ICAJLyogVGhpcyBuZXh0IGJp dCBtYWtlcyB0aGUgYWJvdmUgcG9zdGluZyByZWFkIGV2ZW4gbW9yZSBpbXBvcnRhbnQuIFdlCj4g IAkgKiB3YW50IHRvIGZsdXNoIHRoZSBUTEJzIG9ubHkgYWZ0ZXIgd2UncmUgY2VydGFpbiBhbGwg dGhlIFBURSB1cGRhdGVzCj4gLS0gCj4gMi4xMS4wCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=