From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 32/46] drm/i915: Create/destroy VM (ppGTT) for use with contexts Date: Tue, 12 Feb 2019 11:18:16 +0000 Message-ID: References: <20190206130356.18771-1-chris@chris-wilson.co.uk> <20190206130356.18771-33-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 16AD86E388 for ; Tue, 12 Feb 2019 11:18:10 +0000 (UTC) In-Reply-To: <20190206130356.18771-33-chris@chris-wilson.co.uk> Content-Language: en-US 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 Ck9uIDA2LzAyLzIwMTkgMTM6MDMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBJbiBwcmVwYXJhdGlv biB0byBtYWtpbmcgdGhlIHBwR1RUIGJpbmRpbmcgZm9yIGEgY29udGV4dCBleHBsaWNpdCAodG8K PiBmYWNpbGl0YXRlIHJldXNpbmcgdGhlIHNhbWUgcHBHVFQgYmV0d2VlbiBkaWZmZXJlbnQgY29u dGV4dHMpLCBhbGxvdyB0aGUKPiB1c2VyIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBuYW1lZCBwcEdU VC4KPiAKPiB2MjogUmVwbGFjZSBnbG9iYWwgYmFycmllciBmb3Igc3dhcHBpbmcgb3ZlciB0aGUg cHBndHQgYW5kIHRsYnMgd2l0aCBhCj4gbG9jYWwgY29udGV4dCBiYXJyaWVyIChUdnJ0a28pCj4g djM6IHNlcmlhbGlzZSB3aXRoIHN0cnVjdF9tdXRleDsgaXQncyBsYXp5IGJ1dCByZXF1aXJlZCBk YW1taXQKPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNv bi5jby51az4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAg ICAgICAgICB8ICAgMiArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAg ICAgICAgICAgfCAgIDMgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4 dC5jICAgICAgIHwgMjU0ICsrKysrKysrKysrKysrKysrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fY29udGV4dC5oICAgICAgIHwgICA1ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5jICAgICAgICAgICB8ICAxNyArLQo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZ3R0LmggICAgICAgICAgIHwgIDE2ICstCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jICAgfCAgIDEgLQo+ICAgLi4uL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jIHwgMjM5ICsrKysrKysrKysrKy0tLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYyB8ICAgMSAt Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmMgfCAgIDgg Ky0KPiAgIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICAgICAgICB8ICAz NSArKysKPiAgIDExIGZpbGVzIGNoYW5nZWQsIDUxMCBpbnNlcnRpb25zKCspLCA3MSBkZWxldGlv bnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCAzNmRhOGFiMWU3Y2UuLjQ4 N2U3ODA5NGU5MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IEBAIC0zMDA1LDYgKzMw MDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIGk5MTVfaW9jdGxzW10g PSB7Cj4gICAJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9QRVJGX0FERF9DT05GSUcsIGk5MTVfcGVy Zl9hZGRfY29uZmlnX2lvY3RsLCBEUk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCj4gICAJ RFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9QRVJGX1JFTU9WRV9DT05GSUcsIGk5MTVfcGVyZl9yZW1v dmVfY29uZmlnX2lvY3RsLCBEUk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCj4gICAJRFJN X0lPQ1RMX0RFRl9EUlYoSTkxNV9RVUVSWSwgaTkxNV9xdWVyeV9pb2N0bCwgRFJNX1VOTE9DS0VE fERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fVk1fQ1JF QVRFLCBpOTE1X2dlbV92bV9jcmVhdGVfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJN X0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fVk1fREVTVFJPWSwgaTkxNV9nZW1fdm1fZGVzdHJveV9p b2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCj4gICB9Owo+ICAgCj4gICBzdGF0aWMgc3RydWN0IGRy bV9kcml2ZXIgZHJpdmVyID0gewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IGU1NTQ2 OTEzMDRkYy4uNTIzZGUzNjQ0NTcwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAg LTIxNyw2ICsyMTcsOSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlIHsKPiAgIAl9IG1t Owo+ICAgCXN0cnVjdCBpZHIgY29udGV4dF9pZHI7Cj4gICAKPiArCXN0cnVjdCBtdXRleCB2bV9s b2NrOwo+ICsJc3RydWN0IGlkciB2bV9pZHI7Cj4gKwo+ICAgCXVuc2lnbmVkIGludCBic2RfZW5n aW5lOwo+ICAgCj4gICAvKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMK PiBpbmRleCBjM2Y0MWY1MDEyNzYuLmRkNDliMWVmM2ZmMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiBAQCAtMTEwLDYgKzExMCw4IEBAIHN0YXRpYyB2b2lk IGx1dF9jbG9zZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAgCQlzdHJ1Y3QgaTkx NV92bWEgKnZtYSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKnNsb3QpOwo+ICAgCj4gICAJCXJhZGl4 X3RyZWVfaXRlcl9kZWxldGUoJmN0eC0+aGFuZGxlc192bWEsICZpdGVyLCBzbG90KTsKPiArCj4g KwkJdm1hLT5vcGVuX2NvdW50LS07CgpJIGFtIGZpbmRpbmcgdm1hLT5vcGVuX2NvdW50IGhhbmRs aW5nIHNlcmlvdXNseSBjb25mdXNpbmcuIFNvIG1heWJlIHRoYXQgCm1lYW5zIHRoZXJlIHNob3Vs ZCBiZSBhIGNvbW1lbnQgaGVyZSBhcyBtaW5pbXVtLgoKV2hhdCBpcyB0aGUgcGF0aCBpbiB0aGUg Y3VycmVudCBjb2RlIHdoaWNoIGJyaW5ncyB2bWEtPm9wZW5fY291bnQgYmFjayAKdG8gemVybz8g SWYgaXQgaXMgbm90IGRvbmUgZnJvbSBsdXRfY2xvc2UsIGJ1dCBvYmplY3QgaXMgcmVtb3ZlZCBm cm9tIAp0aGUgbHV0X2xpc3QsIHRoZW4gdGhlIG9ubHkgY3VycmVudCBkZWNyZW1lbnQgaW4gaTkx NV9nZW1fY2xvc2Vfb2JqZWN0IAp3b24ndCBydW4uIFN1cmVseSBJIGFtIG1pc3Npbmcgc29tZXRo aW5nLi4KCj4gICAJCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfdW5sZXNzX2FjdGl2ZSh2bWEt Pm9iaik7Cj4gICAJfQo+ICAgCXJjdV9yZWFkX3VubG9jaygpOwo+IEBAIC0yOTMsNyArMjk1LDcg QEAgc3RhdGljIHZvaWQgY29udGV4dF9jbG9zZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 KQo+ICAgCSAqLwo+ICAgCWx1dF9jbG9zZShjdHgpOwo+ICAgCWlmIChjdHgtPnBwZ3R0KQo+IC0J CWk5MTVfcHBndHRfY2xvc2UoJmN0eC0+cHBndHQtPnZtKTsKPiArCQlpOTE1X3BwZ3R0X2Nsb3Nl KGN0eC0+cHBndHQpOwo+ICAgCj4gICAJY3R4LT5maWxlX3ByaXYgPSBFUlJfUFRSKC1FQkFERik7 Cj4gICAJaTkxNV9nZW1fY29udGV4dF9wdXQoY3R4KTsKPiBAQCAtNDI1LDYgKzQyNywzMiBAQCBz dGF0aWMgdm9pZCBfX2Rlc3Ryb3lfaHdfY29udGV4dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAq Y3R4LAo+ICAgCWNvbnRleHRfY2xvc2UoY3R4KTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgc3RydWN0 IGk5MTVfaHdfcHBndHQgKgo+ICtfX3NldF9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAq Y3R4LCBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2h3 X3BwZ3R0ICpvbGQgPSBjdHgtPnBwZ3R0Owo+ICsKPiArCWk5MTVfcHBndHRfb3BlbihwcGd0dCk7 Cj4gKwljdHgtPnBwZ3R0ID0gaTkxNV9wcGd0dF9nZXQocHBndHQpOwo+ICsKPiArCWN0eC0+ZGVz Y190ZW1wbGF0ZSA9IGRlZmF1bHRfZGVzY190ZW1wbGF0ZShjdHgtPmk5MTUsIHBwZ3R0KTsKPiAr Cj4gKwlyZXR1cm4gb2xkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2Fzc2lnbl9wcGd0dChz dHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICsJCQkgICBzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQpCj4gK3sKPiArCWlmIChwcGd0dCA9PSBjdHgtPnBwZ3R0KQo+ICsJCXJldHVybjsK PiArCj4gKwlwcGd0dCA9IF9fc2V0X3BwZ3R0KGN0eCwgcHBndHQpOwo+ICsJaWYgKHBwZ3R0KSB7 Cj4gKwkJaTkxNV9wcGd0dF9jbG9zZShwcGd0dCk7Cj4gKwkJaTkxNV9wcGd0dF9wdXQocHBndHQp Owo+ICsJfQo+ICt9Cj4gKwo+ICAgc3RhdGljIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICoKPiAg IGk5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiAgIAkJCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdikKPiBAQCAt NDUxLDggKzQ3OSw4IEBAIGk5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiAgIAkJCXJldHVybiBFUlJfQ0FTVChwcGd0dCk7Cj4gICAJCX0K PiAgIAo+IC0JCWN0eC0+cHBndHQgPSBwcGd0dDsKPiAtCQljdHgtPmRlc2NfdGVtcGxhdGUgPSBk ZWZhdWx0X2Rlc2NfdGVtcGxhdGUoZGV2X3ByaXYsIHBwZ3R0KTsKPiArCQlfX2Fzc2lnbl9wcGd0 dChjdHgsIHBwZ3R0KTsKPiArCQlpOTE1X3BwZ3R0X3B1dChwcGd0dCk7CgpMb29rcyBzdHJhbmdl IGFuZCBvbmUgcmVhbGl6ZXMgaXQgaXMgZHJvcHBpbmcgdGhlIHJlZiBfX2Fzc2lnbl9wcGd0dCAK dGFrZXMuIE5vdCBzdXJlIGlmIGl0IHdvdWxkbid0IGJlIGJldHRlciB0byBqdXN0IG9wZW4gY29k ZSB3aGF0IHRoaXMgCnNpdGUgbmVlZHMuCgo+ICAgCX0KPiAgIAo+ICAgCXRyYWNlX2k5MTVfY29u dGV4dF9jcmVhdGUoY3R4KTsKPiBAQCAtNjMzLDE5ICs2NjEsMjkgQEAgc3RhdGljIGludCBjb250 ZXh0X2lkcl9jbGVhbnVwKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKPiAgIAlyZXR1cm4g MDsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IHZtX2lkcl9jbGVhbnVwKGludCBpZCwgdm9pZCAq cCwgdm9pZCAqZGF0YSkKPiArewo+ICsJaTkxNV9wcGd0dF9wdXQocCk7Cj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiAgIGludCBpOTE1X2dlbV9jb250ZXh0X29wZW4oc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsCj4gICAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiAgIHsKPiAgIAlz dHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJp djsKPiAgIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+ICAgCj4gKwltdXRleF9pbml0 KCZmaWxlX3ByaXYtPnZtX2xvY2spOwo+ICsKPiAgIAlpZHJfaW5pdCgmZmlsZV9wcml2LT5jb250 ZXh0X2lkcik7Cj4gKwlpZHJfaW5pdF9iYXNlKCZmaWxlX3ByaXYtPnZtX2lkciwgMSk7Cj4gICAK PiAgIAltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAljdHggPSBpOTE1 X2dlbV9jcmVhdGVfY29udGV4dChpOTE1LCBmaWxlX3ByaXYpOwo+ICAgCW11dGV4X3VubG9jaygm aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJaWYgKElTX0VSUihjdHgpKSB7Cj4gICAJCWlk cl9kZXN0cm95KCZmaWxlX3ByaXYtPmNvbnRleHRfaWRyKTsKPiArCQlpZHJfZGVzdHJveSgmZmls ZV9wcml2LT52bV9pZHIpOwo+ICAgCQlyZXR1cm4gUFRSX0VSUihjdHgpOwo+ICAgCX0KPiAgIAo+ IEBAIC02NjIsNiArNzAwLDg5IEBAIHZvaWQgaTkxNV9nZW1fY29udGV4dF9jbG9zZShzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUpCj4gICAKPiAgIAlpZHJfZm9yX2VhY2goJmZpbGVfcHJpdi0+Y29udGV4 dF9pZHIsIGNvbnRleHRfaWRyX2NsZWFudXAsIE5VTEwpOwo+ICAgCWlkcl9kZXN0cm95KCZmaWxl X3ByaXYtPmNvbnRleHRfaWRyKTsKPiArCj4gKwlpZHJfZm9yX2VhY2goJmZpbGVfcHJpdi0+dm1f aWRyLCB2bV9pZHJfY2xlYW51cCwgTlVMTCk7Cj4gKwlpZHJfZGVzdHJveSgmZmlsZV9wcml2LT52 bV9pZHIpOwoKVGhlIG5hbWUgb2YgdGhpcyBmdW5jdGlvbiBhbHdheXMgY29uZnVzZXMgbWUuIFNo b3VsZCB3ZSByZW5hbWUgaXQgdG8gCmk5MTVfZ2VtX2Nsb3NlX2NvbnRleHRzIG9yIHNvbWV0aGlu Zz8KCj4gKwo+ICsJbXV0ZXhfZGVzdHJveSgmZmlsZV9wcml2LT52bV9sb2NrKTsKPiArfQo+ICsK PiAraW50IGk5MTVfZ2VtX3ZtX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3ZtX2NvbnRyb2wgKmFyZ3MgPSBkYXRhOwo+ICsJc3RydWN0IGRybV9pOTE1X2Zp bGVfcHJpdmF0ZSAqZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7Cj4gKwlzdHJ1Y3QgaTkx NV9od19wcGd0dCAqcHBndHQ7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlmICghSEFTX0ZVTExfUFBH VFQoaTkxNSkpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJaWYgKGFyZ3MtPmZsYWdzKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmIChhcmdzLT5leHRlbnNpb25zKQo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsKPiArCXBwZ3R0ID0gaTkxNV9wcGd0dF9jcmVhdGUoaTkxNSwgZmls ZV9wcml2KTsKPiArCWlmIChJU19FUlIocHBndHQpKQo+ICsJCXJldHVybiBQVFJfRVJSKHBwZ3R0 KTsKPiArCj4gKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmZpbGVfcHJpdi0+dm1f bG9jayk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gZXJyX3B1dDsKPiArCj4gKwllcnIgPSBpZHJf YWxsb2MoJmZpbGVfcHJpdi0+dm1faWRyLCBwcGd0dCwgMCwgMCwgR0ZQX0tFUk5FTCk7Cj4gKwlt dXRleF91bmxvY2soJmZpbGVfcHJpdi0+dm1fbG9jayk7Cj4gKwlpZiAoZXJyIDwgMCkKPiArCQln b3RvIGVycl9wdXQ7Cj4gKwo+ICsJR0VNX0JVR19PTihlcnIgPT0gMCk7IC8qIHJlc2VydmVkIGZv ciBkZWZhdWx0L3VuYXNzaWduZWQgcHBndHQgKi8KPiArCXBwZ3R0LT51c2VyX2hhbmRsZSA9IGVy cjsKPiArCWFyZ3MtPmlkID0gZXJyOwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfcHV0Ogo+ICsJ aTkxNV9wcGd0dF9wdXQocHBndHQpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAraW50IGk5 MTVfZ2VtX3ZtX2Rlc3Ryb3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKPiArCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKPiArCXN0 cnVjdCBkcm1faTkxNV9nZW1fdm1fY29udHJvbCAqYXJncyA9IGRhdGE7Cj4gKwlzdHJ1Y3QgaTkx NV9od19wcGd0dCAqcHBndHQ7Cj4gKwlpbnQgZXJyOwo+ICsJdTMyIGlkOwo+ICsKPiArCWlmIChh cmdzLT5mbGFncykKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAoYXJncy0+ZXh0ZW5z aW9ucykKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZCA9IGFyZ3MtPmlkOwo+ICsJaWYg KCFpZCkKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCj4gKwllcnIgPSBtdXRleF9sb2NrX2ludGVy cnVwdGlibGUoJmZpbGVfcHJpdi0+dm1fbG9jayk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBl cnI7Cj4gKwo+ICsJcHBndHQgPSBpZHJfcmVtb3ZlKCZmaWxlX3ByaXYtPnZtX2lkciwgaWQpOwo+ ICsJaWYgKHBwZ3R0KSB7Cj4gKwkJR0VNX0JVR19PTighcHBndHQtPnVzZXJfaGFuZGxlKTsKPiAr CQlwcGd0dC0+dXNlcl9oYW5kbGUgPSAwOwo+ICsJfQo+ICsKPiArCW11dGV4X3VubG9jaygmZmls ZV9wcml2LT52bV9sb2NrKTsKPiArCWlmICghcHBndHQpCj4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4g Kwo+ICsJaTkxNV9wcGd0dF9wdXQocHBndHQpOwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAg IHN0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKPiBAQCAtODA5LDYgKzkzMCwxMjAgQEAgaW50 IGk5MTVfZ2VtX3N3aXRjaF90b19rZXJuZWxfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSwKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IGdldF9wcGd0 dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICsJCSAgICAgc3RydWN0IGRybV9pOTE1 X2dlbV9jb250ZXh0X3BhcmFtICphcmdzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9w cml2YXRlICpmaWxlX3ByaXYgPSBjdHgtPmZpbGVfcHJpdjsKPiArCXN0cnVjdCBpOTE1X2h3X3Bw Z3R0ICpwcGd0dDsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKCFjdHgtPnBwZ3R0KQo+ICsJCXJl dHVybiAtRU5PREVWOwo+ICsKPiArCS8qIFhYWCByY3UgYWNxdWlyZT8gKi8KPiArCXJldCA9IG11 dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3R4LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKCk9u bHkgdG8gc2VyaWFsaXplIHRocmVhZHMgd29ya2luZyBvbiB0aGUgc2FtZSBjdHg/IFdoeSBub3Qg ZG8gdGhhdCB1bmRlciAKdGhlIG5ldyB2bS0+bG9jayBpbnN0ZWFkPwoKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlwcGd0dCA9IGk5MTVfcHBndHRfZ2V0KGN0eC0+cHBndHQp Owo+ICsJbXV0ZXhfdW5sb2NrKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiAr CXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZmlsZV9wcml2LT52bV9sb2NrKTsKPiAr CWlmIChyZXQpCj4gKwkJZ290byBlcnJfcHV0Owo+ICsKPiArCWlmICghcHBndHQtPnVzZXJfaGFu ZGxlKSB7Cj4gKwkJcmV0ID0gaWRyX2FsbG9jKCZmaWxlX3ByaXYtPnZtX2lkciwgcHBndHQsIDAs IDAsIEdGUF9LRVJORUwpOwo+ICsJCUdFTV9CVUdfT04oIXJldCk7Cj4gKwkJaWYgKHJldCA8IDAp Cj4gKwkJCWdvdG8gZXJyX3VubG9jazsKPiArCj4gKwkJcHBndHQtPnVzZXJfaGFuZGxlID0gcmV0 Owo+ICsJCWk5MTVfcHBndHRfZ2V0KHBwZ3R0KTsKPiArCX0KPiArCj4gKwlhcmdzLT5zaXplID0g MDsKPiArCWFyZ3MtPnZhbHVlID0gcHBndHQtPnVzZXJfaGFuZGxlOwo+ICsKPiArCXJldCA9IDA7 Cj4gK2Vycl91bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJmZpbGVfcHJpdi0+dm1fbG9jayk7Cj4g K2Vycl9wdXQ6Cj4gKwlpOTE1X3BwZ3R0X3B1dChwcGd0dCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZXRfcHBndHRfYmFycmllcih2b2lkICpkYXRhKQo+ICt7Cj4g KwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqb2xkID0gZGF0YTsKPiArCj4gKwlpOTE1X3BwZ3R0X2Ns b3NlKG9sZCk7Cj4gKwlpOTE1X3BwZ3R0X3B1dChvbGQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHNldF9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICsJCSAgICAgc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtICphcmdzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBjdHgtPmZpbGVfcHJpdjsKPiArCXN0cnVjdCBp OTE1X2h3X3BwZ3R0ICpwcGd0dCwgKm9sZDsKPiArCWludCBlcnI7Cj4gKwo+ICsJaWYgKGFyZ3Mt PnNpemUpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKHVwcGVyXzMyX2JpdHMoYXJn cy0+dmFsdWUpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmICghY3R4LT5wcGd0dCkK PiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGli bGUoJmZpbGVfcHJpdi0+dm1fbG9jayk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4g Kwo+ICsJcHBndHQgPSBpZHJfZmluZCgmZmlsZV9wcml2LT52bV9pZHIsIGFyZ3MtPnZhbHVlKTsK PiArCWlmIChwcGd0dCkgewo+ICsJCUdFTV9CVUdfT04ocHBndHQtPnVzZXJfaGFuZGxlICE9IGFy Z3MtPnZhbHVlKTsKPiArCQlpOTE1X3BwZ3R0X2dldChwcGd0dCk7Cj4gKwl9Cj4gKwltdXRleF91 bmxvY2soJmZpbGVfcHJpdi0+dm1fbG9jayk7Cj4gKwlpZiAoIXBwZ3R0KQo+ICsJCXJldHVybiAt RU5PRU5UOwo+ICsKPiArCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3R4LT5pOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJ aWYgKHBwZ3R0ID09IGN0eC0+cHBndHQpCj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJLyogVGVh cmRvd24gdGhlIGV4aXN0aW5nIG9iajp2bWEgY2FjaGUsIGl0IHdpbGwgaGF2ZSB0byBiZSByZWJ1 aWx0LiAqLwo+ICsJbHV0X2Nsb3NlKGN0eCk7CgpOZXN0aW5nIGlzc3VlcyBJIGd1ZXNzLCB0aGUg YW5zd2VyIHRvIG15IHByZXZpb3VzIHF1ZXN0aW9uLgoKPiArCj4gKwlvbGQgPSBfX3NldF9wcGd0 dChjdHgsIHBwZ3R0KTsKPiArCj4gKwkvKgo+ICsJICogV2UgbmVlZCB0byBmbHVzaCBhbnkgcmVx dWVzdHMgdXNpbmcgdGhlIGN1cnJlbnQgcHBndHQgYmVmb3JlCj4gKwkgKiB3ZSByZWxlYXNlIGl0 IGFzIHRoZSByZXF1ZXN0cyBkbyBub3QgaG9sZCBhIHJlZmVyZW5jZSB0aGVtc2VsdmVzLAo+ICsJ ICogb25seSBpbmRpcmVjdGx5IHRocm91Z2ggdGhlIGNvbnRleHQuCj4gKwkgKi8KPiArCWVyciA9 IGNvbnRleHRfYmFycmllcl90YXNrKGN0eCwgLTEsIHNldF9wcGd0dF9iYXJyaWVyLCBvbGQpOwoK QnV0IGJhcnJpZXIgY2FuIGJlIHJldGlyZWQgb24gdXNlciBpbnRlcnJ1cHQgd2l0aCBjb250ZXh0 IHNhdmUgc3RpbGwgCnJ1bm5pbmcsIG5vPwoKUmVnYXJkcywKClR2cnRrbwoKPiArCWlmIChlcnIp IHsKPiArCQljdHgtPnBwZ3R0ID0gb2xkOwo+ICsJCWN0eC0+ZGVzY190ZW1wbGF0ZSA9IGRlZmF1 bHRfZGVzY190ZW1wbGF0ZShjdHgtPmk5MTUsIG9sZCk7Cj4gKwo+ICsJCWk5MTVfcHBndHRfY2xv c2UocHBndHQpOwo+ICsJCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiArCX0KPiArCj4gK3VubG9j azoKPiArCW11dGV4X3VubG9jaygmY3R4LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4g K291dDoKPiArCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiAr Cj4gICBzdGF0aWMgYm9vbCBjbGllbnRfaXNfYmFubmVkKHN0cnVjdCBkcm1faTkxNV9maWxlX3By aXZhdGUgKmZpbGVfcHJpdikKPiAgIHsKPiAgIAlyZXR1cm4gYXRvbWljX3JlYWQoJmZpbGVfcHJp di0+YmFuX3Njb3JlKSA+PSBJOTE1X0NMSUVOVF9TQ09SRV9CQU5ORUQ7Cj4gQEAgLTk3OSw2ICsx MjE0LDkgQEAgaW50IGk5MTVfZ2VtX2NvbnRleHRfZ2V0cGFyYW1faW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VV Ogo+ICAgCQlyZXQgPSBnZXRfc3NldShjdHgsIGFyZ3MpOwo+ICAgCQlicmVhazsKPiArCWNhc2Ug STkxNV9DT05URVhUX1BBUkFNX1ZNOgo+ICsJCXJldCA9IGdldF9wcGd0dChjdHgsIGFyZ3MpOwo+ ICsJCWJyZWFrOwo+ICAgCWRlZmF1bHQ6Cj4gICAJCXJldCA9IC1FSU5WQUw7Cj4gICAJCWJyZWFr Owo+IEBAIC0xMjc2LDkgKzE1MTQsNiBAQCBpbnQgaTkxNV9nZW1fY29udGV4dF9zZXRwYXJhbV9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCQlyZXR1cm4gLUVO T0VOVDsKPiAgIAo+ICAgCXN3aXRjaCAoYXJncy0+cGFyYW0pIHsKPiAtCWNhc2UgSTkxNV9DT05U RVhUX1BBUkFNX0JBTl9QRVJJT0Q6Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiAtCQlicmVhazsKPiAg IAljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9OT19aRVJPTUFQOgo+ICAgCQlpZiAoYXJncy0+c2l6 ZSkKPiAgIAkJCXJldCA9IC1FSU5WQUw7Cj4gQEAgLTEzMjUsOSArMTU2MCwxNiBAQCBpbnQgaTkx NV9nZW1fY29udGV4dF9zZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLAo+ICAgCQkJCQlJOTE1X1VTRVJfUFJJT1JJVFkocHJpb3JpdHkpOwo+ICAgCQl9Cj4g ICAJCWJyZWFrOwo+ICsKPiAgIAljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVOgo+ICAgCQly ZXQgPSBzZXRfc3NldShjdHgsIGFyZ3MpOwo+ICAgCQlicmVhazsKPiArCj4gKwljYXNlIEk5MTVf Q09OVEVYVF9QQVJBTV9WTToKPiArCQlyZXQgPSBzZXRfcHBndHQoY3R4LCBhcmdzKTsKPiArCQli cmVhazsKPiArCj4gKwljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9CQU5fUEVSSU9EOgo+ICAgCWRl ZmF1bHQ6Cj4gICAJCXJldCA9IC1FSU5WQUw7Cj4gICAJCWJyZWFrOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9jb250ZXh0LmgKPiBpbmRleCBhYjg5Yzc1MDE0MDguLmM1YTZjYjEwZGJk YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmgKPiBAQCAtMzY1 LDYgKzM2NSwxMSBAQCB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAq Y3R4X3JlZik7Cj4gICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqCj4gICBpOTE1X2dlbV9jb250 ZXh0X2NyZWF0ZV9ndnQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gICAKPiAraW50IGk5MTVf Z2VtX3ZtX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ ICsJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4gK2ludCBpOTE1X2dlbV92bV9kZXN0 cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCSAgICAg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4gKwo+ICAgaW50IGk5MTVfZ2VtX2NvbnRleHRfY3Jl YXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCQkJICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICAgaW50IGk5MTVfZ2VtX2NvbnRleHRfZGVzdHJveV9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggZDY0NmQzN2VlYzJmLi5jY2YxMDMwNmIxZjUgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0yMTAzLDEwICsyMTAzLDIxIEBA IGk5MTVfcHBndHRfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCXJl dHVybiBwcGd0dDsKPiAgIH0KPiAgIAo+IC12b2lkIGk5MTVfcHBndHRfY2xvc2Uoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gK3ZvaWQgaTkxNV9wcGd0dF9vcGVuKHN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dCkKPiAgIHsKPiAtCUdFTV9CVUdfT04odm0tPmNsb3NlZCk7Cj4gLQl2 bS0+Y2xvc2VkID0gdHJ1ZTsKPiArCUdFTV9CVUdfT04ocHBndHQtPnZtLmNsb3NlZCk7Cj4gKwo+ ICsJcHBndHQtPm9wZW5fY291bnQrKzsKPiArfQo+ICsKPiArdm9pZCBpOTE1X3BwZ3R0X2Nsb3Nl KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiArewo+ICsJR0VNX0JVR19PTighcHBndHQt Pm9wZW5fY291bnQpOwo+ICsJaWYgKC0tcHBndHQtPm9wZW5fY291bnQpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCUdFTV9CVUdfT04ocHBndHQtPnZtLmNsb3NlZCk7Cj4gKwlwcGd0dC0+dm0uY2xvc2Vk ID0gdHJ1ZTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgcHBndHRfZGVzdHJveV92bWEoc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0 LmgKPiBpbmRleCAwM2FkZTcxYjhkOWEuLmJiNzUwMzE4ZjUyYSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5oCj4gQEAgLTM5MSwxMSArMzkxLDE1IEBAIHN0cnVjdCBpOTE1X2h3 X3BwZ3R0IHsKPiAgIAlzdHJ1Y3Qga3JlZiByZWY7Cj4gICAKPiAgIAl1bnNpZ25lZCBsb25nIHBk X2RpcnR5X3JpbmdzOwo+ICsJdW5zaWduZWQgaW50IG9wZW5fY291bnQ7Cj4gKwo+ICAgCXVuaW9u IHsKPiAgIAkJc3RydWN0IGk5MTVfcG1sNCBwbWw0OwkJLyogR0VOOCsgJiA0OGIgUFBHVFQgKi8K PiAgIAkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciBwZHA7CS8qIEdFTjgrICov Cj4gICAJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5IHBkOwkJLyogR0VONi03ICovCj4gICAJ fTsKPiArCj4gKwl1MzIgdXNlcl9oYW5kbGU7Cj4gICB9Owo+ICAgCj4gICBzdHJ1Y3QgZ2VuNl9o d19wcGd0dCB7Cj4gQEAgLTYwNiwxMiArNjEwLDE2IEBAIGludCBpOTE1X3BwZ3R0X2luaXRfaHco c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgIHZvaWQgaTkxNV9wcGd0dF9y ZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKTsKPiAgIHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICppOTE1 X3BwZ3R0X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJCQkJ CXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZwcml2KTsKPiAtdm9pZCBpOTE1X3BwZ3R0 X2Nsb3NlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKTsKPiAtc3RhdGljIGlubGluZSB2 b2lkIGk5MTVfcHBndHRfZ2V0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiArCj4gK3Zv aWQgaTkxNV9wcGd0dF9vcGVuKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCk7Cj4gK3ZvaWQg aTkxNV9wcGd0dF9jbG9zZShzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpOwo+ICsKPiArc3Rh dGljIGlubGluZSBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqaTkxNV9wcGd0dF9nZXQoc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAgewo+IC0JaWYgKHBwZ3R0KQo+IC0JCWtyZWZfZ2V0KCZw cGd0dC0+cmVmKTsKPiArCWtyZWZfZ2V0KCZwcGd0dC0+cmVmKTsKPiArCXJldHVybiBwcGd0dDsK PiAgIH0KPiArCj4gICBzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wcGd0dF9wdXQoc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAgewo+ICAgCWlmIChwcGd0dCkKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMKPiBpbmRleCBhOWEyZmEzNTg3NmYuLmE3 ZWU4ZTk3YmNlZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aHVnZV9wYWdlcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2Vf cGFnZXMuYwo+IEBAIC0xNzM0LDcgKzE3MzQsNiBAQCBpbnQgaTkxNV9nZW1faHVnZV9wYWdlX21v Y2tfc2VsZnRlc3RzKHZvaWQpCj4gICAJZXJyID0gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywgcHBndHQp Owo+ICAgCj4gICBvdXRfY2xvc2U6Cj4gLQlpOTE1X3BwZ3R0X2Nsb3NlKCZwcGd0dC0+dm0pOwo+ ICAgCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiAgIAo+ICAgb3V0X3VubG9jazoKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMKPiBpbmRl eCA0YjZkZjFjNTUzNDUuLmE3NmE0ZjZmNjdlNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYwo+IEBAIC0zNzIsNyArMzcyLDgg QEAgc3RhdGljIGludCBjcHVfZmlsbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCB1 MzIgdmFsdWUpCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCBjcHVfY2hl Y2soc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgaW50IG1heCkKPiAr c3RhdGljIG5vaW5saW5lIGludCBjcHVfY2hlY2soc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPiArCQkJICAgICAgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgaW50IG1heCkKPiAg IHsKPiAgIAl1bnNpZ25lZCBpbnQgbiwgbSwgbmVlZHNfZmx1c2g7Cj4gICAJaW50IGVycjsKPiBA QCAtMzkwLDggKzM5MSwxMCBAQCBzdGF0aWMgaW50IGNwdV9jaGVjayhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBpbnQgbWF4KQo+ICAgCj4gICAJCWZvciAobSA9IDA7 IG0gPCBtYXg7IG0rKykgewo+ICAgCQkJaWYgKG1hcFttXSAhPSBtKSB7Cj4gLQkJCQlwcl9lcnIo IkludmFsaWQgdmFsdWUgYXQgcGFnZSAlZCwgb2Zmc2V0ICVkOiBmb3VuZCAleCBleHBlY3RlZCAl eFxuIiwKPiAtCQkJCSAgICAgICBuLCBtLCBtYXBbbV0sIG0pOwo+ICsJCQkJcHJfZXJyKCIlcFM6 IEludmFsaWQgdmFsdWUgYXQgb2JqZWN0ICVkIHBhZ2UgJWQvJWxkLCBvZmZzZXQgJWQvJWQ6IGZv dW5kICV4IGV4cGVjdGVkICV4XG4iLAo+ICsJCQkJICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRk cmVzcygwKSwgaWR4LAo+ICsJCQkJICAgICAgIG4sIHJlYWxfcGFnZV9jb3VudChvYmopLCBtLCBt YXgsCj4gKwkJCQkgICAgICAgbWFwW21dLCBtKTsKPiAgIAkJCQllcnIgPSAtRUlOVkFMOwo+ICAg CQkJCWdvdG8gb3V0X3VubWFwOwo+ICAgCQkJfQo+IEBAIC0zOTksOCArNDAyLDkgQEAgc3RhdGlj IGludCBjcHVfY2hlY2soc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQg aW50IG1heCkKPiAgIAo+ICAgCQlmb3IgKDsgbSA8IERXX1BFUl9QQUdFOyBtKyspIHsKPiAgIAkJ CWlmIChtYXBbbV0gIT0gU1RBQ0tfTUFHSUMpIHsKPiAtCQkJCXByX2VycigiSW52YWxpZCB2YWx1 ZSBhdCBwYWdlICVkLCBvZmZzZXQgJWQ6IGZvdW5kICV4IGV4cGVjdGVkICV4XG4iLAo+IC0JCQkJ ICAgICAgIG4sIG0sIG1hcFttXSwgU1RBQ0tfTUFHSUMpOwo+ICsJCQkJcHJfZXJyKCIlcFM6IElu dmFsaWQgdmFsdWUgYXQgb2JqZWN0ICVkIHBhZ2UgJWQsIG9mZnNldCAlZDogZm91bmQgJXggZXhw ZWN0ZWQgJXggKHVuaW5pdGlhbGlzZWQpXG4iLAo+ICsJCQkJICAgICAgIF9fYnVpbHRpbl9yZXR1 cm5fYWRkcmVzcygwKSwgaWR4LCBuLCBtLAo+ICsJCQkJICAgICAgIG1hcFttXSwgU1RBQ0tfTUFH SUMpOwo+ICAgCQkJCWVyciA9IC1FSU5WQUw7Cj4gICAJCQkJZ290byBvdXRfdW5tYXA7Cj4gICAJ CQl9Cj4gQEAgLTQ3OCwxMiArNDgyLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2R3b3Jk cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgc3RhdGljIGludCBpZ3RfY3R4 X2V4ZWModm9pZCAqYXJnKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 ID0gYXJnOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7Cj4gLQl1 bnNpZ25lZCBsb25nIG5jb250ZXh0cywgbmR3b3JkcywgZHc7Cj4gLQlzdHJ1Y3QgaWd0X2xpdmVf dGVzdCB0Owo+IC0Jc3RydWN0IGRybV9maWxlICpmaWxlOwo+IC0JSUdUX1RJTUVPVVQoZW5kX3Rp bWUpOwo+IC0JTElTVF9IRUFEKG9iamVjdHMpOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gICAJaW50IGVyciA9IC1FTk9E RVY7Cj4gICAKPiAgIAkvKgo+IEBAIC00OTUsMzggKzQ5NSw0MiBAQCBzdGF0aWMgaW50IGlndF9j dHhfZXhlYyh2b2lkICphcmcpCj4gICAJaWYgKCFEUklWRVJfQ0FQUyhpOTE1KS0+aGFzX2xvZ2lj YWxfY29udGV4dHMpCj4gICAJCXJldHVybiAwOwo+ICAgCj4gLQlmaWxlID0gbW9ja19maWxlKGk5 MTUpOwo+IC0JaWYgKElTX0VSUihmaWxlKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKPiAr CWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7Cj4gKwkJc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7Cj4gKwkJdW5zaWduZWQgbG9uZyBuY29udGV4dHMsIG5k d29yZHMsIGR3Owo+ICsJCXN0cnVjdCBpZ3RfbGl2ZV90ZXN0IHQ7Cj4gKwkJc3RydWN0IGRybV9m aWxlICpmaWxlOwo+ICsJCUlHVF9USU1FT1VUKGVuZF90aW1lKTsKPiArCQlMSVNUX0hFQUQob2Jq ZWN0cyk7Cj4gICAKPiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJ CWlmICghaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChlbmdpbmUpKQo+ICsJCQljb250aW51 ZTsKPiAgIAo+IC0JZXJyID0gaWd0X2xpdmVfdGVzdF9iZWdpbigmdCwgaTkxNSwgX19mdW5jX18s ICIiKTsKPiAtCWlmIChlcnIpCj4gLQkJZ290byBvdXRfdW5sb2NrOwo+ICsJCWlmICghZW5naW5l LT5jb250ZXh0X3NpemUpCj4gKwkJCWNvbnRpbnVlOyAvKiBObyBsb2dpY2FsIGNvbnRleHQgc3Vw cG9ydCBpbiBIVyAqLwo+ICAgCj4gLQluY29udGV4dHMgPSAwOwo+IC0JbmR3b3JkcyA9IDA7Cj4g LQlkdyA9IDA7Cj4gLQl3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZW5kX3RpbWUpKSB7Cj4g LQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JCXN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHg7Cj4gLQkJdW5zaWduZWQgaW50IGlkOwo+ICsJCWZpbGUgPSBtb2NrX2ZpbGUo aTkxNSk7Cj4gKwkJaWYgKElTX0VSUihmaWxlKSkKPiArCQkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7 Cj4gICAKPiAtCQljdHggPSBpOTE1X2dlbV9jcmVhdGVfY29udGV4dChpOTE1LCBmaWxlLT5kcml2 ZXJfcHJpdik7Cj4gLQkJaWYgKElTX0VSUihjdHgpKSB7Cj4gLQkJCWVyciA9IFBUUl9FUlIoY3R4 KTsKPiArCQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4gKwkJZXJy ID0gaWd0X2xpdmVfdGVzdF9iZWdpbigmdCwgaTkxNSwgX19mdW5jX18sIGVuZ2luZS0+bmFtZSk7 Cj4gKwkJaWYgKGVycikKPiAgIAkJCWdvdG8gb3V0X3VubG9jazsKPiAtCQl9Cj4gICAKPiAtCQlm b3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewo+ICsJCW5jb250ZXh0cyA9IDA7Cj4g KwkJbmR3b3JkcyA9IDA7Cj4gKwkJZHcgPSAwOwo+ICsJCXdoaWxlICghdGltZV9hZnRlcihqaWZm aWVzLCBlbmRfdGltZSkpIHsKPiArCQkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPiAg IAkJCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICAgCj4gLQkJCWlmICghZW5naW5lLT5jb250 ZXh0X3NpemUpCj4gLQkJCQljb250aW51ZTsgLyogTm8gbG9naWNhbCBjb250ZXh0IHN1cHBvcnQg aW4gSFcgKi8KPiAtCj4gLQkJCWlmICghaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChlbmdp bmUpKQo+IC0JCQkJY29udGludWU7Cj4gKwkJCWN0eCA9IGk5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0 KGk5MTUsIGZpbGUtPmRyaXZlcl9wcml2KTsKPiArCQkJaWYgKElTX0VSUihjdHgpKSB7Cj4gKwkJ CQllcnIgPSBQVFJfRVJSKGN0eCk7Cj4gKwkJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJCX0KPiAg IAo+ICAgCQkJaWYgKCFvYmopIHsKPiAgIAkJCQlvYmogPSBjcmVhdGVfdGVzdF9vYmplY3QoY3R4 LCBmaWxlLCAmb2JqZWN0cyk7Cj4gQEAgLTUzNiw3ICs1NDAsNiBAQCBzdGF0aWMgaW50IGlndF9j dHhfZXhlYyh2b2lkICphcmcpCj4gICAJCQkJfQo+ICAgCQkJfQo+ICAgCj4gLQkJCWVyciA9IDA7 Cj4gICAJCQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikKPiAgIAkJCQllcnIg PSBncHVfZmlsbChvYmosIGN0eCwgZW5naW5lLCBkdyk7Cj4gICAJCQlpZiAoZXJyKSB7Cj4gQEAg LTU1MSwzMiArNTU0LDE1OCBAQCBzdGF0aWMgaW50IGlndF9jdHhfZXhlYyh2b2lkICphcmcpCj4g ICAJCQkJb2JqID0gTlVMTDsKPiAgIAkJCQlkdyA9IDA7Cj4gICAJCQl9Cj4gKwo+ICAgCQkJbmR3 b3JkcysrOwo+ICsJCQluY29udGV4dHMrKzsKPiAgIAkJfQo+IC0JCW5jb250ZXh0cysrOwo+ICsK PiArCQlwcl9pbmZvKCJTdWJtaXR0ZWQgJWx1IGNvbnRleHRzIHRvICVzLCBmaWxsaW5nICVsdSBk d29yZHNcbiIsCj4gKwkJCW5jb250ZXh0cywgZW5naW5lLT5uYW1lLCBuZHdvcmRzKTsKPiArCj4g KwkJbmNvbnRleHRzID0gZHcgPSAwOwo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmb2Jq ZWN0cywgc3RfbGluaykgewo+ICsJCQl1bnNpZ25lZCBpbnQgcmVtID0KPiArCQkJCW1pbl90KHVu c2lnbmVkIGludCwgbmR3b3JkcyAtIGR3LCBtYXhfZHdvcmRzKG9iaikpOwo+ICsKPiArCQkJZXJy ID0gY3B1X2NoZWNrKG9iaiwgbmNvbnRleHRzKyssIHJlbSk7Cj4gKwkJCWlmIChlcnIpCj4gKwkJ CQlicmVhazsKPiArCj4gKwkJCWR3ICs9IHJlbTsKPiArCQl9Cj4gKwo+ICtvdXRfdW5sb2NrOgo+ ICsJCWlmIChpZ3RfbGl2ZV90ZXN0X2VuZCgmdCkpCj4gKwkJCWVyciA9IC1FSU87Cj4gKwkJbXV0 ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4gKwkJbW9ja19maWxlX2Zy ZWUoaTkxNSwgZmlsZSk7Cj4gKwkJaWYgKGVycikKPiArCQkJcmV0dXJuIGVycjsKPiAgIAl9Cj4g LQlwcl9pbmZvKCJTdWJtaXR0ZWQgJWx1IGNvbnRleHRzIChhY3Jvc3MgJXUgZW5naW5lcyksIGZp bGxpbmcgJWx1IGR3b3Jkc1xuIiwKPiAtCQluY29udGV4dHMsIFJVTlRJTUVfSU5GTyhpOTE1KS0+ bnVtX3JpbmdzLCBuZHdvcmRzKTsKPiAgIAo+IC0JZHcgPSAwOwo+IC0JbGlzdF9mb3JfZWFjaF9l bnRyeShvYmosICZvYmplY3RzLCBzdF9saW5rKSB7Cj4gLQkJdW5zaWduZWQgaW50IHJlbSA9Cj4g LQkJCW1pbl90KHVuc2lnbmVkIGludCwgbmR3b3JkcyAtIGR3LCBtYXhfZHdvcmRzKG9iaikpOwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X3NoYXJlZF9jdHhfZXhlYyh2 b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwo+ ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVf aWQgaWQ7Cj4gKwlpbnQgZXJyID0gLUVOT0RFVjsKPiArCj4gKwkvKgo+ICsJICogQ3JlYXRlIGEg ZmV3IGRpZmZlcmVudCBjb250ZXh0cyB3aXRoIHRoZSBzYW1lIG1tIGFuZCB3cml0ZQo+ICsJICog dGhyb3VnaCBlYWNoIGN0eCB1c2luZyB0aGUgR1BVIG1ha2luZyBzdXJlIHRob3NlIHdyaXRlcyBl bmQKPiArCSAqIHVwIGluIHRoZSBleHBlY3RlZCBwYWdlcyBvZiBvdXIgb2JqLgo+ICsJICovCj4g Kwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsKPiArCQl1bnNpZ25lZCBs b25nIG5jb250ZXh0cywgbmR3b3JkcywgZHc7Cj4gKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiA9IE5VTEw7Cj4gKwkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IE5VTEw7 Cj4gKwkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKnBhcmVudDsKPiArCQlzdHJ1Y3QgaWd0X2xp dmVfdGVzdCB0Owo+ICsJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKPiArCQlJR1RfVElNRU9VVChl bmRfdGltZSk7Cj4gKwkJTElTVF9IRUFEKG9iamVjdHMpOwo+ICAgCj4gLQkJZXJyID0gY3B1X2No ZWNrKG9iaiwgcmVtKTsKPiArCQlpZiAoIWludGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoZW5n aW5lKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWZpbGUgPSBtb2NrX2ZpbGUoaTkxNSk7Cj4g KwkJaWYgKElTX0VSUihmaWxlKSkKPiArCQkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4gKwo+ICsJ CW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCQllcnIgPSBpZ3Rf bGl2ZV90ZXN0X2JlZ2luKCZ0LCBpOTE1LCBfX2Z1bmNfXywgZW5naW5lLT5uYW1lKTsKPiAgIAkJ aWYgKGVycikKPiAtCQkJYnJlYWs7Cj4gKwkJCWdvdG8gb3V0X3VubG9jazsKPiAgIAo+IC0JCWR3 ICs9IHJlbTsKPiAtCX0KPiArCQlwYXJlbnQgPSBpOTE1X2dlbV9jcmVhdGVfY29udGV4dChpOTE1 LCBmaWxlLT5kcml2ZXJfcHJpdik7Cj4gKwkJaWYgKElTX0VSUihwYXJlbnQpKSB7Cj4gKwkJCWVy ciA9IFBUUl9FUlIocGFyZW50KTsKPiArCQkJaWYgKGVyciA9PSAtRU5PREVWKSAvKiBubyBsb2dp Y2FsIGN0eCBzdXBwb3J0ICovCj4gKwkJCQllcnIgPSAwOwo+ICsJCQlnb3RvIG91dF91bmxvY2s7 Cj4gKwkJfQo+ICsKPiArCQlpZiAoIXBhcmVudC0+cHBndHQpIHsKPiArCQkJZXJyID0gMDsKPiAr CQkJZ290byBvdXRfdW5sb2NrOwo+ICsJCX0KPiArCj4gKwkJbmNvbnRleHRzID0gMDsKPiArCQlu ZHdvcmRzID0gMDsKPiArCQlkdyA9IDA7Cj4gKwkJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMs IGVuZF90aW1lKSkgewo+ICsJCQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiArCj4gKwkJCWlm IChjdHgpCj4gKwkJCQlfX2Rlc3Ryb3lfaHdfY29udGV4dChjdHgsIGZpbGUtPmRyaXZlcl9wcml2 KTsKPiArCj4gKwkJCWN0eCA9IGk5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0KGk5MTUsIGZpbGUtPmRy aXZlcl9wcml2KTsKPiArCQkJaWYgKElTX0VSUihjdHgpKSB7Cj4gKwkJCQllcnIgPSBQVFJfRVJS KGN0eCk7Cj4gKwkJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJCX0KPiArCj4gKwkJCV9fYXNzaWdu X3BwZ3R0KGN0eCwgcGFyZW50LT5wcGd0dCk7Cj4gKwo+ICsJCQlpZiAoIW9iaikgewo+ICsJCQkJ b2JqID0gY3JlYXRlX3Rlc3Rfb2JqZWN0KHBhcmVudCwgZmlsZSwgJm9iamVjdHMpOwo+ICsJCQkJ aWYgKElTX0VSUihvYmopKSB7Cj4gKwkJCQkJZXJyID0gUFRSX0VSUihvYmopOwo+ICsJCQkJCWdv dG8gb3V0X3VubG9jazsKPiArCQkJCX0KPiArCQkJfQo+ICsKPiArCQkJZXJyID0gMDsKPiArCQkJ d2l0aF9pbnRlbF9ydW50aW1lX3BtKGk5MTUsIHdha2VyZWYpCj4gKwkJCQllcnIgPSBncHVfZmls bChvYmosIGN0eCwgZW5naW5lLCBkdyk7Cj4gKwkJCWlmIChlcnIpIHsKPiArCQkJCXByX2Vycigi RmFpbGVkIHRvIGZpbGwgZHdvcmQgJWx1IFslbHUvJWx1XSB3aXRoIGdwdSAoJXMpIGluIGN0eCAl dSBbZnVsbC1wcGd0dD8gJXNdLCBlcnI9JWRcbiIsCj4gKwkJCQkgICAgICAgbmR3b3JkcywgZHcs IG1heF9kd29yZHMob2JqKSwKPiArCQkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGN0eC0+aHdfaWQs Cj4gKwkJCQkgICAgICAgeWVzbm8oISFjdHgtPnBwZ3R0KSwgZXJyKTsKPiArCQkJCWdvdG8gb3V0 X3VubG9jazsKPiArCQkJfQo+ICsKPiArCQkJaWYgKCsrZHcgPT0gbWF4X2R3b3JkcyhvYmopKSB7 Cj4gKwkJCQlvYmogPSBOVUxMOwo+ICsJCQkJZHcgPSAwOwo+ICsJCQl9Cj4gKwo+ICsJCQluZHdv cmRzKys7Cj4gKwkJCW5jb250ZXh0cysrOwo+ICsJCX0KPiArCQlwcl9pbmZvKCJTdWJtaXR0ZWQg JWx1IGNvbnRleHRzIHRvICVzLCBmaWxsaW5nICVsdSBkd29yZHNcbiIsCj4gKwkJCW5jb250ZXh0 cywgZW5naW5lLT5uYW1lLCBuZHdvcmRzKTsKPiArCj4gKwkJbmNvbnRleHRzID0gZHcgPSAwOwo+ ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmb2JqZWN0cywgc3RfbGluaykgewo+ICsJCQl1 bnNpZ25lZCBpbnQgcmVtID0KPiArCQkJCW1pbl90KHVuc2lnbmVkIGludCwgbmR3b3JkcyAtIGR3 LCBtYXhfZHdvcmRzKG9iaikpOwo+ICsKPiArCQkJZXJyID0gY3B1X2NoZWNrKG9iaiwgbmNvbnRl eHRzKyssIHJlbSk7Cj4gKwkJCWlmIChlcnIpCj4gKwkJCQlicmVhazsKPiArCj4gKwkJCWR3ICs9 IHJlbTsKPiArCQl9Cj4gICAKPiAgIG91dF91bmxvY2s6Cj4gLQlpZiAoaWd0X2xpdmVfdGVzdF9l bmQoJnQpKQo+IC0JCWVyciA9IC1FSU87Cj4gLQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+ICsJCWlmIChpZ3RfbGl2ZV90ZXN0X2VuZCgmdCkpCj4gKwkJCWVyciA9IC1F SU87Cj4gKwkJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAo+IC0J bW9ja19maWxlX2ZyZWUoaTkxNSwgZmlsZSk7Cj4gLQlyZXR1cm4gZXJyOwo+ICsJCW1vY2tfZmls ZV9mcmVlKGk5MTUsIGZpbGUpOwo+ICsJCWlmIChlcnIpCj4gKwkJCXJldHVybiBlcnI7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEg KnJwY3NfcXVlcnlfYmF0Y2goc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gQEAgLTEwNDgsNyArMTE3 Nyw3IEBAIHN0YXRpYyBpbnQgaWd0X2N0eF9yZWFkb25seSh2b2lkICphcmcpCj4gICAJc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7Cj4gICAJc3RydWN0IGk5MTVfZ2VtX2Nv bnRleHQgKmN0eDsKPiAgIAlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQ7Cj4gLQl1bnNpZ25l ZCBsb25nIG5kd29yZHMsIGR3Owo+ICsJdW5zaWduZWQgbG9uZyBpZHgsIG5kd29yZHMsIGR3Owo+ ICAgCXN0cnVjdCBpZ3RfbGl2ZV90ZXN0IHQ7Cj4gICAJc3RydWN0IGRybV9maWxlICpmaWxlOwo+ ICAgCUk5MTVfUk5EX1NUQVRFKHBybmcpOwo+IEBAIC0xMTI5LDYgKzEyNTgsNyBAQCBzdGF0aWMg aW50IGlndF9jdHhfcmVhZG9ubHkodm9pZCAqYXJnKQo+ICAgCQluZHdvcmRzLCBSVU5USU1FX0lO Rk8oaTkxNSktPm51bV9yaW5ncyk7Cj4gICAKPiAgIAlkdyA9IDA7Cj4gKwlpZHggPSAwOwo+ICAg CWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmb2JqZWN0cywgc3RfbGluaykgewo+ICAgCQl1bnNp Z25lZCBpbnQgcmVtID0KPiAgIAkJCW1pbl90KHVuc2lnbmVkIGludCwgbmR3b3JkcyAtIGR3LCBt YXhfZHdvcmRzKG9iaikpOwo+IEBAIC0xMTM4LDcgKzEyNjgsNyBAQCBzdGF0aWMgaW50IGlndF9j dHhfcmVhZG9ubHkodm9pZCAqYXJnKQo+ICAgCQlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRv bmx5KG9iaikpCj4gICAJCQludW1fd3JpdGVzID0gMDsKPiAgIAo+IC0JCWVyciA9IGNwdV9jaGVj ayhvYmosIG51bV93cml0ZXMpOwo+ICsJCWVyciA9IGNwdV9jaGVjayhvYmosIGlkeCsrLCBudW1f d3JpdGVzKTsKPiAgIAkJaWYgKGVycikKPiAgIAkJCWJyZWFrOwo+ICAgCj4gQEAgLTE3MjMsNiAr MTg1Myw3IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIAkJU1VCVEVTVChpZ3RfY3R4X2V4ZWMpLAo+ICAg CQlTVUJURVNUKGlndF9jdHhfcmVhZG9ubHkpLAo+ICAgCQlTVUJURVNUKGlndF9jdHhfc3NldSks Cj4gKwkJU1VCVEVTVChpZ3Rfc2hhcmVkX2N0eF9leGVjKSwKPiAgIAkJU1VCVEVTVChpZ3Rfdm1f aXNvbGF0aW9uKSwKPiAgIAl9Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X2dlbV9ndHQuYwo+IGluZGV4IDM4NTBlZjRhNWVjOC4uMDhhOGYzZDIwODU0IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYwo+ IEBAIC0xMDIwLDcgKzEwMjAsNiBAQCBzdGF0aWMgaW50IGV4ZXJjaXNlX3BwZ3R0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAo+ICAgCWVyciA9IGZ1bmMoZGV2X3ByaXYs ICZwcGd0dC0+dm0sIDAsIHBwZ3R0LT52bS50b3RhbCwgZW5kX3RpbWUpOwo+ICAgCj4gLQlpOTE1 X3BwZ3R0X2Nsb3NlKCZwcGd0dC0+dm0pOwo+ICAgCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiAg IG91dF91bmxvY2s6Cj4gICAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRl eCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2Nv bnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+ IGluZGV4IDFiNTA3M2EzNjJlYi4uMjE4OWI2MDZjYTQxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+IEBAIC01NCwxMyArNTQsMTcgQEAg bW9ja19jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCQlnb3RvIGVy cl9oYW5kbGVzOwo+ICAgCj4gICAJaWYgKG5hbWUpIHsKPiArCQlzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQ7Cj4gKwo+ICAgCQljdHgtPm5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwp Owo+ICAgCQlpZiAoIWN0eC0+bmFtZSkKPiAgIAkJCWdvdG8gZXJyX3B1dDsKPiAgIAo+IC0JCWN0 eC0+cHBndHQgPSBtb2NrX3BwZ3R0KGk5MTUsIG5hbWUpOwo+IC0JCWlmICghY3R4LT5wcGd0dCkK PiArCQlwcGd0dCA9IG1vY2tfcHBndHQoaTkxNSwgbmFtZSk7Cj4gKwkJaWYgKCFwcGd0dCkKPiAg IAkJCWdvdG8gZXJyX3B1dDsKPiArCj4gKwkJX19zZXRfcHBndHQoY3R4LCBwcGd0dCk7Cj4gICAJ fQo+ICAgCj4gICAJcmV0dXJuIGN0eDsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gaW5kZXggYmUyZmNkZjNi YTkwLi4yY2Q3OTYzOWQ2YjUgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2Ry bS5oCj4gKysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gQEAgLTMzOSw2ICszMzks OCBAQCB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgewo+ICAgI2RlZmluZSBEUk1fSTkx NV9QRVJGX0FERF9DT05GSUcJMHgzNwo+ICAgI2RlZmluZSBEUk1fSTkxNV9QRVJGX1JFTU9WRV9D T05GSUcJMHgzOAo+ICAgI2RlZmluZSBEUk1fSTkxNV9RVUVSWQkJCTB4MzkKPiArI2RlZmluZSBE Uk1fSTkxNV9HRU1fVk1fQ1JFQVRFCQkweDNhCj4gKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1ZNX0RF U1RST1kJCTB4M2IKPiAgIAo+ICAgI2RlZmluZSBEUk1fSU9DVExfSTkxNV9JTklUCQlEUk1fSU9X KCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfSU5JVCwgZHJtX2k5MTVfaW5pdF90KQo+ICAg I2RlZmluZSBEUk1fSU9DVExfSTkxNV9GTFVTSAkJRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSAr IERSTV9JOTE1X0ZMVVNIKQo+IEBAIC0zOTcsNiArMzk5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX2Ry bV9pOTE1X3NhcmVhIHsKPiAgICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfUEVSRl9BRERfQ09ORklH CURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1BFUkZfQUREX0NPTkZJRywgc3Ry dWN0IGRybV9pOTE1X3BlcmZfb2FfY29uZmlnKQo+ICAgI2RlZmluZSBEUk1fSU9DVExfSTkxNV9Q RVJGX1JFTU9WRV9DT05GSUcJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfUEVS Rl9SRU1PVkVfQ09ORklHLCBfX3U2NCkKPiAgICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfUVVFUlkJ CQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfUVVFUlksIHN0cnVjdCBkcm1f aTkxNV9xdWVyeSkKPiArI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fVk1fQ1JFQVRFCURSTV9J T1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVk1fQ1JFQVRFLCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3ZtX2NvbnRyb2wpCj4gKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1ZNX0RF U1RST1kJRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9WTV9ERVNUUk9Z LCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wpCj4gICAKPiAgIC8qIEFsbG93IGRyaXZl cnMgdG8gc3VibWl0IGJhdGNoYnVmZmVycyBkaXJlY3RseSB0byBoYXJkd2FyZSwgcmVseWluZwo+ ICAgICogb24gdGhlIHNlY3VyaXR5IG1lY2hhbmlzbXMgcHJvdmlkZWQgYnkgaGFyZHdhcmUuCj4g QEAgLTE0NDQsNiArMTQ0OCwyNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfZGVzdHJv eSB7Cj4gICAJX191MzIgcGFkOwo+ICAgfTsKPiAgIAo+ICsvKgo+ICsgKiBEUk1fSTkxNV9HRU1f Vk1fQ1JFQVRFIC0KPiArICoKPiArICogQ3JlYXRlIGEgbmV3IHZpcnR1YWwgbWVtb3J5IGFkZHJl c3Mgc3BhY2UgKHBwR1RUKSBmb3IgdXNlIHdpdGhpbiBhIGNvbnRleHQKPiArICogb24gdGhlIHNh bWUgZmlsZS4gRXh0ZW5zaW9ucyBjYW4gYmUgcHJvdmlkZWQgdG8gY29uZmlndXJlIGV4YWN0bHkg aG93IHRoZQo+ICsgKiBhZGRyZXNzIHNwYWNlIGlzIHNldHVwIHVwb24gY3JlYXRpb24uCj4gKyAq Cj4gKyAqIFRoZSBpZCBvZiBuZXcgVk0gKGJvdW5kIHRvIHRoZSBmZCkgZm9yIHVzZSB3aXRoIEk5 MTVfQ09OVEVYVF9QQVJBTV9WTSBpcwo+ICsgKiByZXR1cm5lZC4KPiArICoKPiArICogRFJNX0k5 MTVfR0VNX1ZNX0RFU1RST1kgLQo+ICsgKgo+ICsgKiBEZXN0cm95cyBhIHByZXZpb3VzbHkgY3Jl YXRlZCBWTSBpZC4KPiArICovCj4gK3N0cnVjdCBkcm1faTkxNV9nZW1fdm1fY29udHJvbCB7Cj4g KwlfX3U2NCBleHRlbnNpb25zOwo+ICsJX191MzIgZmxhZ3M7Cj4gKwlfX3UzMiBpZDsKPiArfTsK PiArCj4gICBzdHJ1Y3QgZHJtX2k5MTVfcmVnX3JlYWQgewo+ICAgCS8qCj4gICAJICogUmVnaXN0 ZXIgb2Zmc2V0Lgo+IEBAIC0xNTEzLDYgKzE1MzcsMTcgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9j b250ZXh0X3BhcmFtIHsKPiAgIAkgKiBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1Lgo+ ICAgCSAqLwo+ICAgI2RlZmluZSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVQkJMHg3Cj4gKwo+ICsJ LyoKPiArCSAqIFRoZSBpZCBvZiB0aGUgYXNzb2NpYXRlZCB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNz IHNwYWNlIChwcEdUVCkgb2YKPiArCSAqIHRoaXMgY29udGV4dC4gQ2FuIGJlIHJldHJpZXZlZCBh bmQgcGFzc2VkIHRvIGFub3RoZXIgY29udGV4dAo+ICsJICogKG9uIHRoZSBzYW1lIGZkKSBmb3Ig Ym90aCB0byB1c2UgdGhlIHNhbWUgcHBHVFQgYW5kIHNvIHNoYXJlCj4gKwkgKiBhZGRyZXNzIGxh eW91dHMsIGFuZCBhdm9pZCByZWxvYWRpbmcgdGhlIHBhZ2UgdGFibGVzIG9uIGNvbnRleHQKPiAr CSAqIHN3aXRjaGVzIGJldHdlZW4gdGhlbXNlbHZlcy4KPiArCSAqCj4gKwkgKiBTZWUgRFJNX0k5 MTVfR0VNX1ZNX0NSRUFURSBhbmQgRFJNX0k5MTVfR0VNX1ZNX0RFU1RST1kuCj4gKwkgKi8KPiAr I2RlZmluZSBJOTE1X0NPTlRFWFRfUEFSQU1fVk0JCTB4OAo+ICAgCV9fdTY0IHZhbHVlOwo+ICAg fTsKPiAgIAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=