From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Janes Subject: Re: [PATCH] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Thu, 25 Oct 2018 14:04:45 -0700 Message-ID: <87efcdu49e.fsf@pigpen.jf.intel.com> 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 mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8E1766E013 for ; Thu, 25 Oct 2018 21:04:36 +0000 (UTC) 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 , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gU2luY2Ug Y29tbWl0IDkzMDY1YWM3NTNlNCAoIm1tLCBvb206IGRpc3Rpbmd1aXNoIGJsb2NrYWJsZSBtb2Rl IGZvciBtbXUKPiBub3RpZmllcnMiKSB3ZSBoYXZlIGJlZW4gYWJsZSB0byByZXBvcnQgZmFpbHVy ZSBmcm9tCj4gbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgd2hpY2ggYWxsb3dzIHVzIHRvIHVz ZSBhIHRyeWxvY2sgb24gdGhlCj4gc3RydWN0X211dGV4IHRvIGF2b2lkIHBvdGVudGlhbCByZWN1 cnNpb24gYW5kIHJlcG9ydCAtRUJVU1kgaW5zdGVhZC4KPiBGdXJ0aGVybW9yZSwgdGhpcyBhbGxv d3MgdXMgdG8gcHVsbCB0aGUgd29yayBpbnRvIHRoZSBtYWluIGNhbGxiYWNrIGFuZAo+IGF2b2lk IHRoZSBzbGVpZ2h0LW9mLWhhbmQgaW4gdXNpbmcgYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9ja2Rl cC4KPgo+IEhvd2V2ZXIsIG5vdCBhbGwgcGF0aHMgdG8gbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3Rh cnQgYXJlIHByZXBhcmVkIHRvCj4gaGFuZGxlIGZhaWx1cmUsIHNvIGluc3RlYWQgb2YgcmVwb3J0 aW5nIHRoZSByZWN1cnNpb24sIGRlYWwgd2l0aCBpdC4KPgo+IEJ1Z3ppbGxhOiBodHRwczovL2J1 Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgzNzUKCkRvZXMgdGhpcyBhZGRy ZXNzIGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODQ1NiA/ Cgo+IFJlZmVyZW5jZXM6IDkzMDY1YWM3NTNlNCAoIm1tLCBvb206IGRpc3Rpbmd1aXNoIGJsb2Nr YWJsZSBtb2RlIGZvciBtbXUgbm90aWZpZXJzIikKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgICAgICAgICB8ICAxMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV91c2VycHRyLmMgfCAyMTkgKysrKysrKysrKysrLS0tLS0tLS0tLS0tCj4gIDMgZmlsZXMgY2hh bmdlZCwgMTE1IGluc2VydGlvbnMoKyksIDEyMCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAo+IGluZGV4IDJkNzc2MWI4YWMwNy4uYzNiOTRjM2Y5MzBmIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTMwNzYsOCArMzA3Niw4IEBAIGVudW0gaTkxNV9tbV9z dWJjbGFzcyB7IC8qIGxvY2tkZXAgc3ViY2xhc3MgZm9yIG9iai0+bW0ubG9jayAqLwo+ICAJSTkx NV9NTV9TSFJJTktFUgo+ICB9Owo+ICAKPiAtdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFn ZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJCSBlbnVtIGk5MTVfbW1f c3ViY2xhc3Mgc3ViY2xhc3MpOwo+ICtpbnQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCQllbnVtIGk5MTVfbW1fc3ViY2xh c3Mgc3ViY2xhc3MpOwo+ICB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X2ludmFsaWRhdGUoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gIAo+ICBlbnVtIGk5MTVfbWFwX3R5cGUgewo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDkzZDA5MjgyNzEwZC4uZGU3Y2NiM2ViN2I4 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTI0NTQsMTcgKzI0NTQsMTggQEAg X19pOTE1X2dlbV9vYmplY3RfdW5zZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKPiAgCXJldHVybiBwYWdlczsKPiAgfQo+ICAKPiAtdm9pZCBfX2k5MTVfZ2VtX29iamVj dF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJCSBlbnVt IGk5MTVfbW1fc3ViY2xhc3Mgc3ViY2xhc3MpCj4gK2ludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRf cGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJCWVudW0gaTkxNV9t bV9zdWJjbGFzcyBzdWJjbGFzcykKPiAgewo+ICAJc3RydWN0IHNnX3RhYmxlICpwYWdlczsKPiAr CWludCByZXQgPSAtRUJVU1k7Cj4gIAo+ICAJaWYgKGk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVk X3BhZ2VzKG9iaikpCj4gLQkJcmV0dXJuOwo+ICsJCXJldHVybiAtRUJVU1k7Cj4gIAo+ICAJR0VN X0JVR19PTihvYmotPmJpbmRfY291bnQpOwo+ICAJaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX3Bh Z2VzKG9iaikpCj4gLQkJcmV0dXJuOwo+ICsJCXJldHVybiAwOwo+ICAKPiAgCS8qIE1heSBiZSBj YWxsZWQgYnkgc2hyaW5rZXIgZnJvbSB3aXRoaW4gZ2V0X3BhZ2VzKCkgKG9uIGFub3RoZXIgYm8p ICovCj4gIAltdXRleF9sb2NrX25lc3RlZCgmb2JqLT5tbS5sb2NrLCBzdWJjbGFzcyk7Cj4gQEAg LTI0ODAsOCArMjQ4MSwxMSBAQCB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAJaWYgKCFJU19FUlIocGFnZXMpKQo+ICAJ CW9iai0+b3BzLT5wdXRfcGFnZXMob2JqLCBwYWdlcyk7Cj4gIAo+ICsJcmV0ID0gMDsKPiAgdW5s b2NrOgo+ICAJbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2spOwo+ICsKPiArCXJldHVybiByZXQ7 Cj4gIH0KPiAgCj4gIGJvb2wgaTkxNV9zZ190cmltKHN0cnVjdCBzZ190YWJsZSAqb3JpZ19zdCkK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4gaW5kZXggMmM5YjI4NDAz NmQxLi5hOGYzYzMwNGRiNTUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fdXNlcnB0ci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNl cnB0ci5jCj4gQEAgLTUwLDc5ICs1MCw4NCBAQCBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgewo+ ICAJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKPiAgCXN0cnVjdCBtbXVfbm90aWZpZXIgbW47Cj4g IAlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgb2JqZWN0czsKPiAtCXN0cnVjdCB3b3JrcXVldWVfc3Ry dWN0ICp3cTsKPiArCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Cj4gIH07Cj4gIAo+ICBzdHJ1 Y3QgaTkxNV9tbXVfb2JqZWN0IHsKPiAgCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47Cj4g IAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICAJc3RydWN0IGludGVydmFsX3Ry ZWVfbm9kZSBpdDsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKPiAtCXN0cnVjdCB3b3JrX3N0 cnVjdCB3b3JrOwo+IC0JYm9vbCBhdHRhY2hlZDsKPiAgfTsKPiAgCj4gLXN0YXRpYyB2b2lkIGNh bmNlbF91c2VycHRyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAtewo+IC0Jc3RydWN0IGk5 MTVfbW11X29iamVjdCAqbW8gPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCptbyksIHdvcmsp Owo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IG1vLT5vYmo7Cj4gLQlzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKmFjdGl2ZTsKPiAtCj4gLQkvKiBDYW5jZWwgYW55IGFjdGl2ZSB3b3Jr ZXIgYW5kIGZvcmNlIHVzIHRvIHJlLWV2YWx1YXRlIGd1cCAqLwo+IC0JbXV0ZXhfbG9jaygmb2Jq LT5tbS5sb2NrKTsKPiAtCWFjdGl2ZSA9IGZldGNoX2FuZF96ZXJvKCZvYmotPnVzZXJwdHIud29y ayk7Cj4gLQltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Cj4gLQlpZiAoYWN0aXZlKQo+IC0J CWdvdG8gb3V0Owo+IC0KPiAtCWk5MTVfZ2VtX29iamVjdF93YWl0KG9iaiwgSTkxNV9XQUlUX0FM TCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQsIE5VTEwpOwo+IC0KPiAtCW11dGV4X2xvY2soJm9iai0+ YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQo+IC0JLyogV2UgYXJlIGluc2lkZSBhIGt0aHJl YWQgY29udGV4dCBhbmQgY2FuJ3QgYmUgaW50ZXJydXB0ZWQgKi8KPiAtCWlmIChpOTE1X2dlbV9v YmplY3RfdW5iaW5kKG9iaikgPT0gMCkKPiAtCQlfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMo b2JqLCBJOTE1X01NX05PUk1BTCk7Cj4gLQlXQVJOX09OQ0UoaTkxNV9nZW1fb2JqZWN0X2hhc19w YWdlcyhvYmopLAo+IC0JCSAgIkZhaWxlZCB0byByZWxlYXNlIHBhZ2VzOiBiaW5kX2NvdW50PSVk LCBwYWdlc19waW5fY291bnQ9JWQsIHBpbl9nbG9iYWw9JWRcbiIsCj4gLQkJICBvYmotPmJpbmRf Y291bnQsCj4gLQkJICBhdG9taWNfcmVhZCgmb2JqLT5tbS5wYWdlc19waW5fY291bnQpLAo+IC0J CSAgb2JqLT5waW5fZ2xvYmFsKTsKPiAtCj4gLQltdXRleF91bmxvY2soJm9iai0+YmFzZS5kZXYt PnN0cnVjdF9tdXRleCk7Cj4gLQo+IC1vdXQ6Cj4gLQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7 Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVj dCAqbW8pCj4gIHsKPiAtCWlmIChtby0+YXR0YWNoZWQpCj4gKwlpZiAoIVJCX0VNUFRZX05PREUo Jm1vLT5pdC5yYikpCj4gIAkJcmV0dXJuOwo+ICAKPiAgCWludGVydmFsX3RyZWVfaW5zZXJ0KCZt by0+aXQsICZtby0+bW4tPm9iamVjdHMpOwo+IC0JbW8tPmF0dGFjaGVkID0gdHJ1ZTsKPiAgfQo+ ICAKPiAgc3RhdGljIHZvaWQgZGVsX29iamVjdChzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbykK PiAgewo+IC0JaWYgKCFtby0+YXR0YWNoZWQpCj4gKwlpZiAoUkJfRU1QVFlfTk9ERSgmbW8tPml0 LnJiKSkKPiAgCQlyZXR1cm47Cj4gIAo+ICAJaW50ZXJ2YWxfdHJlZV9yZW1vdmUoJm1vLT5pdCwg Jm1vLT5tbi0+b2JqZWN0cyk7Cj4gLQltby0+YXR0YWNoZWQgPSBmYWxzZTsKPiArCVJCX0NMRUFS X05PREUoJm1vLT5pdC5yYik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK19faTkxNV9nZW1f dXNlcnB0cl9zZXRfYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wg dmFsdWUpCj4gK3sKPiArCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vID0gb2JqLT51c2VycHRy Lm1tdV9vYmplY3Q7Cj4gKwo+ICsJLyoKPiArCSAqIER1cmluZyBtbV9pbnZhbGlkYXRlX3Jhbmdl IHdlIG5lZWQgdG8gY2FuY2VsIGFueSB1c2VycHRyIHRoYXQKPiArCSAqIG92ZXJsYXBzIHRoZSBy YW5nZSBiZWluZyBpbnZhbGlkYXRlZC4gRG9pbmcgc28gcmVxdWlyZXMgdGhlCj4gKwkgKiBzdHJ1 Y3RfbXV0ZXgsIGFuZCB0aGF0IHJpc2tzIHJlY3Vyc2lvbi4gSW4gb3JkZXIgdG8gY2F1c2UKPiAr CSAqIHJlY3Vyc2lvbiwgdGhlIHVzZXIgbXVzdCBhbGlhcyB0aGUgdXNlcnB0ciBhZGRyZXNzIHNw YWNlIHdpdGgKPiArCSAqIGEgR1RUIG1tYXBwaW5nIChwb3NzaWJsZSB3aXRoIGEgTUFQX0ZJWEVE KSAtIHRoZW4gd2hlbiB3ZSBoYXZlCj4gKwkgKiB0byBpbnZhbGlkYXRlIHRoYXQgbW1hcGluZywg bW1faW52YWxpZGF0ZV9yYW5nZSBpcyBjYWxsZWQgd2l0aAo+ICsJICogdGhlIHVzZXJwdHIgYWRk cmVzcyAqYW5kKiB0aGUgc3RydWN0X211dGV4IGhlbGQuICBUbyBwcmV2ZW50IHRoYXQKPiArCSAq IHdlIHNldCBhIGZsYWcgdW5kZXIgdGhlIGk5MTVfbW11X25vdGlmaWVyIHNwaW5sb2NrIHRvIGlu ZGljYXRlCj4gKwkgKiB3aGV0aGVyIHRoaXMgb2JqZWN0IGlzIHZhbGlkLgo+ICsJICovCj4gKwlp ZiAoIW1vKQo+ICsJCXJldHVybjsKPiArCj4gKwlzcGluX2xvY2soJm1vLT5tbi0+bG9jayk7Cj4g KwlpZiAodmFsdWUpCj4gKwkJYWRkX29iamVjdChtbyk7Cj4gKwllbHNlCj4gKwkJZGVsX29iamVj dChtbyk7Cj4gKwlzcGluX3VubG9jaygmbW8tPm1uLT5sb2NrKTsKPiArfQo+ICsKPiArc3RhdGlj IHN0cnVjdCBtdXRleCAqX19pOTE1X211dGV4X2xvY2tfcmVjdXJzaXZlKHN0cnVjdCBtdXRleCAq bSkKPiArewo+ICsJc3dpdGNoIChtdXRleF90cnlsb2NrX3JlY3Vyc2l2ZShtKSkgewo+ICsJZGVm YXVsdDoKPiArCWNhc2UgTVVURVhfVFJZTE9DS19GQUlMRUQ6Cj4gKwkJbXV0ZXhfbG9jayhtKTsK PiArCWNhc2UgTVVURVhfVFJZTE9DS19TVUNDRVNTOgo+ICsJCXJldHVybiBtOwo+ICsKPiArCWNh c2UgTVVURVhfVFJZTE9DS19SRUNVUlNJVkU6Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVFWElTVCk7 Cj4gKwl9Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgaTkxNV9nZW1fdXNlcnB0cl9tbl9pbnZhbGlk YXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKl9tbiwKPiAtCQkJCQkJICAgICAg IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+IC0JCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzdGFy dCwKPiAtCQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLAo+IC0JCQkJCQkgICAgICAgYm9v bCBibG9ja2FibGUpCj4gKwkJCQkJCSAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+ICsJCQkJ CQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+ICsJCQkJCQkgICAgICB1bnNpZ25lZCBsb25n IGVuZCwKPiArCQkJCQkJICAgICAgYm9vbCBibG9ja2FibGUpCj4gIHsKPiAgCXN0cnVjdCBpOTE1 X21tdV9ub3RpZmllciAqbW4gPQo+ICAJCWNvbnRhaW5lcl9vZihfbW4sIHN0cnVjdCBpOTE1X21t dV9ub3RpZmllciwgbW4pOwo+IC0Jc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW87Cj4gIAlzdHJ1 Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICppdDsKPiAtCUxJU1RfSEVBRChjYW5jZWxsZWQpOwo+ICsJ c3RydWN0IG11dGV4ICp1bmxvY2sgPSBOVUxMOwo+ICsJaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYg KFJCX0VNUFRZX1JPT1QoJm1uLT5vYmplY3RzLnJiX3Jvb3QpKQo+ICAJCXJldHVybiAwOwo+IEBA IC0xMzMsMTEgKzEzOCwxNiBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfbW5faW52YWxp ZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICpfbW4sCj4gIAlzcGluX2xvY2so Jm1uLT5sb2NrKTsKPiAgCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0 cywgc3RhcnQsIGVuZCk7Cj4gIAl3aGlsZSAoaXQpIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOwo+ICsJCWJvb2wgaGFzX3BhZ2VzID0gZmFsc2U7Cj4gKwo+ICAJCWlmICgh YmxvY2thYmxlKSB7Cj4gLQkJCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7Cj4gLQkJCXJldHVybiAt RUFHQUlOOwo+ICsJCQlyZXQgPSAtRUFHQUlOOwo+ICsJCQlicmVhazsKPiAgCQl9Cj4gLQkJLyog VGhlIG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ryb3lpbmcgdGhlCj4gKwo+ ICsJCS8qCj4gKwkJICogVGhlIG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ry b3lpbmcgdGhlCj4gIAkJICogR0VNIG9iamVjdCBzbyBpdCBpcyBlbnRpcmVseSBwb3NzaWJsZSB0 byBnYWluIGEKPiAgCQkgKiByZWZlcmVuY2Ugb24gYW4gb2JqZWN0IGluIHRoZSBwcm9jZXNzIG9m IGJlaW5nIGZyZWVkCj4gIAkJICogc2luY2Ugb3VyIHNlcmlhbGlzYXRpb24gaXMgdmlhIHRoZSBz cGlubG9jayBhbmQgbm90Cj4gQEAgLTE0NiwyMSArMTU2LDQ0IEBAIHN0YXRpYyBpbnQgaTkxNV9n ZW1fdXNlcnB0cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIg Kl9tbiwKPiAgCQkgKiB1c2UtYWZ0ZXItZnJlZSB3ZSBvbmx5IGFjcXVpcmUgYSByZWZlcmVuY2Ug b24gdGhlCj4gIAkJICogb2JqZWN0IGlmIGl0IGlzIG5vdCBpbiB0aGUgcHJvY2VzcyBvZiBiZWlu ZyBkZXN0cm95ZWQuCj4gIAkJICovCj4gLQkJbW8gPSBjb250YWluZXJfb2YoaXQsIHN0cnVjdCBp OTE1X21tdV9vYmplY3QsIGl0KTsKPiAtCQlpZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oJm1vLT5v YmotPmJhc2UucmVmY291bnQpKQo+IC0JCQlxdWV1ZV93b3JrKG1uLT53cSwgJm1vLT53b3JrKTsK PiArCQlvYmogPSBjb250YWluZXJfb2YoaXQsIHN0cnVjdCBpOTE1X21tdV9vYmplY3QsIGl0KS0+ b2JqOwo+ICsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJm9iai0+YmFzZS5yZWZjb3VudCkp IHsKPiArCQkJaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfbmV4dChpdCwgc3RhcnQsIGVuZCk7Cj4g KwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCQlzcGluX3VubG9jaygmbW4tPmxvY2spOwo+ICAKPiAt CQlsaXN0X2FkZCgmbW8tPmxpbmssICZjYW5jZWxsZWQpOwo+IC0JCWl0ID0gaW50ZXJ2YWxfdHJl ZV9pdGVyX25leHQoaXQsIHN0YXJ0LCBlbmQpOwo+ICsJCS8qIENhbmNlbCBhbnkgcGVuZGluZyB3 b3JrZXIgYW5kIGZvcmNlIHVzIHRvIHJlLWV2YWx1YXRlIGd1cCAqLwo+ICsJCW11dGV4X2xvY2tf bmVzdGVkKCZvYmotPm1tLmxvY2ssIEk5MTVfTU1fU0hSSU5LRVIpOwo+ICsJCWlmIChmZXRjaF9h bmRfemVybygmb2JqLT51c2VycHRyLndvcmspKQo+ICsJCQlfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0 X2FjdGl2ZShvYmosIGZhbHNlKTsKPiArCQllbHNlCj4gKwkJCWhhc19wYWdlcyA9IGk5MTVfZ2Vt X29iamVjdF9oYXNfcGFnZXMob2JqKTsKPiArCQltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7 Cj4gKwo+ICsJCWlmIChoYXNfcGFnZXMpIHsKPiArCQkJaWYgKCF1bmxvY2spCj4gKwkJCQl1bmxv Y2sgPSBfX2k5MTVfbXV0ZXhfbG9ja19yZWN1cnNpdmUoJm1uLT5tbS0+aTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4gKwkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKPiArCQkJ aWYgKHJldCA9PSAwKQo+ICsJCQkJcmV0ID0gX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9i aiwgSTkxNV9NTV9TSFJJTktFUik7Cj4gKwkJfQo+ICsKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0 KG9iaik7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byB1bmxvY2s7Cj4gKwo+ICsJCXNwaW5fbG9j aygmbW4tPmxvY2spOwo+ICsJCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2Jq ZWN0cywgc3RhcnQsIGVuZCk7Cj4gIAl9Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vLCAmY2Fu Y2VsbGVkLCBsaW5rKQo+IC0JCWRlbF9vYmplY3QobW8pOwo+ICAJc3Bpbl91bmxvY2soJm1uLT5s b2NrKTsKPiAgCj4gLQlpZiAoIWxpc3RfZW1wdHkoJmNhbmNlbGxlZCkpCj4gLQkJZmx1c2hfd29y a3F1ZXVlKG1uLT53cSk7Cj4gK3VubG9jazoKPiArCWlmICghSVNfRVJSX09SX05VTEwodW5sb2Nr KSkKPiArCQltdXRleF91bmxvY2sodW5sb2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICAKPiAt CXJldHVybiAwOwo+ICB9Cj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9v cHMgaTkxNV9nZW1fdXNlcnB0cl9ub3RpZmllciA9IHsKPiBAQCAtMTY4LDcgKzIwMSw3IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBpOTE1X2dlbV91c2VycHRyX25vdGlm aWVyID0gewo+ICB9Owo+ICAKPiAgc3RhdGljIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqCj4g LWk5MTVfbW11X25vdGlmaWVyX2NyZWF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAraTkxNV9t bXVfbm90aWZpZXJfY3JlYXRlKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCj4gIHsKPiAgCXN0 cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47Cj4gIAo+IEBAIC0xNzksMTMgKzIxMiw3IEBAIGk5 MTVfbW11X25vdGlmaWVyX2NyZWF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAgCXNwaW5fbG9j a19pbml0KCZtbi0+bG9jayk7Cj4gIAltbi0+bW4ub3BzID0gJmk5MTVfZ2VtX3VzZXJwdHJfbm90 aWZpZXI7Cj4gIAltbi0+b2JqZWN0cyA9IFJCX1JPT1RfQ0FDSEVEOwo+IC0JbW4tPndxID0gYWxs b2Nfd29ya3F1ZXVlKCJpOTE1LXVzZXJwdHItcmVsZWFzZSIsCj4gLQkJCQkgV1FfVU5CT1VORCB8 IFdRX01FTV9SRUNMQUlNLAo+IC0JCQkJIDApOwo+IC0JaWYgKG1uLT53cSA9PSBOVUxMKSB7Cj4g LQkJa2ZyZWUobW4pOwo+IC0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+IC0JfQo+ICsJbW4t Pm1tID0gbW07Cj4gIAo+ICAJcmV0dXJuIG1uOwo+ICB9Cj4gQEAgLTE5NSwxNiArMjIyLDE0IEBA IGk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCj4gIHsKPiAgCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vOwo+ICAK PiAtCW1vID0gb2JqLT51c2VycHRyLm1tdV9vYmplY3Q7Cj4gLQlpZiAobW8gPT0gTlVMTCkKPiAr CW1vID0gZmV0Y2hfYW5kX3plcm8oJm9iai0+dXNlcnB0ci5tbXVfb2JqZWN0KTsKPiArCWlmICgh bW8pCj4gIAkJcmV0dXJuOwo+ICAKPiAgCXNwaW5fbG9jaygmbW8tPm1uLT5sb2NrKTsKPiAgCWRl bF9vYmplY3QobW8pOwo+ICAJc3Bpbl91bmxvY2soJm1vLT5tbi0+bG9jayk7Cj4gIAlrZnJlZSht byk7Cj4gLQo+IC0Jb2JqLT51c2VycHRyLm1tdV9vYmplY3QgPSBOVUxMOwo+ICB9Cj4gIAo+ICBz dGF0aWMgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICoKPiBAQCAtMjE3LDcgKzI0Miw3IEBAIGk5 MTVfbW11X25vdGlmaWVyX2ZpbmQoc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSkKPiAgCWlmICht bikKPiAgCQlyZXR1cm4gbW47Cj4gIAo+IC0JbW4gPSBpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUo bW0tPm1tKTsKPiArCW1uID0gaTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKG1tKTsKPiAgCWlmIChJ U19FUlIobW4pKQo+ICAJCWVyciA9IFBUUl9FUlIobW4pOwo+ICAKPiBAQCAtMjQwLDEwICsyNjUs OCBAQCBpOTE1X21tdV9ub3RpZmllcl9maW5kKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCj4g IAltdXRleF91bmxvY2soJm1tLT5pOTE1LT5tbV9sb2NrKTsKPiAgCXVwX3dyaXRlKCZtbS0+bW0t Pm1tYXBfc2VtKTsKPiAgCj4gLQlpZiAobW4gJiYgIUlTX0VSUihtbikpIHsKPiAtCQlkZXN0cm95 X3dvcmtxdWV1ZShtbi0+d3EpOwo+ICsJaWYgKG1uICYmICFJU19FUlIobW4pKQo+ICAJCWtmcmVl KG1uKTsKPiAtCX0KPiAgCj4gIAlyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogbW0tPm1uOwo+ ICB9Cj4gQEAgLTI2NiwxNCArMjg5LDE0IEBAIGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25v dGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gIAkJcmV0dXJuIFBUUl9F UlIobW4pOwo+ICAKPiAgCW1vID0ga3phbGxvYyhzaXplb2YoKm1vKSwgR0ZQX0tFUk5FTCk7Cj4g LQlpZiAobW8gPT0gTlVMTCkKPiArCWlmICghbW8pCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+ ICAJbW8tPm1uID0gbW47Cj4gIAltby0+b2JqID0gb2JqOwo+ICAJbW8tPml0LnN0YXJ0ID0gb2Jq LT51c2VycHRyLnB0cjsKPiAgCW1vLT5pdC5sYXN0ID0gb2JqLT51c2VycHRyLnB0ciArIG9iai0+ YmFzZS5zaXplIC0gMTsKPiAtCUlOSVRfV09SSygmbW8tPndvcmssIGNhbmNlbF91c2VycHRyKTsK PiArCVJCX0NMRUFSX05PREUoJm1vLT5pdC5yYik7Cj4gIAo+ICAJb2JqLT51c2VycHRyLm1tdV9v YmplY3QgPSBtbzsKPiAgCXJldHVybiAwOwo+IEBAIC0yODcsMTIgKzMxMCwxNiBAQCBpOTE1X21t dV9ub3RpZmllcl9mcmVlKHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW4sCj4gIAkJcmV0dXJu Owo+ICAKPiAgCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZtbi0+bW4sIG1tKTsKPiAtCWRlc3Ry b3lfd29ya3F1ZXVlKG1uLT53cSk7Cj4gIAlrZnJlZShtbik7Cj4gIH0KPiAgCj4gICNlbHNlCj4g IAo+ICtzdGF0aWMgdm9pZAo+ICtfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIHZhbHVlKQo+ICt7Cj4gK30KPiArCj4gIHN0 YXRpYyB2b2lkCj4gIGk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIHsKPiBAQCAtNDYxLDQyICs0ODgsNiBAQCBf X2k5MTVfZ2VtX3VzZXJwdHJfYWxsb2NfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPiAgCXJldHVybiBzdDsKPiAgfQo+ICAKPiAtc3RhdGljIGludAo+IC1fX2k5MTVfZ2Vt X3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0J CQkgICAgICBib29sIHZhbHVlKQo+IC17Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gLQkvKiBEdXJp bmcgbW1faW52YWxpZGF0ZV9yYW5nZSB3ZSBuZWVkIHRvIGNhbmNlbCBhbnkgdXNlcnB0ciB0aGF0 Cj4gLQkgKiBvdmVybGFwcyB0aGUgcmFuZ2UgYmVpbmcgaW52YWxpZGF0ZWQuIERvaW5nIHNvIHJl cXVpcmVzIHRoZQo+IC0JICogc3RydWN0X211dGV4LCBhbmQgdGhhdCByaXNrcyByZWN1cnNpb24u IEluIG9yZGVyIHRvIGNhdXNlCj4gLQkgKiByZWN1cnNpb24sIHRoZSB1c2VyIG11c3QgYWxpYXMg dGhlIHVzZXJwdHIgYWRkcmVzcyBzcGFjZSB3aXRoCj4gLQkgKiBhIEdUVCBtbWFwcGluZyAocG9z c2libGUgd2l0aCBhIE1BUF9GSVhFRCkgLSB0aGVuIHdoZW4gd2UgaGF2ZQo+IC0JICogdG8gaW52 YWxpZGF0ZSB0aGF0IG1tYXBpbmcsIG1tX2ludmFsaWRhdGVfcmFuZ2UgaXMgY2FsbGVkIHdpdGgK PiAtCSAqIHRoZSB1c2VycHRyIGFkZHJlc3MgKmFuZCogdGhlIHN0cnVjdF9tdXRleCBoZWxkLiAg VG8gcHJldmVudCB0aGF0Cj4gLQkgKiB3ZSBzZXQgYSBmbGFnIHVuZGVyIHRoZSBpOTE1X21tdV9u b3RpZmllciBzcGlubG9jayB0byBpbmRpY2F0ZQo+IC0JICogd2hldGhlciB0aGlzIG9iamVjdCBp cyB2YWxpZC4KPiAtCSAqLwo+IC0jaWYgZGVmaW5lZChDT05GSUdfTU1VX05PVElGSUVSKQo+IC0J aWYgKG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0ID09IE5VTEwpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+ IC0Jc3Bpbl9sb2NrKCZvYmotPnVzZXJwdHIubW11X29iamVjdC0+bW4tPmxvY2spOwo+IC0JLyog SW4gb3JkZXIgdG8gc2VyaWFsaXNlIGdldF9wYWdlcyB3aXRoIGFuIG91dHN0YW5kaW5nCj4gLQkg KiBjYW5jZWxfdXNlcnB0ciwgd2UgbXVzdCBkcm9wIHRoZSBzdHJ1Y3RfbXV0ZXggYW5kIHRyeSBh Z2Fpbi4KPiAtCSAqLwo+IC0JaWYgKCF2YWx1ZSkKPiAtCQlkZWxfb2JqZWN0KG9iai0+dXNlcnB0 ci5tbXVfb2JqZWN0KTsKPiAtCWVsc2UgaWYgKCF3b3JrX3BlbmRpbmcoJm9iai0+dXNlcnB0ci5t bXVfb2JqZWN0LT53b3JrKSkKPiAtCQlhZGRfb2JqZWN0KG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0 KTsKPiAtCWVsc2UKPiAtCQlyZXQgPSAtRUFHQUlOOwo+IC0Jc3Bpbl91bmxvY2soJm9iai0+dXNl cnB0ci5tbXVfb2JqZWN0LT5tbi0+bG9jayk7Cj4gLSNlbmRpZgo+IC0KPiAtCXJldHVybiByZXQ7 Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkCj4gIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNf d29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqX3dvcmspCj4gIHsKPiAtLSAKPiAyLjE5LjEKPgo+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK