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: Thu, 25 Oct 2018 21:16:50 +0200 Message-ID: <20181025191650.GF21967@phenom.ffwll.local> References: <20181025124542.21830-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id A1E8F6E014 for ; Thu, 25 Oct 2018 19:16:54 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id f1-v6so2089664edi.0 for ; Thu, 25 Oct 2018 12:16:54 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20181025124542.21830-1-chris@chris-wilson.co.uk> 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@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBPY3QgMjUsIDIwMTggYXQgMDE6NDU6NDJQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFNpbmNlIGNvbW1pdCA5MzA2NWFjNzUzZTQgKCJtbSwgb29tOiBkaXN0aW5ndWlzaCBi bG9ja2FibGUgbW9kZSBmb3IgbW11Cj4gbm90aWZpZXJzIikgd2UgaGF2ZSBiZWVuIGFibGUgdG8g cmVwb3J0IGZhaWx1cmUgZnJvbQo+IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0IHdoaWNoIGFs bG93cyB1cyB0byB1c2UgYSB0cnlsb2NrIG9uIHRoZQo+IHN0cnVjdF9tdXRleCB0byBhdm9pZCBw b3RlbnRpYWwgcmVjdXJzaW9uIGFuZCByZXBvcnQgLUVCVVNZIGluc3RlYWQuCj4gRnVydGhlcm1v cmUsIHRoaXMgYWxsb3dzIHVzIHRvIHB1bGwgdGhlIHdvcmsgaW50byB0aGUgbWFpbiBjYWxsYmFj ayBhbmQKPiBhdm9pZCB0aGUgc2xlaWdodC1vZi1oYW5kIGluIHVzaW5nIGEgd29ya3F1ZXVlIHRv IGF2b2lkIGxvY2tkZXAuCj4gCj4gSG93ZXZlciwgbm90IGFsbCBwYXRocyB0byBtbXVfaW52YWxp ZGF0ZV9yYW5nZV9zdGFydCBhcmUgcHJlcGFyZWQgdG8KPiBoYW5kbGUgZmFpbHVyZSwgc28gaW5z dGVhZCBvZiByZXBvcnRpbmcgdGhlIHJlY3Vyc2lvbiwgZGVhbCB3aXRoIGl0Lgo+IAo+IEJ1Z3pp bGxhOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgzNzUK PiBSZWZlcmVuY2VzOiA5MzA2NWFjNzUzZTQgKCJtbSwgb29tOiBkaXN0aW5ndWlzaCBibG9ja2Fi bGUgbW9kZSBmb3IgbW11IG5vdGlmaWVycyIpCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29u IDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggICAgICAgICB8ICAgNCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jICAgICAgICAgfCAgMTIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f dXNlcnB0ci5jIHwgMjE5ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+ICAzIGZpbGVzIGNoYW5n ZWQsIDExNSBpbnNlcnRpb25zKCspLCAxMjAgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCj4gaW5kZXggMmQ3NzYxYjhhYzA3Li5jM2I5NGMzZjkzMGYgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMzA3Niw4ICszMDc2LDggQEAgZW51bSBpOTE1X21tX3N1 YmNsYXNzIHsgLyogbG9ja2RlcCBzdWJjbGFzcyBmb3Igb2JqLT5tbS5sb2NrICovCj4gIAlJOTE1 X01NX1NIUklOS0VSCj4gIH07Cj4gIAo+IC12b2lkIF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdl cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkJIGVudW0gaTkxNV9tbV9z dWJjbGFzcyBzdWJjbGFzcyk7Cj4gK2ludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJCWVudW0gaTkxNV9tbV9zdWJjbGFz cyBzdWJjbGFzcyk7Cj4gIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPiAgCj4gIGVudW0gaTkxNV9tYXBfdHlwZSB7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXggOTNkMDkyODI3MTBkLi5kZTdjY2IzZWI3Yjgg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAtMjQ1NCwxNyArMjQ1NCwxOCBAQCBf X2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQo+ICAJcmV0dXJuIHBhZ2VzOwo+ICB9Cj4gIAo+IC12b2lkIF9faTkxNV9nZW1fb2JqZWN0 X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkJIGVudW0g aTkxNV9tbV9zdWJjbGFzcyBzdWJjbGFzcykKPiAraW50IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9w YWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJZW51bSBpOTE1X21t X3N1YmNsYXNzIHN1YmNsYXNzKQo+ICB7Cj4gIAlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOwo+ICsJ aW50IHJldCA9IC1FQlVTWTsKPiAgCj4gIAlpZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRf cGFnZXMob2JqKSkKPiAtCQlyZXR1cm47Cj4gKwkJcmV0dXJuIC1FQlVTWTsKPiAgCj4gIAlHRU1f QlVHX09OKG9iai0+YmluZF9jb3VudCk7Cj4gIAlpZiAoIWk5MTVfZ2VtX29iamVjdF9oYXNfcGFn ZXMob2JqKSkKPiAtCQlyZXR1cm47Cj4gKwkJcmV0dXJuIDA7Cj4gIAo+ICAJLyogTWF5IGJlIGNh bGxlZCBieSBzaHJpbmtlciBmcm9tIHdpdGhpbiBnZXRfcGFnZXMoKSAob24gYW5vdGhlciBibykg Ki8KPiAgCW11dGV4X2xvY2tfbmVzdGVkKCZvYmotPm1tLmxvY2ssIHN1YmNsYXNzKTsKPiBAQCAt MjQ4MCw4ICsyNDgxLDExIEBAIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gIAlpZiAoIUlTX0VSUihwYWdlcykpCj4gIAkJ b2JqLT5vcHMtPnB1dF9wYWdlcyhvYmosIHBhZ2VzKTsKPiAgCj4gKwlyZXQgPSAwOwo+ICB1bmxv Y2s6Cj4gIAltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiAgfQo+ICAKPiAgYm9vbCBpOTE1X3NnX3RyaW0oc3RydWN0IHNnX3RhYmxlICpvcmlnX3N0KQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKPiBpbmRleCAyYzliMjg0MDM2 ZDEuLmE4ZjNjMzA0ZGI1NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV91c2VycHRyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2Vy cHRyLmMKPiBAQCAtNTAsNzkgKzUwLDg0IEBAIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciB7Cj4g IAlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOwo+ICAJc3RydWN0IG1tdV9ub3RpZmllciBtbjsKPiAg CXN0cnVjdCByYl9yb290X2NhY2hlZCBvYmplY3RzOwo+IC0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1 Y3QgKndxOwo+ICsJc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbTsKPiAgfTsKPiAgCj4gIHN0cnVj dCBpOTE1X21tdV9vYmplY3Qgewo+ICAJc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsKPiAg CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gIAlzdHJ1Y3QgaW50ZXJ2YWxfdHJl ZV9ub2RlIGl0Owo+IC0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwo+IC0Jc3RydWN0IHdvcmtfc3Ry dWN0IHdvcms7Cj4gLQlib29sIGF0dGFjaGVkOwo+ICB9Owo+ICAKPiAtc3RhdGljIHZvaWQgY2Fu Y2VsX3VzZXJwdHIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+IC17Cj4gLQlzdHJ1Y3QgaTkx NV9tbXVfb2JqZWN0ICptbyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm1vKSwgd29yayk7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gbW8tPm9iajsKPiAtCXN0cnVj dCB3b3JrX3N0cnVjdCAqYWN0aXZlOwo+IC0KPiAtCS8qIENhbmNlbCBhbnkgYWN0aXZlIHdvcmtl ciBhbmQgZm9yY2UgdXMgdG8gcmUtZXZhbHVhdGUgZ3VwICovCj4gLQltdXRleF9sb2NrKCZvYmot Pm1tLmxvY2spOwo+IC0JYWN0aXZlID0gZmV0Y2hfYW5kX3plcm8oJm9iai0+dXNlcnB0ci53b3Jr KTsKPiAtCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKPiAtCWlmIChhY3RpdmUpCj4gLQkJ Z290byBvdXQ7Cj4gLQo+IC0JaTkxNV9nZW1fb2JqZWN0X3dhaXQob2JqLCBJOTE1X1dBSVRfQUxM LCBNQVhfU0NIRURVTEVfVElNRU9VVCwgTlVMTCk7Cj4gLQo+IC0JbXV0ZXhfbG9jaygmb2JqLT5i YXNlLmRldi0+c3RydWN0X211dGV4KTsKPiAtCj4gLQkvKiBXZSBhcmUgaW5zaWRlIGEga3RocmVh ZCBjb250ZXh0IGFuZCBjYW4ndCBiZSBpbnRlcnJ1cHRlZCAqLwo+IC0JaWYgKGk5MTVfZ2VtX29i amVjdF91bmJpbmQob2JqKSA9PSAwKQo+IC0JCV9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhv YmosIEk5MTVfTU1fTk9STUFMKTsKPiAtCVdBUk5fT05DRShpOTE1X2dlbV9vYmplY3RfaGFzX3Bh Z2VzKG9iaiksCj4gLQkJICAiRmFpbGVkIHRvIHJlbGVhc2UgcGFnZXM6IGJpbmRfY291bnQ9JWQs IHBhZ2VzX3Bpbl9jb3VudD0lZCwgcGluX2dsb2JhbD0lZFxuIiwKPiAtCQkgIG9iai0+YmluZF9j b3VudCwKPiAtCQkgIGF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCksCj4gLQkJ ICBvYmotPnBpbl9nbG9iYWwpOwo+IC0KPiAtCW11dGV4X3VubG9jaygmb2JqLT5iYXNlLmRldi0+ c3RydWN0X211dGV4KTsKPiAtCj4gLW91dDoKPiAtCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsK PiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgYWRkX29iamVjdChzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0 ICptbykKPiAgewo+IC0JaWYgKG1vLT5hdHRhY2hlZCkKPiArCWlmICghUkJfRU1QVFlfTk9ERSgm bW8tPml0LnJiKSkKPiAgCQlyZXR1cm47Cj4gIAo+ICAJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1v LT5pdCwgJm1vLT5tbi0+b2JqZWN0cyk7Cj4gLQltby0+YXR0YWNoZWQgPSB0cnVlOwo+ICB9Cj4g IAo+ICBzdGF0aWMgdm9pZCBkZWxfb2JqZWN0KHN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vKQo+ ICB7Cj4gLQlpZiAoIW1vLT5hdHRhY2hlZCkKPiArCWlmIChSQl9FTVBUWV9OT0RFKCZtby0+aXQu cmIpKQo+ICAJCXJldHVybjsKPiAgCj4gIAlpbnRlcnZhbF90cmVlX3JlbW92ZSgmbW8tPml0LCAm bW8tPm1uLT5vYmplY3RzKTsKPiAtCW1vLT5hdHRhY2hlZCA9IGZhbHNlOwo+ICsJUkJfQ0xFQVJf Tk9ERSgmbW8tPml0LnJiKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArX19pOTE1X2dlbV91 c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB2 YWx1ZSkKPiArewo+ICsJc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8gPSBvYmotPnVzZXJwdHIu bW11X29iamVjdDsKPiArCj4gKwkvKgo+ICsJICogRHVyaW5nIG1tX2ludmFsaWRhdGVfcmFuZ2Ug d2UgbmVlZCB0byBjYW5jZWwgYW55IHVzZXJwdHIgdGhhdAo+ICsJICogb3ZlcmxhcHMgdGhlIHJh bmdlIGJlaW5nIGludmFsaWRhdGVkLiBEb2luZyBzbyByZXF1aXJlcyB0aGUKPiArCSAqIHN0cnVj dF9tdXRleCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQo+ICsJ ICogcmVjdXJzaW9uLCB0aGUgdXNlciBtdXN0IGFsaWFzIHRoZSB1c2VycHRyIGFkZHJlc3Mgc3Bh Y2Ugd2l0aAo+ICsJICogYSBHVFQgbW1hcHBpbmcgKHBvc3NpYmxlIHdpdGggYSBNQVBfRklYRUQp IC0gdGhlbiB3aGVuIHdlIGhhdmUKPiArCSAqIHRvIGludmFsaWRhdGUgdGhhdCBtbWFwaW5nLCBt bV9pbnZhbGlkYXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCj4gKwkgKiB0aGUgdXNlcnB0ciBhZGRy ZXNzICphbmQqIHRoZSBzdHJ1Y3RfbXV0ZXggaGVsZC4gIFRvIHByZXZlbnQgdGhhdAo+ICsJICog d2Ugc2V0IGEgZmxhZyB1bmRlciB0aGUgaTkxNV9tbXVfbm90aWZpZXIgc3BpbmxvY2sgdG8gaW5k aWNhdGUKPiArCSAqIHdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdmFsaWQuCj4gKwkgKi8KPiArCWlm ICghbW8pCj4gKwkJcmV0dXJuOwo+ICsKPiArCXNwaW5fbG9jaygmbW8tPm1uLT5sb2NrKTsKPiAr CWlmICh2YWx1ZSkKPiArCQlhZGRfb2JqZWN0KG1vKTsKPiArCWVsc2UKPiArCQlkZWxfb2JqZWN0 KG1vKTsKPiArCXNwaW5fdW5sb2NrKCZtby0+bW4tPmxvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMg c3RydWN0IG11dGV4ICpfX2k5MTVfbXV0ZXhfbG9ja19yZWN1cnNpdmUoc3RydWN0IG11dGV4ICpt KQo+ICt7Cj4gKwlzd2l0Y2ggKG11dGV4X3RyeWxvY2tfcmVjdXJzaXZlKG0pKSB7Cj4gKwlkZWZh dWx0Ogo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX0ZBSUxFRDoKPiArCQltdXRleF9sb2NrKG0pOwo+ ICsJY2FzZSBNVVRFWF9UUllMT0NLX1NVQ0NFU1M6Cj4gKwkJcmV0dXJuIG07Cj4gKwo+ICsJY2Fz ZSBNVVRFWF9UUllMT0NLX1JFQ1VSU0lWRToKPiArCQlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsK PiArCX0KPiAgfQo+ICAKPiAgc3RhdGljIGludCBpOTE1X2dlbV91c2VycHRyX21uX2ludmFsaWRh dGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAqX21uLAo+IC0JCQkJCQkgICAgICAg c3RydWN0IG1tX3N0cnVjdCAqbW0sCj4gLQkJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0 LAo+IC0JCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsCj4gLQkJCQkJCSAgICAgICBib29s IGJsb2NrYWJsZSkKPiArCQkJCQkJICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4gKwkJCQkJ CSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCj4gKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcg ZW5kLAo+ICsJCQkJCQkgICAgICBib29sIGJsb2NrYWJsZSkKPiAgewo+ICAJc3RydWN0IGk5MTVf bW11X25vdGlmaWVyICptbiA9Cj4gIAkJY29udGFpbmVyX29mKF9tbiwgc3RydWN0IGk5MTVfbW11 X25vdGlmaWVyLCBtbik7Cj4gLQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbzsKPiAgCXN0cnVj dCBpbnRlcnZhbF90cmVlX25vZGUgKml0Owo+IC0JTElTVF9IRUFEKGNhbmNlbGxlZCk7Cj4gKwlz dHJ1Y3QgbXV0ZXggKnVubG9jayA9IE5VTEw7Cj4gKwlpbnQgcmV0ID0gMDsKPiAgCj4gIAlpZiAo UkJfRU1QVFlfUk9PVCgmbW4tPm9iamVjdHMucmJfcm9vdCkpCj4gIAkJcmV0dXJuIDA7Cj4gQEAg LTEzMywxMSArMTM4LDE2IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fdXNlcnB0cl9tbl9pbnZhbGlk YXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKl9tbiwKPiAgCXNwaW5fbG9jaygm bW4tPmxvY2spOwo+ICAJaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3QoJm1uLT5vYmplY3Rz LCBzdGFydCwgZW5kKTsKPiAgCXdoaWxlIChpdCkgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmo7Cj4gKwkJYm9vbCBoYXNfcGFnZXMgPSBmYWxzZTsKPiArCj4gIAkJaWYgKCFi bG9ja2FibGUpIHsKPiAtCQkJc3Bpbl91bmxvY2soJm1uLT5sb2NrKTsKPiAtCQkJcmV0dXJuIC1F QUdBSU47Cj4gKwkJCXJldCA9IC1FQUdBSU47Cj4gKwkJCWJyZWFrOwo+ICAJCX0KPiAtCQkvKiBU aGUgbW11X29iamVjdCBpcyByZWxlYXNlZCBsYXRlIHdoZW4gZGVzdHJveWluZyB0aGUKPiArCj4g KwkJLyoKPiArCQkgKiBUaGUgbW11X29iamVjdCBpcyByZWxlYXNlZCBsYXRlIHdoZW4gZGVzdHJv eWluZyB0aGUKPiAgCQkgKiBHRU0gb2JqZWN0IHNvIGl0IGlzIGVudGlyZWx5IHBvc3NpYmxlIHRv IGdhaW4gYQo+ICAJCSAqIHJlZmVyZW5jZSBvbiBhbiBvYmplY3QgaW4gdGhlIHByb2Nlc3Mgb2Yg YmVpbmcgZnJlZWQKPiAgCQkgKiBzaW5jZSBvdXIgc2VyaWFsaXNhdGlvbiBpcyB2aWEgdGhlIHNw aW5sb2NrIGFuZCBub3QKPiBAQCAtMTQ2LDIxICsxNTYsNDQgQEAgc3RhdGljIGludCBpOTE1X2dl bV91c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAq X21uLAo+ICAJCSAqIHVzZS1hZnRlci1mcmVlIHdlIG9ubHkgYWNxdWlyZSBhIHJlZmVyZW5jZSBv biB0aGUKPiAgCQkgKiBvYmplY3QgaWYgaXQgaXMgbm90IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5n IGRlc3Ryb3llZC4KPiAgCQkgKi8KPiAtCQltbyA9IGNvbnRhaW5lcl9vZihpdCwgc3RydWN0IGk5 MTVfbW11X29iamVjdCwgaXQpOwo+IC0JCWlmIChrcmVmX2dldF91bmxlc3NfemVybygmbW8tPm9i ai0+YmFzZS5yZWZjb3VudCkpCj4gLQkJCXF1ZXVlX3dvcmsobW4tPndxLCAmbW8tPndvcmspOwo+ ICsJCW9iaiA9IGNvbnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpLT5v Ymo7Cj4gKwkJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmb2JqLT5iYXNlLnJlZmNvdW50KSkg ewo+ICsJCQlpdCA9IGludGVydmFsX3RyZWVfaXRlcl9uZXh0KGl0LCBzdGFydCwgZW5kKTsKPiAr CQkJY29udGludWU7Cj4gKwkJfQo+ICsJCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7Cj4gIAo+IC0J CWxpc3RfYWRkKCZtby0+bGluaywgJmNhbmNlbGxlZCk7Cj4gLQkJaXQgPSBpbnRlcnZhbF90cmVl X2l0ZXJfbmV4dChpdCwgc3RhcnQsIGVuZCk7Cj4gKwkJLyogQ2FuY2VsIGFueSBwZW5kaW5nIHdv cmtlciBhbmQgZm9yY2UgdXMgdG8gcmUtZXZhbHVhdGUgZ3VwICovCj4gKwkJbXV0ZXhfbG9ja19u ZXN0ZWQoJm9iai0+bW0ubG9jaywgSTkxNV9NTV9TSFJJTktFUik7CgptdXRleF9sb2NrX25lc3Rl ZCBpcyBtZWFudCBmb3Igc3RhdGljIG5lc3RpbmcuIFRoaXMgaGVyZSBpcyByYXRoZXIKZHluYW1p YywgYW5kIEkgZG9uJ3QgcmVhbGx5IHNlZSB3aGVyZSB0aGUgZ3VhcmFudGVlIGlzIHRoYXQgdGhl IGNsYXNzaWMKZGVhZGxvY2sgaXNuJ3QgcG9zc2libGU6Cgp0aHJlYWQgMTogZ2V0X3BhZ2VzIG9u IG9iamVjdCBBIC0+IG1tdV9ub3RpZmllciAob3Igc2hyaW5rZXIpIG9uIG9iamVjdCBCCnRocmVh ZCAyOiBnZXRfcGFnZXMgb24gb2JqZWN0IEIgLT4gbW11X25vdGlmaWVyIChvciBzaHJpbmtlcikg b24gb2JqZWN0IEEKCk9ubHkgd2hlbiB5b3UgaGF2ZSBzb21lIGd1YXJhbnRlZSBmb3IgYSBnbG9i YWwgb3JkZXIgY2FuIHlvdSBuZXN0IGxvY2tzCnVzaW5nIG11dGV4X2xvY2tfbmVzdGVkLgoKVGhl cmUncyBhIGZldyBjaGVja3MgYW5kIHN0dWZmIHRoYXQgbWlnaHQgd29yaywgYnV0IHRoZXkgYWxs IHNlZW0gcmF0aGVyCnJhY3kuIFdoYXQncyB0aGUgZ3VhcmFudGVlIHRoYXQgcHJldmVudHMgdGhl IGFib3ZlPwotRGFuaWVsCgo+ICsJCWlmIChmZXRjaF9hbmRfemVybygmb2JqLT51c2VycHRyLndv cmspKQo+ICsJCQlfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIGZhbHNlKTsKPiAr CQllbHNlCj4gKwkJCWhhc19wYWdlcyA9IGk5MTVfZ2VtX29iamVjdF9oYXNfcGFnZXMob2JqKTsK PiArCQltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Cj4gKwo+ICsJCWlmIChoYXNfcGFnZXMp IHsKPiArCQkJaWYgKCF1bmxvY2spCj4gKwkJCQl1bmxvY2sgPSBfX2k5MTVfbXV0ZXhfbG9ja19y ZWN1cnNpdmUoJm1uLT5tbS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwkJCXJldCA9IGk5 MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKPiArCQkJaWYgKHJldCA9PSAwKQo+ICsJCQkJcmV0 ID0gX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaiwgSTkxNV9NTV9TSFJJTktFUik7Cj4g KwkJfQo+ICsKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gKwkJaWYgKHJldCkKPiAr CQkJZ290byB1bmxvY2s7Cj4gKwo+ICsJCXNwaW5fbG9jaygmbW4tPmxvY2spOwo+ICsJCWl0ID0g aW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0cywgc3RhcnQsIGVuZCk7Cj4gIAl9 Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vLCAmY2FuY2VsbGVkLCBsaW5rKQo+IC0JCWRlbF9v YmplY3QobW8pOwo+ICAJc3Bpbl91bmxvY2soJm1uLT5sb2NrKTsKPiAgCj4gLQlpZiAoIWxpc3Rf ZW1wdHkoJmNhbmNlbGxlZCkpCj4gLQkJZmx1c2hfd29ya3F1ZXVlKG1uLT53cSk7Cj4gK3VubG9j azoKPiArCWlmICghSVNfRVJSX09SX05VTEwodW5sb2NrKSkKPiArCQltdXRleF91bmxvY2sodW5s b2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICAKPiAtCXJldHVybiAwOwo+ICB9Cj4gIAo+ICBz dGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMgaTkxNV9nZW1fdXNlcnB0cl9ub3Rp ZmllciA9IHsKPiBAQCAtMTY4LDcgKzIwMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25v dGlmaWVyX29wcyBpOTE1X2dlbV91c2VycHRyX25vdGlmaWVyID0gewo+ICB9Owo+ICAKPiAgc3Rh dGljIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqCj4gLWk5MTVfbW11X25vdGlmaWVyX2NyZWF0 ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAraTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKHN0cnVj dCBpOTE1X21tX3N0cnVjdCAqbW0pCj4gIHsKPiAgCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAq bW47Cj4gIAo+IEBAIC0xNzksMTMgKzIxMiw3IEBAIGk5MTVfbW11X25vdGlmaWVyX2NyZWF0ZShz dHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAgCXNwaW5fbG9ja19pbml0KCZtbi0+bG9jayk7Cj4gIAlt bi0+bW4ub3BzID0gJmk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXI7Cj4gIAltbi0+b2JqZWN0cyA9 IFJCX1JPT1RfQ0FDSEVEOwo+IC0JbW4tPndxID0gYWxsb2Nfd29ya3F1ZXVlKCJpOTE1LXVzZXJw dHItcmVsZWFzZSIsCj4gLQkJCQkgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLAo+IC0JCQkJ IDApOwo+IC0JaWYgKG1uLT53cSA9PSBOVUxMKSB7Cj4gLQkJa2ZyZWUobW4pOwo+IC0JCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOwo+IC0JfQo+ICsJbW4tPm1tID0gbW07Cj4gIAo+ICAJcmV0dXJu IG1uOwo+ICB9Cj4gQEAgLTE5NSwxNiArMjIyLDE0IEBAIGk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFz ZV9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIHsKPiAg CXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vOwo+ICAKPiAtCW1vID0gb2JqLT51c2VycHRyLm1t dV9vYmplY3Q7Cj4gLQlpZiAobW8gPT0gTlVMTCkKPiArCW1vID0gZmV0Y2hfYW5kX3plcm8oJm9i ai0+dXNlcnB0ci5tbXVfb2JqZWN0KTsKPiArCWlmICghbW8pCj4gIAkJcmV0dXJuOwo+ICAKPiAg CXNwaW5fbG9jaygmbW8tPm1uLT5sb2NrKTsKPiAgCWRlbF9vYmplY3QobW8pOwo+ICAJc3Bpbl91 bmxvY2soJm1vLT5tbi0+bG9jayk7Cj4gIAlrZnJlZShtbyk7Cj4gLQo+IC0Jb2JqLT51c2VycHRy Lm1tdV9vYmplY3QgPSBOVUxMOwo+ICB9Cj4gIAo+ICBzdGF0aWMgc3RydWN0IGk5MTVfbW11X25v dGlmaWVyICoKPiBAQCAtMjE3LDcgKzI0Miw3IEBAIGk5MTVfbW11X25vdGlmaWVyX2ZpbmQoc3Ry dWN0IGk5MTVfbW1fc3RydWN0ICptbSkKPiAgCWlmIChtbikKPiAgCQlyZXR1cm4gbW47Cj4gIAo+ IC0JbW4gPSBpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUobW0tPm1tKTsKPiArCW1uID0gaTkxNV9t bXVfbm90aWZpZXJfY3JlYXRlKG1tKTsKPiAgCWlmIChJU19FUlIobW4pKQo+ICAJCWVyciA9IFBU Ul9FUlIobW4pOwo+ICAKPiBAQCAtMjQwLDEwICsyNjUsOCBAQCBpOTE1X21tdV9ub3RpZmllcl9m aW5kKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCj4gIAltdXRleF91bmxvY2soJm1tLT5pOTE1 LT5tbV9sb2NrKTsKPiAgCXVwX3dyaXRlKCZtbS0+bW0tPm1tYXBfc2VtKTsKPiAgCj4gLQlpZiAo bW4gJiYgIUlTX0VSUihtbikpIHsKPiAtCQlkZXN0cm95X3dvcmtxdWV1ZShtbi0+d3EpOwo+ICsJ aWYgKG1uICYmICFJU19FUlIobW4pKQo+ICAJCWtmcmVlKG1uKTsKPiAtCX0KPiAgCj4gIAlyZXR1 cm4gZXJyID8gRVJSX1BUUihlcnIpIDogbW0tPm1uOwo+ICB9Cj4gQEAgLTI2NiwxNCArMjg5LDE0 IEBAIGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCj4gIAkJcmV0dXJuIFBUUl9FUlIobW4pOwo+ICAKPiAgCW1vID0ga3ph bGxvYyhzaXplb2YoKm1vKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAobW8gPT0gTlVMTCkKPiArCWlm ICghbW8pCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+ICAJbW8tPm1uID0gbW47Cj4gIAltby0+ b2JqID0gb2JqOwo+ICAJbW8tPml0LnN0YXJ0ID0gb2JqLT51c2VycHRyLnB0cjsKPiAgCW1vLT5p dC5sYXN0ID0gb2JqLT51c2VycHRyLnB0ciArIG9iai0+YmFzZS5zaXplIC0gMTsKPiAtCUlOSVRf V09SSygmbW8tPndvcmssIGNhbmNlbF91c2VycHRyKTsKPiArCVJCX0NMRUFSX05PREUoJm1vLT5p dC5yYik7Cj4gIAo+ICAJb2JqLT51c2VycHRyLm1tdV9vYmplY3QgPSBtbzsKPiAgCXJldHVybiAw Owo+IEBAIC0yODcsMTIgKzMxMCwxNiBAQCBpOTE1X21tdV9ub3RpZmllcl9mcmVlKHN0cnVjdCBp OTE1X21tdV9ub3RpZmllciAqbW4sCj4gIAkJcmV0dXJuOwo+ICAKPiAgCW1tdV9ub3RpZmllcl91 bnJlZ2lzdGVyKCZtbi0+bW4sIG1tKTsKPiAtCWRlc3Ryb3lfd29ya3F1ZXVlKG1uLT53cSk7Cj4g IAlrZnJlZShtbik7Cj4gIH0KPiAgCj4gICNlbHNlCj4gIAo+ICtzdGF0aWMgdm9pZAo+ICtfX2k5 MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LCBib29sIHZhbHVlKQo+ICt7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkCj4gIGk5MTVfZ2VtX3Vz ZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCj4gIHsKPiBAQCAtNDYxLDQyICs0ODgsNiBAQCBfX2k5MTVfZ2VtX3VzZXJwdHJfYWxsb2Nf cGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgCXJldHVybiBzdDsKPiAg fQo+ICAKPiAtc3RhdGljIGludAo+IC1fX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkgICAgICBib29sIHZhbHVlKQo+IC17 Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gLQkvKiBEdXJpbmcgbW1faW52YWxpZGF0ZV9yYW5nZSB3 ZSBuZWVkIHRvIGNhbmNlbCBhbnkgdXNlcnB0ciB0aGF0Cj4gLQkgKiBvdmVybGFwcyB0aGUgcmFu Z2UgYmVpbmcgaW52YWxpZGF0ZWQuIERvaW5nIHNvIHJlcXVpcmVzIHRoZQo+IC0JICogc3RydWN0 X211dGV4LCBhbmQgdGhhdCByaXNrcyByZWN1cnNpb24uIEluIG9yZGVyIHRvIGNhdXNlCj4gLQkg KiByZWN1cnNpb24sIHRoZSB1c2VyIG11c3QgYWxpYXMgdGhlIHVzZXJwdHIgYWRkcmVzcyBzcGFj ZSB3aXRoCj4gLQkgKiBhIEdUVCBtbWFwcGluZyAocG9zc2libGUgd2l0aCBhIE1BUF9GSVhFRCkg LSB0aGVuIHdoZW4gd2UgaGF2ZQo+IC0JICogdG8gaW52YWxpZGF0ZSB0aGF0IG1tYXBpbmcsIG1t X2ludmFsaWRhdGVfcmFuZ2UgaXMgY2FsbGVkIHdpdGgKPiAtCSAqIHRoZSB1c2VycHRyIGFkZHJl c3MgKmFuZCogdGhlIHN0cnVjdF9tdXRleCBoZWxkLiAgVG8gcHJldmVudCB0aGF0Cj4gLQkgKiB3 ZSBzZXQgYSBmbGFnIHVuZGVyIHRoZSBpOTE1X21tdV9ub3RpZmllciBzcGlubG9jayB0byBpbmRp Y2F0ZQo+IC0JICogd2hldGhlciB0aGlzIG9iamVjdCBpcyB2YWxpZC4KPiAtCSAqLwo+IC0jaWYg ZGVmaW5lZChDT05GSUdfTU1VX05PVElGSUVSKQo+IC0JaWYgKG9iai0+dXNlcnB0ci5tbXVfb2Jq ZWN0ID09IE5VTEwpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZvYmotPnVzZXJw dHIubW11X29iamVjdC0+bW4tPmxvY2spOwo+IC0JLyogSW4gb3JkZXIgdG8gc2VyaWFsaXNlIGdl dF9wYWdlcyB3aXRoIGFuIG91dHN0YW5kaW5nCj4gLQkgKiBjYW5jZWxfdXNlcnB0ciwgd2UgbXVz dCBkcm9wIHRoZSBzdHJ1Y3RfbXV0ZXggYW5kIHRyeSBhZ2Fpbi4KPiAtCSAqLwo+IC0JaWYgKCF2 YWx1ZSkKPiAtCQlkZWxfb2JqZWN0KG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0KTsKPiAtCWVsc2Ug aWYgKCF3b3JrX3BlbmRpbmcoJm9iai0+dXNlcnB0ci5tbXVfb2JqZWN0LT53b3JrKSkKPiAtCQlh ZGRfb2JqZWN0KG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0KTsKPiAtCWVsc2UKPiAtCQlyZXQgPSAt RUFHQUlOOwo+IC0Jc3Bpbl91bmxvY2soJm9iai0+dXNlcnB0ci5tbXVfb2JqZWN0LT5tbi0+bG9j ayk7Cj4gLSNlbmRpZgo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lk Cj4gIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVj dCAqX3dvcmspCj4gIHsKPiAtLSAKPiAyLjE5LjEKPiAKPiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJl IEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK