From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 04/25] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Mon, 5 Nov 2018 16:45:06 +0000 Message-ID: <2dcc830a-fe8f-42e8-0b14-d943efaa57fe@linux.intel.com> References: <20181102161232.17742-1-chris@chris-wilson.co.uk> <20181102161232.17742-4-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 mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0AD8F6E2CE for ; Mon, 5 Nov 2018 16:45:08 +0000 (UTC) In-Reply-To: <20181102161232.17742-4-chris@chris-wilson.co.uk> Content-Language: en-GB 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 Ck9uIDAyLzExLzIwMTggMTY6MTIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBTaW5jZSBjb21taXQg OTMwNjVhYzc1M2U0ICgibW0sIG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZGUgZm9yIG1t dQo+IG5vdGlmaWVycyIpIHdlIGhhdmUgYmVlbiBhYmxlIHRvIHJlcG9ydCBmYWlsdXJlIGZyb20K PiBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCB3aGljaCBhbGxvd3MgdXMgdG8gdXNlIGEgdHJ5 bG9jayBvbiB0aGUKPiBzdHJ1Y3RfbXV0ZXggdG8gYXZvaWQgcG90ZW50aWFsIHJlY3Vyc2lvbiBh bmQgcmVwb3J0IC1FQlVTWSBpbnN0ZWFkLgo+IEZ1cnRoZXJtb3JlLCB0aGlzIGFsbG93cyB1cyB0 byBwdWxsIHRoZSB3b3JrIGludG8gdGhlIG1haW4gY2FsbGJhY2sgYW5kCj4gYXZvaWQgdGhlIHNs ZWlnaHQtb2YtaGFuZCBpbiB1c2luZyBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrZGVwLgo+IAo+ IEhvd2V2ZXIsIG5vdCBhbGwgcGF0aHMgdG8gbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgYXJl IHByZXBhcmVkIHRvCj4gaGFuZGxlIGZhaWx1cmUsIHNvIGluc3RlYWQgb2YgcmVwb3J0aW5nIHRo ZSByZWN1cnNpb24sIGRlYWwgd2l0aCBpdC4KCkp1ZGdpbmcgYnkgdGhlIGNvZGUgYmVsb3cgbm9u LWJsb2NrYWJsZSBwYXRocyBjYW4gaGFuZGxlIGZhaWx1cmUgYnV0IApibG9ja2FibGUgY2FuIG5v dD8gUmlnaHQsIG5vdyB0aGF0IEkgcmVhZCB0aGUgaW52YWxpZGF0ZV9yYW5nZV9zdGFydCBhcGkg CmRvY3MgdGhhdCBzZWVtcyB0byBiZSB0aGUgY2FzZS4gU28gdGhhdCBzb3VuZHMgbGlrZSBibG9j a2FibGUgYnJpbmdzIHVzIAptYXJnaW5hbCBiZW5lZml0cywgaWYgYW55LCBvbiB0aGUgZGVzaWdu IGxldmVsLiBXaGljaCBpcyB3aHkgSSBzdXBwb3NlIAp0aGlzIHBhdGNoIGxvb2tzIHF1aXRlIGJp Zy4gTGV0cyBzZWUuLgoKPiAKPiBCdWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9y Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mzc1Cj4gUmVmZXJlbmNlczogOTMwNjVhYzc1M2U0ICgibW0s IG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZSBmb3IgbW11IG5vdGlmaWVycyIpCj4gU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgIDQgKy0KPiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICB8ICAxOCArLQo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmggIHwgICA3ICsKPiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYyB8IDIxNyArKysrKysrKysrKy0tLS0tLS0t LS0tLS0KPiAgIDQgZmlsZXMgY2hhbmdlZCwgMTIwIGluc2VydGlvbnMoKyksIDEyNiBkZWxldGlv bnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCAyYTg4YTdlYjg3MWIuLjEw NTZiMTJjM2JjOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC0zMDczLDggKzMw NzMsOCBAQCBlbnVtIGk5MTVfbW1fc3ViY2xhc3MgeyAvKiBsb2NrZGVwIHN1YmNsYXNzIGZvciBv YmotPm1tLmxvY2sgKi8KPiAgIAlJOTE1X01NX1NIUklOS0VSCj4gICB9Owo+ICAgCj4gLXZvaWQg X19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCj4gLQkJCQkgZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKTsKPiAraW50IF9faTkx NV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ ICsJCQkJZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKTsKPiAgIHZvaWQgX19pOTE1X2dl bV9vYmplY3RfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPiAg IAo+ICAgZW51bSBpOTE1X21hcF90eXBlIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBpbmRl eCA5M2QwOTI4MjcxMGQuLjlhOGFmOTQ1NGE1MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u Ywo+IEBAIC0yNDI5LDggKzI0MjksOCBAQCBfX2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCXN0cnVjdCBzZ190YWJsZSAqcGFn ZXM7Cj4gICAKPiAgIAlwYWdlcyA9IGZldGNoX2FuZF96ZXJvKCZvYmotPm1tLnBhZ2VzKTsKPiAt CWlmICghcGFnZXMpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwocGFn ZXMpKQo+ICsJCXJldHVybiBwYWdlczsgPgo+ICAgCXNwaW5fbG9jaygmaTkxNS0+bW0ub2JqX2xv Y2spOwo+ICAgCWxpc3RfZGVsKCZvYmotPm1tLmxpbmspOwo+IEBAIC0yNDU0LDE3ICsyNDU0LDE2 IEBAIF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCj4gICAJcmV0dXJuIHBhZ2VzOwo+ICAgfQo+ICAgCj4gLXZvaWQgX19pOTE1X2dl bV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJ CQkgZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKQo+ICtpbnQgX19pOTE1X2dlbV9vYmpl Y3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCQllbnVt IGk5MTVfbW1fc3ViY2xhc3Mgc3ViY2xhc3MpCj4gICB7Cj4gICAJc3RydWN0IHNnX3RhYmxlICpw YWdlczsKPiArCWludCByZXQgPSAtRUJVU1k7Cj4gICAKPiAgIAlpZiAoaTkxNV9nZW1fb2JqZWN0 X2hhc19waW5uZWRfcGFnZXMob2JqKSkKPiAtCQlyZXR1cm47Cj4gKwkJcmV0dXJuIC1FQlVTWTsK PiAgIAo+ICAgCUdFTV9CVUdfT04ob2JqLT5iaW5kX2NvdW50KTsKPiAtCWlmICghaTkxNV9nZW1f b2JqZWN0X2hhc19wYWdlcyhvYmopKQo+IC0JCXJldHVybjsKClVucmVsYXRlZCB0byB0aGlzIHBh dGNoPwoKPiAgIAo+ICAgCS8qIE1heSBiZSBjYWxsZWQgYnkgc2hyaW5rZXIgZnJvbSB3aXRoaW4g Z2V0X3BhZ2VzKCkgKG9uIGFub3RoZXIgYm8pICovCj4gICAJbXV0ZXhfbG9ja19uZXN0ZWQoJm9i ai0+bW0ubG9jaywgc3ViY2xhc3MpOwo+IEBAIC0yNDc3LDExICsyNDc2LDE2IEBAIHZvaWQgX19p OTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos Cj4gICAJICogbGlzdHMgZWFybHkuCj4gICAJICovCj4gICAJcGFnZXMgPSBfX2k5MTVfZ2VtX29i amVjdF91bnNldF9wYWdlcyhvYmopOwo+ICsJaWYgKCFwYWdlcyAmJiAhaTkxNV9nZW1fb2JqZWN0 X25lZWRzX2FzeW5jX2NhbmNlbChvYmopKQo+ICsJCXBhZ2VzID0gRVJSX1BUUigtRUlOVkFMKTsK CihIbW0geWVhaCwgdGhpcyBwYXRoIGRpZCBub3QgdXNlZCB0byBoYW5kbGUgdGhlIGV4aXN0aW5n IHBvc3NpYmxlIE5VTEwgCnBhZ2VzIGhlcmUuKQoKUGxlYXNlIHB1dCBhIGJsdXJiIGluIHRoZSBj b21taXQgbWVzc2FnZSBvbiB0aGUgaGlnaCB0byBtZWRpdW0gbGV2ZWwgCmRlc2lnbiBvZiB0aGUg Y2hhbmdlLgoKPiAgIAlpZiAoIUlTX0VSUihwYWdlcykpCj4gICAJCW9iai0+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 YjI4NDAzNmQxLi5hYjVhZTQyNmUyN2IgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 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 X0ZBSUxFRDoKPiArCQltdXRleF9sb2NrKG0pOwo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX1NVQ0NF U1M6Cj4gKwkJcmV0dXJuIG07Cj4gKwo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX1JFQ1VSU0lWRToK PiArCQlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsKClRoaXMgc3VnZ2VzdCB3ZSB3aWxsIGJyZWFr IHRoZSBhcGkgcmVxdWlyZW1lbnQgdG8gcmV0dXJuIGFsd2F5cyAKaW52YWxpZGF0ZSBpbiB0aGUg YmxvY2thYmxlIGNhc2UuCgo+ICsJfQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGk5MTVfZ2Vt X3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICpf bW4sCj4gLQkJCQkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAtCQkJCQkJICAgICAg IHVuc2lnbmVkIGxvbmcgc3RhcnQsCj4gLQkJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwK PiAtCQkJCQkJICAgICAgIGJvb2wgYmxvY2thYmxlKQo+ICsJCQkJCQkgICAgICBzdHJ1Y3QgbW1f c3RydWN0ICptbSwKPiArCQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKPiArCQkJCQkJ ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsCj4gKwkJCQkJCSAgICAgIGJvb2wgYmxvY2thYmxlKQo+ ICAgewo+ICAgCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW4gPQo+ICAgCQljb250YWluZXJf b2YoX21uLCBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIsIG1uKTsKPiAtCXN0cnVjdCBpOTE1X21t dV9vYmplY3QgKm1vOwo+ICAgCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0Owo+IC0JTElT VF9IRUFEKGNhbmNlbGxlZCk7Cj4gKwlzdHJ1Y3QgbXV0ZXggKnVubG9jayA9IE5VTEw7Cj4gKwlp bnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmIChSQl9FTVBUWV9ST09UKCZtbi0+b2JqZWN0cy5yYl9y b290KSkKPiAgIAkJcmV0dXJuIDA7Cj4gQEAgLTEzMywxMSArMTM4LDE1IEBAIHN0YXRpYyBpbnQg aTkxNV9nZW1fdXNlcnB0cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90 aWZpZXIgKl9tbiwKPiAgIAlzcGluX2xvY2soJm1uLT5sb2NrKTsKPiAgIAlpdCA9IGludGVydmFs X3RyZWVfaXRlcl9maXJzdCgmbW4tPm9iamVjdHMsIHN0YXJ0LCBlbmQpOwo+ICAgCXdoaWxlIChp dCkgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwo+ICAgCQlpZiAo IWJsb2NrYWJsZSkgewo+IC0JCQlzcGluX3VubG9jaygmbW4tPmxvY2spOwo+IC0JCQlyZXR1cm4g LUVBR0FJTjsKPiArCQkJcmV0ID0gLUVBR0FJTjsKPiArCQkJYnJlYWs7Cj4gICAJCX0KPiAtCQkv KiBUaGUgbW11X29iamVjdCBpcyByZWxlYXNlZCBsYXRlIHdoZW4gZGVzdHJveWluZyB0aGUKPiAr Cj4gKwkJLyoKPiArCQkgKiBUaGUgbW11X29iamVjdCBpcyByZWxlYXNlZCBsYXRlIHdoZW4gZGVz dHJveWluZyB0aGUKPiAgIAkJICogR0VNIG9iamVjdCBzbyBpdCBpcyBlbnRpcmVseSBwb3NzaWJs ZSB0byBnYWluIGEKPiAgIAkJICogcmVmZXJlbmNlIG9uIGFuIG9iamVjdCBpbiB0aGUgcHJvY2Vz cyBvZiBiZWluZyBmcmVlZAo+ICAgCQkgKiBzaW5jZSBvdXIgc2VyaWFsaXNhdGlvbiBpcyB2aWEg dGhlIHNwaW5sb2NrIGFuZCBub3QKPiBAQCAtMTQ2LDIxICsxNTUsMzMgQEAgc3RhdGljIGludCBp OTE1X2dlbV91c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3Rp ZmllciAqX21uLAo+ICAgCQkgKiB1c2UtYWZ0ZXItZnJlZSB3ZSBvbmx5IGFjcXVpcmUgYSByZWZl cmVuY2Ugb24gdGhlCj4gICAJCSAqIG9iamVjdCBpZiBpdCBpcyBub3QgaW4gdGhlIHByb2Nlc3Mg b2YgYmVpbmcgZGVzdHJveWVkLgo+ICAgCQkgKi8KPiAtCQltbyA9IGNvbnRhaW5lcl9vZihpdCwg c3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpOwo+IC0JCWlmIChrcmVmX2dldF91bmxlc3NfemVy bygmbW8tPm9iai0+YmFzZS5yZWZjb3VudCkpCj4gLQkJCXF1ZXVlX3dvcmsobW4tPndxLCAmbW8t PndvcmspOwo+IC0KPiAtCQlsaXN0X2FkZCgmbW8tPmxpbmssICZjYW5jZWxsZWQpOwo+IC0JCWl0 ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQoaXQsIHN0YXJ0LCBlbmQpOwo+ICsJCW9iaiA9IGNv bnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpLT5vYmo7Cj4gKwkJaWYg KCFrcmVmX2dldF91bmxlc3NfemVybygmb2JqLT5iYXNlLnJlZmNvdW50KSkgewo+ICsJCQlpdCA9 IGludGVydmFsX3RyZWVfaXRlcl9uZXh0KGl0LCBzdGFydCwgZW5kKTsKPiArCQkJY29udGludWU7 Cj4gKwkJfQo+ICsJCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7Cj4gKwo+ICsJCWlmICghdW5sb2Nr KQo+ICsJCQl1bmxvY2sgPSBfX2k5MTVfbXV0ZXhfbG9ja19yZWN1cnNpdmUoJm1uLT5tbS0+aTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7CgpIbW0gLi4gYnV0IHdlIHByb2NlZWQgcmVnYXJkbGVzcyBv ZiB0aGUgdHJ5bG9jayByZXN1bHQgYW5kIGRvbid0IGV2ZW4gCmJvdGhlciBsb29raW5nIGF0IGl0 LiBJIGRvbid0IGdldCBpdC4gSSBzdG9wIGhlcmUgc2luY2UgaXQgZG9lc24ndCBtYWtlIApzZW5z ZSB0byBtZSBhdCB0aGlzIG1vbWVudC4KClJlZ2FyZHMsCgpUdnJ0a28KCj4gKwkJcmV0ID0gaTkx NV9nZW1fb2JqZWN0X3VuYmluZChvYmopOwo+ICsJCWlmIChyZXQgPT0gMCkKPiArCQkJcmV0ID0g X19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaiwgSTkxNV9NTV9TSFJJTktFUik7Cj4gKwkJ aTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gdW5sb2Nr Owo+ICsKPiArCQlzcGluX2xvY2soJm1uLT5sb2NrKTsKPiArCQlpdCA9IGludGVydmFsX3RyZWVf aXRlcl9maXJzdCgmbW4tPm9iamVjdHMsIHN0YXJ0LCBlbmQpOwo+ICAgCX0KPiAtCWxpc3RfZm9y X2VhY2hfZW50cnkobW8sICZjYW5jZWxsZWQsIGxpbmspCj4gLQkJZGVsX29iamVjdChtbyk7Cj4g ICAJc3Bpbl91bmxvY2soJm1uLT5sb2NrKTsKPiAgIAo+IC0JaWYgKCFsaXN0X2VtcHR5KCZjYW5j ZWxsZWQpKQo+IC0JCWZsdXNoX3dvcmtxdWV1ZShtbi0+d3EpOwo+ICt1bmxvY2s6Cj4gKwlpZiAo IUlTX0VSUl9PUl9OVUxMKHVubG9jaykpCj4gKwkJbXV0ZXhfdW5sb2NrKHVubG9jayk7Cj4gKwo+ ICsJcmV0dXJuIHJldDsKPiAgIAo+IC0JcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBj b25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBpOTE1X2dlbV91c2VycHRyX25vdGlmaWVyID0g ewo+IEBAIC0xNjgsNyArMTg5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJf b3BzIGk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXIgPSB7Cj4gICB9Owo+ICAgCj4gICBzdGF0aWMg c3RydWN0IGk5MTVfbW11X25vdGlmaWVyICoKPiAtaTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ICtpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUoc3RydWN0IGk5 MTVfbW1fc3RydWN0ICptbSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1u Owo+ICAgCj4gQEAgLTE3OSwxMyArMjAwLDcgQEAgaTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ICAgCXNwaW5fbG9ja19pbml0KCZtbi0+bG9jayk7Cj4gICAJ bW4tPm1uLm9wcyA9ICZpOTE1X2dlbV91c2VycHRyX25vdGlmaWVyOwo+ICAgCW1uLT5vYmplY3Rz ID0gUkJfUk9PVF9DQUNIRUQ7Cj4gLQltbi0+d3EgPSBhbGxvY193b3JrcXVldWUoImk5MTUtdXNl cnB0ci1yZWxlYXNlIiwKPiAtCQkJCSBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sCj4gLQkJ CQkgMCk7Cj4gLQlpZiAobW4tPndxID09IE5VTEwpIHsKPiAtCQlrZnJlZShtbik7Cj4gLQkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gLQl9Cj4gKwltbi0+bW0gPSBtbTsKPiAgIAo+ICAgCXJl dHVybiBtbjsKPiAgIH0KPiBAQCAtMTk1LDE2ICsyMTAsMTQgQEAgaTkxNV9nZW1fdXNlcnB0cl9y ZWxlYXNlX19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAg IHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbzsKPiAgIAo+IC0JbW8gPSBvYmotPnVz ZXJwdHIubW11X29iamVjdDsKPiAtCWlmIChtbyA9PSBOVUxMKQo+ICsJbW8gPSBmZXRjaF9hbmRf emVybygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QpOwo+ICsJaWYgKCFtbykKPiAgIAkJcmV0dXJu Owo+ICAgCj4gICAJc3Bpbl9sb2NrKCZtby0+bW4tPmxvY2spOwo+ICAgCWRlbF9vYmplY3QobW8p Owo+ICAgCXNwaW5fdW5sb2NrKCZtby0+bW4tPmxvY2spOwo+ICAgCWtmcmVlKG1vKTsKPiAtCj4g LQlvYmotPnVzZXJwdHIubW11X29iamVjdCA9IE5VTEw7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBz dHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKgo+IEBAIC0yMTcsNyArMjMwLDcgQEAgaTkxNV9tbXVf bm90aWZpZXJfZmluZChzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tKQo+ICAgCWlmIChtbikKPiAg IAkJcmV0dXJuIG1uOwo+ICAgCj4gLQltbiA9IGk5MTVfbW11X25vdGlmaWVyX2NyZWF0ZShtbS0+ bW0pOwo+ICsJbW4gPSBpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUobW0pOwo+ICAgCWlmIChJU19F UlIobW4pKQo+ICAgCQllcnIgPSBQVFJfRVJSKG1uKTsKPiAgIAo+IEBAIC0yNDAsMTAgKzI1Myw4 IEBAIGk5MTVfbW11X25vdGlmaWVyX2ZpbmQoc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSkKPiAg IAltdXRleF91bmxvY2soJm1tLT5pOTE1LT5tbV9sb2NrKTsKPiAgIAl1cF93cml0ZSgmbW0tPm1t LT5tbWFwX3NlbSk7Cj4gICAKPiAtCWlmIChtbiAmJiAhSVNfRVJSKG1uKSkgewo+IC0JCWRlc3Ry b3lfd29ya3F1ZXVlKG1uLT53cSk7Cj4gKwlpZiAobW4gJiYgIUlTX0VSUihtbikpCj4gICAJCWtm cmVlKG1uKTsKPiAtCX0KPiAgIAo+ICAgCXJldHVybiBlcnIgPyBFUlJfUFRSKGVycikgOiBtbS0+ bW47Cj4gICB9Cj4gQEAgLTI2NiwxNCArMjc3LDE0IEBAIGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9f bW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCXJldHVy biBQVFJfRVJSKG1uKTsKPiAgIAo+ICAgCW1vID0ga3phbGxvYyhzaXplb2YoKm1vKSwgR0ZQX0tF Uk5FTCk7Cj4gLQlpZiAobW8gPT0gTlVMTCkKPiArCWlmICghbW8pCj4gICAJCXJldHVybiAtRU5P TUVNOwo+ICAgCj4gICAJbW8tPm1uID0gbW47Cj4gICAJbW8tPm9iaiA9IG9iajsKPiAgIAltby0+ aXQuc3RhcnQgPSBvYmotPnVzZXJwdHIucHRyOwo+ICAgCW1vLT5pdC5sYXN0ID0gb2JqLT51c2Vy cHRyLnB0ciArIG9iai0+YmFzZS5zaXplIC0gMTsKPiAtCUlOSVRfV09SSygmbW8tPndvcmssIGNh bmNlbF91c2VycHRyKTsKPiArCVJCX0NMRUFSX05PREUoJm1vLT5pdC5yYik7Cj4gICAKPiAgIAlv YmotPnVzZXJwdHIubW11X29iamVjdCA9IG1vOwo+ICAgCXJldHVybiAwOwo+IEBAIC0yODcsMTIg KzI5OCwxNiBAQCBpOTE1X21tdV9ub3RpZmllcl9mcmVlKHN0cnVjdCBpOTE1X21tdV9ub3RpZmll ciAqbW4sCj4gICAJCXJldHVybjsKPiAgIAo+ICAgCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZt bi0+bW4sIG1tKTsKPiAtCWRlc3Ryb3lfd29ya3F1ZXVlKG1uLT53cSk7Cj4gICAJa2ZyZWUobW4p Owo+ICAgfQo+ICAgCj4gICAjZWxzZQo+ICAgCj4gK3N0YXRpYyB2b2lkCj4gK19faTkxNV9nZW1f dXNlcnB0cl9zZXRfYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wg dmFsdWUpCj4gK3sKPiArfQo+ICsKPiAgIHN0YXRpYyB2b2lkCj4gICBpOTE1X2dlbV91c2VycHRy X3JlbGVhc2VfX21tdV9ub3RpZmllcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ ICAgewo+IEBAIC00NjEsNDIgKzQ3Niw2IEBAIF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdl cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCXJldHVybiBzdDsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgaW50Cj4gLV9faTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0aXZlKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCSAgICAgIGJvb2wgdmFsdWUpCj4gLXsK PiAtCWludCByZXQgPSAwOwo+IC0KPiAtCS8qIER1cmluZyBtbV9pbnZhbGlkYXRlX3JhbmdlIHdl IG5lZWQgdG8gY2FuY2VsIGFueSB1c2VycHRyIHRoYXQKPiAtCSAqIG92ZXJsYXBzIHRoZSByYW5n ZSBiZWluZyBpbnZhbGlkYXRlZC4gRG9pbmcgc28gcmVxdWlyZXMgdGhlCj4gLQkgKiBzdHJ1Y3Rf bXV0ZXgsIGFuZCB0aGF0IHJpc2tzIHJlY3Vyc2lvbi4gSW4gb3JkZXIgdG8gY2F1c2UKPiAtCSAq IHJlY3Vyc2lvbiwgdGhlIHVzZXIgbXVzdCBhbGlhcyB0aGUgdXNlcnB0ciBhZGRyZXNzIHNwYWNl IHdpdGgKPiAtCSAqIGEgR1RUIG1tYXBwaW5nIChwb3NzaWJsZSB3aXRoIGEgTUFQX0ZJWEVEKSAt IHRoZW4gd2hlbiB3ZSBoYXZlCj4gLQkgKiB0byBpbnZhbGlkYXRlIHRoYXQgbW1hcGluZywgbW1f aW52YWxpZGF0ZV9yYW5nZSBpcyBjYWxsZWQgd2l0aAo+IC0JICogdGhlIHVzZXJwdHIgYWRkcmVz cyAqYW5kKiB0aGUgc3RydWN0X211dGV4IGhlbGQuICBUbyBwcmV2ZW50IHRoYXQKPiAtCSAqIHdl IHNldCBhIGZsYWcgdW5kZXIgdGhlIGk5MTVfbW11X25vdGlmaWVyIHNwaW5sb2NrIHRvIGluZGlj YXRlCj4gLQkgKiB3aGV0aGVyIHRoaXMgb2JqZWN0IGlzIHZhbGlkLgo+IC0JICovCj4gLSNpZiBk ZWZpbmVkKENPTkZJR19NTVVfTk9USUZJRVIpCj4gLQlpZiAob2JqLT51c2VycHRyLm1tdV9vYmpl Y3QgPT0gTlVMTCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlzcGluX2xvY2soJm9iai0+dXNlcnB0 ci5tbXVfb2JqZWN0LT5tbi0+bG9jayk7Cj4gLQkvKiBJbiBvcmRlciB0byBzZXJpYWxpc2UgZ2V0 X3BhZ2VzIHdpdGggYW4gb3V0c3RhbmRpbmcKPiAtCSAqIGNhbmNlbF91c2VycHRyLCB3ZSBtdXN0 IGRyb3AgdGhlIHN0cnVjdF9tdXRleCBhbmQgdHJ5IGFnYWluLgo+IC0JICovCj4gLQlpZiAoIXZh bHVlKQo+IC0JCWRlbF9vYmplY3Qob2JqLT51c2VycHRyLm1tdV9vYmplY3QpOwo+IC0JZWxzZSBp ZiAoIXdvcmtfcGVuZGluZygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QtPndvcmspKQo+IC0JCWFk ZF9vYmplY3Qob2JqLT51c2VycHRyLm1tdV9vYmplY3QpOwo+IC0JZWxzZQo+IC0JCXJldCA9IC1F QUdBSU47Cj4gLQlzcGluX3VubG9jaygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QtPm1uLT5sb2Nr KTsKPiAtI2VuZGlmCj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lk Cj4gICBfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKl93b3JrKQo+ICAgewo+IEBAIC02ODIsOCArNjYxLDExIEBAIGk5MTVfZ2VtX3VzZXJwdHJf cHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJc3RydWN0IHNn dF9pdGVyIHNndF9pdGVyOwo+ICAgCXN0cnVjdCBwYWdlICpwYWdlOwo+ICAgCj4gLQlCVUdfT04o b2JqLT51c2VycHRyLndvcmsgIT0gTlVMTCk7Cj4gKwkvKiBDYW5jZWwgYW55IGluZmxpZ2h0IHdv cmsgYW5kIGZvcmNlIHRoZW0gdG8gcmVzdGFydCB0aGVpciBndXAgKi8KPiArCW9iai0+dXNlcnB0 ci53b3JrID0gTlVMTDsKPiAgIAlfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIGZh bHNlKTsKPiArCWlmICghcGFnZXMpCj4gKwkJcmV0dXJuOwo+ICAgCj4gICAJaWYgKG9iai0+bW0u bWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQpCj4gICAJCW9iai0+bW0uZGlydHkgPSBmYWxzZTsK PiBAQCAtNzIxLDcgKzcwMyw4IEBAIGk5MTVfZ2VtX3VzZXJwdHJfZG1hYnVmX2V4cG9ydChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCj4gICBzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX3VzZXJwdHJfb3BzID0gewo+ICAgCS5m bGFncyA9IEk5MTVfR0VNX09CSkVDVF9IQVNfU1RSVUNUX1BBR0UgfAo+IC0JCSBJOTE1X0dFTV9P QkpFQ1RfSVNfU0hSSU5LQUJMRSwKPiArCQkgSTkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUg fAo+ICsJCSBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMLAo+ICAgCS5nZXRfcGFnZXMgPSBp OTE1X2dlbV91c2VycHRyX2dldF9wYWdlcywKPiAgIAkucHV0X3BhZ2VzID0gaTkxNV9nZW1fdXNl cnB0cl9wdXRfcGFnZXMsCj4gICAJLmRtYWJ1Zl9leHBvcnQgPSBpOTE1X2dlbV91c2VycHRyX2Rt YWJ1Zl9leHBvcnQsCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=