From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Tue, 6 Nov 2018 11:48:06 +0100 Message-ID: <20181106104806.GN21967@phenom.ffwll.local> References: <20181025124542.21830-1-chris@chris-wilson.co.uk> <20181025191650.GF21967@phenom.ffwll.local> <154049637049.5942.12617641226168472462@skylake-alporthouse-com> <154081060710.14741.13970763487646500708@skylake-alporthouse-com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id F3F206E2AC for ; Tue, 6 Nov 2018 10:48:10 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id y10-v6so3582615edr.4 for ; Tue, 06 Nov 2018 02:48:10 -0800 (PST) Content-Disposition: inline In-Reply-To: <154081060710.14741.13970763487646500708@skylake-alporthouse-com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBPY3QgMjksIDIwMTggYXQgMTA6NTY6NDdBTSArMDAwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFF1b3RpbmcgRGFuaWVsIFZldHRlciAoMjAxOC0xMC0yNiAxNDo0ODowNykKPiA+IE9u IEZyaSwgT2N0IDI2LCAyMDE4IGF0IDExOjAyIEFNIERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZnds bC5jaD4gd3JvdGU6Cj4gPiA+Cj4gPiA+IE9uIFRodSwgT2N0IDI1LCAyMDE4IGF0IDk6MzkgUE0g Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyb3RlOgo+ID4gPiA+Cj4g PiA+ID4gUXVvdGluZyBEYW5pZWwgVmV0dGVyICgyMDE4LTEwLTI1IDIwOjE2OjUwKQo+ID4gPiA+ ID4gT24gVGh1LCBPY3QgMjUsIDIwMTggYXQgMDE6NDU6NDJQTSArMDEwMCwgQ2hyaXMgV2lsc29u IHdyb3RlOgo+ID4gPiA+ID4gPiBTaW5jZSBjb21taXQgOTMwNjVhYzc1M2U0ICgibW0sIG9vbTog ZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZGUgZm9yIG1tdQo+ID4gPiA+ID4gPiBub3RpZmllcnMi KSB3ZSBoYXZlIGJlZW4gYWJsZSB0byByZXBvcnQgZmFpbHVyZSBmcm9tCj4gPiA+ID4gPiA+IG1t dV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0IHdoaWNoIGFsbG93cyB1cyB0byB1c2UgYSB0cnlsb2Nr IG9uIHRoZQo+ID4gPiA+ID4gPiBzdHJ1Y3RfbXV0ZXggdG8gYXZvaWQgcG90ZW50aWFsIHJlY3Vy c2lvbiBhbmQgcmVwb3J0IC1FQlVTWSBpbnN0ZWFkLgo+ID4gPiA+ID4gPiBGdXJ0aGVybW9yZSwg dGhpcyBhbGxvd3MgdXMgdG8gcHVsbCB0aGUgd29yayBpbnRvIHRoZSBtYWluIGNhbGxiYWNrIGFu ZAo+ID4gPiA+ID4gPiBhdm9pZCB0aGUgc2xlaWdodC1vZi1oYW5kIGluIHVzaW5nIGEgd29ya3F1 ZXVlIHRvIGF2b2lkIGxvY2tkZXAuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEhvd2V2ZXIsIG5v dCBhbGwgcGF0aHMgdG8gbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgYXJlIHByZXBhcmVkIHRv Cj4gPiA+ID4gPiA+IGhhbmRsZSBmYWlsdXJlLCBzbyBpbnN0ZWFkIG9mIHJlcG9ydGluZyB0aGUg cmVjdXJzaW9uLCBkZWFsIHdpdGggaXQuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEJ1Z3ppbGxh OiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgzNzUKPiA+ ID4gPiA+ID4gUmVmZXJlbmNlczogOTMwNjVhYzc1M2U0ICgibW0sIG9vbTogZGlzdGluZ3Vpc2gg YmxvY2thYmxlIG1vZGUgZm9yIG1tdSBub3RpZmllcnMiKQo+ID4gPiA+ID4gPiBTaWduZWQtb2Zm LWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiA+ID4gPiA+ID4g LS0tCj4gPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAg fCAgIDQgKy0KPiA+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAg ICAgICB8ICAxMiArLQo+ID4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f dXNlcnB0ci5jIHwgMjE5ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+ID4gPiA+ID4gPiAgMyBm aWxlcyBjaGFuZ2VkLCAxMTUgaW5zZXJ0aW9ucygrKSwgMTIwIGRlbGV0aW9ucygtKQo+ID4gPiA+ ID4gPgo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+ID4gPiA+ID4gaW5kZXgg MmQ3NzYxYjhhYzA3Li5jM2I5NGMzZjkzMGYgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gPiA+ID4gPiBAQCAtMzA3Niw4ICszMDc2LDggQEAgZW51 bSBpOTE1X21tX3N1YmNsYXNzIHsgLyogbG9ja2RlcCBzdWJjbGFzcyBmb3Igb2JqLT5tbS5sb2Nr ICovCj4gPiA+ID4gPiA+ICAgICAgIEk5MTVfTU1fU0hSSU5LRVIKPiA+ID4gPiA+ID4gIH07Cj4g PiA+ID4gPiA+Cj4gPiA+ID4gPiA+IC12b2lkIF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ID4gPiA+ID4gPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKTsKPiA+ID4g PiA+ID4gK2ludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKTsKPiA+ID4gPiA+ID4gIHZvaWQgX19pOTE1 X2dlbV9vYmplY3RfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsK PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gIGVudW0gaTkxNV9tYXBfdHlwZSB7Cj4gPiA+ID4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ID4gPiA+ID4gPiBpbmRleCA5M2QwOTI4MjcxMGQuLmRl N2NjYjNlYjdiOCAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwo+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jCj4gPiA+ID4gPiA+IEBAIC0yNDU0LDE3ICsyNDU0LDE4IEBAIF9faTkxNV9nZW1fb2JqZWN0 X3Vuc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gPiA+ID4gPiA+ ICAgICAgIHJldHVybiBwYWdlczsKPiA+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gLXZvaWQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bnVtIGk5MTVfbW1fc3ViY2xhc3Mgc3ViY2xhc3MpCj4gPiA+ID4gPiA+ICtpbnQgX19pOTE1X2dl bV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gPiA+ ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gaTkxNV9tbV9zdWJjbGFz cyBzdWJjbGFzcykKPiA+ID4gPiA+ID4gIHsKPiA+ID4gPiA+ID4gICAgICAgc3RydWN0IHNnX3Rh YmxlICpwYWdlczsKPiA+ID4gPiA+ID4gKyAgICAgaW50IHJldCA9IC1FQlVTWTsKPiA+ID4gPiA+ ID4KPiA+ID4gPiA+ID4gICAgICAgaWYgKGk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVkX3BhZ2Vz KG9iaikpCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgcmV0dXJuOwo+ID4gPiA+ID4gPiArICAg ICAgICAgICAgIHJldHVybiAtRUJVU1k7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAgICAgIEdF TV9CVUdfT04ob2JqLT5iaW5kX2NvdW50KTsKPiA+ID4gPiA+ID4gICAgICAgaWYgKCFpOTE1X2dl bV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgcmV0dXJu Owo+ID4gPiA+ID4gPiArICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gPiA+ID4gPgo+ID4gPiA+ ID4gPiAgICAgICAvKiBNYXkgYmUgY2FsbGVkIGJ5IHNocmlua2VyIGZyb20gd2l0aGluIGdldF9w YWdlcygpIChvbiBhbm90aGVyIGJvKSAqLwo+ID4gPiA+ID4gPiAgICAgICBtdXRleF9sb2NrX25l c3RlZCgmb2JqLT5tbS5sb2NrLCBzdWJjbGFzcyk7Cj4gPiA+ID4gPiA+IEBAIC0yNDgwLDggKzI0 ODEsMTEgQEAgdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiA+ID4gPiA+ID4gICAgICAgaWYgKCFJU19FUlIocGFnZXMpKQo+ ID4gPiA+ID4gPiAgICAgICAgICAgICAgIG9iai0+b3BzLT5wdXRfcGFnZXMob2JqLCBwYWdlcyk7 Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICsgICAgIHJldCA9IDA7Cj4gPiA+ID4gPiA+ICB1bmxv Y2s6Cj4gPiA+ID4gPiA+ICAgICAgIG11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICByZXR1cm4gcmV0Owo+ID4gPiA+ID4gPiAgfQo+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiAgYm9vbCBpOTE1X3NnX3RyaW0oc3RydWN0IHNnX3RhYmxlICpv cmlnX3N0KQo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fdXNlcnB0ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5j Cj4gPiA+ID4gPiA+IGluZGV4IDJjOWIyODQwMzZkMS4uYThmM2MzMDRkYjU1IDEwMDY0NAo+ID4g PiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKPiA+ ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4g PiA+ID4gPiA+IEBAIC01MCw3OSArNTAsODQgQEAgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyIHsK PiA+ID4gPiA+ID4gICAgICAgc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKPiA+ID4gPiA+ID4gICAg ICAgc3RydWN0IG1tdV9ub3RpZmllciBtbjsKPiA+ID4gPiA+ID4gICAgICAgc3RydWN0IHJiX3Jv b3RfY2FjaGVkIG9iamVjdHM7Cj4gPiA+ID4gPiA+IC0gICAgIHN0cnVjdCB3b3JrcXVldWVfc3Ry dWN0ICp3cTsKPiA+ID4gPiA+ID4gKyAgICAgc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbTsKPiA+ ID4gPiA+ID4gIH07Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICBzdHJ1Y3QgaTkxNV9tbXVfb2Jq ZWN0IHsKPiA+ID4gPiA+ID4gICAgICAgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsKPiA+ ID4gPiA+ID4gICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiA+ID4gPiA+ ID4gICAgICAgc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsKPiA+ID4gPiA+ID4gLSAgICAg c3RydWN0IGxpc3RfaGVhZCBsaW5rOwo+ID4gPiA+ID4gPiAtICAgICBzdHJ1Y3Qgd29ya19zdHJ1 Y3Qgd29yazsKPiA+ID4gPiA+ID4gLSAgICAgYm9vbCBhdHRhY2hlZDsKPiA+ID4gPiA+ID4gIH07 Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IC1zdGF0aWMgdm9pZCBjYW5jZWxfdXNlcnB0cihzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gPiA+ID4gPiA+IC17Cj4gPiA+ID4gPiA+IC0gICAgIHN0 cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqbW8p LCB3b3JrKTsKPiA+ID4gPiA+ID4gLSAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiA9IG1vLT5vYmo7Cj4gPiA+ID4gPiA+IC0gICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAqYWN0aXZl Owo+ID4gPiA+ID4gPiAtCj4gPiA+ID4gPiA+IC0gICAgIC8qIENhbmNlbCBhbnkgYWN0aXZlIHdv cmtlciBhbmQgZm9yY2UgdXMgdG8gcmUtZXZhbHVhdGUgZ3VwICovCj4gPiA+ID4gPiA+IC0gICAg IG11dGV4X2xvY2soJm9iai0+bW0ubG9jayk7Cj4gPiA+ID4gPiA+IC0gICAgIGFjdGl2ZSA9IGZl dGNoX2FuZF96ZXJvKCZvYmotPnVzZXJwdHIud29yayk7Cj4gPiA+ID4gPiA+IC0gICAgIG11dGV4 X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKPiA+ID4gPiA+ID4gLSAgICAgaWYgKGFjdGl2ZSkKPiA+ ID4gPiA+ID4gLSAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ID4gPiA+ID4gLQo+ID4gPiA+ID4g PiAtICAgICBpOTE1X2dlbV9vYmplY3Rfd2FpdChvYmosIEk5MTVfV0FJVF9BTEwsIE1BWF9TQ0hF RFVMRV9USU1FT1VULCBOVUxMKTsKPiA+ID4gPiA+ID4gLQo+ID4gPiA+ID4gPiAtICAgICBtdXRl eF9sb2NrKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4gPiA+ID4gPiAtCj4gPiA+ ID4gPiA+IC0gICAgIC8qIFdlIGFyZSBpbnNpZGUgYSBrdGhyZWFkIGNvbnRleHQgYW5kIGNhbid0 IGJlIGludGVycnVwdGVkICovCj4gPiA+ID4gPiA+IC0gICAgIGlmIChpOTE1X2dlbV9vYmplY3Rf dW5iaW5kKG9iaikgPT0gMCkKPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICBfX2k5MTVfZ2VtX29i amVjdF9wdXRfcGFnZXMob2JqLCBJOTE1X01NX05PUk1BTCk7Cj4gPiA+ID4gPiA+IC0gICAgIFdB Uk5fT05DRShpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaiksCj4gPiA+ID4gPiA+IC0gICAg ICAgICAgICAgICAiRmFpbGVkIHRvIHJlbGVhc2UgcGFnZXM6IGJpbmRfY291bnQ9JWQsIHBhZ2Vz X3Bpbl9jb3VudD0lZCwgcGluX2dsb2JhbD0lZFxuIiwKPiA+ID4gPiA+ID4gLSAgICAgICAgICAg ICAgIG9iai0+YmluZF9jb3VudCwKPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgIGF0b21pY19y ZWFkKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCksCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAg ICBvYmotPnBpbl9nbG9iYWwpOwo+ID4gPiA+ID4gPiAtCj4gPiA+ID4gPiA+IC0gICAgIG11dGV4 X3VubG9jaygmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKPiA+ID4gPiA+ID4gLQo+ID4g PiA+ID4gPiAtb3V0Ogo+ID4gPiA+ID4gPiAtICAgICBpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7 Cj4gPiA+ID4gPiA+IC19Cj4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gIHN0YXRpYyB2b2lkIGFk ZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8pCj4gPiA+ID4gPiA+ICB7Cj4gPiA+ ID4gPiA+IC0gICAgIGlmIChtby0+YXR0YWNoZWQpCj4gPiA+ID4gPiA+ICsgICAgIGlmICghUkJf RU1QVFlfTk9ERSgmbW8tPml0LnJiKSkKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICByZXR1cm47 Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAgICAgIGludGVydmFsX3RyZWVfaW5zZXJ0KCZtby0+ aXQsICZtby0+bW4tPm9iamVjdHMpOwo+ID4gPiA+ID4gPiAtICAgICBtby0+YXR0YWNoZWQgPSB0 cnVlOwo+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgc3RhdGljIHZvaWQg ZGVsX29iamVjdChzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbykKPiA+ID4gPiA+ID4gIHsKPiA+ ID4gPiA+ID4gLSAgICAgaWYgKCFtby0+YXR0YWNoZWQpCj4gPiA+ID4gPiA+ICsgICAgIGlmIChS Ql9FTVBUWV9OT0RFKCZtby0+aXQucmIpKQo+ID4gPiA+ID4gPiAgICAgICAgICAgICAgIHJldHVy bjsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gICAgICAgaW50ZXJ2YWxfdHJlZV9yZW1vdmUoJm1v LT5pdCwgJm1vLT5tbi0+b2JqZWN0cyk7Cj4gPiA+ID4gPiA+IC0gICAgIG1vLT5hdHRhY2hlZCA9 IGZhbHNlOwo+ID4gPiA+ID4gPiArICAgICBSQl9DTEVBUl9OT0RFKCZtby0+aXQucmIpOwo+ID4g PiA+ID4gPiArfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtzdGF0aWMgdm9pZAo+ID4gPiA+ ID4gPiArX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwgYm9vbCB2YWx1ZSkKPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ID4gKyAgICAg c3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8gPSBvYmotPnVzZXJwdHIubW11X29iamVjdDsKPiA+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICAvKgo+ID4gPiA+ID4gPiArICAgICAgKiBEdXJp bmcgbW1faW52YWxpZGF0ZV9yYW5nZSB3ZSBuZWVkIHRvIGNhbmNlbCBhbnkgdXNlcnB0ciB0aGF0 Cj4gPiA+ID4gPiA+ICsgICAgICAqIG92ZXJsYXBzIHRoZSByYW5nZSBiZWluZyBpbnZhbGlkYXRl ZC4gRG9pbmcgc28gcmVxdWlyZXMgdGhlCj4gPiA+ID4gPiA+ICsgICAgICAqIHN0cnVjdF9tdXRl eCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQo+ID4gPiA+ID4g PiArICAgICAgKiByZWN1cnNpb24sIHRoZSB1c2VyIG11c3QgYWxpYXMgdGhlIHVzZXJwdHIgYWRk cmVzcyBzcGFjZSB3aXRoCj4gPiA+ID4gPiA+ICsgICAgICAqIGEgR1RUIG1tYXBwaW5nIChwb3Nz aWJsZSB3aXRoIGEgTUFQX0ZJWEVEKSAtIHRoZW4gd2hlbiB3ZSBoYXZlCj4gPiA+ID4gPiA+ICsg ICAgICAqIHRvIGludmFsaWRhdGUgdGhhdCBtbWFwaW5nLCBtbV9pbnZhbGlkYXRlX3JhbmdlIGlz IGNhbGxlZCB3aXRoCj4gPiA+ID4gPiA+ICsgICAgICAqIHRoZSB1c2VycHRyIGFkZHJlc3MgKmFu ZCogdGhlIHN0cnVjdF9tdXRleCBoZWxkLiAgVG8gcHJldmVudCB0aGF0Cj4gPiA+ID4gPiA+ICsg ICAgICAqIHdlIHNldCBhIGZsYWcgdW5kZXIgdGhlIGk5MTVfbW11X25vdGlmaWVyIHNwaW5sb2Nr IHRvIGluZGljYXRlCj4gPiA+ID4gPiA+ICsgICAgICAqIHdoZXRoZXIgdGhpcyBvYmplY3QgaXMg dmFsaWQuCj4gPiA+ID4gPiA+ICsgICAgICAqLwo+ID4gPiA+ID4gPiArICAgICBpZiAoIW1vKQo+ ID4gPiA+ID4gPiArICAgICAgICAgICAgIHJldHVybjsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiArICAgICBzcGluX2xvY2soJm1vLT5tbi0+bG9jayk7Cj4gPiA+ID4gPiA+ICsgICAgIGlmICh2 YWx1ZSkKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICBhZGRfb2JqZWN0KG1vKTsKPiA+ID4gPiA+ ID4gKyAgICAgZWxzZQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgIGRlbF9vYmplY3QobW8pOwo+ ID4gPiA+ID4gPiArICAgICBzcGluX3VubG9jaygmbW8tPm1uLT5sb2NrKTsKPiA+ID4gPiA+ID4g K30KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArc3RhdGljIHN0cnVjdCBtdXRleCAqX19pOTE1 X211dGV4X2xvY2tfcmVjdXJzaXZlKHN0cnVjdCBtdXRleCAqbSkKPiA+ID4gPiA+ID4gK3sKPiA+ ID4gPiA+ID4gKyAgICAgc3dpdGNoIChtdXRleF90cnlsb2NrX3JlY3Vyc2l2ZShtKSkgewo+ID4g PiA+ID4gPiArICAgICBkZWZhdWx0Ogo+ID4gPiA+ID4gPiArICAgICBjYXNlIE1VVEVYX1RSWUxP Q0tfRkFJTEVEOgo+ID4gPiA+ID4gPiArICAgICAgICAgICAgIG11dGV4X2xvY2sobSk7Cj4gPiA+ ID4gPiA+ICsgICAgIGNhc2UgTVVURVhfVFJZTE9DS19TVUNDRVNTOgo+ID4gPiA+ID4gPiArICAg ICAgICAgICAgIHJldHVybiBtOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICAgIGNhc2Ug TVVURVhfVFJZTE9DS19SRUNVUlNJVkU6Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgcmV0dXJu IEVSUl9QVFIoLUVFWElTVCk7Cj4gPiA+ID4gPiA+ICsgICAgIH0KPiA+ID4gPiA+ID4gIH0KPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gIHN0YXRpYyBpbnQgaTkxNV9nZW1fdXNlcnB0cl9tbl9pbnZh bGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKl9tbiwKPiA+ID4gPiA+ID4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgbW1fc3RydWN0ICptbSwKPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+ID4gPiA+ID4g PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgZW5kLAo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxvY2thYmxlKQo+ID4gPiA+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1t X3N0cnVjdCAqbW0sCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+ID4gPiA+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyBlbmQsCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sIGJsb2NrYWJsZSkKPiA+ID4gPiA+ID4gIHsKPiA+ID4gPiA+ ID4gICAgICAgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbiA9Cj4gPiA+ID4gPiA+ICAgICAg ICAgICAgICAgY29udGFpbmVyX29mKF9tbiwgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyLCBtbik7 Cj4gPiA+ID4gPiA+IC0gICAgIHN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vOwo+ID4gPiA+ID4g PiAgICAgICBzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICppdDsKPiA+ID4gPiA+ID4gLSAgICAg TElTVF9IRUFEKGNhbmNlbGxlZCk7Cj4gPiA+ID4gPiA+ICsgICAgIHN0cnVjdCBtdXRleCAqdW5s b2NrID0gTlVMTDsKPiA+ID4gPiA+ID4gKyAgICAgaW50IHJldCA9IDA7Cj4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ICAgICAgIGlmIChSQl9FTVBUWV9ST09UKCZtbi0+b2JqZWN0cy5yYl9yb290KSkK PiA+ID4gPiA+ID4gICAgICAgICAgICAgICByZXR1cm4gMDsKPiA+ID4gPiA+ID4gQEAgLTEzMywx MSArMTM4LDE2IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fdXNlcnB0cl9tbl9pbnZhbGlkYXRlX3Jh bmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKl9tbiwKPiA+ID4gPiA+ID4gICAgICAgc3Bp bl9sb2NrKCZtbi0+bG9jayk7Cj4gPiA+ID4gPiA+ICAgICAgIGl0ID0gaW50ZXJ2YWxfdHJlZV9p dGVyX2ZpcnN0KCZtbi0+b2JqZWN0cywgc3RhcnQsIGVuZCk7Cj4gPiA+ID4gPiA+ICAgICAgIHdo aWxlIChpdCkgewo+ID4gPiA+ID4gPiArICAgICAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmo7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgYm9vbCBoYXNfcGFnZXMgPSBm YWxzZTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAgICAgICAgICAgICAgIGlmICghYmxvY2th YmxlKSB7Cj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmbW4t PmxvY2spOwo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQUdBSU47 Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUFHQUlOOwo+ID4gPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiA+ID4gPiA+ICAgICAgICAgICAg ICAgfQo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgIC8qIFRoZSBtbXVfb2JqZWN0IGlzIHJlbGVh c2VkIGxhdGUgd2hlbiBkZXN0cm95aW5nIHRoZQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsg ICAgICAgICAgICAgLyoKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgKiBUaGUgbW11X29iamVj dCBpcyByZWxlYXNlZCBsYXRlIHdoZW4gZGVzdHJveWluZyB0aGUKPiA+ID4gPiA+ID4gICAgICAg ICAgICAgICAgKiBHRU0gb2JqZWN0IHNvIGl0IGlzIGVudGlyZWx5IHBvc3NpYmxlIHRvIGdhaW4g YQo+ID4gPiA+ID4gPiAgICAgICAgICAgICAgICAqIHJlZmVyZW5jZSBvbiBhbiBvYmplY3QgaW4g dGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgKiBz aW5jZSBvdXIgc2VyaWFsaXNhdGlvbiBpcyB2aWEgdGhlIHNwaW5sb2NrIGFuZCBub3QKPiA+ID4g PiA+ID4gQEAgLTE0NiwyMSArMTU2LDQ0IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fdXNlcnB0cl9t bl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKl9tbiwKPiA+ID4g PiA+ID4gICAgICAgICAgICAgICAgKiB1c2UtYWZ0ZXItZnJlZSB3ZSBvbmx5IGFjcXVpcmUgYSBy ZWZlcmVuY2Ugb24gdGhlCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICogb2JqZWN0IGlmIGl0 IGlzIG5vdCBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQuCj4gPiA+ID4gPiA+ICAg ICAgICAgICAgICAgICovCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgbW8gPSBjb250YWluZXJf b2YoaXQsIHN0cnVjdCBpOTE1X21tdV9vYmplY3QsIGl0KTsKPiA+ID4gPiA+ID4gLSAgICAgICAg ICAgICBpZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oJm1vLT5vYmotPmJhc2UucmVmY291bnQpKQo+ ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgcXVldWVfd29yayhtbi0+d3EsICZtby0+ d29yayk7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgb2JqID0gY29udGFpbmVyX29mKGl0LCBz dHJ1Y3QgaTkxNV9tbXVfb2JqZWN0LCBpdCktPm9iajsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAg ICBpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZvYmotPmJhc2UucmVmY291bnQpKSB7Cj4gPiA+ ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBpdCA9IGludGVydmFsX3RyZWVfaXRlcl9uZXh0 KGl0LCBzdGFydCwgZW5kKTsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOwo+ID4gPiA+ID4gPiArICAgICAgICAgICAgIH0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAg ICBzcGluX3VubG9jaygmbW4tPmxvY2spOwo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAtICAgICAg ICAgICAgIGxpc3RfYWRkKCZtby0+bGluaywgJmNhbmNlbGxlZCk7Cj4gPiA+ID4gPiA+IC0gICAg ICAgICAgICAgaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfbmV4dChpdCwgc3RhcnQsIGVuZCk7Cj4g PiA+ID4gPiA+ICsgICAgICAgICAgICAgLyogQ2FuY2VsIGFueSBwZW5kaW5nIHdvcmtlciBhbmQg Zm9yY2UgdXMgdG8gcmUtZXZhbHVhdGUgZ3VwICovCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAg bXV0ZXhfbG9ja19uZXN0ZWQoJm9iai0+bW0ubG9jaywgSTkxNV9NTV9TSFJJTktFUik7Cj4gPiA+ ID4gPgo+ID4gPiA+ID4gbXV0ZXhfbG9ja19uZXN0ZWQgaXMgbWVhbnQgZm9yIHN0YXRpYyBuZXN0 aW5nLiBUaGlzIGhlcmUgaXMgcmF0aGVyCj4gPiA+ID4gPiBkeW5hbWljLCBhbmQgSSBkb24ndCBy ZWFsbHkgc2VlIHdoZXJlIHRoZSBndWFyYW50ZWUgaXMgdGhhdCB0aGUgY2xhc3NpYwo+ID4gPiA+ ID4gZGVhZGxvY2sgaXNuJ3QgcG9zc2libGU6Cj4gPiA+ID4KPiA+ID4gPiBJdCdzIG1lYW50IHRv IGJlIGFmdGVyIHB1dF9wYWdlcyA9PSAwIHRvIGVuc3VyZSBpdCBvbmx5IGFwcGxpZWQgdG8gYQo+ ID4gPiA+IGRpZmZlcmVudCBvYmplY3QuIEEgYml0IG1vcmUgaW52b2x2ZWQgdG8gZG8gaXQgZXhh Y3RseSBob3cgSSB3YW50LCB0aGF0Cj4gPiA+ID4gaXMgdG8gYmFzaWNhbGx5IGluY29ycG9yYXRl IGl0IGludG8gcHV0X3BhZ2VzIGl0c2VsZi4gQWN0dWFsbHksIGlmIGl0IGlzCj4gPiA+ID4gaW4g dGhlIHB1dF9wYWdlcyBpdCBzaG91bGQganVzdCB3b3JrLi4uCj4gPiA+Cj4gPiA+IFNvIGZvciB0 aGUgc2hyaW5rZXIgSSBndWVzcyB5b3UgY2FuIG1ha2UgdGhpcyB3b3JrLiBGb3IgbXkgdGFzdGUK PiA+ID4gdGhlcmUncyBub3QgZW5vdWdoIEdFTV9XQVJOX09OIHRvIGNoZWNrIHRoZSBpbnZhcmlh bnRzIG9mIHRoZSBuZXN0aW5nCj4gPiA+IHNjaGVtZSAoSSBhc3N1bWUgaXQgaXMgbGlzdF9lbXB0 eShvYmotPm1tLmxpbmspIC0+IHVzZSBJOTE1X01NX05PUk1BTCwKPiA+ID4gYW5kIEk5MTVfTU1f U0hSSU5LRVIgZm9yIGFueW9uZSB3aG8gZGlzY292ZXJzIGFuIG9iamVjdCB0aHJvdWdoIHRoZQo+ ID4gPiBvYmotPm1tLmxpbmsgbGlzdHMsIGJ1dCB3b3VsZCBiZSBuaWNlIHRvIGRvdWJsZS1jaGVj ayB0aGF0IGV2ZXJ5IHRpbWUKPiA+ID4gd2UgdGFrZSB0aGUgb2JqLT5tbS5sb2NrIHdpdGggYSBH RU1fV0FSTl9PTikuCj4gPiAKPiA+IEFmdGVyIGEgYml0IG1vcmUgcmVhZGluZyBhcm91bmQgSSB0 aGluayB0aGlzIGlzbid0IGVub3VnaCwgYW5kIHdlIGFsc28KPiA+IHJlbHkgb24gbGlzdF9kZWwo b2JqLT5tbS5saW5rKSBiZWluZyBzZXJpYWxpemVkIGJ5IGRldi0+c3RydWN0X211dGV4Lgo+ID4g QnV0IEknbSBub3QgZW50aXJlbHkgc3VyZS4gV2UgZGVmaW5pdGVseSBzZWVtIHRvIHJlbHkgb24g dGhlIG1hZ2ljCj4gPiAiaG9sZGluZyBkZXYtPnN0cnVjdF9tdXRleCBleHRlbmRzIHRoZSBsaWZl dGltZSBvZiBhbnl0aGluZyB3aXRoIGEKPiA+IG5vbi1lbXB0eSBvYmotPm1tLmxpbmsiIG9uIHRo ZSBzaHJpbmtlciBzaWRlIHN0aWxsLgo+IAo+IEZvcnR1bmF0ZWx5IG5vdCwgbW0ubGluayBpcyBz cGlubG9jaywgaXQncyB0aGUgYWN0aXZlIHJlZiB3aGVyZSB0aGUKPiBzdHJ1Y3RfbXV0ZXggZGFu Y2UgaXMgc3RpbGwgcmVxdWlyZWQuCgpZdXAsIHRoYXQncyBvbmUgc2lkZSBvZiB0aGUgY29pbjog c3RydWN0X211dGV4IGd1YXJhbnRlZXMgdGhhdCB0aGUgd2VhawpyZWZlcmVuY2Ugd2UgaGF2ZSB0 aHJvdWdoIG1tLmxpbmsgZG9lc24ndCByZXN1bHQgaW4gYW4gdW50aW1lbHkgZGVtaXNlIG9mCnRo ZSB1bmRlcmx5aW5nIG9iamVjdC4gVGhpcyBpcyBlYXN5IHRvIGZpeCB3aXRoIGEga3JlZl9nZXRf dW5sZXNzX3plcm8Kd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgc3BpbmxvY2sgKGFuZCBwcm9jZWVk aW5nIHRvIHRoZSBuZXh0IG9iaiBpZiB3ZQpjYW5ub3QgZ2V0IGEgZnVsbCByZWZlcmVuY2UpIGlu IHRoZSBzaHJpbmtlci4KCkJ1dCBJIHRoaW5rIHdlIGFsc28gcmVseSBvbiBzdHJ1Y3RfbXV0ZXgg bWFraW5nIHN1cmUgdGhhdCBubyBvbmUgZWxzZSBjYW4KbW92ZSB0aGUgb2JqZWN0IG9mZiB0aGUg bW0ubGluayBsaXN0LCBzbyB0aGF0IGxpc3RfZGVsIGlzIGFsd2F5cwptZWFuaW5nZnVsLiBPdGhl cndpc2Ugc29tZW9uZSBtaWdodCBzbmVhayBpbiBiZXR3ZWVuIHRoZSBwb2ludCB3aGVyZSB3ZQpk cm9wIHRoZSBzcGlubG9jayBhbmQgZ3JhYiB0aGUgYmFja2luZyBzdG9yYWdlIGxvY2sgYW5kIHdy ZWFrIHNvbWUgZ29vZApoYXZvYy4gVGhhdCdzIHRoZSBwYXJ0IEknbSBub3Qgc3VyZSBhYm91dCB0 aG91Z2ggLi4uIAotRGFuZWlsCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJ bnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK