From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 2/3] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Tue, 15 Jan 2019 09:47:45 +0000 Message-ID: References: <20190114211729.30352-1-chris@chris-wilson.co.uk> <20190114211729.30352-2-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 mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6E6AD8984F for ; Tue, 15 Jan 2019 09:47:46 +0000 (UTC) In-Reply-To: <20190114211729.30352-2-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 Ck9uIDE0LzAxLzIwMTkgMjE6MTcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBTaW5jZSBjb21taXQg OTMwNjVhYzc1M2U0ICgibW0sIG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZGUgZm9yIG1t dQo+IG5vdGlmaWVycyIpIHdlIGhhdmUgYmVlbiBhYmxlIHRvIHJlcG9ydCBmYWlsdXJlIGZyb20K PiBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCB3aGljaCBhbGxvd3MgdXMgdG8gdXNlIGEgdHJ5 bG9jayBvbiB0aGUKPiBzdHJ1Y3RfbXV0ZXggdG8gYXZvaWQgcG90ZW50aWFsIHJlY3Vyc2lvbiBh bmQgcmVwb3J0IC1FQlVTWSBpbnN0ZWFkLgo+IEZ1cnRoZXJtb3JlLCB0aGlzIGFsbG93cyB1cyB0 byBwdWxsIHRoZSB3b3JrIGludG8gdGhlIG1haW4gY2FsbGJhY2sgYW5kCj4gYXZvaWQgdGhlIHNs ZWlnaHQtb2YtaGFuZCBpbiB1c2luZyBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrZGVwLgo+IAo+ IEhvd2V2ZXIsIG5vdCBhbGwgcGF0aHMgdG8gbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgYXJl IHByZXBhcmVkIHRvCj4gaGFuZGxlIGZhaWx1cmUsIHNvIGluc3RlYWQgb2YgcmVwb3J0aW5nIHRo ZSByZWN1cnNpb24sIGRlYWwgd2l0aCBpdCBieQo+IHByb3BhZ2F0aW5nIHRoZSBmYWlsdXJlIHVw d2FyZHMsIHdobyBjYW4gZGVjaWRlIHRoZW1zZWx2ZXMgdG8gaGFuZGxlIGl0Cj4gb3IgcmVwb3J0 IGl0Lgo+IAo+IHYyOiBNYXJrIHVwIHRoZSByZWN1cnNpdmUgbG9jayBiZWhhdmlvdXIgYW5kIGNv bW1lbnQgb24gdGhlIHZhcmlvdXMgd2Vhawo+IHBvaW50cy4KPiAKPiBCdWd6aWxsYTogaHR0cHM6 Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mzc1Cj4gUmVmZXJlbmNl czogOTMwNjVhYzc1M2U0ICgibW0sIG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZGUgZm9y IG1tdSBub3RpZmllcnMiKQo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hy aXMtd2lsc29uLmNvLnVrPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50 ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAg IHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCAg MzAgKysrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmggIHwgICA3 ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYyB8IDIyMCArKysr KysrKysrKy0tLS0tLS0tLS0tLS0KPiAgIDQgZmlsZXMgY2hhbmdlZCwgMTM1IGluc2VydGlvbnMo KyksIDEyNiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCBm YTk5ODI0ZjYzYjMuLjRiNjcwMzdjMDMxOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ IEBAIC0yOTMxLDggKzI5MzEsOCBAQCBlbnVtIGk5MTVfbW1fc3ViY2xhc3MgeyAvKiBsb2NrZGVw IHN1YmNsYXNzIGZvciBvYmotPm1tLmxvY2svc3RydWN0X211dGV4ICovCj4gICAJSTkxNV9NTV9T SFJJTktFUiAvKiBjYWxsZWQgInJlY3Vyc2l2ZWx5IiBmcm9tIGRpcmVjdC1yZWNsYWltLWVzcXVl ICovCj4gICB9Owo+ICAgCj4gLXZvaWQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCQkgZW51bSBpOTE1X21tX3N1YmNsYXNz IHN1YmNsYXNzKTsKPiAraW50IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNs YXNzKTsKPiAgIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKTsKPiAgIAo+ICAgZW51bSBpOTE1X21hcF90eXBlIHsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKPiBpbmRleCAwYmZlZDMzMTc4ZTEuLjkwYzE2N2Y3MTM0NSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IEBAIC0yMzAzLDggKzIzMDMsOCBAQCBfX2k5MTVf Z2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ ICAgCXN0cnVjdCBzZ190YWJsZSAqcGFnZXM7Cj4gICAKPiAgIAlwYWdlcyA9IGZldGNoX2FuZF96 ZXJvKCZvYmotPm1tLnBhZ2VzKTsKPiAtCWlmICghcGFnZXMpCj4gLQkJcmV0dXJuIE5VTEw7Cj4g KwlpZiAoSVNfRVJSX09SX05VTEwocGFnZXMpKQo+ICsJCXJldHVybiBwYWdlczsKPiAgIAo+ICAg CXNwaW5fbG9jaygmaTkxNS0+bW0ub2JqX2xvY2spOwo+ICAgCWxpc3RfZGVsKCZvYmotPm1tLmxp bmspOwo+IEBAIC0yMzI4LDIyICsyMzI4LDIzIEBAIF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3Bh Z2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJcmV0dXJuIHBhZ2VzOwo+ ICAgfQo+ICAgCj4gLXZvaWQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCQkgZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNs YXNzKQo+ICtpbnQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCj4gKwkJCQllbnVtIGk5MTVfbW1fc3ViY2xhc3Mgc3ViY2xhc3MpCj4g ICB7Cj4gICAJc3RydWN0IHNnX3RhYmxlICpwYWdlczsKPiArCWludCByZXQ7Cj4gICAKPiAgIAlp ZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSkKPiAtCQlyZXR1cm47Cj4g KwkJcmV0dXJuIC1FQlVTWTsKPiAgIAo+ICAgCUdFTV9CVUdfT04ob2JqLT5iaW5kX2NvdW50KTsK PiAtCWlmICghaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKQo+IC0JCXJldHVybjsKPiAg IAo+ICAgCS8qIE1heSBiZSBjYWxsZWQgYnkgc2hyaW5rZXIgZnJvbSB3aXRoaW4gZ2V0X3BhZ2Vz KCkgKG9uIGFub3RoZXIgYm8pICovCj4gICAJbXV0ZXhfbG9ja19uZXN0ZWQoJm9iai0+bW0ubG9j aywgc3ViY2xhc3MpOwo+IC0JaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2Vz X3Bpbl9jb3VudCkpKQo+ICsJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2Vz X3Bpbl9jb3VudCkpKSB7Cj4gKwkJcmV0ID0gLUVCVVNZOwo+ICAgCQlnb3RvIHVubG9jazsKPiAr CX0KPiAgIAo+ICAgCS8qCj4gICAJICogLT5wdXRfcGFnZXMgbWlnaHQgbmVlZCB0byBhbGxvY2F0 ZSBtZW1vcnkgZm9yIHRoZSBiaXQxNyBzd2l6emxlCj4gQEAgLTIzNTEsMTEgKzIzNTIsMjQgQEAg dm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgIAkgKiBsaXN0cyBlYXJseS4KPiAgIAkgKi8KPiAgIAlwYWdlcyA9IF9faTkx NV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7Cj4gKwo+ICsJLyoKPiArCSAqIFhYWCBUZW1w b3JhcnkgaGlqaW54IHRvIGF2b2lkIHVwZGF0aW5nIGFsbCBiYWNrZW5kcyB0byBoYW5kbGUKPiAr CSAqIE5VTEwgcGFnZXMuIEluIHRoZSBmdXR1cmUsIHdoZW4gd2UgaGF2ZSBtb3JlIGFzeW5jaHJv bm91cwo+ICsJICogZ2V0X3BhZ2VzIGJhY2tlbmRzIHdlIHNob3VsZCBiZSBiZXR0ZXIgYWJsZSB0 byBoYW5kbGUgdGhlCj4gKwkgKiBjYW5jZWxsYXRpb24gb2YgdGhlIGFzeW5jIHRhc2sgaW4gYSBt b3JlIHVuaWZvcm0gbWFubmVyLgo+ICsJICovCj4gKwlpZiAoIXBhZ2VzICYmICFpOTE1X2dlbV9v YmplY3RfbmVlZHNfYXN5bmNfY2FuY2VsKG9iaikpCj4gKwkJcGFnZXMgPSBFUlJfUFRSKC1FSU5W QUwpOwo+ICsKPiAgIAlpZiAoIUlTX0VSUihwYWdlcykpCj4gICAJCW9iai0+b3BzLT5wdXRfcGFn ZXMob2JqLCBwYWdlcyk7Cj4gICAKPiArCXJldCA9IDA7Cj4gICB1bmxvY2s6Cj4gICAJbXV0ZXhf dW5sb2NrKCZvYmotPm1tLmxvY2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAg IGJvb2wgaTkxNV9zZ190cmltKHN0cnVjdCBzZ190YWJsZSAqb3JpZ19zdCkKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaAo+IGluZGV4IGZmM2RhNjQ0NzBkZC4uY2IxYjAxNDRk Mjc0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmgKPiBAQCAtNTcs NiArNTcsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewo+ICAgI2RlZmluZSBJ OTE1X0dFTV9PQkpFQ1RfSEFTX1NUUlVDVF9QQUdFCUJJVCgwKQo+ICAgI2RlZmluZSBJOTE1X0dF TV9PQkpFQ1RfSVNfU0hSSU5LQUJMRQlCSVQoMSkKPiAgICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNU X0lTX1BST1hZCUJJVCgyKQo+ICsjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwJ QklUKDMpCj4gICAKPiAgIAkvKiBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQg aXRzIGJhY2tpbmcgc3RvcmFnZS4KPiAgIAkgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBw cmlvciB0byB0aGUgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIHNldAo+IEBAIC0zODcsNiArMzg4LDEy IEBAIGk5MTVfZ2VtX29iamVjdF9pc19wcm94eShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQo+ICAgCXJldHVybiBvYmotPm9wcy0+ZmxhZ3MgJiBJOTE1X0dFTV9PQkpFQ1Rf SVNfUFJPWFk7Cj4gICB9Cj4gICAKPiArc3RhdGljIGlubGluZSBib29sCj4gK2k5MTVfZ2VtX29i amVjdF9uZWVkc19hc3luY19jYW5jZWwoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKPiArewo+ICsJcmV0dXJuIG9iai0+b3BzLT5mbGFncyAmIEk5MTVfR0VNX09CSkVDVF9B U1lOQ19DQU5DRUw7Cj4gK30KPiArCj4gICBzdGF0aWMgaW5saW5lIGJvb2wKPiAgIGk5MTVfZ2Vt X29iamVjdF9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK PiAgIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0 ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4gaW5kZXggMWZi NmE3YmI1MDU0Li45YzIwMDhhNDgwZTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fdXNlcnB0ci5jCj4gQEAgLTQ5LDc3ICs0OSw4MSBAQCBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZp ZXIgewo+ICAgCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Cj4gICAJc3RydWN0IG1tdV9ub3RpZmll ciBtbjsKPiAgIAlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgb2JqZWN0czsKPiAtCXN0cnVjdCB3b3Jr cXVldWVfc3RydWN0ICp3cTsKPiArCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Cj4gICB9Owo+ ICAgCj4gICBzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0IHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVfbm90 aWZpZXIgKm1uOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJc3Ry dWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKPiAt CXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwo+IC0JYm9vbCBhdHRhY2hlZDsKPiAgIH07Cj4gICAK PiAtc3RhdGljIHZvaWQgY2FuY2VsX3VzZXJwdHIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ ICtzdGF0aWMgdm9pZCBhZGRfb2JqZWN0KHN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vKQo+ICAg ewo+IC0Jc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8gPSBjb250YWluZXJfb2Yod29yaywgdHlw ZW9mKCptbyksIHdvcmspOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IG1v LT5vYmo7Cj4gLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmFjdGl2ZTsKPiAtCj4gLQkvKiBDYW5jZWwg YW55IGFjdGl2ZSB3b3JrZXIgYW5kIGZvcmNlIHVzIHRvIHJlLWV2YWx1YXRlIGd1cCAqLwo+IC0J bXV0ZXhfbG9jaygmb2JqLT5tbS5sb2NrKTsKPiAtCWFjdGl2ZSA9IGZldGNoX2FuZF96ZXJvKCZv YmotPnVzZXJwdHIud29yayk7Cj4gLQltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Cj4gLQlp ZiAoYWN0aXZlKQo+IC0JCWdvdG8gb3V0Owo+IC0KPiAtCWk5MTVfZ2VtX29iamVjdF93YWl0KG9i aiwgSTkxNV9XQUlUX0FMTCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQsIE5VTEwpOwo+IC0KPiAtCW11 dGV4X2xvY2soJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQo+IC0JLyogV2UgYXJl IGluc2lkZSBhIGt0aHJlYWQgY29udGV4dCBhbmQgY2FuJ3QgYmUgaW50ZXJydXB0ZWQgKi8KPiAt CWlmIChpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaikgPT0gMCkKPiAtCQlfX2k5MTVfZ2VtX29i amVjdF9wdXRfcGFnZXMob2JqLCBJOTE1X01NX05PUk1BTCk7Cj4gLQlXQVJOX09OQ0UoaTkxNV9n ZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopLAo+IC0JCSAgIkZhaWxlZCB0byByZWxlYXNlIHBhZ2Vz OiBiaW5kX2NvdW50PSVkLCBwYWdlc19waW5fY291bnQ9JWQsIHBpbl9nbG9iYWw9JWRcbiIsCj4g LQkJICBvYmotPmJpbmRfY291bnQsCj4gLQkJICBhdG9taWNfcmVhZCgmb2JqLT5tbS5wYWdlc19w aW5fY291bnQpLAo+IC0JCSAgb2JqLT5waW5fZ2xvYmFsKTsKPiAtCj4gLQltdXRleF91bmxvY2so Jm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQo+IC1vdXQ6Cj4gLQlpOTE1X2dlbV9v YmplY3RfcHV0KG9iaik7Cj4gKwlHRU1fQlVHX09OKCFSQl9FTVBUWV9OT0RFKCZtby0+aXQucmIp KTsKPiArCWludGVydmFsX3RyZWVfaW5zZXJ0KCZtby0+aXQsICZtby0+bW4tPm9iamVjdHMpOwo+ ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkIGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVj dCAqbW8pCj4gK3N0YXRpYyB2b2lkIGRlbF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVjdCAq bW8pCj4gICB7Cj4gLQlpZiAobW8tPmF0dGFjaGVkKQo+ICsJaWYgKFJCX0VNUFRZX05PREUoJm1v LT5pdC5yYikpCj4gICAJCXJldHVybjsKPiAgIAo+IC0JaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1v LT5pdCwgJm1vLT5tbi0+b2JqZWN0cyk7Cj4gLQltby0+YXR0YWNoZWQgPSB0cnVlOwo+ICsJaW50 ZXJ2YWxfdHJlZV9yZW1vdmUoJm1vLT5pdCwgJm1vLT5tbi0+b2JqZWN0cyk7Cj4gKwlSQl9DTEVB Ul9OT0RFKCZtby0+aXQucmIpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkIGRlbF9vYmplY3Qo c3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8pCj4gK3N0YXRpYyB2b2lkCj4gK19faTkxNV9nZW1f dXNlcnB0cl9zZXRfYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wg dmFsdWUpCj4gICB7Cj4gLQlpZiAoIW1vLT5hdHRhY2hlZCkKPiArCXN0cnVjdCBpOTE1X21tdV9v YmplY3QgKm1vID0gb2JqLT51c2VycHRyLm1tdV9vYmplY3Q7Cj4gKwo+ICsJLyoKPiArCSAqIER1 cmluZyBtbV9pbnZhbGlkYXRlX3JhbmdlIHdlIG5lZWQgdG8gY2FuY2VsIGFueSB1c2VycHRyIHRo YXQKPiArCSAqIG92ZXJsYXBzIHRoZSByYW5nZSBiZWluZyBpbnZhbGlkYXRlZC4gRG9pbmcgc28g cmVxdWlyZXMgdGhlCj4gKwkgKiBzdHJ1Y3RfbXV0ZXgsIGFuZCB0aGF0IHJpc2tzIHJlY3Vyc2lv bi4gSW4gb3JkZXIgdG8gY2F1c2UKPiArCSAqIHJlY3Vyc2lvbiwgdGhlIHVzZXIgbXVzdCBhbGlh cyB0aGUgdXNlcnB0ciBhZGRyZXNzIHNwYWNlIHdpdGgKPiArCSAqIGEgR1RUIG1tYXBwaW5nIChw b3NzaWJsZSB3aXRoIGEgTUFQX0ZJWEVEKSAtIHRoZW4gd2hlbiB3ZSBoYXZlCj4gKwkgKiB0byBp bnZhbGlkYXRlIHRoYXQgbW1hcGluZywgbW1faW52YWxpZGF0ZV9yYW5nZSBpcyBjYWxsZWQgd2l0 aAo+ICsJICogdGhlIHVzZXJwdHIgYWRkcmVzcyAqYW5kKiB0aGUgc3RydWN0X211dGV4IGhlbGQu ICBUbyBwcmV2ZW50IHRoYXQKPiArCSAqIHdlIHNldCBhIGZsYWcgdW5kZXIgdGhlIGk5MTVfbW11 X25vdGlmaWVyIHNwaW5sb2NrIHRvIGluZGljYXRlCj4gKwkgKiB3aGV0aGVyIHRoaXMgb2JqZWN0 IGlzIHZhbGlkLgo+ICsJICovCj4gKwlpZiAoIW1vKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAtCWlu dGVydmFsX3RyZWVfcmVtb3ZlKCZtby0+aXQsICZtby0+bW4tPm9iamVjdHMpOwo+IC0JbW8tPmF0 dGFjaGVkID0gZmFsc2U7Cj4gKwlzcGluX2xvY2soJm1vLT5tbi0+bG9jayk7Cj4gKwlpZiAodmFs dWUpCj4gKwkJYWRkX29iamVjdChtbyk7Cj4gKwllbHNlCj4gKwkJZGVsX29iamVjdChtbyk7Cj4g KwlzcGluX3VubG9jaygmbW8tPm1uLT5sb2NrKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IGk5 MTVfZ2VtX3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlm aWVyICpfbW4sCj4gLQkJCWNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKQo+ ICtzdGF0aWMgc3RydWN0IG11dGV4ICpfX2k5MTVfbXV0ZXhfbG9ja19yZWN1cnNpdmUoc3RydWN0 IG11dGV4ICptKQo+ICt7Cj4gKwlzd2l0Y2ggKG11dGV4X3RyeWxvY2tfcmVjdXJzaXZlKG0pKSB7 Cj4gKwlkZWZhdWx0Ogo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX0ZBSUxFRDoKPiArCQltdXRleF9s b2NrX25lc3RlZChtLCBJOTE1X01NX1NIUklOS0VSKTsKCkhhdmUgeW91IGZvdW5kIGluIHRoZSBt ZWFudGltZSB0aGF0IHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkPyBBbHRob3VnaCBpdCAKaXMgc2lu Y2Ugd2UgdXNlIHRoaXMgc3ViY2xhc3MgdG8gcHV0IHRoZSBwYWdlcy4uCgpTaG91bGQgaTkxNV9n ZW1fc2hyaW5rZXJfdGFpbnN0X211dGV4IHRhaW50IG9iai0+bW0ubG9jayB3aXRoIHRoZSAKc2hy aW5rZXIgc3ViY2xhc3M/Cgo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX1NVQ0NFU1M6Cj4gKwkJcmV0 dXJuIG07Cj4gKwo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX1JFQ1VSU0lWRToKPiArCQlyZXR1cm4g RVJSX1BUUigtRUVYSVNUKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludAo+ICt1c2VycHRy X21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAqX21uLAo+ICsJ CQkJICBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSkKPiAgIHsKPiAgIAlz dHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uID0KPiAgIAkJY29udGFpbmVyX29mKF9tbiwgc3Ry dWN0IGk5MTVfbW11X25vdGlmaWVyLCBtbik7Cj4gLQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICpt bzsKPiAgIAlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICppdDsKPiAtCUxJU1RfSEVBRChjYW5j ZWxsZWQpOwo+ICsJc3RydWN0IG11dGV4ICp1bmxvY2sgPSBOVUxMOwo+ICAgCXVuc2lnbmVkIGxv bmcgZW5kOwo+ICsJaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoUkJfRU1QVFlfUk9PVCgmbW4t Pm9iamVjdHMucmJfcm9vdCkpCj4gICAJCXJldHVybiAwOwo+IEBAIC0xMzAsMTEgKzEzNCwxNSBA QCBzdGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChz dHJ1Y3QgbW11X25vdGlmaWVyICpfbW4sCj4gICAJc3Bpbl9sb2NrKCZtbi0+bG9jayk7Cj4gICAJ aXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3QoJm1uLT5vYmplY3RzLCByYW5nZS0+c3RhcnQs IGVuZCk7Cj4gICAJd2hpbGUgKGl0KSB7Cj4gKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKPiArCj4gICAJCWlmICghcmFuZ2UtPmJsb2NrYWJsZSkgewo+IC0JCQlzcGluX3VubG9j aygmbW4tPmxvY2spOwo+IC0JCQlyZXR1cm4gLUVBR0FJTjsKPiArCQkJcmV0ID0gLUVBR0FJTjsK PiArCQkJYnJlYWs7Cj4gICAJCX0KPiAtCQkvKiBUaGUgbW11X29iamVjdCBpcyByZWxlYXNlZCBs YXRlIHdoZW4gZGVzdHJveWluZyB0aGUKPiArCj4gKwkJLyoKPiArCQkgKiBUaGUgbW11X29iamVj dCBpcyByZWxlYXNlZCBsYXRlIHdoZW4gZGVzdHJveWluZyB0aGUKPiAgIAkJICogR0VNIG9iamVj dCBzbyBpdCBpcyBlbnRpcmVseSBwb3NzaWJsZSB0byBnYWluIGEKPiAgIAkJICogcmVmZXJlbmNl IG9uIGFuIG9iamVjdCBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZAo+ICAgCQkgKiBzaW5j ZSBvdXIgc2VyaWFsaXNhdGlvbiBpcyB2aWEgdGhlIHNwaW5sb2NrIGFuZCBub3QKPiBAQCAtMTQz LDI5ICsxNTEsNDcgQEAgc3RhdGljIGludCBpOTE1X2dlbV91c2VycHRyX21uX2ludmFsaWRhdGVf cmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAqX21uLAo+ICAgCQkgKiB1c2UtYWZ0ZXIt ZnJlZSB3ZSBvbmx5IGFjcXVpcmUgYSByZWZlcmVuY2Ugb24gdGhlCj4gICAJCSAqIG9iamVjdCBp ZiBpdCBpcyBub3QgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVkLgo+ICAgCQkgKi8K PiAtCQltbyA9IGNvbnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpOwo+ IC0JCWlmIChrcmVmX2dldF91bmxlc3NfemVybygmbW8tPm9iai0+YmFzZS5yZWZjb3VudCkpCj4g LQkJCXF1ZXVlX3dvcmsobW4tPndxLCAmbW8tPndvcmspOwo+ICsJCW9iaiA9IGNvbnRhaW5lcl9v ZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpLT5vYmo7Cj4gKwkJaWYgKCFrcmVmX2dl dF91bmxlc3NfemVybygmb2JqLT5iYXNlLnJlZmNvdW50KSkgewo+ICsJCQlpdCA9IGludGVydmFs X3RyZWVfaXRlcl9uZXh0KGl0LCByYW5nZS0+c3RhcnQsIGVuZCk7Cj4gKwkJCWNvbnRpbnVlOwo+ ICsJCX0KPiArCQlzcGluX3VubG9jaygmbW4tPmxvY2spOwo+ICAgCj4gLQkJbGlzdF9hZGQoJm1v LT5saW5rLCAmY2FuY2VsbGVkKTsKPiAtCQlpdCA9IGludGVydmFsX3RyZWVfaXRlcl9uZXh0KGl0 LCByYW5nZS0+c3RhcnQsIGVuZCk7Cj4gKwkJaWYgKCF1bmxvY2spCj4gKwkJCXVubG9jayA9IF9f aTkxNV9tdXRleF9sb2NrX3JlY3Vyc2l2ZSgmbW4tPm1tLT5pOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKPiArCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7Cj4gKwkJaWYgKHJldCA9 PSAwKQo+ICsJCQlyZXQgPSBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqLCBJOTE1X01N X1NIUklOS0VSKTsKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gKwkJaWYgKHJldCkK PiArCQkJZ290byB1bmxvY2s7Cj4gKwo+ICsJCXNwaW5fbG9jaygmbW4tPmxvY2spOwo+ICsKPiAr CQkvKgo+ICsJCSAqIEFzIHdlIGRvIG5vdCAoeWV0KSBwcm90ZWN0IHRoZSBtbXUgZnJvbSBjb25j dXJyZW50IGluc2VydGlvbgo+ICsJCSAqIG92ZXIgdGhpcyByYW5nZSwgdGhlcmUgaXMgbm8gZ3Vh cmFudGVlIHRoYXQgdGhpcyBzZWFyY2ggd2lsbAo+ICsJCSAqIHRlcm1pbmF0ZSBnaXZlbiBhIHBh dGhvbG9naWMgd29ya2xvYWQuCj4gKwkJICovCj4gKwkJaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJf Zmlyc3QoJm1uLT5vYmplY3RzLCByYW5nZS0+c3RhcnQsIGVuZCk7Cj4gICAJfQo+IC0JbGlzdF9m b3JfZWFjaF9lbnRyeShtbywgJmNhbmNlbGxlZCwgbGluaykKPiAtCQlkZWxfb2JqZWN0KG1vKTsK PiAgIAlzcGluX3VubG9jaygmbW4tPmxvY2spOwo+ICAgCj4gLQlpZiAoIWxpc3RfZW1wdHkoJmNh bmNlbGxlZCkpCj4gLQkJZmx1c2hfd29ya3F1ZXVlKG1uLT53cSk7Cj4gK3VubG9jazoKPiArCWlm ICghSVNfRVJSX09SX05VTEwodW5sb2NrKSkKPiArCQltdXRleF91bmxvY2sodW5sb2NrKTsKPiAr Cj4gKwlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgc3RhdGlj IGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXIg PSB7Cj4gLQkuaW52YWxpZGF0ZV9yYW5nZV9zdGFydCA9IGk5MTVfZ2VtX3VzZXJwdHJfbW5faW52 YWxpZGF0ZV9yYW5nZV9zdGFydCwKPiArCS5pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0ID0gdXNlcnB0 cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0LAo+ICAgfTsKPiAgIAo+ICAgc3RhdGljIHN0cnVj dCBpOTE1X21tdV9ub3RpZmllciAqCj4gLWk5MTVfbW11X25vdGlmaWVyX2NyZWF0ZShzdHJ1Y3Qg bW1fc3RydWN0ICptbSkKPiAraTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKHN0cnVjdCBpOTE1X21t X3N0cnVjdCAqbW0pCj4gICB7Cj4gICAJc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsKPiAg IAo+IEBAIC0xNzYsMTMgKzIwMiw3IEBAIGk5MTVfbW11X25vdGlmaWVyX2NyZWF0ZShzdHJ1Y3Qg bW1fc3RydWN0ICptbSkKPiAgIAlzcGluX2xvY2tfaW5pdCgmbW4tPmxvY2spOwo+ICAgCW1uLT5t bi5vcHMgPSAmaTkxNV9nZW1fdXNlcnB0cl9ub3RpZmllcjsKPiAgIAltbi0+b2JqZWN0cyA9IFJC X1JPT1RfQ0FDSEVEOwo+IC0JbW4tPndxID0gYWxsb2Nfd29ya3F1ZXVlKCJpOTE1LXVzZXJwdHIt cmVsZWFzZSIsCj4gLQkJCQkgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLAo+IC0JCQkJIDAp Owo+IC0JaWYgKG1uLT53cSA9PSBOVUxMKSB7Cj4gLQkJa2ZyZWUobW4pOwo+IC0JCXJldHVybiBF UlJfUFRSKC1FTk9NRU0pOwo+IC0JfQo+ICsJbW4tPm1tID0gbW07Cj4gICAKPiAgIAlyZXR1cm4g bW47Cj4gICB9Cj4gQEAgLTE5MiwxNiArMjEyLDE0IEBAIGk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFz ZV9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICB7Cj4g ICAJc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW87Cj4gICAKPiAtCW1vID0gb2JqLT51c2VycHRy Lm1tdV9vYmplY3Q7Cj4gLQlpZiAobW8gPT0gTlVMTCkKPiArCW1vID0gZmV0Y2hfYW5kX3plcm8o Jm9iai0+dXNlcnB0ci5tbXVfb2JqZWN0KTsKPiArCWlmICghbW8pCj4gICAJCXJldHVybjsKPiAg IAo+ICAgCXNwaW5fbG9jaygmbW8tPm1uLT5sb2NrKTsKPiAgIAlkZWxfb2JqZWN0KG1vKTsKPiAg IAlzcGluX3VubG9jaygmbW8tPm1uLT5sb2NrKTsKPiAgIAlrZnJlZShtbyk7Cj4gLQo+IC0Jb2Jq LT51c2VycHRyLm1tdV9vYmplY3QgPSBOVUxMOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgc3RydWN0 IGk5MTVfbW11X25vdGlmaWVyICoKPiBAQCAtMjE0LDcgKzIzMiw3IEBAIGk5MTVfbW11X25vdGlm aWVyX2ZpbmQoc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSkKPiAgIAlpZiAobW4pCj4gICAJCXJl dHVybiBtbjsKPiAgIAo+IC0JbW4gPSBpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUobW0tPm1tKTsK PiArCW1uID0gaTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKG1tKTsKPiAgIAlpZiAoSVNfRVJSKG1u KSkKPiAgIAkJZXJyID0gUFRSX0VSUihtbik7Cj4gICAKPiBAQCAtMjM3LDEwICsyNTUsOCBAQCBp OTE1X21tdV9ub3RpZmllcl9maW5kKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCj4gICAJbXV0 ZXhfdW5sb2NrKCZtbS0+aTkxNS0+bW1fbG9jayk7Cj4gICAJdXBfd3JpdGUoJm1tLT5tbS0+bW1h cF9zZW0pOwo+ICAgCj4gLQlpZiAobW4gJiYgIUlTX0VSUihtbikpIHsKPiAtCQlkZXN0cm95X3dv cmtxdWV1ZShtbi0+d3EpOwo+ICsJaWYgKG1uICYmICFJU19FUlIobW4pKQo+ICAgCQlrZnJlZSht bik7Cj4gLQl9Cj4gICAKPiAgIAlyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogbW0tPm1uOwo+ ICAgfQo+IEBAIC0yNjMsMTQgKzI3OSwxNCBAQCBpOTE1X2dlbV91c2VycHRyX2luaXRfX21tdV9u b3RpZmllcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQlyZXR1cm4gUFRS X0VSUihtbik7Cj4gICAKPiAgIAltbyA9IGt6YWxsb2Moc2l6ZW9mKCptbyksIEdGUF9LRVJORUwp Owo+IC0JaWYgKG1vID09IE5VTEwpCj4gKwlpZiAoIW1vKQo+ICAgCQlyZXR1cm4gLUVOT01FTTsK PiAgIAo+ICAgCW1vLT5tbiA9IG1uOwo+ICAgCW1vLT5vYmogPSBvYmo7Cj4gICAJbW8tPml0LnN0 YXJ0ID0gb2JqLT51c2VycHRyLnB0cjsKPiAgIAltby0+aXQubGFzdCA9IG9iai0+dXNlcnB0ci5w dHIgKyBvYmotPmJhc2Uuc2l6ZSAtIDE7Cj4gLQlJTklUX1dPUksoJm1vLT53b3JrLCBjYW5jZWxf dXNlcnB0cik7Cj4gKwlSQl9DTEVBUl9OT0RFKCZtby0+aXQucmIpOwo+ICAgCj4gICAJb2JqLT51 c2VycHRyLm1tdV9vYmplY3QgPSBtbzsKPiAgIAlyZXR1cm4gMDsKPiBAQCAtMjg0LDEyICszMDAs MTYgQEAgaTkxNV9tbXVfbm90aWZpZXJfZnJlZShzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1u LAo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAltbXVfbm90aWZpZXJfdW5yZWdpc3RlcigmbW4tPm1u LCBtbSk7Cj4gLQlkZXN0cm95X3dvcmtxdWV1ZShtbi0+d3EpOwo+ICAgCWtmcmVlKG1uKTsKPiAg IH0KPiAgIAo+ICAgI2Vsc2UKPiAgIAo+ICtzdGF0aWMgdm9pZAo+ICtfX2k5MTVfZ2VtX3VzZXJw dHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIHZhbHVl KQo+ICt7Cj4gK30KPiArCj4gICBzdGF0aWMgdm9pZAo+ICAgaTkxNV9nZW1fdXNlcnB0cl9yZWxl YXNlX19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIHsK PiBAQCAtNDU4LDQyICs0NzgsNiBAQCBfX2k5MTVfZ2VtX3VzZXJwdHJfYWxsb2NfcGFnZXMoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAlyZXR1cm4gc3Q7Cj4gICB9Cj4gICAK PiAtc3RhdGljIGludAo+IC1fX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkgICAgICBib29sIHZhbHVlKQo+IC17Cj4gLQlp bnQgcmV0ID0gMDsKPiAtCj4gLQkvKiBEdXJpbmcgbW1faW52YWxpZGF0ZV9yYW5nZSB3ZSBuZWVk IHRvIGNhbmNlbCBhbnkgdXNlcnB0ciB0aGF0Cj4gLQkgKiBvdmVybGFwcyB0aGUgcmFuZ2UgYmVp bmcgaW52YWxpZGF0ZWQuIERvaW5nIHNvIHJlcXVpcmVzIHRoZQo+IC0JICogc3RydWN0X211dGV4 LCBhbmQgdGhhdCByaXNrcyByZWN1cnNpb24uIEluIG9yZGVyIHRvIGNhdXNlCj4gLQkgKiByZWN1 cnNpb24sIHRoZSB1c2VyIG11c3QgYWxpYXMgdGhlIHVzZXJwdHIgYWRkcmVzcyBzcGFjZSB3aXRo Cj4gLQkgKiBhIEdUVCBtbWFwcGluZyAocG9zc2libGUgd2l0aCBhIE1BUF9GSVhFRCkgLSB0aGVu IHdoZW4gd2UgaGF2ZQo+IC0JICogdG8gaW52YWxpZGF0ZSB0aGF0IG1tYXBpbmcsIG1tX2ludmFs aWRhdGVfcmFuZ2UgaXMgY2FsbGVkIHdpdGgKPiAtCSAqIHRoZSB1c2VycHRyIGFkZHJlc3MgKmFu ZCogdGhlIHN0cnVjdF9tdXRleCBoZWxkLiAgVG8gcHJldmVudCB0aGF0Cj4gLQkgKiB3ZSBzZXQg YSBmbGFnIHVuZGVyIHRoZSBpOTE1X21tdV9ub3RpZmllciBzcGlubG9jayB0byBpbmRpY2F0ZQo+ IC0JICogd2hldGhlciB0aGlzIG9iamVjdCBpcyB2YWxpZC4KPiAtCSAqLwo+IC0jaWYgZGVmaW5l ZChDT05GSUdfTU1VX05PVElGSUVSKQo+IC0JaWYgKG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0ID09 IE5VTEwpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZvYmotPnVzZXJwdHIubW11 X29iamVjdC0+bW4tPmxvY2spOwo+IC0JLyogSW4gb3JkZXIgdG8gc2VyaWFsaXNlIGdldF9wYWdl cyB3aXRoIGFuIG91dHN0YW5kaW5nCj4gLQkgKiBjYW5jZWxfdXNlcnB0ciwgd2UgbXVzdCBkcm9w IHRoZSBzdHJ1Y3RfbXV0ZXggYW5kIHRyeSBhZ2Fpbi4KPiAtCSAqLwo+IC0JaWYgKCF2YWx1ZSkK PiAtCQlkZWxfb2JqZWN0KG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0KTsKPiAtCWVsc2UgaWYgKCF3 b3JrX3BlbmRpbmcoJm9iai0+dXNlcnB0ci5tbXVfb2JqZWN0LT53b3JrKSkKPiAtCQlhZGRfb2Jq ZWN0KG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0KTsKPiAtCWVsc2UKPiAtCQlyZXQgPSAtRUFHQUlO Owo+IC0Jc3Bpbl91bmxvY2soJm9iai0+dXNlcnB0ci5tbXVfb2JqZWN0LT5tbi0+bG9jayk7Cj4g LSNlbmRpZgo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gICBzdGF0aWMgdm9pZAo+ICAg X19pOTE1X2dlbV91c2VycHRyX2dldF9wYWdlc193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICpf d29yaykKPiAgIHsKPiBAQCAtNjc5LDggKzY2MywxMSBAQCBpOTE1X2dlbV91c2VycHRyX3B1dF9w YWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCXN0cnVjdCBzZ3RfaXRl ciBzZ3RfaXRlcjsKPiAgIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKPiAgIAo+IC0JQlVHX09OKG9iai0+ dXNlcnB0ci53b3JrICE9IE5VTEwpOwo+ICsJLyogQ2FuY2VsIGFueSBpbmZsaWdodCB3b3JrIGFu ZCBmb3JjZSB0aGVtIHRvIHJlc3RhcnQgdGhlaXIgZ3VwICovCj4gKwlvYmotPnVzZXJwdHIud29y ayA9IE5VTEw7Cj4gICAJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBmYWxzZSk7 Cj4gKwlpZiAoIXBhZ2VzKQo+ICsJCXJldHVybjsKPiAgIAo+ICAgCWlmIChvYmotPm1tLm1hZHYg IT0gSTkxNV9NQURWX1dJTExORUVEKQo+ICAgCQlvYmotPm1tLmRpcnR5ID0gZmFsc2U7Cj4gQEAg LTcxOCw3ICs3MDUsOCBAQCBpOTE1X2dlbV91c2VycHRyX2RtYWJ1Zl9leHBvcnQoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV91c2VycHRyX29wcyA9IHsKPiAgIAkuZmxhZ3Mg PSBJOTE1X0dFTV9PQkpFQ1RfSEFTX1NUUlVDVF9QQUdFIHwKPiAtCQkgSTkxNV9HRU1fT0JKRUNU X0lTX1NIUklOS0FCTEUsCj4gKwkJIEk5MTVfR0VNX09CSkVDVF9JU19TSFJJTktBQkxFIHwKPiAr CQkgSTkxNV9HRU1fT0JKRUNUX0FTWU5DX0NBTkNFTCwKPiAgIAkuZ2V0X3BhZ2VzID0gaTkxNV9n ZW1fdXNlcnB0cl9nZXRfcGFnZXMsCj4gICAJLnB1dF9wYWdlcyA9IGk5MTVfZ2VtX3VzZXJwdHJf cHV0X3BhZ2VzLAo+ICAgCS5kbWFidWZfZXhwb3J0ID0gaTkxNV9nZW1fdXNlcnB0cl9kbWFidWZf ZXhwb3J0LAo+IAoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK