From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 06/11] drm/i915/gtt: Convert vm->scratch into an array Date: Wed, 10 Jul 2019 17:18:32 +0300 Message-ID: <87muhmq8g7.fsf@gaia.fi.intel.com> References: <20190707210024.26192-1-chris@chris-wilson.co.uk> <20190707210024.26192-7-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 C2F7989F43 for ; Wed, 10 Jul 2019 14:18:47 +0000 (UTC) In-Reply-To: <20190707210024.26192-7-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 List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gRWFjaCBs ZXZlbCBoYXMgaXRzIG93biBzY3JhdGNoLiBNYWtlIHRoZSBsZXZlbHMgbW9yZSBvYnZpb3VzIGJ5 IGZvcmdvaW5nCj4gdGhlIGZhbmN5IHNpbWlsYXJseSBuYW1lcyBhbmQgcmVwbGFjZSB0aGVtIHdp dGggYSBudW1iZXIuIDAgaXMgdGhlIGJvdHRvbQo+IG1vc3QgbGV2ZWwsIHRoZSBwaHlzaWNhbCBw YWdlIHVzZWQgZm9yIGFjdHVhbCBkYXRhOyAxKyBhcmUgdGhlIHBhZ2UKPiBkaXJlY3Rvcmllcy4K Pgo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr Pgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyB8IDIwNiArKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5oIHwgIDE0ICstCj4gIDIgZmlsZXMgY2hhbmdlZCwgOTkgaW5zZXJ0aW9ucygrKSwgMTIx IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBpbmRleCAy NzEzMDU3MDVjMWMuLmI3ODgyZjA2MjE0YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5jCj4gQEAgLTYzNCw3ICs2MzQsNyBAQCBzZXR1cF9zY3JhdGNoX3BhZ2Uoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sIGdmcF90IGdmcCkKPiAgCWdmcCB8PSBfX0dGUF9aRVJPIHwg X19HRlBfUkVUUllfTUFZRkFJTDsKPiAgCj4gIAlkbyB7Cj4gLQkJaW50IG9yZGVyID0gZ2V0X29y ZGVyKHNpemUpOwo+ICsJCXVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKPiAg CQlzdHJ1Y3QgcGFnZSAqcGFnZTsKPiAgCQlkbWFfYWRkcl90IGFkZHI7Cj4gIAo+IEBAIC02NTMs OCArNjUzLDggQEAgc2V0dXBfc2NyYXRjaF9wYWdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtLCBnZnBfdCBnZnApCj4gIAkJaWYgKHVubGlrZWx5KCFJU19BTElHTkVEKGFkZHIsIHNpemUp KSkKPiAgCQkJZ290byB1bm1hcF9wYWdlOwo+ICAKPiAtCQl2bS0+c2NyYXRjaF9wYWdlLnBhZ2Ug PSBwYWdlOwo+IC0JCXZtLT5zY3JhdGNoX3BhZ2UuZGFkZHIgPSBhZGRyOwo+ICsJCXZtLT5zY3Jh dGNoWzBdLmJhc2UucGFnZSA9IHBhZ2U7Cj4gKwkJdm0tPnNjcmF0Y2hbMF0uYmFzZS5kYWRkciA9 IGFkZHI7Cj4gIAkJdm0tPnNjcmF0Y2hfb3JkZXIgPSBvcmRlcjsKPiAgCQlyZXR1cm4gMDsKPiAg Cj4gQEAgLTY3Myw4ICs2NzMsOCBAQCBzZXR1cF9zY3JhdGNoX3BhZ2Uoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sIGdmcF90IGdmcCkKPiAgCj4gIHN0YXRpYyB2b2lkIGNsZWFudXBfc2Ny YXRjaF9wYWdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICB7Cj4gLQlzdHJ1Y3Qg aTkxNV9wYWdlX2RtYSAqcCA9ICZ2bS0+c2NyYXRjaF9wYWdlOwo+IC0JaW50IG9yZGVyID0gdm0t PnNjcmF0Y2hfb3JkZXI7Cj4gKwlzdHJ1Y3QgaTkxNV9wYWdlX2RtYSAqcCA9IHB4X2Jhc2UoJnZt LT5zY3JhdGNoWzBdKTsKPiArCXVuc2lnbmVkIGludCBvcmRlciA9IHZtLT5zY3JhdGNoX29yZGVy Owo+ICAKPiAgCWRtYV91bm1hcF9wYWdlKHZtLT5kbWEsIHAtPmRhZGRyLCBCSVQob3JkZXIpIDw8 IFBBR0VfU0hJRlQsCj4gIAkJICAgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Cj4gQEAgLTY4 MywxNSArNjgzLDE2IEBAIHN0YXRpYyB2b2lkIGNsZWFudXBfc2NyYXRjaF9wYWdlKHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAKPiAgc3RhdGljIHZvaWQgZnJlZV9zY3JhdGNoKHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICB7Cj4gLQlpZiAoIXZtLT5zY3JhdGNoX3Bh Z2UuZGFkZHIpIC8qIHNldCB0byAwIG9uIGNsb25lcyAqLwo+ICsJaW50IGk7Cj4gKwo+ICsJaWYg KCFweF9kbWEoJnZtLT5zY3JhdGNoWzBdKSkgLyogc2V0IHRvIDAgb24gY2xvbmVzICovCj4gIAkJ cmV0dXJuOwo+ICAKPiAtCWlmICh2bS0+c2NyYXRjaF9wZHAuZGFkZHIpCj4gLQkJY2xlYW51cF9w YWdlX2RtYSh2bSwgJnZtLT5zY3JhdGNoX3BkcCk7Cj4gLQlpZiAodm0tPnNjcmF0Y2hfcGQuZGFk ZHIpCj4gLQkJY2xlYW51cF9wYWdlX2RtYSh2bSwgJnZtLT5zY3JhdGNoX3BkKTsKPiAtCWlmICh2 bS0+c2NyYXRjaF9wdC5kYWRkcikKPiAtCQljbGVhbnVwX3BhZ2VfZG1hKHZtLCAmdm0tPnNjcmF0 Y2hfcHQpOwo+ICsJZm9yIChpID0gMTsgaSA8PSB2bS0+dG9wOyBpKyspIHsKPiArCQlpZiAoIXB4 X2RtYSgmdm0tPnNjcmF0Y2hbaV0pKQo+ICsJCQlicmVhazsKPiArCQljbGVhbnVwX3BhZ2VfZG1h KHZtLCBweF9iYXNlKCZ2bS0+c2NyYXRjaFtpXSkpOwo+ICsJfQo+ICAKPiAgCWNsZWFudXBfc2Ny YXRjaF9wYWdlKHZtKTsKPiAgfQo+IEBAIC03NTMsOSArNzU0LDkgQEAgc3RhdGljIHZvaWQgZnJl ZV9wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwgc3RydWN0IGk5MTVfcGFnZV9kbWEg KnBkKQo+ICAjZGVmaW5lIGZyZWVfcHgodm0sIHB4KSBmcmVlX3BkKHZtLCBweF9iYXNlKHB4KSkK PiAgCj4gIHN0YXRpYyB2b2lkIGluaXRfcGQoc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBk LAo+IC0JCSAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RtYSAqc2NyYXRjaCkKPiArCQkgICAgc3RydWN0 IGk5MTVfcGFnZV9zY3JhdGNoICpzY3JhdGNoKQo+ICB7Cj4gLQlmaWxsX3B4KHBkLCBnZW44X3Bk ZV9lbmNvZGUoc2NyYXRjaC0+ZGFkZHIsIEk5MTVfQ0FDSEVfTExDKSk7Cj4gKwlmaWxsX3B4KHBk LCBzY3JhdGNoLT5lbmNvZGUpOwo+ICAJbWVtc2V0X3AocGQtPmVudHJ5LCBzY3JhdGNoLCA1MTIp Owo+ICB9Cj4gIAo+IEBAIC03ODMsMzAgKzc4NCwyNiBAQCBfX3NldF9wZF9lbnRyeShzdHJ1Y3Qg aTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBkLAo+ICAJd3JpdGVfZG1hX2VudHJ5KHB4X2Jh c2UocGQpLCBwZGUsIGVuY29kZSh0by0+ZGFkZHIsIEk5MTVfQ0FDSEVfTExDKSk7Cj4gIH0KPiAg Cj4gKyNkZWZpbmUgc2V0X3BkX2VudHJ5KHBkLCBwZGUsIHRvKSBcCj4gKwlfX3NldF9wZF9lbnRy eSgocGQpLCAocGRlKSwgcHhfYmFzZSh0byksIGdlbjhfcGRlX2VuY29kZSkKPiArCj4gIHN0YXRp YyBpbmxpbmUgdm9pZAo+IC1fX2NsZWFyX3BkX2VudHJ5KHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0 b3J5ICogY29uc3QgcGQsCj4gLQkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBkZSwKPiAtCQkgc3Ry dWN0IGk5MTVfcGFnZV9kbWEgKiBjb25zdCB0bywKPiAtCQkgdTY0ICgqZW5jb2RlKShjb25zdCBk bWFfYWRkcl90LCBjb25zdCBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwpKQo+ICtjbGVhcl9wZF9lbnRy eShzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBkLAo+ICsJICAgICAgIGNvbnN0 IHVuc2lnbmVkIHNob3J0IHBkZSwKPiArCSAgICAgICBzdHJ1Y3QgaTkxNV9wYWdlX3NjcmF0Y2gg KiBjb25zdCBzY3JhdGNoKQo+ICB7Cj4gIAlHRU1fQlVHX09OKGF0b21pY19yZWFkKHB4X3VzZWQo cGQpKSA9PSAwKTsKPiAgCj4gLQl3cml0ZV9kbWFfZW50cnkocHhfYmFzZShwZCksIHBkZSwgZW5j b2RlKHRvLT5kYWRkciwgSTkxNV9DQUNIRV9MTEMpKTsKPiAtCXBkLT5lbnRyeVtwZGVdID0gdG87 Cj4gKwl3cml0ZV9kbWFfZW50cnkocHhfYmFzZShwZCksIHBkZSwgc2NyYXRjaC0+ZW5jb2RlKTsK PiArCXBkLT5lbnRyeVtwZGVdID0gc2NyYXRjaDsKPiAgCWF0b21pY19kZWMocHhfdXNlZChwZCkp Owo+ICB9Cj4gIAo+IC0jZGVmaW5lIHNldF9wZF9lbnRyeShwZCwgcGRlLCB0bykgXAo+IC0JX19z ZXRfcGRfZW50cnkoKHBkKSwgKHBkZSksIHB4X2Jhc2UodG8pLCBnZW44X3BkZV9lbmNvZGUpCj4g LQo+IC0jZGVmaW5lIGNsZWFyX3BkX2VudHJ5KHBkLCBwZGUsIHRvKSBcCj4gLQlfX2NsZWFyX3Bk X2VudHJ5KChwZCksIChwZGUpLCAodG8pLCBnZW44X3BkZV9lbmNvZGUpCj4gLQo+ICBzdGF0aWMg Ym9vbAo+ICByZWxlYXNlX3BkX2VudHJ5KHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICogY29u c3QgcGQsCj4gIAkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBkZSwKPiAgCQkgc3RydWN0IGk5MTVf cGFnZV90YWJsZSAqIGNvbnN0IHB0LAo+IC0JCSBzdHJ1Y3QgaTkxNV9wYWdlX2RtYSAqIGNvbnN0 IHNjcmF0Y2gpCj4gKwkJIHN0cnVjdCBpOTE1X3BhZ2Vfc2NyYXRjaCAqIGNvbnN0IHNjcmF0Y2gp Cj4gIHsKPiAgCWJvb2wgZnJlZSA9IGZhbHNlOwo+ICAKPiBAQCAtOTEzLDcgKzkxMCw3IEBAIHN0 YXRpYyB2b2lkIGdlbjhfZnJlZV9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSwKPiAgCWludCBpOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBJOTE1X1BERVM7IGkrKykg ewo+IC0JCWlmIChwZC0+ZW50cnlbaV0gIT0gJnZtLT5zY3JhdGNoX3B0KQo+ICsJCWlmIChwZC0+ ZW50cnlbaV0gIT0gJnZtLT5zY3JhdGNoWzFdKQo+ICAJCQlmcmVlX3BkKHZtLCBwZC0+ZW50cnlb aV0pOwo+ICAJfQo+ICB9Cj4gQEAgLTkyNSw3ICs5MjIsNyBAQCBzdGF0aWMgdm9pZCBnZW44X3Bw Z3R0X2NsZWFudXBfM2x2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCWludCBp Owo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBwZHBlczsgaSsrKSB7Cj4gLQkJaWYgKHBkcC0+ZW50 cnlbaV0gPT0gJnZtLT5zY3JhdGNoX3BkKQo+ICsJCWlmIChwZHAtPmVudHJ5W2ldID09ICZ2bS0+ c2NyYXRjaFsyXSkKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJCWdlbjhfZnJlZV9wYWdlX3RhYmxl cyh2bSwgcGRwLT5lbnRyeVtpXSk7Cj4gQEAgLTk0Myw3ICs5NDAsNyBAQCBzdGF0aWMgdm9pZCBn ZW44X3BwZ3R0X2NsZWFudXBfNGx2bChzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQpCj4gIAlmb3Ig KGkgPSAwOyBpIDwgR0VOOF9QTUw0RVNfUEVSX1BNTDQ7IGkrKykgewo+ICAJCXN0cnVjdCBpOTE1 X3BhZ2VfZGlyZWN0b3J5ICpwZHAgPSBpOTE1X3BkcF9lbnRyeShwbWw0LCBpKTsKPiAgCj4gLQkJ aWYgKHB4X2Jhc2UocGRwKSA9PSAmcHBndHQtPnZtLnNjcmF0Y2hfcGRwKQo+ICsJCWlmIChweF9i YXNlKHBkcCkgPT0gcHhfYmFzZSgmcHBndHQtPnZtLnNjcmF0Y2hbM10pKQo+ICAJCQljb250aW51 ZTsKPiAgCj4gIAkJZ2VuOF9wcGd0dF9jbGVhbnVwXzNsdmwoJnBwZ3R0LT52bSwgcGRwKTsKPiBA QCAtOTc5LDcgKzk3Niw5IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYXJfcHQoY29uc3Qg c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAlnZW44X3B0ZV90ICp2YWRkcjsKPiAg Cj4gIAl2YWRkciA9IGttYXBfYXRvbWljX3B4KHB0KTsKPiAtCW1lbXNldDY0KHZhZGRyICsgZ2Vu OF9wdGVfaW5kZXgoc3RhcnQpLCB2bS0+c2NyYXRjaF9wdGUsIG51bV9lbnRyaWVzKTsKPiArCW1l bXNldDY0KHZhZGRyICsgZ2VuOF9wdGVfaW5kZXgoc3RhcnQpLAo+ICsJCSB2bS0+c2NyYXRjaFsw XS5lbmNvZGUsCj4gKwkJIG51bV9lbnRyaWVzKTsKPiAgCWt1bm1hcF9hdG9taWModmFkZHIpOwo+ ICAKPiAgCUdFTV9CVUdfT04obnVtX2VudHJpZXMgPiBhdG9taWNfcmVhZCgmcHQtPnVzZWQpKTsK PiBAQCAtOTk1LDExICs5OTQsMTEgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhcl9wZChz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCXUzMiBwZGU7Cj4gIAo+ICAJZ2VuOF9m b3JfZWFjaF9wZGUocHQsIHBkLCBzdGFydCwgbGVuZ3RoLCBwZGUpIHsKPiAtCQlHRU1fQlVHX09O KHB4X2Jhc2UocHQpID09ICZ2bS0+c2NyYXRjaF9wdCk7Cj4gKwkJR0VNX0JVR19PTihweF9iYXNl KHB0KSA9PSBweF9iYXNlKCZ2bS0+c2NyYXRjaFsxXSkpOwo+ICAKPiAgCQlhdG9taWNfaW5jKCZw dC0+dXNlZCk7Cj4gIAkJZ2VuOF9wcGd0dF9jbGVhcl9wdCh2bSwgcHQsIHN0YXJ0LCBsZW5ndGgp Owo+IC0JCWlmIChyZWxlYXNlX3BkX2VudHJ5KHBkLCBwZGUsIHB0LCAmdm0tPnNjcmF0Y2hfcHQp KQo+ICsJCWlmIChyZWxlYXNlX3BkX2VudHJ5KHBkLCBwZGUsIHB0LCAmdm0tPnNjcmF0Y2hbMV0p KQo+ICAJCQlmcmVlX3B4KHZtLCBwdCk7Cj4gIAl9Cj4gIH0KPiBAQCAtMTAxNSwxMSArMTAxNCwx MSBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFyX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNz X3NwYWNlICp2bSwKPiAgCXVuc2lnbmVkIGludCBwZHBlOwo+ICAKPiAgCWdlbjhfZm9yX2VhY2hf cGRwZShwZCwgcGRwLCBzdGFydCwgbGVuZ3RoLCBwZHBlKSB7Cj4gLQkJR0VNX0JVR19PTihweF9i YXNlKHBkKSA9PSAmdm0tPnNjcmF0Y2hfcGQpOwo+ICsJCUdFTV9CVUdfT04ocHhfYmFzZShwZCkg PT0gcHhfYmFzZSgmdm0tPnNjcmF0Y2hbMl0pKTsKPiAgCj4gIAkJYXRvbWljX2luYyhweF91c2Vk KHBkKSk7Cj4gIAkJZ2VuOF9wcGd0dF9jbGVhcl9wZCh2bSwgcGQsIHN0YXJ0LCBsZW5ndGgpOwo+ IC0JCWlmIChyZWxlYXNlX3BkX2VudHJ5KHBkcCwgcGRwZSwgJnBkLT5wdCwgJnZtLT5zY3JhdGNo X3BkKSkKPiArCQlpZiAocmVsZWFzZV9wZF9lbnRyeShwZHAsIHBkcGUsICZwZC0+cHQsICZ2bS0+ c2NyYXRjaFsyXSkpCj4gIAkJCWZyZWVfcHgodm0sIHBkKTsKPiAgCX0KPiAgfQo+IEBAIC0xMDQ1 LDE2ICsxMDQ0LDE1IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYXJfNGx2bChzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCUdFTV9CVUdfT04oIWk5MTVfdm1faXNfNGx2bCh2 bSkpOwo+ICAKPiAgCWdlbjhfZm9yX2VhY2hfcG1sNGUocGRwLCBwbWw0LCBzdGFydCwgbGVuZ3Ro LCBwbWw0ZSkgewo+IC0JCUdFTV9CVUdfT04ocHhfYmFzZShwZHApID09ICZ2bS0+c2NyYXRjaF9w ZHApOwo+ICsJCUdFTV9CVUdfT04ocHhfYmFzZShwZHApID09IHB4X2Jhc2UoJnZtLT5zY3JhdGNo WzNdKSk7Cj4gIAo+ICAJCWF0b21pY19pbmMocHhfdXNlZChwZHApKTsKPiAgCQlnZW44X3BwZ3R0 X2NsZWFyX3BkcCh2bSwgcGRwLCBzdGFydCwgbGVuZ3RoKTsKPiAtCQlpZiAocmVsZWFzZV9wZF9l bnRyeShwbWw0LCBwbWw0ZSwgJnBkcC0+cHQsICZ2bS0+c2NyYXRjaF9wZHApKQo+ICsJCWlmIChy ZWxlYXNlX3BkX2VudHJ5KHBtbDQsIHBtbDRlLCAmcGRwLT5wdCwgJnZtLT5zY3JhdGNoWzNdKSkK PiAgCQkJZnJlZV9weCh2bSwgcGRwKTsKPiAgCX0KPiAgfQo+ICAKPiAtCj4gIHN0YXRpYyBpbnQg Z2VuOF9wcGd0dF9hbGxvY19wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJ ICAgICAgIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZCwKPiAgCQkJICAgICAgIHU2NCBz dGFydCwgdTY0IGxlbmd0aCkKPiBAQCAtMTA2OCw3ICsxMDY2LDcgQEAgc3RhdGljIGludCBnZW44 X3BwZ3R0X2FsbG9jX3BkKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJZ2VuOF9m b3JfZWFjaF9wZGUocHQsIHBkLCBzdGFydCwgbGVuZ3RoLCBwZGUpIHsKPiAgCQljb25zdCBpbnQg Y291bnQgPSBnZW44X3B0ZV9jb3VudChzdGFydCwgbGVuZ3RoKTsKPiAgCj4gLQkJaWYgKHB4X2Jh c2UocHQpID09ICZ2bS0+c2NyYXRjaF9wdCkgewo+ICsJCWlmIChweF9iYXNlKHB0KSA9PSBweF9i YXNlKCZ2bS0+c2NyYXRjaFsxXSkpIHsKPiAgCQkJc3Bpbl91bmxvY2soJnBkLT5sb2NrKTsKPiAg Cj4gIAkJCXB0ID0gZmV0Y2hfYW5kX3plcm8oJmFsbG9jKTsKPiBAQCAtMTA4MCwxMCArMTA3OCwx MCBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfcGQoc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0sCj4gIAkJCX0KPiAgCj4gIAkJCWlmIChjb3VudCA8IEdFTjhfUFRFUyB8fCBpbnRl bF92Z3B1X2FjdGl2ZSh2bS0+aTkxNSkpCj4gLQkJCQlmaWxsX3B4KHB0LCB2bS0+c2NyYXRjaF9w dGUpOwo+ICsJCQkJZmlsbF9weChwdCwgdm0tPnNjcmF0Y2hbMF0uZW5jb2RlKTsKPiAgCj4gIAkJ CXNwaW5fbG9jaygmcGQtPmxvY2spOwo+IC0JCQlpZiAocGQtPmVudHJ5W3BkZV0gPT0gJnZtLT5z Y3JhdGNoX3B0KSB7Cj4gKwkJCWlmIChwZC0+ZW50cnlbcGRlXSA9PSAmdm0tPnNjcmF0Y2hbMV0p IHsKPiAgCQkJCXNldF9wZF9lbnRyeShwZCwgcGRlLCBwdCk7Cj4gIAkJCX0gZWxzZSB7Cj4gIAkJ CQlhbGxvYyA9IHB0Owo+IEBAIC0xMTE1LDcgKzExMTMsNyBAQCBzdGF0aWMgaW50IGdlbjhfcHBn dHRfYWxsb2NfcGRwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAKPiAgCXNwaW5f bG9jaygmcGRwLT5sb2NrKTsKPiAgCWdlbjhfZm9yX2VhY2hfcGRwZShwZCwgcGRwLCBzdGFydCwg bGVuZ3RoLCBwZHBlKSB7Cj4gLQkJaWYgKHB4X2Jhc2UocGQpID09ICZ2bS0+c2NyYXRjaF9wZCkg ewo+ICsJCWlmIChweF9iYXNlKHBkKSA9PSBweF9iYXNlKCZ2bS0+c2NyYXRjaFsyXSkpIHsKPiAg CQkJc3Bpbl91bmxvY2soJnBkcC0+bG9jayk7Cj4gIAo+ICAJCQlwZCA9IGZldGNoX2FuZF96ZXJv KCZhbGxvYyk7Cj4gQEAgLTExMjYsMTAgKzExMjQsMTAgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0 X2FsbG9jX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJCWdvdG8gdW53 aW5kOwo+ICAJCQl9Cj4gIAo+IC0JCQlpbml0X3BkKHBkLCAmdm0tPnNjcmF0Y2hfcHQpOwo+ICsJ CQlpbml0X3BkKHBkLCAmdm0tPnNjcmF0Y2hbMV0pOwo+ICAKPiAgCQkJc3Bpbl9sb2NrKCZwZHAt PmxvY2spOwo+IC0JCQlpZiAocGRwLT5lbnRyeVtwZHBlXSA9PSAmdm0tPnNjcmF0Y2hfcGQpIHsK PiArCQkJaWYgKHBkcC0+ZW50cnlbcGRwZV0gPT0gJnZtLT5zY3JhdGNoWzJdKSB7Cj4gIAkJCQlz ZXRfcGRfZW50cnkocGRwLCBwZHBlLCBwZCk7Cj4gIAkJCX0gZWxzZSB7Cj4gIAkJCQlhbGxvYyA9 IHBkOwo+IEBAIC0xMTUwLDcgKzExNDgsNyBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2Nf cGRwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJZ290byBvdXQ7Cj4gIAo+ICB1 bndpbmRfcGQ6Cj4gLQlpZiAocmVsZWFzZV9wZF9lbnRyeShwZHAsIHBkcGUsICZwZC0+cHQsICZ2 bS0+c2NyYXRjaF9wZCkpCj4gKwlpZiAocmVsZWFzZV9wZF9lbnRyeShwZHAsIHBkcGUsICZwZC0+ cHQsICZ2bS0+c2NyYXRjaFsyXSkpCj4gIAkJZnJlZV9weCh2bSwgcGQpOwo+ICB1bndpbmQ6Cj4g IAlnZW44X3BwZ3R0X2NsZWFyX3BkcCh2bSwgcGRwLCBmcm9tLCBzdGFydCAtIGZyb20pOwo+IEBA IC0xMTc5LDcgKzExNzcsNyBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfNGx2bChzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCj4gIAlzcGluX2xvY2soJnBtbDQtPmxvY2sp Owo+ICAJZ2VuOF9mb3JfZWFjaF9wbWw0ZShwZHAsIHBtbDQsIHN0YXJ0LCBsZW5ndGgsIHBtbDRl KSB7Cj4gLQkJaWYgKHB4X2Jhc2UocGRwKSA9PSAmdm0tPnNjcmF0Y2hfcGRwKSB7Cj4gKwkJaWYg KHB4X2Jhc2UocGRwKSA9PSBweF9iYXNlKCZ2bS0+c2NyYXRjaFszXSkpIHsKPiAgCQkJc3Bpbl91 bmxvY2soJnBtbDQtPmxvY2spOwo+ICAKPiAgCQkJcGRwID0gZmV0Y2hfYW5kX3plcm8oJmFsbG9j KTsKPiBAQCAtMTE5MCwxMCArMTE4OCwxMCBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2Nf NGx2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJCWdvdG8gdW53aW5kOwo+ ICAJCQl9Cj4gIAo+IC0JCQlpbml0X3BkKHBkcCwgJnZtLT5zY3JhdGNoX3BkKTsKPiArCQkJaW5p dF9wZChwZHAsICZ2bS0+c2NyYXRjaFsyXSk7Cj4gIAo+ICAJCQlzcGluX2xvY2soJnBtbDQtPmxv Y2spOwo+IC0JCQlpZiAocG1sNC0+ZW50cnlbcG1sNGVdID09ICZ2bS0+c2NyYXRjaF9wZHApIHsK PiArCQkJaWYgKHBtbDQtPmVudHJ5W3BtbDRlXSA9PSAmdm0tPnNjcmF0Y2hbM10pIHsKPiAgCQkJ CXNldF9wZF9lbnRyeShwbWw0LCBwbWw0ZSwgcGRwKTsKPiAgCQkJfSBlbHNlIHsKPiAgCQkJCWFs bG9jID0gcGRwOwo+IEBAIC0xMjE0LDcgKzEyMTIsNyBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRf YWxsb2NfNGx2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCWdvdG8gb3V0Owo+ ICAKPiAgdW53aW5kX3BkcDoKPiAtCWlmIChyZWxlYXNlX3BkX2VudHJ5KHBtbDQsIHBtbDRlLCAm cGRwLT5wdCwgJnZtLT5zY3JhdGNoX3BkcCkpCj4gKwlpZiAocmVsZWFzZV9wZF9lbnRyeShwbWw0 LCBwbWw0ZSwgJnBkcC0+cHQsICZ2bS0+c2NyYXRjaFszXSkpCj4gIAkJZnJlZV9weCh2bSwgcGRw KTsKPiAgdW53aW5kOgo+ICAJZ2VuOF9wcGd0dF9jbGVhcl80bHZsKHZtLCBmcm9tLCBzdGFydCAt IGZyb20pOwo+IEBAIC0xNDI4LDcgKzE0MjYsNyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2lu c2VydF9odWdlX2VudHJpZXMoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gIAkJCWlmIChJOTE1X1NF TEZURVNUX09OTFkodm1hLT52bS0+c2NydWJfNjRLKSkgewo+ICAJCQkJdTE2IGk7Cj4gIAo+IC0J CQkJZW5jb2RlID0gdm1hLT52bS0+c2NyYXRjaF9wdGU7Cj4gKwkJCQllbmNvZGUgPSB2bWEtPnZt LT5zY3JhdGNoWzBdLmVuY29kZTsKPiAgCQkJCXZhZGRyID0ga21hcF9hdG9taWNfcHgoaTkxNV9w dF9lbnRyeShwZCwKPiAgCQkJCQkJCQkgICAgIGlkeC5wZGUpKTsKPiAgCj4gQEAgLTE0NzEsNiAr MTQ2OSw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfaW5zZXJ0XzRsdmwoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCj4gIHN0YXRpYyBpbnQgZ2VuOF9pbml0X3NjcmF0Y2goc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gIHsKPiAgCWludCByZXQ7Cj4gKwlpbnQgaTsKPiAg Cj4gIAkvKgo+ICAJICogSWYgZXZlcnlib2R5IGFncmVlcyB0byBub3QgdG8gd3JpdGUgaW50byB0 aGUgc2NyYXRjaCBwYWdlLAo+IEBAIC0xNDg0LDEwICsxNDgzLDggQEAgc3RhdGljIGludCBnZW44 X2luaXRfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgCQlHRU1fQlVH X09OKCFjbG9uZS0+aGFzX3JlYWRfb25seSk7Cj4gIAo+ICAJCXZtLT5zY3JhdGNoX29yZGVyID0g Y2xvbmUtPnNjcmF0Y2hfb3JkZXI7Cj4gLQkJdm0tPnNjcmF0Y2hfcHRlID0gY2xvbmUtPnNjcmF0 Y2hfcHRlOwo+IC0JCXZtLT5zY3JhdGNoX3B0ICA9IGNsb25lLT5zY3JhdGNoX3B0Owo+IC0JCXZt LT5zY3JhdGNoX3BkICA9IGNsb25lLT5zY3JhdGNoX3BkOwo+IC0JCXZtLT5zY3JhdGNoX3BkcCA9 IGNsb25lLT5zY3JhdGNoX3BkcDsKPiArCQltZW1jcHkodm0tPnNjcmF0Y2gsIGNsb25lLT5zY3Jh dGNoLCBzaXplb2Yodm0tPnNjcmF0Y2gpKTsKPiArCQlweF9kbWEoJnZtLT5zY3JhdGNoWzBdKSA9 IDA7IC8qIG5vIHhmZXIgb2Ygb3duZXJzaGlwICovCj4gIAkJcmV0dXJuIDA7Cj4gIAl9Cj4gIAo+ IEBAIC0xNDk1LDQ0ICsxNDkyLDI1IEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X3NjcmF0Y2goc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7 Cj4gIAo+IC0Jdm0tPnNjcmF0Y2hfcHRlID0KPiAtCQlnZW44X3B0ZV9lbmNvZGUodm0tPnNjcmF0 Y2hfcGFnZS5kYWRkciwKPiAtCQkJCUk5MTVfQ0FDSEVfTExDLAo+IC0JCQkJdm0tPmhhc19yZWFk X29ubHkpOwo+ICsJdm0tPnNjcmF0Y2hbMF0uZW5jb2RlID0KPiArCQlnZW44X3B0ZV9lbmNvZGUo cHhfZG1hKCZ2bS0+c2NyYXRjaFswXSksCj4gKwkJCQlJOTE1X0NBQ0hFX0xMQywgdm0tPmhhc19y ZWFkX29ubHkpOwo+ICAKPiAtCWlmICh1bmxpa2VseShzZXR1cF9wYWdlX2RtYSh2bSwgJnZtLT5z Y3JhdGNoX3B0KSkpIHsKPiAtCQlyZXQgPSAtRU5PTUVNOwo+IC0JCWdvdG8gZnJlZV9zY3JhdGNo X3BhZ2U7Cj4gLQl9Cj4gLQlmaWxsX3BhZ2VfZG1hKCZ2bS0+c2NyYXRjaF9wdCwgdm0tPnNjcmF0 Y2hfcHRlKTsKPiArCWZvciAoaSA9IDE7IGkgPD0gdm0tPnRvcDsgaSsrKSB7Cj4gKwkJaWYgKHVu bGlrZWx5KHNldHVwX3BhZ2VfZG1hKHZtLCBweF9iYXNlKCZ2bS0+c2NyYXRjaFtpXSkpKSkKPiAr CQkJZ290byBmcmVlX3NjcmF0Y2g7Cj4gIAo+IC0JaWYgKHVubGlrZWx5KHNldHVwX3BhZ2VfZG1h KHZtLCAmdm0tPnNjcmF0Y2hfcGQpKSkgewo+IC0JCXJldCA9IC1FTk9NRU07Cj4gLQkJZ290byBm cmVlX3B0Owo+IC0JfQo+IC0JZmlsbF9wYWdlX2RtYSgmdm0tPnNjcmF0Y2hfcGQsCj4gLQkJICAg ICAgZ2VuOF9wZGVfZW5jb2RlKHZtLT5zY3JhdGNoX3BkLmRhZGRyLCBJOTE1X0NBQ0hFX0xMQykp Owo+IC0KPiAtCWlmIChpOTE1X3ZtX2lzXzRsdmwodm0pKSB7Cj4gLQkJaWYgKHVubGlrZWx5KHNl dHVwX3BhZ2VfZG1hKHZtLCAmdm0tPnNjcmF0Y2hfcGRwKSkpIHsKPiAtCQkJcmV0ID0gLUVOT01F TTsKPiAtCQkJZ290byBmcmVlX3BkOwo+IC0JCX0KPiAtCQlmaWxsX3BhZ2VfZG1hKCZ2bS0+c2Ny YXRjaF9wZHAsCj4gLQkJCSAgICAgIGdlbjhfcGRlX2VuY29kZSh2bS0+c2NyYXRjaF9wZHAuZGFk ZHIsCj4gLQkJCQkJICAgICAgSTkxNV9DQUNIRV9MTEMpKTsKPiArCQlmaWxsX3B4KCZ2bS0+c2Ny YXRjaFtpXSwgdm0tPnNjcmF0Y2hbaSAtIDFdLmVuY29kZSk7Cj4gKwkJdm0tPnNjcmF0Y2hbaV0u ZW5jb2RlID0KPiArCQkJZ2VuOF9wZGVfZW5jb2RlKHB4X2RtYSgmdm0tPnNjcmF0Y2hbaV0pLAo+ ICsJCQkJCUk5MTVfQ0FDSEVfTExDKTsKCk9rLiBUaGUgbmV3IGNvZGUgbWFrZXMgcGVyZmVjdCBz ZW5zZSBoZXJlLgoKQW5kIHdpdGggaXQgY29uZnVzaW9uIGFyaXNlczogaG93IGRpZCB3ZSBtYW5h Z2UKdG8gZ2V0IHRoZSBvbGQgY29kZSB3b3JrIHdpdGggcGRwIGVuY29kaW5nIHBvaW50aW5nIHRv IGl0c2VsZj8KCi1NaWthCgo+ICAJfQo+ICAKPiAgCXJldHVybiAwOwo+ICAKPiAtZnJlZV9wZDoK PiAtCWNsZWFudXBfcGFnZV9kbWEodm0sICZ2bS0+c2NyYXRjaF9wZCk7Cj4gLWZyZWVfcHQ6Cj4g LQljbGVhbnVwX3BhZ2VfZG1hKHZtLCAmdm0tPnNjcmF0Y2hfcHQpOwo+IC1mcmVlX3NjcmF0Y2hf cGFnZToKPiAtCWNsZWFudXBfc2NyYXRjaF9wYWdlKHZtKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ ICtmcmVlX3NjcmF0Y2g6Cj4gKwlmcmVlX3NjcmF0Y2godm0pOwo+ICsJcmV0dXJuIC1FTk9NRU07 Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgZ2VuOF9wcmVhbGxvY2F0ZV90b3BfbGV2ZWxfcGRwKHN0 cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCkKPiBAQCAtMTU0OSw3ICsxNTI3LDcgQEAgc3RhdGljIGlu dCBnZW44X3ByZWFsbG9jYXRlX3RvcF9sZXZlbF9wZHAoc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0 KQo+ICAJCWlmIChJU19FUlIocGQpKQo+ICAJCQlnb3RvIHVud2luZDsKPiAgCj4gLQkJaW5pdF9w ZChwZCwgJnZtLT5zY3JhdGNoX3B0KTsKPiArCQlpbml0X3BkKHBkLCAmdm0tPnNjcmF0Y2hbMV0p Owo+ICAJCXNldF9wZF9lbnRyeShwZHAsIHBkcGUsIHBkKTsKPiAgCX0KPiAgCj4gQEAgLTE1ODIs MTYgKzE1NjAsMTUgQEAgc3RhdGljIHZvaWQgcHBndHRfaW5pdChzdHJ1Y3QgaTkxNV9wcGd0dCAq cHBndHQsIHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAo+ICBzdGF0aWMgdm9pZCBpbml0X3BkX24o c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJICAgICAgc3RydWN0IGk5MTVfcGFn ZV9kaXJlY3RvcnkgKnBkLAo+IC0JCSAgICAgIHN0cnVjdCBpOTE1X3BhZ2VfZG1hICp0bywKPiAr CQkgICAgICBzdHJ1Y3QgaTkxNV9wYWdlX3NjcmF0Y2ggKnNjcmF0Y2gsCj4gIAkJICAgICAgY29u c3QgdW5zaWduZWQgaW50IGVudHJpZXMpCj4gIHsKPiAtCWNvbnN0IHU2NCBkYWRkciA9IGdlbjhf cGRlX2VuY29kZSh0by0+ZGFkZHIsIEk5MTVfQ0FDSEVfTExDKTsKPiAgCXU2NCAqIGNvbnN0IHZh ZGRyID0ga21hcF9hdG9taWNfcHgocGQpOwo+ICAKPiAtCW1lbXNldDY0KHZhZGRyLCBkYWRkciwg ZW50cmllcyk7Cj4gKwltZW1zZXQ2NCh2YWRkciwgc2NyYXRjaC0+ZW5jb2RlLCBlbnRyaWVzKTsK PiAgCWt1bm1hcF9hdG9taWModmFkZHIpOwo+ICAKPiAtCW1lbXNldF9wKHBkLT5lbnRyeSwgdG8s IGVudHJpZXMpOwo+ICsJbWVtc2V0X3AocGQtPmVudHJ5LCBzY3JhdGNoLCBlbnRyaWVzKTsKPiAg fQo+ICAKPiAgc3RhdGljIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICoKPiBAQCAtMTYwMiw3 ICsxNTc5LDcgQEAgZ2VuOF9hbGxvY190b3BfcGQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0pCj4gIAlpZiAoaTkxNV92bV9pc180bHZsKHZtKSkgewo+ICAJCXBkID0gYWxsb2NfcGQodm0p Owo+ICAJCWlmICghSVNfRVJSKHBkKSkKPiAtCQkJaW5pdF9wZChwZCwgJnZtLT5zY3JhdGNoX3Bk cCk7Cj4gKwkJCWluaXRfcGQocGQsICZ2bS0+c2NyYXRjaFszXSk7Cj4gIAo+ICAJCXJldHVybiBw ZDsKPiAgCX0KPiBAQCAtMTYxOSw3ICsxNTk2LDcgQEAgZ2VuOF9hbGxvY190b3BfcGQoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4g IAl9Cj4gIAo+IC0JaW5pdF9wZF9uKHZtLCBwZCwgJnZtLT5zY3JhdGNoX3BkLCBHRU44XzNMVkxf UERQRVMpOwo+ICsJaW5pdF9wZF9uKHZtLCBwZCwgJnZtLT5zY3JhdGNoWzJdLCBHRU44XzNMVkxf UERQRVMpOwo+ICAKPiAgCXJldHVybiBwZDsKPiAgfQo+IEBAIC0xNzY2LDcgKzE3NDMsNyBAQCBz dGF0aWMgdm9pZCBnZW42X3BwZ3R0X2NsZWFyX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtLAo+ICB7Cj4gIAlzdHJ1Y3QgZ2VuNl9wcGd0dCAqIGNvbnN0IHBwZ3R0ID0gdG9fZ2Vu Nl9wcGd0dChpOTE1X3ZtX3RvX3BwZ3R0KHZtKSk7Cj4gIAljb25zdCB1bnNpZ25lZCBpbnQgZmly c3RfZW50cnkgPSBzdGFydCAvIEk5MTVfR1RUX1BBR0VfU0laRTsKPiAtCWNvbnN0IGdlbjZfcHRl X3Qgc2NyYXRjaF9wdGUgPSB2bS0+c2NyYXRjaF9wdGU7Cj4gKwljb25zdCBnZW42X3B0ZV90IHNj cmF0Y2hfcHRlID0gdm0tPnNjcmF0Y2hbMF0uZW5jb2RlOwo+ICAJdW5zaWduZWQgaW50IHBkZSA9 IGZpcnN0X2VudHJ5IC8gR0VONl9QVEVTOwo+ICAJdW5zaWduZWQgaW50IHB0ZSA9IGZpcnN0X2Vu dHJ5ICUgR0VONl9QVEVTOwo+ICAJdW5zaWduZWQgaW50IG51bV9lbnRyaWVzID0gbGVuZ3RoIC8g STkxNV9HVFRfUEFHRV9TSVpFOwo+IEBAIC0xNzc3LDcgKzE3NTQsNyBAQCBzdGF0aWMgdm9pZCBn ZW42X3BwZ3R0X2NsZWFyX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJ CWNvbnN0IHVuc2lnbmVkIGludCBjb3VudCA9IG1pbihudW1fZW50cmllcywgR0VONl9QVEVTIC0g cHRlKTsKPiAgCQlnZW42X3B0ZV90ICp2YWRkcjsKPiAgCj4gLQkJR0VNX0JVR19PTihweF9iYXNl KHB0KSA9PSAmdm0tPnNjcmF0Y2hfcHQpOwo+ICsJCUdFTV9CVUdfT04ocHhfYmFzZShwdCkgPT0g cHhfYmFzZSgmdm0tPnNjcmF0Y2hbMV0pKTsKPiAgCj4gIAkJbnVtX2VudHJpZXMgLT0gY291bnQ7 Cj4gIAo+IEBAIC0xODE0LDcgKzE3OTEsNyBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2luc2Vy dF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJc3RydWN0IHNndF9k bWEgaXRlciA9IHNndF9kbWEodm1hKTsKPiAgCWdlbjZfcHRlX3QgKnZhZGRyOwo+ICAKPiAtCUdF TV9CVUdfT04ocGQtPmVudHJ5W2FjdF9wdF0gPT0gJnZtLT5zY3JhdGNoX3B0KTsKPiArCUdFTV9C VUdfT04ocGQtPmVudHJ5W2FjdF9wdF0gPT0gJnZtLT5zY3JhdGNoWzFdKTsKPiAgCj4gIAl2YWRk ciA9IGttYXBfYXRvbWljX3B4KGk5MTVfcHRfZW50cnkocGQsIGFjdF9wdCkpOwo+ICAJZG8gewo+ IEBAIC0xODU5LDcgKzE4MzYsNyBAQCBzdGF0aWMgaW50IGdlbjZfYWxsb2NfdmFfcmFuZ2Uoc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAlnZW42X2Zvcl9lYWNoX3BkZShwdCwgcGQs IHN0YXJ0LCBsZW5ndGgsIHBkZSkgewo+ICAJCWNvbnN0IHVuc2lnbmVkIGludCBjb3VudCA9IGdl bjZfcHRlX2NvdW50KHN0YXJ0LCBsZW5ndGgpOwo+ICAKPiAtCQlpZiAocHhfYmFzZShwdCkgPT0g JnZtLT5zY3JhdGNoX3B0KSB7Cj4gKwkJaWYgKHB4X2Jhc2UocHQpID09IHB4X2Jhc2UoJnZtLT5z Y3JhdGNoWzFdKSkgewo+ICAJCQlzcGluX3VubG9jaygmcGQtPmxvY2spOwo+ICAKPiAgCQkJcHQg PSBmZXRjaF9hbmRfemVybygmYWxsb2MpOwo+IEBAIC0xODcwLDEwICsxODQ3LDEwIEBAIHN0YXRp YyBpbnQgZ2VuNl9hbGxvY192YV9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwK PiAgCQkJCWdvdG8gdW53aW5kX291dDsKPiAgCQkJfQo+ICAKPiAtCQkJZmlsbDMyX3B4KHB0LCB2 bS0+c2NyYXRjaF9wdGUpOwo+ICsJCQlmaWxsMzJfcHgocHQsIHZtLT5zY3JhdGNoWzBdLmVuY29k ZSk7Cj4gIAo+ICAJCQlzcGluX2xvY2soJnBkLT5sb2NrKTsKPiAtCQkJaWYgKHBkLT5lbnRyeVtw ZGVdID09ICZ2bS0+c2NyYXRjaF9wdCkgewo+ICsJCQlpZiAocGQtPmVudHJ5W3BkZV0gPT0gJnZt LT5zY3JhdGNoWzFdKSB7Cj4gIAkJCQlwZC0+ZW50cnlbcGRlXSA9IHB0Owo+ICAJCQkJaWYgKGk5 MTVfdm1hX2lzX2JvdW5kKHBwZ3R0LT52bWEsCj4gIAkJCQkJCSAgICAgIEk5MTVfVk1BX0dMT0JB TF9CSU5EKSkgewo+IEBAIC0xOTEwLDI2ICsxODg3LDIzIEBAIHN0YXRpYyBpbnQgZ2VuNl9wcGd0 dF9pbml0X3NjcmF0Y2goc3RydWN0IGdlbjZfcHBndHQgKnBwZ3R0KQo+ICB7Cj4gIAlzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICogY29uc3Qgdm0gPSAmcHBndHQtPmJhc2Uudm07Cj4gIAlzdHJ1 Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBkID0gcHBndHQtPmJhc2UucGQ7Cj4gLQlz dHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICp1bnVzZWQ7Cj4gLQl1MzIgcGRlOwo+ICAJaW50IHJldDsK PiAgCj4gIAlyZXQgPSBzZXR1cF9zY3JhdGNoX3BhZ2Uodm0sIF9fR0ZQX0hJR0hNRU0pOwo+ICAJ aWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXZtLT5zY3JhdGNoX3B0ZSA9IHZtLT5w dGVfZW5jb2RlKHZtLT5zY3JhdGNoX3BhZ2UuZGFkZHIsCj4gLQkJCQkJIEk5MTVfQ0FDSEVfTk9O RSwKPiAtCQkJCQkgUFRFX1JFQURfT05MWSk7Cj4gKwl2bS0+c2NyYXRjaFswXS5lbmNvZGUgPQo+ ICsJCXZtLT5wdGVfZW5jb2RlKHB4X2RtYSgmdm0tPnNjcmF0Y2hbMF0pLAo+ICsJCQkgICAgICAg STkxNV9DQUNIRV9OT05FLCBQVEVfUkVBRF9PTkxZKTsKPiAgCj4gLQlpZiAodW5saWtlbHkoc2V0 dXBfcGFnZV9kbWEodm0sICZ2bS0+c2NyYXRjaF9wdCkpKSB7Cj4gKwlpZiAodW5saWtlbHkoc2V0 dXBfcGFnZV9kbWEodm0sIHB4X2Jhc2UoJnZtLT5zY3JhdGNoWzFdKSkpKSB7Cj4gIAkJY2xlYW51 cF9zY3JhdGNoX3BhZ2Uodm0pOwo+ICAJCXJldHVybiAtRU5PTUVNOwo+ICAJfQo+IC0JZmlsbF9w YWdlX2RtYV8zMigmdm0tPnNjcmF0Y2hfcHQsIHZtLT5zY3JhdGNoX3B0ZSk7Cj4gIAo+IC0JZ2Vu Nl9mb3JfYWxsX3BkZXModW51c2VkLCBwZCwgcGRlKQo+IC0JCXBkLT5lbnRyeVtwZGVdID0gJnZt LT5zY3JhdGNoX3B0Owo+ICsJZmlsbDMyX3B4KCZ2bS0+c2NyYXRjaFsxXSwgdm0tPnNjcmF0Y2hb MF0uZW5jb2RlKTsKPiArCW1lbXNldF9wKHBkLT5lbnRyeSwgJnZtLT5zY3JhdGNoWzFdLCBJOTE1 X1BERVMpOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gQEAgLTE5MzcsMTEgKzE5MTEsMTMgQEAg c3RhdGljIGludCBnZW42X3BwZ3R0X2luaXRfc2NyYXRjaChzdHJ1Y3QgZ2VuNl9wcGd0dCAqcHBn dHQpCj4gIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfZnJlZV9wZChzdHJ1Y3QgZ2VuNl9wcGd0dCAq cHBndHQpCj4gIHsKPiAgCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICogY29uc3QgcGQgPSBw cGd0dC0+YmFzZS5wZDsKPiArCXN0cnVjdCBpOTE1X3BhZ2VfZG1hICogY29uc3Qgc2NyYXRjaCA9 Cj4gKwkJcHhfYmFzZSgmcHBndHQtPmJhc2Uudm0uc2NyYXRjaFsxXSk7Cj4gIAlzdHJ1Y3QgaTkx NV9wYWdlX3RhYmxlICpwdDsKPiAgCXUzMiBwZGU7Cj4gIAo+ICAJZ2VuNl9mb3JfYWxsX3BkZXMo cHQsIHBkLCBwZGUpCj4gLQkJaWYgKHB4X2Jhc2UocHQpICE9ICZwcGd0dC0+YmFzZS52bS5zY3Jh dGNoX3B0KQo+ICsJCWlmIChweF9iYXNlKHB0KSAhPSBzY3JhdGNoKQo+ICAJCQlmcmVlX3B4KCZw cGd0dC0+YmFzZS52bSwgcHQpOwo+ICB9Cj4gIAo+IEBAIC0xOTk5LDcgKzE5NzUsOCBAQCBzdGF0 aWMgdm9pZCBwZF92bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICB7Cj4gIAlzdHJ1 Y3QgZ2VuNl9wcGd0dCAqcHBndHQgPSB2bWEtPnByaXZhdGU7Cj4gIAlzdHJ1Y3QgaTkxNV9wYWdl X2RpcmVjdG9yeSAqIGNvbnN0IHBkID0gcHBndHQtPmJhc2UucGQ7Cj4gLQlzdHJ1Y3QgaTkxNV9w YWdlX2RtYSAqIGNvbnN0IHNjcmF0Y2ggPSAmcHBndHQtPmJhc2Uudm0uc2NyYXRjaF9wdDsKPiAr CXN0cnVjdCBpOTE1X3BhZ2VfZG1hICogY29uc3Qgc2NyYXRjaCA9Cj4gKwkJcHhfYmFzZSgmcHBn dHQtPmJhc2Uudm0uc2NyYXRjaFsxXSk7Cj4gIAlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICpwdDsK PiAgCXVuc2lnbmVkIGludCBwZGU7Cj4gIAo+IEBAIC0yNDA1LDcgKzIzODIsNyBAQCBzdGF0aWMg dm9pZCBnZW44X2dndHRfY2xlYXJfcmFuZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0s Cj4gIAlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gaTkxNV92bV90b19nZ3R0KHZtKTsKPiAgCXVu c2lnbmVkIGZpcnN0X2VudHJ5ID0gc3RhcnQgLyBJOTE1X0dUVF9QQUdFX1NJWkU7Cj4gIAl1bnNp Z25lZCBudW1fZW50cmllcyA9IGxlbmd0aCAvIEk5MTVfR1RUX1BBR0VfU0laRTsKPiAtCWNvbnN0 IGdlbjhfcHRlX3Qgc2NyYXRjaF9wdGUgPSB2bS0+c2NyYXRjaF9wdGU7Cj4gKwljb25zdCBnZW44 X3B0ZV90IHNjcmF0Y2hfcHRlID0gdm0tPnNjcmF0Y2hbMF0uZW5jb2RlOwo+ICAJZ2VuOF9wdGVf dCBfX2lvbWVtICpndHRfYmFzZSA9Cj4gIAkJKGdlbjhfcHRlX3QgX19pb21lbSAqKWdndHQtPmdz bSArIGZpcnN0X2VudHJ5Owo+ICAJY29uc3QgaW50IG1heF9lbnRyaWVzID0gZ2d0dF90b3RhbF9l bnRyaWVzKGdndHQpIC0gZmlyc3RfZW50cnk7Cj4gQEAgLTI1MzAsOCArMjUwNyw3IEBAIHN0YXRp YyB2b2lkIGdlbjZfZ2d0dF9jbGVhcl9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSwKPiAgCQkgZmlyc3RfZW50cnksIG51bV9lbnRyaWVzLCBtYXhfZW50cmllcykpCj4gIAkJbnVt X2VudHJpZXMgPSBtYXhfZW50cmllczsKPiAgCj4gLQlzY3JhdGNoX3B0ZSA9IHZtLT5zY3JhdGNo X3B0ZTsKPiAtCj4gKwlzY3JhdGNoX3B0ZSA9IHZtLT5zY3JhdGNoWzBdLmVuY29kZTsKPiAgCWZv ciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKQo+ICAJCWlvd3JpdGUzMihzY3JhdGNoX3B0 ZSwgJmd0dF9iYXNlW2ldKTsKPiAgfQo+IEBAIC0zMDA1LDggKzI5ODEsOCBAQCBzdGF0aWMgaW50 IGdndHRfcHJvYmVfY29tbW9uKHN0cnVjdCBpOTE1X2dndHQgKmdndHQsIHU2NCBzaXplKQo+ICAJ CXJldHVybiByZXQ7Cj4gIAl9Cj4gIAo+IC0JZ2d0dC0+dm0uc2NyYXRjaF9wdGUgPQo+IC0JCWdn dHQtPnZtLnB0ZV9lbmNvZGUoZ2d0dC0+dm0uc2NyYXRjaF9wYWdlLmRhZGRyLAo+ICsJZ2d0dC0+ dm0uc2NyYXRjaFswXS5lbmNvZGUgPQo+ICsJCWdndHQtPnZtLnB0ZV9lbmNvZGUocHhfZG1hKCZn Z3R0LT52bS5zY3JhdGNoWzBdKSwKPiAgCQkJCSAgICBJOTE1X0NBQ0hFX05PTkUsIDApOwo+ICAK PiAgCXJldHVybiAwOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gaW5kZXggMTE5 YjZkMzNiMjY2Li42NjliMjA0ZDRjMTMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuaAo+IEBAIC0yNDAsNiArMjQwLDExIEBAIHN0cnVjdCBpOTE1X3BhZ2VfZG1hIHsKPiAgCX07 Cj4gIH07Cj4gIAo+ICtzdHJ1Y3QgaTkxNV9wYWdlX3NjcmF0Y2ggewo+ICsJc3RydWN0IGk5MTVf cGFnZV9kbWEgYmFzZTsKPiArCXU2NCBlbmNvZGU7Cj4gK307Cj4gKwo+ICBzdHJ1Y3QgaTkxNV9w YWdlX3RhYmxlIHsKPiAgCXN0cnVjdCBpOTE1X3BhZ2VfZG1hIGJhc2U7Cj4gIAlhdG9taWNfdCB1 c2VkOwo+IEBAIC0yNjAsOSArMjY1LDEwIEBAIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5IHsK PiAgCj4gICNkZWZpbmUgcHhfYmFzZShweCkgXAo+ICAJX19weF9jaG9vc2VfZXhwcihweCwgc3Ry dWN0IGk5MTVfcGFnZV9kbWEgKiwgX194LCBcCj4gKwlfX3B4X2Nob29zZV9leHByKHB4LCBzdHJ1 Y3QgaTkxNV9wYWdlX3NjcmF0Y2ggKiwgJl9feC0+YmFzZSwgXAo+ICAJX19weF9jaG9vc2VfZXhw cihweCwgc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqLCAmX194LT5iYXNlLCBcCj4gIAlfX3B4X2No b29zZV9leHByKHB4LCBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqLCAmX194LT5wdC5iYXNl LCBcCj4gLQkodm9pZCkwKSkpCj4gKwkodm9pZCkwKSkpKQo+ICAjZGVmaW5lIHB4X2RtYShweCkg KHB4X2Jhc2UocHgpLT5kYWRkcikKPiAgCj4gICNkZWZpbmUgcHhfcHQocHgpIFwKPiBAQCAtMzE3 LDEyICszMjMsOCBAQCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlIHsKPiAgI2RlZmluZSBWTV9D TEFTU19HR1RUIDAKPiAgI2RlZmluZSBWTV9DTEFTU19QUEdUVCAxCj4gIAo+IC0JdTY0IHNjcmF0 Y2hfcHRlOwo+ICsJc3RydWN0IGk5MTVfcGFnZV9zY3JhdGNoIHNjcmF0Y2hbNF07Cj4gIAlpbnQg c2NyYXRjaF9vcmRlcjsKPiAtCXN0cnVjdCBpOTE1X3BhZ2VfZG1hIHNjcmF0Y2hfcGFnZTsKPiAt CXN0cnVjdCBpOTE1X3BhZ2VfZG1hIHNjcmF0Y2hfcHQ7Cj4gLQlzdHJ1Y3QgaTkxNV9wYWdlX2Rt YSBzY3JhdGNoX3BkOwo+IC0Jc3RydWN0IGk5MTVfcGFnZV9kbWEgc2NyYXRjaF9wZHA7IC8qIEdF TjgrICYgNDhiIFBQR1RUICovCj4gIAlpbnQgdG9wOwo+ICAKPiAgCS8qKgo+IC0tIAo+IDIuMjAu MQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=