From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v3 03/23] drm/i915: Micro-optimise gen8_ppgtt_insert_entries() Date: Tue, 14 Feb 2017 18:00:55 +0200 Message-ID: <87vascoj7s.fsf@gaia.fi.intel.com> References: <20170214110457.9316-1-chris@chris-wilson.co.uk> <20170214110457.9316-4-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 ESMTPS id DC6DF6E774 for ; Tue, 14 Feb 2017 16:02:00 +0000 (UTC) In-Reply-To: <20170214110457.9316-4-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+IHYyOiBD aGVjayBmb3IgdGhlIGVuZCBvZiB0aGUgZm91cnRoIGxldmVsIHBhZ2UgdGFibGUgKHRoZSBmaW5h bCBwZHBlKQo+IGFuZCBtb3ZlIG9udG8gdGhlIG5leHQuCj4KPiBTaWduZWQtb2ZmLWJ5OiBDaHJp cyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0KPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgfCAxNzAgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCA5MSBpbnNlcnRpb25zKCspLCA3OSBkZWxldGlv bnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggY2ExZjVmYTY5 ODRmLi5kZGZiNTk2M2Y1MjEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZ3R0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ IEBAIC03NTEsOSArNzUxLDkgQEAgc3RhdGljIGJvb2wgZ2VuOF9wcGd0dF9jbGVhcl9wdChzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCXVuc2lnbmVkIGludCBudW1fZW50cmllcyA9 IGdlbjhfcHRlX2NvdW50KHN0YXJ0LCBsZW5ndGgpOwo+ICAJdW5zaWduZWQgaW50IHB0ZSA9IGdl bjhfcHRlX2luZGV4KHN0YXJ0KTsKPiAgCXVuc2lnbmVkIGludCBwdGVfZW5kID0gcHRlICsgbnVt X2VudHJpZXM7Cj4gLQlnZW44X3B0ZV90ICpwdF92YWRkcjsKPiAtCWdlbjhfcHRlX3Qgc2NyYXRj aF9wdGUgPSBnZW44X3B0ZV9lbmNvZGUodm0tPnNjcmF0Y2hfcGFnZS5kYWRkciwKPiAtCQkJCQkJ IEk5MTVfQ0FDSEVfTExDKTsKPiArCWNvbnN0IGdlbjhfcHRlX3Qgc2NyYXRjaF9wdGUgPQo+ICsJ CWdlbjhfcHRlX2VuY29kZSh2bS0+c2NyYXRjaF9wYWdlLmRhZGRyLCBJOTE1X0NBQ0hFX0xMQyk7 Cj4gKwlnZW44X3B0ZV90ICp2YWRkcjsKPiAgCj4gIAlpZiAoV0FSTl9PTighcHhfcGFnZShwdCkp KQo+ICAJCXJldHVybiBmYWxzZTsKPiBAQCAtNzY2LDEyICs3NjYsMTAgQEAgc3RhdGljIGJvb2wg Z2VuOF9wcGd0dF9jbGVhcl9wdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJ cmV0dXJuIHRydWU7Cj4gIAl9Cj4gIAo+IC0JcHRfdmFkZHIgPSBrbWFwX3B4KHB0KTsKPiAtCj4g Kwl2YWRkciA9IGttYXBfcHgocHQpOwo+ICAJd2hpbGUgKHB0ZSA8IHB0ZV9lbmQpCj4gLQkJcHRf dmFkZHJbcHRlKytdID0gc2NyYXRjaF9wdGU7Cj4gLQo+IC0Ja3VubWFwX3B4KHBwZ3R0LCBwdF92 YWRkcik7Cj4gKwkJdmFkZHJbcHRlKytdID0gc2NyYXRjaF9wdGU7Cj4gKwlrdW5tYXBfcHgocHBn dHQsIHZhZGRyKTsKPiAgCj4gIAlyZXR1cm4gZmFsc2U7Cj4gIH0KPiBAQCAtODc5LDcxICs4Nzcs OTggQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhcl9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKPiAgCQlnZW44X3BwZ3R0X2NsZWFyX3BkcCh2bSwgJnBwZ3R0LT5wZHAs IHN0YXJ0LCBsZW5ndGgpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZAo+IC1nZW44X3BwZ3R0X2lu c2VydF9wdGVfZW50cmllcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiArc3RydWN0 IHNndF9kbWEgewo+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiArCWRtYV9hZGRyX3QgZG1h LCBtYXg7Cj4gK307Cj4gKwo+ICtzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wKPiArZ2VuOF9w cGd0dF9pbnNlcnRfcHRlX2VudHJpZXMoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+ICAJ CQkgICAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyICpwZHAsCj4gLQkJCSAg ICAgIHN0cnVjdCBzZ19wYWdlX2l0ZXIgKnNnX2l0ZXIsCj4gLQkJCSAgICAgIHVpbnQ2NF90IHN0 YXJ0LAo+ICsJCQkgICAgICBzdHJ1Y3Qgc2d0X2RtYSAqaXRlciwKPiArCQkJICAgICAgdTY0IHN0 YXJ0LAo+ICAJCQkgICAgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwpCj4gIHsK PiAtCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9IGk5MTVfdm1fdG9fcHBndHQodm0pOwo+ IC0JZ2VuOF9wdGVfdCAqcHRfdmFkZHI7Cj4gLQl1bnNpZ25lZCBwZHBlID0gZ2VuOF9wZHBlX2lu ZGV4KHN0YXJ0KTsKPiAtCXVuc2lnbmVkIHBkZSA9IGdlbjhfcGRlX2luZGV4KHN0YXJ0KTsKPiAt CXVuc2lnbmVkIHB0ZSA9IGdlbjhfcHRlX2luZGV4KHN0YXJ0KTsKPiArCXVuc2lnbmVkIGludCBw ZHBlID0gZ2VuOF9wZHBlX2luZGV4KHN0YXJ0KTsKPiArCXVuc2lnbmVkIGludCBwZGUgPSBnZW44 X3BkZV9pbmRleChzdGFydCk7Cj4gKwl1bnNpZ25lZCBpbnQgcHRlID0gZ2VuOF9wdGVfaW5kZXgo c3RhcnQpOwo+ICsJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkOwo+ICsJY29uc3QgZ2Vu OF9wdGVfdCBwdGVfZW5jb2RlID0gZ2VuOF9wdGVfZW5jb2RlKDAsIGNhY2hlX2xldmVsKTsKPiAr CWdlbjhfcHRlX3QgKnZhZGRyOwo+ICsJYm9vbCByZXQ7Cj4gIAo+IC0JcHRfdmFkZHIgPSBOVUxM Owo+ICsJcGQgPSBwZHAtPnBhZ2VfZGlyZWN0b3J5W3BkcGVdOwo+ICsJdmFkZHIgPSBrbWFwX3B4 KHBkLT5wYWdlX3RhYmxlW3BkZV0pOwo+ICsJZG8gewo+ICsJCXZhZGRyW3B0ZV0gPSBwdGVfZW5j b2RlIHwgaXRlci0+ZG1hOwo+ICsJCWl0ZXItPmRtYSArPSBQQUdFX1NJWkU7Cj4gKwkJaWYgKGl0 ZXItPmRtYSA+PSBpdGVyLT5tYXgpIHsKPiArCQkJaXRlci0+c2cgPSBfX3NnX25leHQoaXRlci0+ c2cpOwo+ICsJCQlpZiAoIWl0ZXItPnNnKSB7Cj4gKwkJCQlyZXQgPSBmYWxzZTsKPiArCQkJCWJy ZWFrOwo+ICsJCQl9Cj4gIAo+IC0Jd2hpbGUgKF9fc2dfcGFnZV9pdGVyX25leHQoc2dfaXRlcikp IHsKPiAtCQlpZiAocHRfdmFkZHIgPT0gTlVMTCkgewo+IC0JCQlzdHJ1Y3QgaTkxNV9wYWdlX2Rp cmVjdG9yeSAqcGQgPSBwZHAtPnBhZ2VfZGlyZWN0b3J5W3BkcGVdOwo+IC0JCQlzdHJ1Y3QgaTkx NV9wYWdlX3RhYmxlICpwdCA9IHBkLT5wYWdlX3RhYmxlW3BkZV07Cj4gLQkJCXB0X3ZhZGRyID0g a21hcF9weChwdCk7Cj4gKwkJCWl0ZXItPmRtYSA9IHNnX2RtYV9hZGRyZXNzKGl0ZXItPnNnKTsK PiArCQkJaXRlci0+bWF4ID0gaXRlci0+ZG1hICsgaXRlci0+c2ctPmxlbmd0aDsKPiAgCQl9Cj4g IAo+IC0JCXB0X3ZhZGRyW3B0ZV0gPQo+IC0JCQlnZW44X3B0ZV9lbmNvZGUoc2dfcGFnZV9pdGVy X2RtYV9hZGRyZXNzKHNnX2l0ZXIpLAo+IC0JCQkJCWNhY2hlX2xldmVsKTsKPiAgCQlpZiAoKytw dGUgPT0gR0VOOF9QVEVTKSB7Cj4gLQkJCWt1bm1hcF9weChwcGd0dCwgcHRfdmFkZHIpOwo+IC0J CQlwdF92YWRkciA9IE5VTEw7Cj4gIAkJCWlmICgrK3BkZSA9PSBJOTE1X1BERVMpIHsKPiAtCQkJ CWlmICgrK3BkcGUgPT0gSTkxNV9QRFBFU19QRVJfUERQKHZtLT5pOTE1KSkKPiArCQkJCWlmICgr K3BkcGUgPT0gR0VOOF9QTUw0RVNfUEVSX1BNTDQpIHsKCkZvciB0aGUgbmV4dCByZWFkZXIsIHlv dSBjb3VsZCBhZGQgYSBjb21tZW50IHRoYXQgd2UgcnVuIG91dCBvZgpzY2F0dGVybGlzdHMgZWxl bWVudHMgb24gMzJiaXQgcHBndHQgKHBhZ2VzLT5zZ2wpIGJlZm9yZSByZWFjaGluZyBoZXJlLgoK UmV2aWV3ZWQtYnk6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAaW50ZWwuY29tPgoKLU1p a2EKCj4gKwkJCQkJcmV0ID0gdHJ1ZTsKPiAgCQkJCQlicmVhazsKPiArCQkJCX0KPiArCj4gKwkJ CQlwZCA9IHBkcC0+cGFnZV9kaXJlY3RvcnlbcGRwZV07Cj4gIAkJCQlwZGUgPSAwOwo+ICAJCQl9 Cj4gKwo+ICsJCQlrdW5tYXBfcHgocHBndHQsIHZhZGRyKTsKPiArCQkJdmFkZHIgPSBrbWFwX3B4 KHBkLT5wYWdlX3RhYmxlW3BkZV0pOwo+ICAJCQlwdGUgPSAwOwo+ICAJCX0KPiAtCX0KPiArCX0g d2hpbGUgKDEpOwo+ICsJa3VubWFwX3B4KHBwZ3R0LCB2YWRkcik7Cj4gIAo+IC0JaWYgKHB0X3Zh ZGRyKQo+IC0JCWt1bm1hcF9weChwcGd0dCwgcHRfdmFkZHIpOwo+ICsJcmV0dXJuIHJldDsKPiAg fQo+ICAKPiAtc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9pbnNlcnRfZW50cmllcyhzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSwKPiAtCQkJCSAgICAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMs Cj4gLQkJCQkgICAgICB1aW50NjRfdCBzdGFydCwKPiAtCQkJCSAgICAgIGVudW0gaTkxNV9jYWNo ZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiAtCQkJCSAgICAgIHUzMiB1bnVzZWQpCj4gK3N0YXRpYyB2 b2lkIGdlbjhfcHBndHRfaW5zZXJ0XzNsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0s Cj4gKwkJCQkgICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAo+ICsJCQkJICAgdTY0IHN0YXJ0LAo+ ICsJCQkJICAgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAo+ICsJCQkJICAgdTMy IHVudXNlZCkKPiAgewo+ICAJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gaTkxNV92bV90 b19wcGd0dCh2bSk7Cj4gLQlzdHJ1Y3Qgc2dfcGFnZV9pdGVyIHNnX2l0ZXI7Cj4gKwlzdHJ1Y3Qg c2d0X2RtYSBpdGVyID0gewo+ICsJCS5zZyA9IHBhZ2VzLT5zZ2wsCj4gKwkJLmRtYSA9IHNnX2Rt YV9hZGRyZXNzKGl0ZXIuc2cpLAo+ICsJCS5tYXggPSBpdGVyLmRtYSArIGl0ZXIuc2ctPmxlbmd0 aCwKPiArCX07Cj4gIAo+IC0JX19zZ19wYWdlX2l0ZXJfc3RhcnQoJnNnX2l0ZXIsIHBhZ2VzLT5z Z2wsIHNnX25lbnRzKHBhZ2VzLT5zZ2wpLCAwKTsKPiArCWdlbjhfcHBndHRfaW5zZXJ0X3B0ZV9l bnRyaWVzKHBwZ3R0LCAmcHBndHQtPnBkcCwgJml0ZXIsCj4gKwkJCQkgICAgICBzdGFydCwgY2Fj aGVfbGV2ZWwpOwo+ICt9Cj4gIAo+IC0JaWYgKCFVU0VTX0ZVTExfNDhCSVRfUFBHVFQodm0tPmk5 MTUpKSB7Cj4gLQkJZ2VuOF9wcGd0dF9pbnNlcnRfcHRlX2VudHJpZXModm0sICZwcGd0dC0+cGRw LCAmc2dfaXRlciwgc3RhcnQsCj4gLQkJCQkJICAgICAgY2FjaGVfbGV2ZWwpOwo+IC0JfSBlbHNl IHsKPiAtCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyICpwZHA7Cj4gLQkJdWlu dDY0X3QgcG1sNGU7Cj4gLQkJdWludDY0X3QgbGVuZ3RoID0gKHVpbnQ2NF90KXBhZ2VzLT5vcmln X25lbnRzIDw8IFBBR0VfU0hJRlQ7Cj4gK3N0YXRpYyB2b2lkIGdlbjhfcHBndHRfaW5zZXJ0XzRs dmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gKwkJCQkgICBzdHJ1Y3Qgc2dfdGFi bGUgKnBhZ2VzLAo+ICsJCQkJICAgdWludDY0X3Qgc3RhcnQsCj4gKwkJCQkgICBlbnVtIGk5MTVf Y2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCj4gKwkJCQkgICB1MzIgdW51c2VkKQo+ICt7Cj4gKwlz dHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQgPSBpOTE1X3ZtX3RvX3BwZ3R0KHZtKTsKPiArCXN0 cnVjdCBzZ3RfZG1hIGl0ZXIgPSB7Cj4gKwkJLnNnID0gcGFnZXMtPnNnbCwKPiArCQkuZG1hID0g c2dfZG1hX2FkZHJlc3MoaXRlci5zZyksCj4gKwkJLm1heCA9IGl0ZXIuZG1hICsgaXRlci5zZy0+ bGVuZ3RoLAo+ICsJfTsKPiArCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKipw ZHBzID0gcHBndHQtPnBtbDQucGRwczsKPiArCXVuc2lnbmVkIGludCBwbWw0ZSA9IGdlbjhfcG1s NGVfaW5kZXgoc3RhcnQpOwo+ICAKPiAtCQlnZW44X2Zvcl9lYWNoX3BtbDRlKHBkcCwgJnBwZ3R0 LT5wbWw0LCBzdGFydCwgbGVuZ3RoLCBwbWw0ZSkgewo+IC0JCQlnZW44X3BwZ3R0X2luc2VydF9w dGVfZW50cmllcyh2bSwgcGRwLCAmc2dfaXRlciwKPiAtCQkJCQkJICAgICAgc3RhcnQsIGNhY2hl X2xldmVsKTsKPiAtCQl9Cj4gLQl9Cj4gKwl3aGlsZSAoZ2VuOF9wcGd0dF9pbnNlcnRfcHRlX2Vu dHJpZXMocHBndHQsIHBkcHNbcG1sNGUrK10sICZpdGVyLAo+ICsJCQkJCSAgICAgc3RhcnQsIGNh Y2hlX2xldmVsKSkKPiArCQk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGdlbjhfZnJlZV9wYWdl X3RhYmxlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gQEAgLTE1MjUsOCAr MTU1MCw4IEBAIHN0YXRpYyB2b2lkIGdlbjhfZHVtcF9wcGd0dChzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtID0gJnBwZ3R0LT5iYXNlOwo+ICAJdWludDY0X3Qgc3RhcnQgPSBwcGd0dC0+YmFzZS5z dGFydDsKPiAgCXVpbnQ2NF90IGxlbmd0aCA9IHBwZ3R0LT5iYXNlLnRvdGFsOwo+IC0JZ2VuOF9w dGVfdCBzY3JhdGNoX3B0ZSA9IGdlbjhfcHRlX2VuY29kZSh2bS0+c2NyYXRjaF9wYWdlLmRhZGRy LAo+IC0JCQkJCQkgSTkxNV9DQUNIRV9MTEMpOwo+ICsJY29uc3QgZ2VuOF9wdGVfdCBzY3JhdGNo X3B0ZSA9Cj4gKwkJZ2VuOF9wdGVfZW5jb2RlKHZtLT5zY3JhdGNoX3BhZ2UuZGFkZHIsIEk5MTVf Q0FDSEVfTExDKTsKPiAgCj4gIAlpZiAoIVVTRVNfRlVMTF80OEJJVF9QUEdUVCh2bS0+aTkxNSkp IHsKPiAgCQlnZW44X2R1bXBfcGRwKCZwcGd0dC0+cGRwLCBzdGFydCwgbGVuZ3RoLCBzY3JhdGNo X3B0ZSwgbSk7Cj4gQEAgLTE1OTEsNyArMTYxNiw2IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9p bml0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgCXBwZ3R0LT5iYXNlLnN0YXJ0ID0g MDsKPiAgCXBwZ3R0LT5iYXNlLmNsZWFudXAgPSBnZW44X3BwZ3R0X2NsZWFudXA7Cj4gIAlwcGd0 dC0+YmFzZS5hbGxvY2F0ZV92YV9yYW5nZSA9IGdlbjhfYWxsb2NfdmFfcmFuZ2U7Cj4gLQlwcGd0 dC0+YmFzZS5pbnNlcnRfZW50cmllcyA9IGdlbjhfcHBndHRfaW5zZXJ0X2VudHJpZXM7Cj4gIAlw cGd0dC0+YmFzZS5jbGVhcl9yYW5nZSA9IGdlbjhfcHBndHRfY2xlYXJfcmFuZ2U7Cj4gIAlwcGd0 dC0+YmFzZS51bmJpbmRfdm1hID0gcHBndHRfdW5iaW5kX3ZtYTsKPiAgCXBwZ3R0LT5iYXNlLmJp bmRfdm1hID0gcHBndHRfYmluZF92bWE7Cj4gQEAgLTE2MDYsNiArMTYzMCw4IEBAIHN0YXRpYyBp bnQgZ2VuOF9wcGd0dF9pbml0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgCj4gIAkJ cHBndHQtPmJhc2UudG90YWwgPSAxVUxMIDw8IDQ4Owo+ICAJCXBwZ3R0LT5zd2l0Y2hfbW0gPSBn ZW44XzQ4Yl9tbV9zd2l0Y2g7Cj4gKwo+ICsJCXBwZ3R0LT5iYXNlLmluc2VydF9lbnRyaWVzID0g Z2VuOF9wcGd0dF9pbnNlcnRfNGx2bDsKPiAgCX0gZWxzZSB7Cj4gIAkJcmV0ID0gX19wZHBfaW5p dChkZXZfcHJpdiwgJnBwZ3R0LT5wZHApOwo+ICAJCWlmIChyZXQpCj4gQEAgLTE2MjIsNiArMTY0 OCw4IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9pbml0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpw cGd0dCkKPiAgCQkJaWYgKHJldCkKPiAgCQkJCWdvdG8gZnJlZV9zY3JhdGNoOwo+ICAJCX0KPiAr Cj4gKwkJcHBndHQtPmJhc2UuaW5zZXJ0X2VudHJpZXMgPSBnZW44X3BwZ3R0X2luc2VydF8zbHZs Owo+ICAJfQo+ICAKPiAgCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCj4gQEAgLTE4 ODgsMTEgKzE5MTYsNiBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2NsZWFyX3JhbmdlKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJfQo+ICB9Cj4gIAo+IC1zdHJ1Y3Qgc2d0X2Rt YSB7Cj4gLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+IC0JZG1hX2FkZHJfdCBkbWEsIG1heDsK PiAtfTsKPiAtCj4gIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfaW5zZXJ0X2VudHJpZXMoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCQkgICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnBh Z2VzLAo+ICAJCQkJICAgICAgdWludDY0X3Qgc3RhcnQsCj4gQEAgLTI0MzQsMjYgKzI0NTcsMTUg QEAgc3RhdGljIHZvaWQgZ2VuOF9nZ3R0X2luc2VydF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2UgKnZtLAo+ICAJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9IGk5MTVfdm1fdG9fZ2d0 dCh2bSk7Cj4gIAlzdHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7Cj4gIAlnZW44X3B0ZV90IF9faW9t ZW0gKmd0dF9lbnRyaWVzOwo+IC0JZ2VuOF9wdGVfdCBndHRfZW50cnk7Cj4gKwljb25zdCBnZW44 X3B0ZV90IHB0ZV9lbmNvZGUgPSBnZW44X3B0ZV9lbmNvZGUoMCwgbGV2ZWwpOwo+ICAJZG1hX2Fk ZHJfdCBhZGRyOwo+IC0JaW50IGkgPSAwOwo+ICAKPiAtCWd0dF9lbnRyaWVzID0gKGdlbjhfcHRl X3QgX19pb21lbSAqKWdndHQtPmdzbSArIChzdGFydCA+PiBQQUdFX1NISUZUKTsKPiArCWd0dF9l bnRyaWVzID0gKGdlbjhfcHRlX3QgX19pb21lbSAqKWdndHQtPmdzbTsKPiArCWd0dF9lbnRyaWVz ICs9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Cj4gKwlmb3JfZWFjaF9zZ3RfZG1hKGFkZHIsIHNndF9p dGVyLCBzdCkKPiArCQlnZW44X3NldF9wdGUoZ3R0X2VudHJpZXMrKywgcHRlX2VuY29kZSB8IGFk ZHIpOwo+ICAKPiAtCWZvcl9lYWNoX3NndF9kbWEoYWRkciwgc2d0X2l0ZXIsIHN0KSB7Cj4gLQkJ Z3R0X2VudHJ5ID0gZ2VuOF9wdGVfZW5jb2RlKGFkZHIsIGxldmVsKTsKPiAtCQlnZW44X3NldF9w dGUoJmd0dF9lbnRyaWVzW2krK10sIGd0dF9lbnRyeSk7Cj4gLQl9Cj4gLQo+IC0JLyoKPiAtCSAq IFhYWDogVGhpcyBzZXJ2ZXMgYXMgYSBwb3N0aW5nIHJlYWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhl IFBURSBoYXMKPiAtCSAqIGFjdHVhbGx5IGJlZW4gdXBkYXRlZC4gVGhlcmUgaXMgc29tZSBjb25j ZXJuIHRoYXQgZXZlbiB0aG91Z2gKPiAtCSAqIHJlZ2lzdGVycyBhbmQgUFRFcyBhcmUgd2l0aGlu IHRoZSBzYW1lIEJBUiB0aGF0IHRoZXkgYXJlIHBvdGVudGlhbGx5Cj4gLQkgKiBvZiBOVU1BIGFj Y2VzcyBwYXR0ZXJucy4gVGhlcmVmb3JlLCBldmVuIHdpdGggdGhlIHdheSB3ZSBhc3N1bWUKPiAt CSAqIGhhcmR3YXJlIHNob3VsZCB3b3JrLCB3ZSBtdXN0IGtlZXAgdGhpcyBwb3N0aW5nIHJlYWQg Zm9yIHBhcmFub2lhLgo+IC0JICovCj4gLQlpZiAoaSAhPSAwKQo+IC0JCVdBUk5fT04ocmVhZHEo Jmd0dF9lbnRyaWVzW2ktMV0pICE9IGd0dF9lbnRyeSk7Cj4gKwl3bWIoKTsKPiAgCj4gIAkvKiBU aGlzIG5leHQgYml0IG1ha2VzIHRoZSBhYm92ZSBwb3N0aW5nIHJlYWQgZXZlbiBtb3JlIGltcG9y dGFudC4gV2UKPiAgCSAqIHdhbnQgdG8gZmx1c2ggdGhlIFRMQnMgb25seSBhZnRlciB3ZSdyZSBj ZXJ0YWluIGFsbCB0aGUgUFRFIHVwZGF0ZXMKPiBAQCAtMjU0MSw3ICsyNTUzLDkgQEAgc3RhdGlj IHZvaWQgZ2VuOF9nZ3R0X2NsZWFyX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt LAo+ICAJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9IGk5MTVfdm1fdG9fZ2d0dCh2bSk7Cj4gIAl1 bnNpZ25lZCBmaXJzdF9lbnRyeSA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Cj4gIAl1bnNpZ25lZCBu dW1fZW50cmllcyA9IGxlbmd0aCA+PiBQQUdFX1NISUZUOwo+IC0JZ2VuOF9wdGVfdCBzY3JhdGNo X3B0ZSwgX19pb21lbSAqZ3R0X2Jhc2UgPQo+ICsJY29uc3QgZ2VuOF9wdGVfdCBzY3JhdGNoX3B0 ZSA9Cj4gKwkJZ2VuOF9wdGVfZW5jb2RlKHZtLT5zY3JhdGNoX3BhZ2UuZGFkZHIsIEk5MTVfQ0FD SEVfTExDKTsKPiArCWdlbjhfcHRlX3QgX19pb21lbSAqZ3R0X2Jhc2UgPQo+ICAJCShnZW44X3B0 ZV90IF9faW9tZW0gKilnZ3R0LT5nc20gKyBmaXJzdF9lbnRyeTsKPiAgCWNvbnN0IGludCBtYXhf ZW50cmllcyA9IGdndHRfdG90YWxfZW50cmllcyhnZ3R0KSAtIGZpcnN0X2VudHJ5Owo+ICAJaW50 IGk7Cj4gQEAgLTI1NTEsOCArMjU2NSw2IEBAIHN0YXRpYyB2b2lkIGdlbjhfZ2d0dF9jbGVhcl9y YW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkgZmlyc3RfZW50cnksIG51 bV9lbnRyaWVzLCBtYXhfZW50cmllcykpCj4gIAkJbnVtX2VudHJpZXMgPSBtYXhfZW50cmllczsK PiAgCj4gLQlzY3JhdGNoX3B0ZSA9IGdlbjhfcHRlX2VuY29kZSh2bS0+c2NyYXRjaF9wYWdlLmRh ZGRyLAo+IC0JCQkJICAgICAgSTkxNV9DQUNIRV9MTEMpOwo+ICAJZm9yIChpID0gMDsgaSA8IG51 bV9lbnRyaWVzOyBpKyspCj4gIAkJZ2VuOF9zZXRfcHRlKCZndHRfYmFzZVtpXSwgc2NyYXRjaF9w dGUpOwo+ICAJcmVhZGwoZ3R0X2Jhc2UpOwo+IC0tIAo+IDIuMTEuMApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK