From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 6/7] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Mon, 10 Dec 2018 12:00:03 +0000 Message-ID: <70a18598-fb03-e6aa-fc99-3ab4f27ed2f7@linux.intel.com> References: <20181204141522.13640-1-chris@chris-wilson.co.uk> <20181204141522.13640-6-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 mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7C9456EAB4 for ; Mon, 10 Dec 2018 12:00:06 +0000 (UTC) In-Reply-To: <20181204141522.13640-6-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 Ck9uIDA0LzEyLzIwMTggMTQ6MTUsIENocmlzIFdpbHNvbiB3cm90ZToKPiBTaW5jZSBjb21taXQg 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 ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYyB8IDIyMSArKysr KysrKysrKy0tLS0tLS0tLS0tLS0KPiAgIDQgZmlsZXMgY2hhbmdlZCwgMTM2IGluc2VydGlvbnMo KyksIDEyNiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCAx Y2FkMjE4YjcxZDMuLjE0NGI3NzM3YzBhMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ IEBAIC0yOTIxLDggKzI5MjEsOCBAQCBlbnVtIGk5MTVfbW1fc3ViY2xhc3MgeyAvKiBsb2NrZGVw IHN1YmNsYXNzIGZvciBvYmotPm1tLmxvY2svc3RydWN0X211dGV4ICovCj4gICAJSTkxNV9NTV9T SFJJTktFUiAvKiBjYWxsZWQgInJlY3Vyc2l2ZWx5IiBmcm9tIGRpcmVjdC1yZWNsYWltLWVzcXVl ICovCj4gICB9Owo+ICAgCj4gLXZvaWQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCQkgZW51bSBpOTE1X21tX3N1YmNsYXNz IHN1YmNsYXNzKTsKPiAraW50IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNs YXNzKTsKPiAgIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKTsKPiAgIAo+ICAgZW51bSBpOTE1X21hcF90eXBlIHsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKPiBpbmRleCBkMzZhOTc1NWFkOTEuLjJhZDhmOTRmNTA1NiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IEBAIC0yNDQ3LDggKzI0NDcsOCBAQCBfX2k5MTVf Z2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ ICAgCXN0cnVjdCBzZ190YWJsZSAqcGFnZXM7Cj4gICAKPiAgIAlwYWdlcyA9IGZldGNoX2FuZF96 ZXJvKCZvYmotPm1tLnBhZ2VzKTsKPiAtCWlmICghcGFnZXMpCj4gLQkJcmV0dXJuIE5VTEw7Cj4g KwlpZiAoSVNfRVJSX09SX05VTEwocGFnZXMpKQo+ICsJCXJldHVybiBwYWdlczsKPiAgIAo+ICAg CXNwaW5fbG9jaygmaTkxNS0+bW0ub2JqX2xvY2spOwo+ICAgCWxpc3RfZGVsKCZvYmotPm1tLmxp bmspOwo+IEBAIC0yNDcyLDIyICsyNDcyLDIzIEBAIF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3Bh 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 ZSBtZW1vcnkgZm9yIHRoZSBiaXQxNyBzd2l6emxlCj4gQEAgLTI0OTUsMTEgKzI0OTYsMjQgQEAg dm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgIAkgKiBsaXN0cyBlYXJseS4KPiAgIAkgKi8KPiAgIAlwYWdlcyA9IF9faTkx NV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7Cj4gKwo+ICsJLyoKPiArCSAqIFhYWCBUZW1w b3JhcnkgaGlqaW54IHRvIGF2b2lkIHVwZGF0aW5nIGFsbCBiYWNrZW5kcyB0byBoYW5kbGUKPiAr CSAqIE5VTEwgcGFnZXMuIEluIHRoZSBmdXR1cmUsIHdoZW4gd2UgaGF2ZSBtb3JlIGFzeW5jaHJv bm91cwo+ICsJICogZ2V0X3BhZ2VzIGJhY2tlbmRzIHdlIHNob3VsZCBiZSBiZXR0ZXIgYWJsZSB0 byBoYW5kbGUgdGhlCj4gKwkgKiBjYW5jZWxsYXRpb24gb2YgdGhlIGFzeW5jIHRhc2sgaW4gYSBt b3JlIHVuaWZvcm0gbWFubmVyLgo+ICsJICovCj4gKwlpZiAoIXBhZ2VzICYmICFpOTE1X2dlbV9v YmplY3RfbmVlZHNfYXN5bmNfY2FuY2VsKG9iaikpCj4gKwkJcGFnZXMgPSBFUlJfUFRSKC1FSU5W QUwpOwo+ICsKPiAgIAlpZiAoIUlTX0VSUihwYWdlcykpCj4gICAJCW9iai0+b3BzLT5wdXRfcGFn ZXMob2JqLCBwYWdlcyk7Cj4gICAKPiArCXJldCA9IDA7Cj4gICB1bmxvY2s6Cj4gICAJbXV0ZXhf dW5sb2NrKCZvYmotPm1tLmxvY2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAg IGJvb2wgaTkxNV9zZ190cmltKHN0cnVjdCBzZ190YWJsZSAqb3JpZ19zdCkKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaAo+IGluZGV4IGE2ZGQ3YzQ2ZGUwZC4uNDljZTc5NzE3 M2I1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmgKPiBAQCAtNTYs NiArNTYsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewo+ICAgI2RlZmluZSBJ OTE1X0dFTV9PQkpFQ1RfSEFTX1NUUlVDVF9QQUdFCUJJVCgwKQo+ICAgI2RlZmluZSBJOTE1X0dF TV9PQkpFQ1RfSVNfU0hSSU5LQUJMRQlCSVQoMSkKPiAgICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNU X0lTX1BST1hZCUJJVCgyKQo+ICsjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwJ QklUKDMpCj4gICAKPiAgIAkvKiBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQg aXRzIGJhY2tpbmcgc3RvcmFnZS4KPiAgIAkgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBw cmlvciB0byB0aGUgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIHNldAo+IEBAIC0zODYsNiArMzg3LDEy IEBAIGk5MTVfZ2VtX29iamVjdF9pc19wcm94eShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQo+ICAgCXJldHVybiBvYmotPm9wcy0+ZmxhZ3MgJiBJOTE1X0dFTV9PQkpFQ1Rf SVNfUFJPWFk7Cj4gICB9Cj4gICAKPiArc3RhdGljIGlubGluZSBib29sCj4gK2k5MTVfZ2VtX29i amVjdF9uZWVkc19hc3luY19jYW5jZWwoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKPiArewo+ICsJcmV0dXJuIG9iai0+b3BzLT5mbGFncyAmIEk5MTVfR0VNX09CSkVDVF9B U1lOQ19DQU5DRUw7Cj4gK30KPiArCj4gICBzdGF0aWMgaW5saW5lIGJvb2wKPiAgIGk5MTVfZ2Vt X29iamVjdF9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK PiAgIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0 ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4gaW5kZXggMmM5 YjI4NDAzNmQxLi44YjA3ZmQ0NDczMWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fdXNlcnB0ci5jCj4gQEAgLTUwLDc5ICs1MCw4NCBAQCBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZp ZXIgewo+ICAgCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Cj4gICAJc3RydWN0IG1tdV9ub3RpZmll ciBtbjsKPiAgIAlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgb2JqZWN0czsKPiAtCXN0cnVjdCB3b3Jr cXVldWVfc3RydWN0ICp3cTsKPiArCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Cj4gICB9Owo+ ICAgCj4gICBzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0IHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVfbm90 aWZpZXIgKm1uOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJc3Ry dWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKPiAt CXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwo+IC0JYm9vbCBhdHRhY2hlZDsKPiAgIH07Cj4gICAK PiAtc3RhdGljIHZvaWQgY2FuY2VsX3VzZXJwdHIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ IC17Cj4gLQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0 eXBlb2YoKm1vKSwgd29yayk7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0g bW8tPm9iajsKPiAtCXN0cnVjdCB3b3JrX3N0cnVjdCAqYWN0aXZlOwo+IC0KPiAtCS8qIENhbmNl bCBhbnkgYWN0aXZlIHdvcmtlciBhbmQgZm9yY2UgdXMgdG8gcmUtZXZhbHVhdGUgZ3VwICovCj4g LQltdXRleF9sb2NrKCZvYmotPm1tLmxvY2spOwo+IC0JYWN0aXZlID0gZmV0Y2hfYW5kX3plcm8o Jm9iai0+dXNlcnB0ci53b3JrKTsKPiAtCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKPiAt CWlmIChhY3RpdmUpCj4gLQkJZ290byBvdXQ7Cj4gLQo+IC0JaTkxNV9nZW1fb2JqZWN0X3dhaXQo b2JqLCBJOTE1X1dBSVRfQUxMLCBNQVhfU0NIRURVTEVfVElNRU9VVCwgTlVMTCk7Cj4gLQo+IC0J bXV0ZXhfbG9jaygmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKPiAtCj4gLQkvKiBXZSBh cmUgaW5zaWRlIGEga3RocmVhZCBjb250ZXh0IGFuZCBjYW4ndCBiZSBpbnRlcnJ1cHRlZCAqLwo+ IC0JaWYgKGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKSA9PSAwKQo+IC0JCV9faTkxNV9nZW1f b2JqZWN0X3B1dF9wYWdlcyhvYmosIEk5MTVfTU1fTk9STUFMKTsKPiAtCVdBUk5fT05DRShpOTE1 X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaiksCj4gLQkJICAiRmFpbGVkIHRvIHJlbGVhc2UgcGFn ZXM6IGJpbmRfY291bnQ9JWQsIHBhZ2VzX3Bpbl9jb3VudD0lZCwgcGluX2dsb2JhbD0lZFxuIiwK PiAtCQkgIG9iai0+YmluZF9jb3VudCwKPiAtCQkgIGF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2Vz X3Bpbl9jb3VudCksCj4gLQkJICBvYmotPnBpbl9nbG9iYWwpOwo+IC0KPiAtCW11dGV4X3VubG9j aygmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKPiAtCj4gLW91dDoKPiAtCWk5MTVfZ2Vt X29iamVjdF9wdXQob2JqKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lkIGFkZF9vYmplY3Qoc3Ry dWN0IGk5MTVfbW11X29iamVjdCAqbW8pCj4gICB7Cj4gLQlpZiAobW8tPmF0dGFjaGVkKQo+ICsJ aWYgKCFSQl9FTVBUWV9OT0RFKCZtby0+aXQucmIpKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlp bnRlcnZhbF90cmVlX2luc2VydCgmbW8tPml0LCAmbW8tPm1uLT5vYmplY3RzKTsKPiAtCW1vLT5h dHRhY2hlZCA9IHRydWU7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGRlbF9vYmplY3Qoc3Ry dWN0IGk5MTVfbW11X29iamVjdCAqbW8pCj4gICB7Cj4gLQlpZiAoIW1vLT5hdHRhY2hlZCkKPiAr CWlmIChSQl9FTVBUWV9OT0RFKCZtby0+aXQucmIpKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlp bnRlcnZhbF90cmVlX3JlbW92ZSgmbW8tPml0LCAmbW8tPm1uLT5vYmplY3RzKTsKPiAtCW1vLT5h dHRhY2hlZCA9IGZhbHNlOwo+ICsJUkJfQ0xFQVJfTk9ERSgmbW8tPml0LnJiKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQKPiArX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB2YWx1ZSkKPiArewo+ICsJc3RydWN0IGk5MTVf bW11X29iamVjdCAqbW8gPSBvYmotPnVzZXJwdHIubW11X29iamVjdDsKPiArCj4gKwkvKgo+ICsJ ICogRHVyaW5nIG1tX2ludmFsaWRhdGVfcmFuZ2Ugd2UgbmVlZCB0byBjYW5jZWwgYW55IHVzZXJw dHIgdGhhdAo+ICsJICogb3ZlcmxhcHMgdGhlIHJhbmdlIGJlaW5nIGludmFsaWRhdGVkLiBEb2lu ZyBzbyByZXF1aXJlcyB0aGUKPiArCSAqIHN0cnVjdF9tdXRleCwgYW5kIHRoYXQgcmlza3MgcmVj dXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQo+ICsJICogcmVjdXJzaW9uLCB0aGUgdXNlciBtdXN0 IGFsaWFzIHRoZSB1c2VycHRyIGFkZHJlc3Mgc3BhY2Ugd2l0aAo+ICsJICogYSBHVFQgbW1hcHBp bmcgKHBvc3NpYmxlIHdpdGggYSBNQVBfRklYRUQpIC0gdGhlbiB3aGVuIHdlIGhhdmUKPiArCSAq IHRvIGludmFsaWRhdGUgdGhhdCBtbWFwaW5nLCBtbV9pbnZhbGlkYXRlX3JhbmdlIGlzIGNhbGxl ZCB3aXRoCj4gKwkgKiB0aGUgdXNlcnB0ciBhZGRyZXNzICphbmQqIHRoZSBzdHJ1Y3RfbXV0ZXgg aGVsZC4gIFRvIHByZXZlbnQgdGhhdAo+ICsJICogd2Ugc2V0IGEgZmxhZyB1bmRlciB0aGUgaTkx NV9tbXVfbm90aWZpZXIgc3BpbmxvY2sgdG8gaW5kaWNhdGUKPiArCSAqIHdoZXRoZXIgdGhpcyBv YmplY3QgaXMgdmFsaWQuCj4gKwkgKi8KPiArCWlmICghbW8pCj4gKwkJcmV0dXJuOwo+ICsKPiAr CXNwaW5fbG9jaygmbW8tPm1uLT5sb2NrKTsKPiArCWlmICh2YWx1ZSkKPiArCQlhZGRfb2JqZWN0 KG1vKTsKPiArCWVsc2UKPiArCQlkZWxfb2JqZWN0KG1vKTsKPiArCXNwaW5fdW5sb2NrKCZtby0+ bW4tPmxvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IG11dGV4ICpfX2k5MTVfbXV0ZXhf bG9ja19yZWN1cnNpdmUoc3RydWN0IG11dGV4ICptKQo+ICt7Cj4gKwlzd2l0Y2ggKG11dGV4X3Ry eWxvY2tfcmVjdXJzaXZlKG0pKSB7Cj4gKwlkZWZhdWx0Ogo+ICsJY2FzZSBNVVRFWF9UUllMT0NL X0ZBSUxFRDoKPiArCQltdXRleF9sb2NrX25lc3RlZChtLCBJOTE1X01NX1NIUklOS0VSKTsKCkkg aGF2ZSBubyBpZGVhIHdoeSBpcyB0aGUgbmVzdGVkIGFubm90YXRpb24gb2ssIG9yIGlmIGl0IGZp eGVzIGFueXRoaW5nLgoKVGhlIElHVCBJIGFtIHRlc3RpbmcgbWFuYWdlcyB0byBoaXQgdGhpcyBw YXRoIGEgbG90LCBhbmQgd2l0aCBEYW5pZWwncyAKTU1VIG5vdGlmaWVyIGFuZCBjcm9zcy1yZWxl YXNlIHJlc3VycmVjdGlvbiBwYXRjaGVzLCB3aXRoIHRoZSBub3JtYWwgCm11dGV4X2xvY2sgZmxh dm91ciBpbiB0aGVyZSwgbG9ja2RlcCBpcyBzaWxlbnQgYW5kIHRoZXJlIGFyZSBubyAKZGVhZGxv Y2tzLiBTYW1lIGZhaWx1cmUgdG8gdHJpZ2dlciBhbnkgZmFpbHMgd2l0aCBleGlzdGluZyBpbnRl cmVzdGluZyAKZ2VtX3VzZXJfYmxpdHMgc3VidGVzdHMuCgpTbyBkb24ndCBrbm93Li4gZG9lcyBp dCBhY3R1YWxseSBmaXggYW55dGhpbmcsIG9yIG9ubHkgaGlkZSB0aGluZ3MsIG5vIGlkZWEuCgpS ZWdhcmRzLAoKVHZydGtvCgo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX1NVQ0NFU1M6Cj4gKwkJcmV0 dXJuIG07Cj4gKwo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX1JFQ1VSU0lWRToKPiArCQlyZXR1cm4g RVJSX1BUUigtRUVYSVNUKTsKPiArCX0KPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludCBpOTE1X2dl bV91c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAq X21uLAo+IC0JCQkJCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4gLQkJCQkJCSAgICAg ICB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+IC0JCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQs Cj4gLQkJCQkJCSAgICAgICBib29sIGJsb2NrYWJsZSkKPiArCQkJCQkJICAgICAgc3RydWN0IG1t X3N0cnVjdCAqbW0sCj4gKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCj4gKwkJCQkJ CSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLAo+ICsJCQkJCQkgICAgICBib29sIGJsb2NrYWJsZSkK PiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uID0KPiAgIAkJY29udGFpbmVy X29mKF9tbiwgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyLCBtbik7Cj4gLQlzdHJ1Y3QgaTkxNV9t bXVfb2JqZWN0ICptbzsKPiAgIAlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICppdDsKPiAtCUxJ U1RfSEVBRChjYW5jZWxsZWQpOwo+ICsJc3RydWN0IG11dGV4ICp1bmxvY2sgPSBOVUxMOwo+ICsJ aW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoUkJfRU1QVFlfUk9PVCgmbW4tPm9iamVjdHMucmJf cm9vdCkpCj4gICAJCXJldHVybiAwOwo+IEBAIC0xMzMsMTEgKzEzOCwxNSBAQCBzdGF0aWMgaW50 IGk5MTVfZ2VtX3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25v dGlmaWVyICpfbW4sCj4gICAJc3Bpbl9sb2NrKCZtbi0+bG9jayk7Cj4gICAJaXQgPSBpbnRlcnZh bF90cmVlX2l0ZXJfZmlyc3QoJm1uLT5vYmplY3RzLCBzdGFydCwgZW5kKTsKPiAgIAl3aGlsZSAo aXQpIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsKPiAgIAkJaWYg KCFibG9ja2FibGUpIHsKPiAtCQkJc3Bpbl91bmxvY2soJm1uLT5sb2NrKTsKPiAtCQkJcmV0dXJu IC1FQUdBSU47Cj4gKwkJCXJldCA9IC1FQUdBSU47Cj4gKwkJCWJyZWFrOwo+ICAgCQl9Cj4gLQkJ LyogVGhlIG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ryb3lpbmcgdGhlCj4g Kwo+ICsJCS8qCj4gKwkJICogVGhlIG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRl c3Ryb3lpbmcgdGhlCj4gICAJCSAqIEdFTSBvYmplY3Qgc28gaXQgaXMgZW50aXJlbHkgcG9zc2li bGUgdG8gZ2FpbiBhCj4gICAJCSAqIHJlZmVyZW5jZSBvbiBhbiBvYmplY3QgaW4gdGhlIHByb2Nl c3Mgb2YgYmVpbmcgZnJlZWQKPiAgIAkJICogc2luY2Ugb3VyIHNlcmlhbGlzYXRpb24gaXMgdmlh IHRoZSBzcGlubG9jayBhbmQgbm90Cj4gQEAgLTE0NiwyMSArMTU1LDM5IEBAIHN0YXRpYyBpbnQg aTkxNV9nZW1fdXNlcnB0cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90 aWZpZXIgKl9tbiwKPiAgIAkJICogdXNlLWFmdGVyLWZyZWUgd2Ugb25seSBhY3F1aXJlIGEgcmVm ZXJlbmNlIG9uIHRoZQo+ICAgCQkgKiBvYmplY3QgaWYgaXQgaXMgbm90IGluIHRoZSBwcm9jZXNz IG9mIGJlaW5nIGRlc3Ryb3llZC4KPiAgIAkJICovCj4gLQkJbW8gPSBjb250YWluZXJfb2YoaXQs IHN0cnVjdCBpOTE1X21tdV9vYmplY3QsIGl0KTsKPiAtCQlpZiAoa3JlZl9nZXRfdW5sZXNzX3pl cm8oJm1vLT5vYmotPmJhc2UucmVmY291bnQpKQo+IC0JCQlxdWV1ZV93b3JrKG1uLT53cSwgJm1v LT53b3JrKTsKPiArCQlvYmogPSBjb250YWluZXJfb2YoaXQsIHN0cnVjdCBpOTE1X21tdV9vYmpl Y3QsIGl0KS0+b2JqOwo+ICsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJm9iai0+YmFzZS5y ZWZjb3VudCkpIHsKPiArCQkJaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfbmV4dChpdCwgc3RhcnQs IGVuZCk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCQlzcGluX3VubG9jaygmbW4tPmxvY2sp Owo+ICAgCj4gLQkJbGlzdF9hZGQoJm1vLT5saW5rLCAmY2FuY2VsbGVkKTsKPiAtCQlpdCA9IGlu dGVydmFsX3RyZWVfaXRlcl9uZXh0KGl0LCBzdGFydCwgZW5kKTsKPiArCQlpZiAoIXVubG9jaykK PiArCQkJdW5sb2NrID0gX19pOTE1X211dGV4X2xvY2tfcmVjdXJzaXZlKCZtbi0+bW0tPmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2Jq KTsKPiArCQlpZiAocmV0ID09IDApCj4gKwkJCXJldCA9IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9w YWdlcyhvYmosIEk5MTVfTU1fU0hSSU5LRVIpOwo+ICsJCWk5MTVfZ2VtX29iamVjdF9wdXQob2Jq KTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIHVubG9jazsKPiArCj4gKwkJc3Bpbl9sb2NrKCZt bi0+bG9jayk7Cj4gKwo+ICsJCS8qCj4gKwkJICogQXMgd2UgZG8gbm90ICh5ZXQpIHByb3RlY3Qg dGhlIG1tdSBmcm9tIGNvbmN1cnJlbnQgaW5zZXJ0aW9uCj4gKwkJICogb3ZlciB0aGlzIHJhbmdl LCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGlzIHNlYXJjaCB3aWxsCj4gKwkJICogdGVy bWluYXRlIGdpdmVuIGEgcGF0aG9sb2dpYyB3b3JrbG9hZC4KPiArCQkgKi8KPiArCQlpdCA9IGlu dGVydmFsX3RyZWVfaXRlcl9maXJzdCgmbW4tPm9iamVjdHMsIHN0YXJ0LCBlbmQpOwo+ICAgCX0K PiAtCWxpc3RfZm9yX2VhY2hfZW50cnkobW8sICZjYW5jZWxsZWQsIGxpbmspCj4gLQkJZGVsX29i amVjdChtbyk7Cj4gICAJc3Bpbl91bmxvY2soJm1uLT5sb2NrKTsKPiAgIAo+IC0JaWYgKCFsaXN0 X2VtcHR5KCZjYW5jZWxsZWQpKQo+IC0JCWZsdXNoX3dvcmtxdWV1ZShtbi0+d3EpOwo+ICt1bmxv Y2s6Cj4gKwlpZiAoIUlTX0VSUl9PUl9OVUxMKHVubG9jaykpCj4gKwkJbXV0ZXhfdW5sb2NrKHVu bG9jayk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAgIAo+IC0JcmV0dXJuIDA7Cj4gICB9Cj4gICAK PiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBpOTE1X2dlbV91c2VycHRy X25vdGlmaWVyID0gewo+IEBAIC0xNjgsNyArMTk1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBt bXVfbm90aWZpZXJfb3BzIGk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXIgPSB7Cj4gICB9Owo+ICAg Cj4gICBzdGF0aWMgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICoKPiAtaTkxNV9tbXVfbm90aWZp ZXJfY3JlYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ICtpOTE1X21tdV9ub3RpZmllcl9jcmVh dGUoc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVf bm90aWZpZXIgKm1uOwo+ICAgCj4gQEAgLTE3OSwxMyArMjA2LDcgQEAgaTkxNV9tbXVfbm90aWZp ZXJfY3JlYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ICAgCXNwaW5fbG9ja19pbml0KCZtbi0+ bG9jayk7Cj4gICAJbW4tPm1uLm9wcyA9ICZpOTE1X2dlbV91c2VycHRyX25vdGlmaWVyOwo+ICAg CW1uLT5vYmplY3RzID0gUkJfUk9PVF9DQUNIRUQ7Cj4gLQltbi0+d3EgPSBhbGxvY193b3JrcXVl dWUoImk5MTUtdXNlcnB0ci1yZWxlYXNlIiwKPiAtCQkJCSBXUV9VTkJPVU5EIHwgV1FfTUVNX1JF Q0xBSU0sCj4gLQkJCQkgMCk7Cj4gLQlpZiAobW4tPndxID09IE5VTEwpIHsKPiAtCQlrZnJlZSht bik7Cj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gLQl9Cj4gKwltbi0+bW0gPSBtbTsK PiAgIAo+ICAgCXJldHVybiBtbjsKPiAgIH0KPiBAQCAtMTk1LDE2ICsyMTYsMTQgQEAgaTkxNV9n ZW1fdXNlcnB0cl9yZWxlYXNlX19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbzsKPiAgIAo+IC0J bW8gPSBvYmotPnVzZXJwdHIubW11X29iamVjdDsKPiAtCWlmIChtbyA9PSBOVUxMKQo+ICsJbW8g PSBmZXRjaF9hbmRfemVybygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QpOwo+ICsJaWYgKCFtbykK PiAgIAkJcmV0dXJuOwo+ICAgCj4gICAJc3Bpbl9sb2NrKCZtby0+bW4tPmxvY2spOwo+ICAgCWRl bF9vYmplY3QobW8pOwo+ICAgCXNwaW5fdW5sb2NrKCZtby0+bW4tPmxvY2spOwo+ICAgCWtmcmVl KG1vKTsKPiAtCj4gLQlvYmotPnVzZXJwdHIubW11X29iamVjdCA9IE5VTEw7Cj4gICB9Cj4gICAK PiAgIHN0YXRpYyBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKgo+IEBAIC0yMTcsNyArMjM2LDcg QEAgaTkxNV9tbXVfbm90aWZpZXJfZmluZChzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tKQo+ICAg CWlmIChtbikKPiAgIAkJcmV0dXJuIG1uOwo+ICAgCj4gLQltbiA9IGk5MTVfbW11X25vdGlmaWVy X2NyZWF0ZShtbS0+bW0pOwo+ICsJbW4gPSBpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUobW0pOwo+ ICAgCWlmIChJU19FUlIobW4pKQo+ICAgCQllcnIgPSBQVFJfRVJSKG1uKTsKPiAgIAo+IEBAIC0y NDAsMTAgKzI1OSw4IEBAIGk5MTVfbW11X25vdGlmaWVyX2ZpbmQoc3RydWN0IGk5MTVfbW1fc3Ry dWN0ICptbSkKPiAgIAltdXRleF91bmxvY2soJm1tLT5pOTE1LT5tbV9sb2NrKTsKPiAgIAl1cF93 cml0ZSgmbW0tPm1tLT5tbWFwX3NlbSk7Cj4gICAKPiAtCWlmIChtbiAmJiAhSVNfRVJSKG1uKSkg ewo+IC0JCWRlc3Ryb3lfd29ya3F1ZXVlKG1uLT53cSk7Cj4gKwlpZiAobW4gJiYgIUlTX0VSUiht bikpCj4gICAJCWtmcmVlKG1uKTsKPiAtCX0KPiAgIAo+ICAgCXJldHVybiBlcnIgPyBFUlJfUFRS KGVycikgOiBtbS0+bW47Cj4gICB9Cj4gQEAgLTI2NiwxNCArMjgzLDE0IEBAIGk5MTVfZ2VtX3Vz ZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos Cj4gICAJCXJldHVybiBQVFJfRVJSKG1uKTsKPiAgIAo+ICAgCW1vID0ga3phbGxvYyhzaXplb2Yo Km1vKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAobW8gPT0gTlVMTCkKPiArCWlmICghbW8pCj4gICAJ CXJldHVybiAtRU5PTUVNOwo+ICAgCj4gICAJbW8tPm1uID0gbW47Cj4gICAJbW8tPm9iaiA9IG9i ajsKPiAgIAltby0+aXQuc3RhcnQgPSBvYmotPnVzZXJwdHIucHRyOwo+ICAgCW1vLT5pdC5sYXN0 ID0gb2JqLT51c2VycHRyLnB0ciArIG9iai0+YmFzZS5zaXplIC0gMTsKPiAtCUlOSVRfV09SSygm bW8tPndvcmssIGNhbmNlbF91c2VycHRyKTsKPiArCVJCX0NMRUFSX05PREUoJm1vLT5pdC5yYik7 Cj4gICAKPiAgIAlvYmotPnVzZXJwdHIubW11X29iamVjdCA9IG1vOwo+ICAgCXJldHVybiAwOwo+ IEBAIC0yODcsMTIgKzMwNCwxNiBAQCBpOTE1X21tdV9ub3RpZmllcl9mcmVlKHN0cnVjdCBpOTE1 X21tdV9ub3RpZmllciAqbW4sCj4gICAJCXJldHVybjsKPiAgIAo+ICAgCW1tdV9ub3RpZmllcl91 bnJlZ2lzdGVyKCZtbi0+bW4sIG1tKTsKPiAtCWRlc3Ryb3lfd29ya3F1ZXVlKG1uLT53cSk7Cj4g ICAJa2ZyZWUobW4pOwo+ICAgfQo+ICAgCj4gICAjZWxzZQo+ICAgCj4gK3N0YXRpYyB2b2lkCj4g K19faTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosIGJvb2wgdmFsdWUpCj4gK3sKPiArfQo+ICsKPiAgIHN0YXRpYyB2b2lkCj4gICBpOTE1 X2dlbV91c2VycHRyX3JlbGVhc2VfX21tdV9ub3RpZmllcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQo+ICAgewo+IEBAIC00NjEsNDIgKzQ4Miw2IEBAIF9faTkxNV9nZW1fdXNlcnB0 cl9hbGxvY19wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCXJldHVy biBzdDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50Cj4gLV9faTkxNV9nZW1fdXNlcnB0cl9zZXRf YWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCSAgICAgIGJvb2wg dmFsdWUpCj4gLXsKPiAtCWludCByZXQgPSAwOwo+IC0KPiAtCS8qIER1cmluZyBtbV9pbnZhbGlk YXRlX3JhbmdlIHdlIG5lZWQgdG8gY2FuY2VsIGFueSB1c2VycHRyIHRoYXQKPiAtCSAqIG92ZXJs YXBzIHRoZSByYW5nZSBiZWluZyBpbnZhbGlkYXRlZC4gRG9pbmcgc28gcmVxdWlyZXMgdGhlCj4g LQkgKiBzdHJ1Y3RfbXV0ZXgsIGFuZCB0aGF0IHJpc2tzIHJlY3Vyc2lvbi4gSW4gb3JkZXIgdG8g Y2F1c2UKPiAtCSAqIHJlY3Vyc2lvbiwgdGhlIHVzZXIgbXVzdCBhbGlhcyB0aGUgdXNlcnB0ciBh ZGRyZXNzIHNwYWNlIHdpdGgKPiAtCSAqIGEgR1RUIG1tYXBwaW5nIChwb3NzaWJsZSB3aXRoIGEg TUFQX0ZJWEVEKSAtIHRoZW4gd2hlbiB3ZSBoYXZlCj4gLQkgKiB0byBpbnZhbGlkYXRlIHRoYXQg bW1hcGluZywgbW1faW52YWxpZGF0ZV9yYW5nZSBpcyBjYWxsZWQgd2l0aAo+IC0JICogdGhlIHVz ZXJwdHIgYWRkcmVzcyAqYW5kKiB0aGUgc3RydWN0X211dGV4IGhlbGQuICBUbyBwcmV2ZW50IHRo YXQKPiAtCSAqIHdlIHNldCBhIGZsYWcgdW5kZXIgdGhlIGk5MTVfbW11X25vdGlmaWVyIHNwaW5s b2NrIHRvIGluZGljYXRlCj4gLQkgKiB3aGV0aGVyIHRoaXMgb2JqZWN0IGlzIHZhbGlkLgo+IC0J ICovCj4gLSNpZiBkZWZpbmVkKENPTkZJR19NTVVfTk9USUZJRVIpCj4gLQlpZiAob2JqLT51c2Vy cHRyLm1tdV9vYmplY3QgPT0gTlVMTCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlzcGluX2xvY2so Jm9iai0+dXNlcnB0ci5tbXVfb2JqZWN0LT5tbi0+bG9jayk7Cj4gLQkvKiBJbiBvcmRlciB0byBz ZXJpYWxpc2UgZ2V0X3BhZ2VzIHdpdGggYW4gb3V0c3RhbmRpbmcKPiAtCSAqIGNhbmNlbF91c2Vy cHRyLCB3ZSBtdXN0IGRyb3AgdGhlIHN0cnVjdF9tdXRleCBhbmQgdHJ5IGFnYWluLgo+IC0JICov Cj4gLQlpZiAoIXZhbHVlKQo+IC0JCWRlbF9vYmplY3Qob2JqLT51c2VycHRyLm1tdV9vYmplY3Qp Owo+IC0JZWxzZSBpZiAoIXdvcmtfcGVuZGluZygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QtPndv cmspKQo+IC0JCWFkZF9vYmplY3Qob2JqLT51c2VycHRyLm1tdV9vYmplY3QpOwo+IC0JZWxzZQo+ IC0JCXJldCA9IC1FQUdBSU47Cj4gLQlzcGluX3VubG9jaygmb2JqLT51c2VycHRyLm1tdV9vYmpl Y3QtPm1uLT5sb2NrKTsKPiAtI2VuZGlmCj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAg IHN0YXRpYyB2b2lkCj4gICBfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcihzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKQo+ICAgewo+IEBAIC02ODIsOCArNjY3LDExIEBAIGk5MTVf Z2VtX3VzZXJwdHJfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4g ICAJc3RydWN0IHNndF9pdGVyIHNndF9pdGVyOwo+ICAgCXN0cnVjdCBwYWdlICpwYWdlOwo+ICAg Cj4gLQlCVUdfT04ob2JqLT51c2VycHRyLndvcmsgIT0gTlVMTCk7Cj4gKwkvKiBDYW5jZWwgYW55 IGluZmxpZ2h0IHdvcmsgYW5kIGZvcmNlIHRoZW0gdG8gcmVzdGFydCB0aGVpciBndXAgKi8KPiAr CW9iai0+dXNlcnB0ci53b3JrID0gTlVMTDsKPiAgIAlfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2Fj dGl2ZShvYmosIGZhbHNlKTsKPiArCWlmICghcGFnZXMpCj4gKwkJcmV0dXJuOwo+ICAgCj4gICAJ aWYgKG9iai0+bW0ubWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQpCj4gICAJCW9iai0+bW0uZGly dHkgPSBmYWxzZTsKPiBAQCAtNzIxLDcgKzcwOSw4IEBAIGk5MTVfZ2VtX3VzZXJwdHJfZG1hYnVm X2V4cG9ydChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCj4gICBzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX3VzZXJwdHJfb3Bz ID0gewo+ICAgCS5mbGFncyA9IEk5MTVfR0VNX09CSkVDVF9IQVNfU1RSVUNUX1BBR0UgfAo+IC0J CSBJOTE1X0dFTV9PQkpFQ1RfSVNfU0hSSU5LQUJMRSwKPiArCQkgSTkxNV9HRU1fT0JKRUNUX0lT X1NIUklOS0FCTEUgfAo+ICsJCSBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMLAo+ICAgCS5n ZXRfcGFnZXMgPSBpOTE1X2dlbV91c2VycHRyX2dldF9wYWdlcywKPiAgIAkucHV0X3BhZ2VzID0g aTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMsCj4gICAJLmRtYWJ1Zl9leHBvcnQgPSBpOTE1X2dl bV91c2VycHRyX2RtYWJ1Zl9leHBvcnQsCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=