From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 04/25] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Tue, 6 Nov 2018 14:32:45 +0100 Message-ID: <20181106133245.GQ21967@phenom.ffwll.local> References: <20181102161232.17742-1-chris@chris-wilson.co.uk> <20181102161232.17742-4-chris@chris-wilson.co.uk> <2dcc830a-fe8f-42e8-0b14-d943efaa57fe@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id A69646E2B2 for ; Tue, 6 Nov 2018 13:32:52 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id x2-v6so10501974eds.3 for ; Tue, 06 Nov 2018 05:32:52 -0800 (PST) Content-Disposition: inline In-Reply-To: <2dcc830a-fe8f-42e8-0b14-d943efaa57fe@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBOb3YgMDUsIDIwMTggYXQgMDQ6NDU6MDZQTSArMDAwMCwgVHZydGtvIFVyc3VsaW4g d3JvdGU6Cj4gCj4gT24gMDIvMTEvMjAxOCAxNjoxMiwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+ID4g U2luY2UgY29tbWl0IDkzMDY1YWM3NTNlNCAoIm1tLCBvb206IGRpc3Rpbmd1aXNoIGJsb2NrYWJs ZSBtb2RlIGZvciBtbXUKPiA+IG5vdGlmaWVycyIpIHdlIGhhdmUgYmVlbiBhYmxlIHRvIHJlcG9y dCBmYWlsdXJlIGZyb20KPiA+IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0IHdoaWNoIGFsbG93 cyB1cyB0byB1c2UgYSB0cnlsb2NrIG9uIHRoZQo+ID4gc3RydWN0X211dGV4IHRvIGF2b2lkIHBv dGVudGlhbCByZWN1cnNpb24gYW5kIHJlcG9ydCAtRUJVU1kgaW5zdGVhZC4KPiA+IEZ1cnRoZXJt b3JlLCB0aGlzIGFsbG93cyB1cyB0byBwdWxsIHRoZSB3b3JrIGludG8gdGhlIG1haW4gY2FsbGJh Y2sgYW5kCj4gPiBhdm9pZCB0aGUgc2xlaWdodC1vZi1oYW5kIGluIHVzaW5nIGEgd29ya3F1ZXVl IHRvIGF2b2lkIGxvY2tkZXAuCj4gPiAKPiA+IEhvd2V2ZXIsIG5vdCBhbGwgcGF0aHMgdG8gbW11 X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgYXJlIHByZXBhcmVkIHRvCj4gPiBoYW5kbGUgZmFpbHVy ZSwgc28gaW5zdGVhZCBvZiByZXBvcnRpbmcgdGhlIHJlY3Vyc2lvbiwgZGVhbCB3aXRoIGl0Lgo+ IAo+IEp1ZGdpbmcgYnkgdGhlIGNvZGUgYmVsb3cgbm9uLWJsb2NrYWJsZSBwYXRocyBjYW4gaGFu ZGxlIGZhaWx1cmUgYnV0Cj4gYmxvY2thYmxlIGNhbiBub3Q/IFJpZ2h0LCBub3cgdGhhdCBJIHJl YWQgdGhlIGludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgYXBpCj4gZG9jcyB0aGF0IHNlZW1zIHRvIGJl IHRoZSBjYXNlLiBTbyB0aGF0IHNvdW5kcyBsaWtlIGJsb2NrYWJsZSBicmluZ3MgdXMKPiBtYXJn aW5hbCBiZW5lZml0cywgaWYgYW55LCBvbiB0aGUgZGVzaWduIGxldmVsLiBXaGljaCBpcyB3aHkg SSBzdXBwb3NlIHRoaXMKPiBwYXRjaCBsb29rcyBxdWl0ZSBiaWcuIExldHMgc2VlLi4KCm5vbi1i bG9ja2luZyAoaS5lLiB0aGUgb25lIHRoYXQgbG9va3MgYXQgdGhlIGZhaWx1cmUgY29kZSkgaXMg b25seSBmb3IgdGhlCm9vbSBraWxsZXIuIEl0IGhhbmRsZXMgZmFpbHVyZXMgYnkga2lsbGluZyBz b21ldGhpbmcgZWxzZS4KClNvIHllYWgsIHlvdSBjYW4ndCByZWx5IG9uIHRoaXMgYXQgYWxsIGZy b20gYSBkZXNpZ24gcG92LCBhbmQgaXQgZml4ZXMKbm90aGluZyBpbiBhbnkga2luZCBvZiByZWFs LXdvcmxkIHNjZW5hcmlvLiBTZWUgdGhlIHBhdGNoIHNlcmllcyBJJ20KYnJld2luZyBmb3IgYmV0 dGVyIHRvb2xzIHRvIHZhbGlkYXRlIG91ciBtbXUgbm90aWZpZXIsIHRoYXQgb25lIGhhcyB0b25z Cm9mIGNoZWNrcyBhbmQgaGl0cyB0aGUgZGVhZGxvY2sgaGVyZSByaWdodCBhd2F5IHdpdGhvdXQg YW55IGRlbGF5LiBJdApkb2Vzbid0IGNvbnRhaW4gYW55IGlkZWFzIGZvciBob3cgdG8gZml4IHRo ZSBpc3N1ZSB1bmZvcnR1bmF0ZWx5IDotKAotRGFuaWVsCgo+ID4gQnVnemlsbGE6IGh0dHBzOi8v YnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODM3NQo+ID4gUmVmZXJlbmNl czogOTMwNjVhYzc1M2U0ICgibW0sIG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZSBmb3Ig bW11IG5vdGlmaWVycyIpCj4gPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNo cmlzLXdpbHNvbi5jby51az4KPiA+IC0tLQo+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oICAgICAgICAgfCAgIDQgKy0KPiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYyAgICAgICAgIHwgIDE4ICstCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X29iamVjdC5oICB8ICAgNyArCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Vz ZXJwdHIuYyB8IDIxNyArKysrKysrKysrKy0tLS0tLS0tLS0tLS0KPiA+ICAgNCBmaWxlcyBjaGFu Z2VkLCAxMjAgaW5zZXJ0aW9ucygrKSwgMTI2IGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiA+IGluZGV4IDJhODhhN2ViODcxYi4uMTA1NmIxMmMzYmM4IDEwMDY0 NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gQEAgLTMwNzMsOCArMzA3Myw4IEBAIGVu dW0gaTkxNV9tbV9zdWJjbGFzcyB7IC8qIGxvY2tkZXAgc3ViY2xhc3MgZm9yIG9iai0+bW0ubG9j ayAqLwo+ID4gICAJSTkxNV9NTV9TSFJJTktFUgo+ID4gICB9Owo+ID4gLXZvaWQgX19pOTE1X2dl bV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gPiAt CQkJCSBlbnVtIGk5MTVfbW1fc3ViY2xhc3Mgc3ViY2xhc3MpOwo+ID4gK2ludCBfX2k5MTVfZ2Vt X29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiA+ICsJ CQkJZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKTsKPiA+ICAgdm9pZCBfX2k5MTVfZ2Vt X29iamVjdF9pbnZhbGlkYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwo+ID4g ICBlbnVtIGk5MTVfbWFwX3R5cGUgewo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gPiBpbmRl eCA5M2QwOTI4MjcxMGQuLjlhOGFmOTQ1NGE1MyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMKPiA+IEBAIC0yNDI5LDggKzI0MjksOCBAQCBfX2k5MTVfZ2VtX29iamVjdF91bnNldF9w YWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ID4gICAJc3RydWN0IHNnX3Rh YmxlICpwYWdlczsKPiA+ICAgCXBhZ2VzID0gZmV0Y2hfYW5kX3plcm8oJm9iai0+bW0ucGFnZXMp Owo+ID4gLQlpZiAoIXBhZ2VzKQo+ID4gLQkJcmV0dXJuIE5VTEw7Cj4gPiArCWlmIChJU19FUlJf T1JfTlVMTChwYWdlcykpCj4gPiArCQlyZXR1cm4gcGFnZXM7ID4KPiA+ICAgCXNwaW5fbG9jaygm aTkxNS0+bW0ub2JqX2xvY2spOwo+ID4gICAJbGlzdF9kZWwoJm9iai0+bW0ubGluayk7Cj4gPiBA QCAtMjQ1NCwxNyArMjQ1NCwxNiBAQCBfX2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ID4gICAJcmV0dXJuIHBhZ2VzOwo+ID4gICB9 Cj4gPiAtdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiA+IC0JCQkJIGVudW0gaTkxNV9tbV9zdWJjbGFzcyBzdWJjbGFzcykK PiA+ICtpbnQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCj4gPiArCQkJCWVudW0gaTkxNV9tbV9zdWJjbGFzcyBzdWJjbGFzcykKPiA+ ICAgewo+ID4gICAJc3RydWN0IHNnX3RhYmxlICpwYWdlczsKPiA+ICsJaW50IHJldCA9IC1FQlVT WTsKPiA+ICAgCWlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3Bpbm5lZF9wYWdlcyhvYmopKQo+ID4g LQkJcmV0dXJuOwo+ID4gKwkJcmV0dXJuIC1FQlVTWTsKPiA+ICAgCUdFTV9CVUdfT04ob2JqLT5i aW5kX2NvdW50KTsKPiA+IC0JaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpCj4g PiAtCQlyZXR1cm47Cj4gCj4gVW5yZWxhdGVkIHRvIHRoaXMgcGF0Y2g/Cj4gCj4gPiAgIAkvKiBN YXkgYmUgY2FsbGVkIGJ5IHNocmlua2VyIGZyb20gd2l0aGluIGdldF9wYWdlcygpIChvbiBhbm90 aGVyIGJvKSAqLwo+ID4gICAJbXV0ZXhfbG9ja19uZXN0ZWQoJm9iai0+bW0ubG9jaywgc3ViY2xh c3MpOwo+ID4gQEAgLTI0NzcsMTEgKzI0NzYsMTYgQEAgdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9w dXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiA+ICAgCSAqIGxpc3Rz IGVhcmx5Lgo+ID4gICAJICovCj4gPiAgIAlwYWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0 X3BhZ2VzKG9iaik7Cj4gPiArCWlmICghcGFnZXMgJiYgIWk5MTVfZ2VtX29iamVjdF9uZWVkc19h c3luY19jYW5jZWwob2JqKSkKPiA+ICsJCXBhZ2VzID0gRVJSX1BUUigtRUlOVkFMKTsKPiAKPiAo SG1tIHllYWgsIHRoaXMgcGF0aCBkaWQgbm90IHVzZWQgdG8gaGFuZGxlIHRoZSBleGlzdGluZyBw b3NzaWJsZSBOVUxMIHBhZ2VzCj4gaGVyZS4pCj4gCj4gUGxlYXNlIHB1dCBhIGJsdXJiIGluIHRo ZSBjb21taXQgbWVzc2FnZSBvbiB0aGUgaGlnaCB0byBtZWRpdW0gbGV2ZWwgZGVzaWduCj4gb2Yg dGhlIGNoYW5nZS4KPiAKPiA+ICAgCWlmICghSVNfRVJSKHBhZ2VzKSkKPiA+ICAgCQlvYmotPm9w cy0+cHV0X3BhZ2VzKG9iaiwgcGFnZXMpOwo+ID4gKwlyZXQgPSAwOwo+ID4gICB1bmxvY2s6Cj4g PiAgIAltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7 Cj4gPiAgIH0KPiA+ICAgYm9vbCBpOTE1X3NnX3RyaW0oc3RydWN0IHNnX3RhYmxlICpvcmlnX3N0 KQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmgKPiA+IGluZGV4IGE2ZGQ3 YzQ2ZGUwZC4uNDljZTc5NzE3M2I1IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fb2JqZWN0LmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX29iamVjdC5oCj4gPiBAQCAtNTYsNiArNTYsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdF9vcHMgewo+ID4gICAjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9IQVNfU1RSVUNUX1BBR0UJ QklUKDApCj4gPiAgICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUJQklUKDEp Cj4gPiAgICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0lTX1BST1hZCUJJVCgyKQo+ID4gKyNkZWZp bmUgSTkxNV9HRU1fT0JKRUNUX0FTWU5DX0NBTkNFTAlCSVQoMykKPiA+ICAgCS8qIEludGVyZmFj ZSBiZXR3ZWVuIHRoZSBHRU0gb2JqZWN0IGFuZCBpdHMgYmFja2luZyBzdG9yYWdlLgo+ID4gICAJ ICogZ2V0X3BhZ2VzKCkgaXMgY2FsbGVkIG9uY2UgcHJpb3IgdG8gdGhlIHVzZSBvZiB0aGUgYXNz b2NpYXRlZCBzZXQKPiA+IEBAIC0zODYsNiArMzg3LDEyIEBAIGk5MTVfZ2VtX29iamVjdF9pc19w cm94eShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ID4gICAJcmV0dXJu IG9iai0+b3BzLT5mbGFncyAmIEk5MTVfR0VNX09CSkVDVF9JU19QUk9YWTsKPiA+ICAgfQo+ID4g K3N0YXRpYyBpbmxpbmUgYm9vbAo+ID4gK2k5MTVfZ2VtX29iamVjdF9uZWVkc19hc3luY19jYW5j ZWwoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiA+ICt7Cj4gPiArCXJl dHVybiBvYmotPm9wcy0+ZmxhZ3MgJiBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMOwo+ID4g K30KPiA+ICsKPiA+ICAgc3RhdGljIGlubGluZSBib29sCj4gPiAgIGk5MTVfZ2VtX29iamVjdF9p c19hY3RpdmUoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiA+ICAgewo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwo+ID4gaW5kZXggMmM5YjI4 NDAzNmQxLi5hYjVhZTQyNmUyN2IgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV91c2VycHRyLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3VzZXJwdHIuYwo+ID4gQEAgLTUwLDc5ICs1MCw4NCBAQCBzdHJ1Y3QgaTkxNV9tbXVfbm90 aWZpZXIgewo+ID4gICAJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKPiA+ICAgCXN0cnVjdCBtbXVf bm90aWZpZXIgbW47Cj4gPiAgIAlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgb2JqZWN0czsKPiA+IC0J c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwo+ID4gKwlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3Qg Km1tOwo+ID4gICB9Owo+ID4gICBzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0IHsKPiA+ICAgCXN0cnVj dCBpOTE1X21tdV9ub3RpZmllciAqbW47Cj4gPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqOwo+ID4gICAJc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsKPiA+IC0Jc3RydWN0 IGxpc3RfaGVhZCBsaW5rOwo+ID4gLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKPiA+IC0JYm9v bCBhdHRhY2hlZDsKPiA+ICAgfTsKPiA+IC1zdGF0aWMgdm9pZCBjYW5jZWxfdXNlcnB0cihzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gPiAtewo+ID4gLQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0 ICptbyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm1vKSwgd29yayk7Cj4gPiAtCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBtby0+b2JqOwo+ID4gLQlzdHJ1Y3Qgd29ya19z dHJ1Y3QgKmFjdGl2ZTsKPiA+IC0KPiA+IC0JLyogQ2FuY2VsIGFueSBhY3RpdmUgd29ya2VyIGFu ZCBmb3JjZSB1cyB0byByZS1ldmFsdWF0ZSBndXAgKi8KPiA+IC0JbXV0ZXhfbG9jaygmb2JqLT5t bS5sb2NrKTsKPiA+IC0JYWN0aXZlID0gZmV0Y2hfYW5kX3plcm8oJm9iai0+dXNlcnB0ci53b3Jr KTsKPiA+IC0JbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2spOwo+ID4gLQlpZiAoYWN0aXZlKQo+ ID4gLQkJZ290byBvdXQ7Cj4gPiAtCj4gPiAtCWk5MTVfZ2VtX29iamVjdF93YWl0KG9iaiwgSTkx NV9XQUlUX0FMTCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQsIE5VTEwpOwo+ID4gLQo+ID4gLQltdXRl eF9sb2NrKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4gLQo+ID4gLQkvKiBXZSBh cmUgaW5zaWRlIGEga3RocmVhZCBjb250ZXh0IGFuZCBjYW4ndCBiZSBpbnRlcnJ1cHRlZCAqLwo+ ID4gLQlpZiAoaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopID09IDApCj4gPiAtCQlfX2k5MTVf Z2VtX29iamVjdF9wdXRfcGFnZXMob2JqLCBJOTE1X01NX05PUk1BTCk7Cj4gPiAtCVdBUk5fT05D RShpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaiksCj4gPiAtCQkgICJGYWlsZWQgdG8gcmVs ZWFzZSBwYWdlczogYmluZF9jb3VudD0lZCwgcGFnZXNfcGluX2NvdW50PSVkLCBwaW5fZ2xvYmFs PSVkXG4iLAo+ID4gLQkJICBvYmotPmJpbmRfY291bnQsCj4gPiAtCQkgIGF0b21pY19yZWFkKCZv YmotPm1tLnBhZ2VzX3Bpbl9jb3VudCksCj4gPiAtCQkgIG9iai0+cGluX2dsb2JhbCk7Cj4gPiAt Cj4gPiAtCW11dGV4X3VubG9jaygmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKPiA+IC0K PiA+IC1vdXQ6Cj4gPiAtCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiA+IC19Cj4gPiAtCj4g PiAgIHN0YXRpYyB2b2lkIGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8pCj4g PiAgIHsKPiA+IC0JaWYgKG1vLT5hdHRhY2hlZCkKPiA+ICsJaWYgKCFSQl9FTVBUWV9OT0RFKCZt by0+aXQucmIpKQo+ID4gICAJCXJldHVybjsKPiA+ICAgCWludGVydmFsX3RyZWVfaW5zZXJ0KCZt by0+aXQsICZtby0+bW4tPm9iamVjdHMpOwo+ID4gLQltby0+YXR0YWNoZWQgPSB0cnVlOwo+ID4g ICB9Cj4gPiAgIHN0YXRpYyB2b2lkIGRlbF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVjdCAq bW8pCj4gPiAgIHsKPiA+IC0JaWYgKCFtby0+YXR0YWNoZWQpCj4gPiArCWlmIChSQl9FTVBUWV9O T0RFKCZtby0+aXQucmIpKQo+ID4gICAJCXJldHVybjsKPiA+ICAgCWludGVydmFsX3RyZWVfcmVt b3ZlKCZtby0+aXQsICZtby0+bW4tPm9iamVjdHMpOwo+ID4gLQltby0+YXR0YWNoZWQgPSBmYWxz ZTsKPiA+ICsJUkJfQ0xFQVJfTk9ERSgmbW8tPml0LnJiKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQKPiA+ICtfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIHZhbHVlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGk5MTVf bW11X29iamVjdCAqbW8gPSBvYmotPnVzZXJwdHIubW11X29iamVjdDsKPiA+ICsKPiA+ICsJLyoK PiA+ICsJICogRHVyaW5nIG1tX2ludmFsaWRhdGVfcmFuZ2Ugd2UgbmVlZCB0byBjYW5jZWwgYW55 IHVzZXJwdHIgdGhhdAo+ID4gKwkgKiBvdmVybGFwcyB0aGUgcmFuZ2UgYmVpbmcgaW52YWxpZGF0 ZWQuIERvaW5nIHNvIHJlcXVpcmVzIHRoZQo+ID4gKwkgKiBzdHJ1Y3RfbXV0ZXgsIGFuZCB0aGF0 IHJpc2tzIHJlY3Vyc2lvbi4gSW4gb3JkZXIgdG8gY2F1c2UKPiA+ICsJICogcmVjdXJzaW9uLCB0 aGUgdXNlciBtdXN0IGFsaWFzIHRoZSB1c2VycHRyIGFkZHJlc3Mgc3BhY2Ugd2l0aAo+ID4gKwkg KiBhIEdUVCBtbWFwcGluZyAocG9zc2libGUgd2l0aCBhIE1BUF9GSVhFRCkgLSB0aGVuIHdoZW4g d2UgaGF2ZQo+ID4gKwkgKiB0byBpbnZhbGlkYXRlIHRoYXQgbW1hcGluZywgbW1faW52YWxpZGF0 ZV9yYW5nZSBpcyBjYWxsZWQgd2l0aAo+ID4gKwkgKiB0aGUgdXNlcnB0ciBhZGRyZXNzICphbmQq IHRoZSBzdHJ1Y3RfbXV0ZXggaGVsZC4gIFRvIHByZXZlbnQgdGhhdAo+ID4gKwkgKiB3ZSBzZXQg YSBmbGFnIHVuZGVyIHRoZSBpOTE1X21tdV9ub3RpZmllciBzcGlubG9jayB0byBpbmRpY2F0ZQo+ ID4gKwkgKiB3aGV0aGVyIHRoaXMgb2JqZWN0IGlzIHZhbGlkLgo+ID4gKwkgKi8KPiA+ICsJaWYg KCFtbykKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJc3Bpbl9sb2NrKCZtby0+bW4tPmxvY2sp Owo+ID4gKwlpZiAodmFsdWUpCj4gPiArCQlhZGRfb2JqZWN0KG1vKTsKPiA+ICsJZWxzZQo+ID4g KwkJZGVsX29iamVjdChtbyk7Cj4gPiArCXNwaW5fdW5sb2NrKCZtby0+bW4tPmxvY2spOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IG11dGV4ICpfX2k5MTVfbXV0ZXhfbG9ja19yZWN1 cnNpdmUoc3RydWN0IG11dGV4ICptKQo+ID4gK3sKPiA+ICsJc3dpdGNoIChtdXRleF90cnlsb2Nr X3JlY3Vyc2l2ZShtKSkgewo+ID4gKwlkZWZhdWx0Ogo+ID4gKwljYXNlIE1VVEVYX1RSWUxPQ0tf RkFJTEVEOgo+ID4gKwkJbXV0ZXhfbG9jayhtKTsKPiA+ICsJY2FzZSBNVVRFWF9UUllMT0NLX1NV Q0NFU1M6Cj4gPiArCQlyZXR1cm4gbTsKPiA+ICsKPiA+ICsJY2FzZSBNVVRFWF9UUllMT0NLX1JF Q1VSU0lWRToKPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FRVhJU1QpOwo+IAo+IFRoaXMgc3VnZ2Vz dCB3ZSB3aWxsIGJyZWFrIHRoZSBhcGkgcmVxdWlyZW1lbnQgdG8gcmV0dXJuIGFsd2F5cyBpbnZh bGlkYXRlCj4gaW4gdGhlIGJsb2NrYWJsZSBjYXNlLgo+IAo+ID4gKwl9Cj4gPiAgIH0KPiA+ICAg c3RhdGljIGludCBpOTE1X2dlbV91c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3Ry dWN0IG1tdV9ub3RpZmllciAqX21uLAo+ID4gLQkJCQkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0 ICptbSwKPiA+IC0JCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKPiA+IC0JCQkJCQkg ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsCj4gPiAtCQkJCQkJICAgICAgIGJvb2wgYmxvY2thYmxl KQo+ID4gKwkJCQkJCSAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+ID4gKwkJCQkJCSAgICAg IHVuc2lnbmVkIGxvbmcgc3RhcnQsCj4gPiArCQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQs Cj4gPiArCQkJCQkJICAgICAgYm9vbCBibG9ja2FibGUpCj4gPiAgIHsKPiA+ICAgCXN0cnVjdCBp OTE1X21tdV9ub3RpZmllciAqbW4gPQo+ID4gICAJCWNvbnRhaW5lcl9vZihfbW4sIHN0cnVjdCBp OTE1X21tdV9ub3RpZmllciwgbW4pOwo+ID4gLQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbzsK PiA+ICAgCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0Owo+ID4gLQlMSVNUX0hFQUQoY2Fu Y2VsbGVkKTsKPiA+ICsJc3RydWN0IG11dGV4ICp1bmxvY2sgPSBOVUxMOwo+ID4gKwlpbnQgcmV0 ID0gMDsKPiA+ICAgCWlmIChSQl9FTVBUWV9ST09UKCZtbi0+b2JqZWN0cy5yYl9yb290KSkKPiA+ ICAgCQlyZXR1cm4gMDsKPiA+IEBAIC0xMzMsMTEgKzEzOCwxNSBAQCBzdGF0aWMgaW50IGk5MTVf Z2VtX3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVy ICpfbW4sCj4gPiAgIAlzcGluX2xvY2soJm1uLT5sb2NrKTsKPiA+ICAgCWl0ID0gaW50ZXJ2YWxf dHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0cywgc3RhcnQsIGVuZCk7Cj4gPiAgIAl3aGlsZSAo aXQpIHsKPiA+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gPiArCj4gPiAg IAkJaWYgKCFibG9ja2FibGUpIHsKPiA+IC0JCQlzcGluX3VubG9jaygmbW4tPmxvY2spOwo+ID4g LQkJCXJldHVybiAtRUFHQUlOOwo+ID4gKwkJCXJldCA9IC1FQUdBSU47Cj4gPiArCQkJYnJlYWs7 Cj4gPiAgIAkJfQo+ID4gLQkJLyogVGhlIG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVu IGRlc3Ryb3lpbmcgdGhlCj4gPiArCj4gPiArCQkvKgo+ID4gKwkJICogVGhlIG1tdV9vYmplY3Qg aXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ryb3lpbmcgdGhlCj4gPiAgIAkJICogR0VNIG9iamVj dCBzbyBpdCBpcyBlbnRpcmVseSBwb3NzaWJsZSB0byBnYWluIGEKPiA+ICAgCQkgKiByZWZlcmVu Y2Ugb24gYW4gb2JqZWN0IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGZyZWVkCj4gPiAgIAkJICog c2luY2Ugb3VyIHNlcmlhbGlzYXRpb24gaXMgdmlhIHRoZSBzcGlubG9jayBhbmQgbm90Cj4gPiBA QCAtMTQ2LDIxICsxNTUsMzMgQEAgc3RhdGljIGludCBpOTE1X2dlbV91c2VycHRyX21uX2ludmFs aWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAqX21uLAo+ID4gICAJCSAqIHVz ZS1hZnRlci1mcmVlIHdlIG9ubHkgYWNxdWlyZSBhIHJlZmVyZW5jZSBvbiB0aGUKPiA+ICAgCQkg KiBvYmplY3QgaWYgaXQgaXMgbm90IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4K PiA+ICAgCQkgKi8KPiA+IC0JCW1vID0gY29udGFpbmVyX29mKGl0LCBzdHJ1Y3QgaTkxNV9tbXVf b2JqZWN0LCBpdCk7Cj4gPiAtCQlpZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oJm1vLT5vYmotPmJh c2UucmVmY291bnQpKQo+ID4gLQkJCXF1ZXVlX3dvcmsobW4tPndxLCAmbW8tPndvcmspOwo+ID4g LQo+ID4gLQkJbGlzdF9hZGQoJm1vLT5saW5rLCAmY2FuY2VsbGVkKTsKPiA+IC0JCWl0ID0gaW50 ZXJ2YWxfdHJlZV9pdGVyX25leHQoaXQsIHN0YXJ0LCBlbmQpOwo+ID4gKwkJb2JqID0gY29udGFp bmVyX29mKGl0LCBzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0LCBpdCktPm9iajsKPiA+ICsJCWlmICgh a3JlZl9nZXRfdW5sZXNzX3plcm8oJm9iai0+YmFzZS5yZWZjb3VudCkpIHsKPiA+ICsJCQlpdCA9 IGludGVydmFsX3RyZWVfaXRlcl9uZXh0KGl0LCBzdGFydCwgZW5kKTsKPiA+ICsJCQljb250aW51 ZTsKPiA+ICsJCX0KPiA+ICsJCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7Cj4gPiArCj4gPiArCQlp ZiAoIXVubG9jaykKPiA+ICsJCQl1bmxvY2sgPSBfX2k5MTVfbXV0ZXhfbG9ja19yZWN1cnNpdmUo Jm1uLT5tbS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gCj4gSG1tIC4uIGJ1dCB3ZSBwcm9j ZWVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHRyeWxvY2sgcmVzdWx0IGFuZCBkb24ndCBldmVuIGJvdGhl cgo+IGxvb2tpbmcgYXQgaXQuIEkgZG9uJ3QgZ2V0IGl0LiBJIHN0b3AgaGVyZSBzaW5jZSBpdCBk b2Vzbid0IG1ha2Ugc2Vuc2UgdG8gbWUKPiBhdCB0aGlzIG1vbWVudC4KPiAKPiBSZWdhcmRzLAo+ IAo+IFR2cnRrbwo+IAo+ID4gKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOwo+ ID4gKwkJaWYgKHJldCA9PSAwKQo+ID4gKwkJCXJldCA9IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9w YWdlcyhvYmosIEk5MTVfTU1fU0hSSU5LRVIpOwo+ID4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChv YmopOwo+ID4gKwkJaWYgKHJldCkKPiA+ICsJCQlnb3RvIHVubG9jazsKPiA+ICsKPiA+ICsJCXNw aW5fbG9jaygmbW4tPmxvY2spOwo+ID4gKwkJaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3Qo Jm1uLT5vYmplY3RzLCBzdGFydCwgZW5kKTsKPiA+ICAgCX0KPiA+IC0JbGlzdF9mb3JfZWFjaF9l bnRyeShtbywgJmNhbmNlbGxlZCwgbGluaykKPiA+IC0JCWRlbF9vYmplY3QobW8pOwo+ID4gICAJ c3Bpbl91bmxvY2soJm1uLT5sb2NrKTsKPiA+IC0JaWYgKCFsaXN0X2VtcHR5KCZjYW5jZWxsZWQp KQo+ID4gLQkJZmx1c2hfd29ya3F1ZXVlKG1uLT53cSk7Cj4gPiArdW5sb2NrOgo+ID4gKwlpZiAo IUlTX0VSUl9PUl9OVUxMKHVubG9jaykpCj4gPiArCQltdXRleF91bmxvY2sodW5sb2NrKTsKPiA+ ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+IC0JcmV0dXJuIDA7Cj4gPiAgIH0KPiA+ICAgc3RhdGlj IGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXIg PSB7Cj4gPiBAQCAtMTY4LDcgKzE4OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlm aWVyX29wcyBpOTE1X2dlbV91c2VycHRyX25vdGlmaWVyID0gewo+ID4gICB9Owo+ID4gICBzdGF0 aWMgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICoKPiA+IC1pOTE1X21tdV9ub3RpZmllcl9jcmVh dGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gPiAraTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKHN0 cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCj4gPiAgIHsKPiA+ICAgCXN0cnVjdCBpOTE1X21tdV9u b3RpZmllciAqbW47Cj4gPiBAQCAtMTc5LDEzICsyMDAsNyBAQCBpOTE1X21tdV9ub3RpZmllcl9j cmVhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gPiAgIAlzcGluX2xvY2tfaW5pdCgmbW4tPmxv Y2spOwo+ID4gICAJbW4tPm1uLm9wcyA9ICZpOTE1X2dlbV91c2VycHRyX25vdGlmaWVyOwo+ID4g ICAJbW4tPm9iamVjdHMgPSBSQl9ST09UX0NBQ0hFRDsKPiA+IC0JbW4tPndxID0gYWxsb2Nfd29y a3F1ZXVlKCJpOTE1LXVzZXJwdHItcmVsZWFzZSIsCj4gPiAtCQkJCSBXUV9VTkJPVU5EIHwgV1Ff TUVNX1JFQ0xBSU0sCj4gPiAtCQkJCSAwKTsKPiA+IC0JaWYgKG1uLT53cSA9PSBOVUxMKSB7Cj4g PiAtCQlrZnJlZShtbik7Cj4gPiAtCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+IC0JfQo+ ID4gKwltbi0+bW0gPSBtbTsKPiA+ICAgCXJldHVybiBtbjsKPiA+ICAgfQo+ID4gQEAgLTE5NSwx NiArMjEwLDE0IEBAIGk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gPiAgIHsKPiA+ICAgCXN0cnVjdCBpOTE1X21t dV9vYmplY3QgKm1vOwo+ID4gLQltbyA9IG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0Owo+ID4gLQlp ZiAobW8gPT0gTlVMTCkKPiA+ICsJbW8gPSBmZXRjaF9hbmRfemVybygmb2JqLT51c2VycHRyLm1t dV9vYmplY3QpOwo+ID4gKwlpZiAoIW1vKQo+ID4gICAJCXJldHVybjsKPiA+ICAgCXNwaW5fbG9j aygmbW8tPm1uLT5sb2NrKTsKPiA+ICAgCWRlbF9vYmplY3QobW8pOwo+ID4gICAJc3Bpbl91bmxv Y2soJm1vLT5tbi0+bG9jayk7Cj4gPiAgIAlrZnJlZShtbyk7Cj4gPiAtCj4gPiAtCW9iai0+dXNl cnB0ci5tbXVfb2JqZWN0ID0gTlVMTDsKPiA+ICAgfQo+ID4gICBzdGF0aWMgc3RydWN0IGk5MTVf bW11X25vdGlmaWVyICoKPiA+IEBAIC0yMTcsNyArMjMwLDcgQEAgaTkxNV9tbXVfbm90aWZpZXJf ZmluZChzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tKQo+ID4gICAJaWYgKG1uKQo+ID4gICAJCXJl dHVybiBtbjsKPiA+IC0JbW4gPSBpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUobW0tPm1tKTsKPiA+ ICsJbW4gPSBpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUobW0pOwo+ID4gICAJaWYgKElTX0VSUiht bikpCj4gPiAgIAkJZXJyID0gUFRSX0VSUihtbik7Cj4gPiBAQCAtMjQwLDEwICsyNTMsOCBAQCBp OTE1X21tdV9ub3RpZmllcl9maW5kKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCj4gPiAgIAlt dXRleF91bmxvY2soJm1tLT5pOTE1LT5tbV9sb2NrKTsKPiA+ICAgCXVwX3dyaXRlKCZtbS0+bW0t Pm1tYXBfc2VtKTsKPiA+IC0JaWYgKG1uICYmICFJU19FUlIobW4pKSB7Cj4gPiAtCQlkZXN0cm95 X3dvcmtxdWV1ZShtbi0+d3EpOwo+ID4gKwlpZiAobW4gJiYgIUlTX0VSUihtbikpCj4gPiAgIAkJ a2ZyZWUobW4pOwo+ID4gLQl9Cj4gPiAgIAlyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogbW0t Pm1uOwo+ID4gICB9Cj4gPiBAQCAtMjY2LDE0ICsyNzcsMTQgQEAgaTkxNV9nZW1fdXNlcnB0cl9p bml0X19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiA+ICAg CQlyZXR1cm4gUFRSX0VSUihtbik7Cj4gPiAgIAltbyA9IGt6YWxsb2Moc2l6ZW9mKCptbyksIEdG UF9LRVJORUwpOwo+ID4gLQlpZiAobW8gPT0gTlVMTCkKPiA+ICsJaWYgKCFtbykKPiA+ICAgCQly ZXR1cm4gLUVOT01FTTsKPiA+ICAgCW1vLT5tbiA9IG1uOwo+ID4gICAJbW8tPm9iaiA9IG9iajsK PiA+ICAgCW1vLT5pdC5zdGFydCA9IG9iai0+dXNlcnB0ci5wdHI7Cj4gPiAgIAltby0+aXQubGFz dCA9IG9iai0+dXNlcnB0ci5wdHIgKyBvYmotPmJhc2Uuc2l6ZSAtIDE7Cj4gPiAtCUlOSVRfV09S SygmbW8tPndvcmssIGNhbmNlbF91c2VycHRyKTsKPiA+ICsJUkJfQ0xFQVJfTk9ERSgmbW8tPml0 LnJiKTsKPiA+ICAgCW9iai0+dXNlcnB0ci5tbXVfb2JqZWN0ID0gbW87Cj4gPiAgIAlyZXR1cm4g MDsKPiA+IEBAIC0yODcsMTIgKzI5OCwxNiBAQCBpOTE1X21tdV9ub3RpZmllcl9mcmVlKHN0cnVj dCBpOTE1X21tdV9ub3RpZmllciAqbW4sCj4gPiAgIAkJcmV0dXJuOwo+ID4gICAJbW11X25vdGlm aWVyX3VucmVnaXN0ZXIoJm1uLT5tbiwgbW0pOwo+ID4gLQlkZXN0cm95X3dvcmtxdWV1ZShtbi0+ d3EpOwo+ID4gICAJa2ZyZWUobW4pOwo+ID4gICB9Cj4gPiAgICNlbHNlCj4gPiArc3RhdGljIHZv aWQKPiA+ICtfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLCBib29sIHZhbHVlKQo+ID4gK3sKPiA+ICt9Cj4gPiArCj4gPiAgIHN0YXRp YyB2b2lkCj4gPiAgIGk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gPiAgIHsKPiA+IEBAIC00NjEsNDIgKzQ3Niw2 IEBAIF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAo+ID4gICAJcmV0dXJuIHN0Owo+ID4gICB9Cj4gPiAtc3RhdGljIGludAo+ID4g LV9faTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4gPiAtCQkJICAgICAgYm9vbCB2YWx1ZSkKPiA+IC17Cj4gPiAtCWludCByZXQgPSAw Owo+ID4gLQo+ID4gLQkvKiBEdXJpbmcgbW1faW52YWxpZGF0ZV9yYW5nZSB3ZSBuZWVkIHRvIGNh bmNlbCBhbnkgdXNlcnB0ciB0aGF0Cj4gPiAtCSAqIG92ZXJsYXBzIHRoZSByYW5nZSBiZWluZyBp bnZhbGlkYXRlZC4gRG9pbmcgc28gcmVxdWlyZXMgdGhlCj4gPiAtCSAqIHN0cnVjdF9tdXRleCwg YW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQo+ID4gLQkgKiByZWN1 cnNpb24sIHRoZSB1c2VyIG11c3QgYWxpYXMgdGhlIHVzZXJwdHIgYWRkcmVzcyBzcGFjZSB3aXRo Cj4gPiAtCSAqIGEgR1RUIG1tYXBwaW5nIChwb3NzaWJsZSB3aXRoIGEgTUFQX0ZJWEVEKSAtIHRo ZW4gd2hlbiB3ZSBoYXZlCj4gPiAtCSAqIHRvIGludmFsaWRhdGUgdGhhdCBtbWFwaW5nLCBtbV9p bnZhbGlkYXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCj4gPiAtCSAqIHRoZSB1c2VycHRyIGFkZHJl c3MgKmFuZCogdGhlIHN0cnVjdF9tdXRleCBoZWxkLiAgVG8gcHJldmVudCB0aGF0Cj4gPiAtCSAq IHdlIHNldCBhIGZsYWcgdW5kZXIgdGhlIGk5MTVfbW11X25vdGlmaWVyIHNwaW5sb2NrIHRvIGlu ZGljYXRlCj4gPiAtCSAqIHdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdmFsaWQuCj4gPiAtCSAqLwo+ ID4gLSNpZiBkZWZpbmVkKENPTkZJR19NTVVfTk9USUZJRVIpCj4gPiAtCWlmIChvYmotPnVzZXJw dHIubW11X29iamVjdCA9PSBOVUxMKQo+ID4gLQkJcmV0dXJuIDA7Cj4gPiAtCj4gPiAtCXNwaW5f bG9jaygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QtPm1uLT5sb2NrKTsKPiA+IC0JLyogSW4gb3Jk ZXIgdG8gc2VyaWFsaXNlIGdldF9wYWdlcyB3aXRoIGFuIG91dHN0YW5kaW5nCj4gPiAtCSAqIGNh bmNlbF91c2VycHRyLCB3ZSBtdXN0IGRyb3AgdGhlIHN0cnVjdF9tdXRleCBhbmQgdHJ5IGFnYWlu Lgo+ID4gLQkgKi8KPiA+IC0JaWYgKCF2YWx1ZSkKPiA+IC0JCWRlbF9vYmplY3Qob2JqLT51c2Vy cHRyLm1tdV9vYmplY3QpOwo+ID4gLQllbHNlIGlmICghd29ya19wZW5kaW5nKCZvYmotPnVzZXJw dHIubW11X29iamVjdC0+d29yaykpCj4gPiAtCQlhZGRfb2JqZWN0KG9iai0+dXNlcnB0ci5tbXVf b2JqZWN0KTsKPiA+IC0JZWxzZQo+ID4gLQkJcmV0ID0gLUVBR0FJTjsKPiA+IC0Jc3Bpbl91bmxv Y2soJm9iai0+dXNlcnB0ci5tbXVfb2JqZWN0LT5tbi0+bG9jayk7Cj4gPiAtI2VuZGlmCj4gPiAt Cj4gPiAtCXJldHVybiByZXQ7Cj4gPiAtfQo+ID4gLQo+ID4gICBzdGF0aWMgdm9pZAo+ID4gICBf X2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl93 b3JrKQo+ID4gICB7Cj4gPiBAQCAtNjgyLDggKzY2MSwxMSBAQCBpOTE1X2dlbV91c2VycHRyX3B1 dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ID4gICAJc3RydWN0IHNn dF9pdGVyIHNndF9pdGVyOwo+ID4gICAJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gPiAtCUJVR19PTihv YmotPnVzZXJwdHIud29yayAhPSBOVUxMKTsKPiA+ICsJLyogQ2FuY2VsIGFueSBpbmZsaWdodCB3 b3JrIGFuZCBmb3JjZSB0aGVtIHRvIHJlc3RhcnQgdGhlaXIgZ3VwICovCj4gPiArCW9iai0+dXNl cnB0ci53b3JrID0gTlVMTDsKPiA+ICAgCV9faTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0aXZlKG9i aiwgZmFsc2UpOwo+ID4gKwlpZiAoIXBhZ2VzKQo+ID4gKwkJcmV0dXJuOwo+ID4gICAJaWYgKG9i ai0+bW0ubWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQpCj4gPiAgIAkJb2JqLT5tbS5kaXJ0eSA9 IGZhbHNlOwo+ID4gQEAgLTcyMSw3ICs3MDMsOCBAQCBpOTE1X2dlbV91c2VycHRyX2RtYWJ1Zl9l eHBvcnQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiA+ICAgc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV91c2VycHRyX29wcyA9IHsK PiA+ICAgCS5mbGFncyA9IEk5MTVfR0VNX09CSkVDVF9IQVNfU1RSVUNUX1BBR0UgfAo+ID4gLQkJ IEk5MTVfR0VNX09CSkVDVF9JU19TSFJJTktBQkxFLAo+ID4gKwkJIEk5MTVfR0VNX09CSkVDVF9J U19TSFJJTktBQkxFIHwKPiA+ICsJCSBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMLAo+ID4g ICAJLmdldF9wYWdlcyA9IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzLAo+ID4gICAJLnB1dF9w YWdlcyA9IGk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzLAo+ID4gICAJLmRtYWJ1Zl9leHBvcnQg PSBpOTE1X2dlbV91c2VycHRyX2RtYWJ1Zl9leHBvcnQsCj4gPiAKPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QK PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNv ZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK