From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 3/3] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Thu, 8 Nov 2018 16:45:01 +0000 Message-ID: References: <20181108081740.25615-1-chris@chris-wilson.co.uk> <20181108081740.25615-3-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 mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5B91D6E592 for ; Thu, 8 Nov 2018 16:45:04 +0000 (UTC) In-Reply-To: <20181108081740.25615-3-chris@chris-wilson.co.uk> Content-Language: en-US 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 Ck9uIDA4LzExLzIwMTggMDg6MTcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBTaW5jZSBjb21taXQg OTMwNjVhYzc1M2U0ICgibW0sIG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZGUgZm9yIG1t dQo+IG5vdGlmaWVycyIpIHdlIGhhdmUgYmVlbiBhYmxlIHRvIHJlcG9ydCBmYWlsdXJlIGZyb20K PiBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCB3aGljaCBhbGxvd3MgdXMgdG8gdXNlIGEgdHJ5 bG9jayBvbiB0aGUKPiBzdHJ1Y3RfbXV0ZXggdG8gYXZvaWQgcG90ZW50aWFsIHJlY3Vyc2lvbiBh bmQgcmVwb3J0IC1FQlVTWSBpbnN0ZWFkLgo+IEZ1cnRoZXJtb3JlLCB0aGlzIGFsbG93cyB1cyB0 byBwdWxsIHRoZSB3b3JrIGludG8gdGhlIG1haW4gY2FsbGJhY2sgYW5kCj4gYXZvaWQgdGhlIHNs ZWlnaHQtb2YtaGFuZCBpbiB1c2luZyBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrZGVwLgo+IAo+ IEhvd2V2ZXIsIG5vdCBhbGwgcGF0aHMgdG8gbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgYXJl IHByZXBhcmVkIHRvCj4gaGFuZGxlIGZhaWx1cmUsIHNvIGluc3RlYWQgb2YgcmVwb3J0aW5nIHRo ZSByZWN1cnNpb24sIGRlYWwgd2l0aCBpdCBieQo+IHByb3BhZ2F0aW5nIHRoZSBmYWlsdXJlIHVw d2FyZHMsIHdobyBjYW4gZGVjaWRlIHRoZW1zZWx2ZXMgdG8gaGFuZGxlIGl0Cj4gb3IgcmVwb3J0 IGl0Lgo+IAo+IHYyOiBNYXJrIHVwIHRoZSByZWN1cnNpdmUgbG9jayBiZWhhdmlvdXIgYW5kIGNv bW1lbnQgb24gdGhlIHZhcmlvdXMgd2Vhawo+IHBvaW50cy4KPiAKPiBCdWd6aWxsYTogaHR0cHM6 Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mzc1Cj4gUmVmZXJlbmNl czogOTMwNjVhYzc1M2U0ICgibW0sIG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZGUgZm9y IG1tdSBub3RpZmllcnMiKQo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hy aXMtd2lsc29uLmNvLnVrPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50 ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAg IHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCAg MzAgKysrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmggIHwgICA3 ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYyB8IDIyMSArKysr KysrKysrKy0tLS0tLS0tLS0tLS0KPiAgIDQgZmlsZXMgY2hhbmdlZCwgMTM2IGluc2VydGlvbnMo KyksIDEyNiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCAw Yzg0MzhkZTNjMWIuLmI5NWFmYTA1OTc2ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ IEBAIC0zMDc2LDggKzMwNzYsOCBAQCBlbnVtIGk5MTVfbW1fc3ViY2xhc3MgeyAvKiBsb2NrZGVw IHN1YmNsYXNzIGZvciBvYmotPm1tLmxvY2sgKi8KPiAgIAlJOTE1X01NX1NIUklOS0VSCj4gICB9 Owo+ICAgCj4gLXZvaWQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCQkgZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNz KTsKPiAraW50IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+ICsJCQkJZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKTsKPiAg IHZvaWQgX19pOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKTsKPiAgIAo+ICAgZW51bSBpOTE1X21hcF90eXBlIHsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMKPiBpbmRleCBkYzEyMGI1ZDhlMDUuLjUzZmIzNjA1YzRkZiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYwo+IEBAIC0yNDQ3LDggKzI0NDcsOCBAQCBfX2k5MTVfZ2VtX29iamVj dF91bnNldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCXN0cnVj dCBzZ190YWJsZSAqcGFnZXM7Cj4gICAKPiAgIAlwYWdlcyA9IGZldGNoX2FuZF96ZXJvKCZvYmot Pm1tLnBhZ2VzKTsKPiAtCWlmICghcGFnZXMpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gKwlpZiAoSVNf RVJSX09SX05VTEwocGFnZXMpKQoKV2hlcmUgY2FuIHdlIHNldCBwYWdlcyB0byBzb21lIEVSUl9Q VFIgdmFsdWU/Cgo+ICsJCXJldHVybiBwYWdlczsKPiAgIAo+ICAgCXNwaW5fbG9jaygmaTkxNS0+ bW0ub2JqX2xvY2spOwo+ICAgCWxpc3RfZGVsKCZvYmotPm1tLmxpbmspOwo+IEBAIC0yNDcyLDIy ICsyNDcyLDIzIEBAIF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCj4gICAJcmV0dXJuIHBhZ2VzOwo+ICAgfQo+ICAgCj4gLXZvaWQg X19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCj4gLQkJCQkgZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKQo+ICtpbnQgX19pOTE1 X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4g KwkJCQllbnVtIGk5MTVfbW1fc3ViY2xhc3Mgc3ViY2xhc3MpCj4gICB7Cj4gICAJc3RydWN0IHNn X3RhYmxlICpwYWdlczsKPiArCWludCByZXQ7Cj4gICAKPiAgIAlpZiAoaTkxNV9nZW1fb2JqZWN0 X2hhc19waW5uZWRfcGFnZXMob2JqKSkKPiAtCQlyZXR1cm47Cj4gKwkJcmV0dXJuIC1FQlVTWTsK PiAgIAo+ICAgCUdFTV9CVUdfT04ob2JqLT5iaW5kX2NvdW50KTsKPiAtCWlmICghaTkxNV9nZW1f b2JqZWN0X2hhc19wYWdlcyhvYmopKQo+IC0JCXJldHVybjsKPiAgIAo+ICAgCS8qIE1heSBiZSBj YWxsZWQgYnkgc2hyaW5rZXIgZnJvbSB3aXRoaW4gZ2V0X3BhZ2VzKCkgKG9uIGFub3RoZXIgYm8p ICovCj4gICAJbXV0ZXhfbG9ja19uZXN0ZWQoJm9iai0+bW0ubG9jaywgc3ViY2xhc3MpOwo+IC0J aWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCkpKQo+ICsJ aWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCkpKSB7Cj4g KwkJcmV0ID0gLUVCVVNZOwo+ICAgCQlnb3RvIHVubG9jazsKPiArCX0KPiAgIAo+ICAgCS8qCj4g ICAJICogLT5wdXRfcGFnZXMgbWlnaHQgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBi aXQxNyBzd2l6emxlCj4gQEAgLTI0OTUsMTEgKzI0OTYsMjQgQEAgdm9pZCBfX2k5MTVfZ2VtX29i amVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkgKiBs aXN0cyBlYXJseS4KPiAgIAkgKi8KPiAgIAlwYWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0 X3BhZ2VzKG9iaik7Cj4gKwo+ICsJLyoKPiArCSAqIFhYWCBUZW1wb3JhcnkgaGlqaW54IHRvIGF2 b2lkIHVwZGF0aW5nIGFsbCBiYWNrZW5kcyB0byBoYW5kbGUKPiArCSAqIE5VTEwgcGFnZXMuIElu IHRoZSBmdXR1cmUsIHdoZW4gd2UgaGF2ZSBtb3JlIGFzeW5jaHJvbm91cwo+ICsJICogZ2V0X3Bh Z2VzIGJhY2tlbmRzIHdlIHNob3VsZCBiZSBiZXR0ZXIgYWJsZSB0byBoYW5kbGUgdGhlCj4gKwkg KiBjYW5jZWxsYXRpb24gb2YgdGhlIGFzeW5jIHRhc2sgaW4gYSBtb3JlIHVuaWZvcm0gbWFubmVy Lgo+ICsJICovCj4gKwlpZiAoIXBhZ2VzICYmICFpOTE1X2dlbV9vYmplY3RfbmVlZHNfYXN5bmNf Y2FuY2VsKG9iaikpCj4gKwkJcGFnZXMgPSBFUlJfUFRSKC1FSU5WQUwpOwo+ICsKPiAgIAlpZiAo IUlTX0VSUihwYWdlcykpCj4gICAJCW9iai0+b3BzLT5wdXRfcGFnZXMob2JqLCBwYWdlcyk7Cj4g ICAKPiArCXJldCA9IDA7Cj4gICB1bmxvY2s6Cj4gICAJbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxv Y2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIGJvb2wgaTkxNV9zZ190cmlt KHN0cnVjdCBzZ190YWJsZSAqb3JpZ19zdCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9v YmplY3QuaAo+IGluZGV4IGE2ZGQ3YzQ2ZGUwZC4uNDljZTc5NzE3M2I1IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmgKPiBAQCAtNTYsNiArNTYsNyBAQCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewo+ICAgI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSEFT X1NUUlVDVF9QQUdFCUJJVCgwKQo+ICAgI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNfU0hSSU5L QUJMRQlCSVQoMSkKPiAgICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0lTX1BST1hZCUJJVCgyKQo+ ICsjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwJQklUKDMpCj4gICAKPiAgIAkv KiBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQgaXRzIGJhY2tpbmcgc3RvcmFn ZS4KPiAgIAkgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlvciB0byB0aGUgdXNlIG9m IHRoZSBhc3NvY2lhdGVkIHNldAo+IEBAIC0zODYsNiArMzg3LDEyIEBAIGk5MTVfZ2VtX29iamVj dF9pc19wcm94eShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCXJl dHVybiBvYmotPm9wcy0+ZmxhZ3MgJiBJOTE1X0dFTV9PQkpFQ1RfSVNfUFJPWFk7Cj4gICB9Cj4g ICAKPiArc3RhdGljIGlubGluZSBib29sCj4gK2k5MTVfZ2VtX29iamVjdF9uZWVkc19hc3luY19j YW5jZWwoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJcmV0 dXJuIG9iai0+b3BzLT5mbGFncyAmIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUw7Cj4gK30K PiArCj4gICBzdGF0aWMgaW5saW5lIGJvb2wKPiAgIGk5MTVfZ2VtX29iamVjdF9pc19hY3RpdmUo Y29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIHsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4gaW5kZXggMmM5YjI4NDAzNmQxLi44YjA3ZmQ0 NDczMWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0 ci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4gQEAg LTUwLDc5ICs1MCw4NCBAQCBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgewo+ICAgCXN0cnVjdCBo bGlzdF9ub2RlIG5vZGU7Cj4gICAJc3RydWN0IG1tdV9ub3RpZmllciBtbjsKPiAgIAlzdHJ1Y3Qg cmJfcm9vdF9jYWNoZWQgb2JqZWN0czsKPiAtCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsK PiArCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Cj4gICB9Owo+ICAgCj4gICBzdHJ1Y3QgaTkx NV9tbXVfb2JqZWN0IHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOwo+ICAgCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJc3RydWN0IGludGVydmFsX3RyZWVf bm9kZSBpdDsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKPiAtCXN0cnVjdCB3b3JrX3N0cnVj dCB3b3JrOwo+IC0JYm9vbCBhdHRhY2hlZDsKPiAgIH07Cj4gICAKPiAtc3RhdGljIHZvaWQgY2Fu 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+IC0KPiAgIHN0YXRpYyB2b2lkIGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVj dCAqbW8pCj4gICB7Cj4gLQlpZiAobW8tPmF0dGFjaGVkKQo+ICsJaWYgKCFSQl9FTVBUWV9OT0RF KCZtby0+aXQucmIpKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlpbnRlcnZhbF90cmVlX2luc2Vy dCgmbW8tPml0LCAmbW8tPm1uLT5vYmplY3RzKTsKPiAtCW1vLT5hdHRhY2hlZCA9IHRydWU7Cj4g ICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGRlbF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVj dCAqbW8pCj4gICB7Cj4gLQlpZiAoIW1vLT5hdHRhY2hlZCkKPiArCWlmIChSQl9FTVBUWV9OT0RF KCZtby0+aXQucmIpKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlpbnRlcnZhbF90cmVlX3JlbW92 ZSgmbW8tPml0LCAmbW8tPm1uLT5vYmplY3RzKTsKPiAtCW1vLT5hdHRhY2hlZCA9IGZhbHNlOwo+ ICsJUkJfQ0xFQVJfTk9ERSgmbW8tPml0LnJiKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAr X19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwgYm9vbCB2YWx1ZSkKPiArewo+ICsJc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8gPSBv YmotPnVzZXJwdHIubW11X29iamVjdDsKPiArCj4gKwkvKgo+ICsJICogRHVyaW5nIG1tX2ludmFs aWRhdGVfcmFuZ2Ugd2UgbmVlZCB0byBjYW5jZWwgYW55IHVzZXJwdHIgdGhhdAo+ICsJICogb3Zl cmxhcHMgdGhlIHJhbmdlIGJlaW5nIGludmFsaWRhdGVkLiBEb2luZyBzbyByZXF1aXJlcyB0aGUK PiArCSAqIHN0cnVjdF9tdXRleCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBvcmRlciB0 byBjYXVzZQo+ICsJICogcmVjdXJzaW9uLCB0aGUgdXNlciBtdXN0IGFsaWFzIHRoZSB1c2VycHRy IGFkZHJlc3Mgc3BhY2Ugd2l0aAo+ICsJICogYSBHVFQgbW1hcHBpbmcgKHBvc3NpYmxlIHdpdGgg YSBNQVBfRklYRUQpIC0gdGhlbiB3aGVuIHdlIGhhdmUKPiArCSAqIHRvIGludmFsaWRhdGUgdGhh dCBtbWFwaW5nLCBtbV9pbnZhbGlkYXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCj4gKwkgKiB0aGUg dXNlcnB0ciBhZGRyZXNzICphbmQqIHRoZSBzdHJ1Y3RfbXV0ZXggaGVsZC4gIFRvIHByZXZlbnQg dGhhdAo+ICsJICogd2Ugc2V0IGEgZmxhZyB1bmRlciB0aGUgaTkxNV9tbXVfbm90aWZpZXIgc3Bp bmxvY2sgdG8gaW5kaWNhdGUKPiArCSAqIHdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdmFsaWQuCj4g KwkgKi8KPiArCWlmICghbW8pCj4gKwkJcmV0dXJuOwo+ICsKPiArCXNwaW5fbG9jaygmbW8tPm1u LT5sb2NrKTsKPiArCWlmICh2YWx1ZSkKPiArCQlhZGRfb2JqZWN0KG1vKTsKPiArCWVsc2UKPiAr CQlkZWxfb2JqZWN0KG1vKTsKPiArCXNwaW5fdW5sb2NrKCZtby0+bW4tPmxvY2spOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IG11dGV4ICpfX2k5MTVfbXV0ZXhfbG9ja19yZWN1cnNpdmUoc3Ry dWN0IG11dGV4ICptKQo+ICt7Cj4gKwlzd2l0Y2ggKG11dGV4X3RyeWxvY2tfcmVjdXJzaXZlKG0p KSB7Cj4gKwlkZWZhdWx0Ogo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX0ZBSUxFRDoKPiArCQltdXRl eF9sb2NrX25lc3RlZChtLCBJOTE1X01NX1NIUklOS0VSKTsKCkkgYW0gdGhpbmtpbmcgdGhhdCBw ZXJoYXBzIHdlIG5lZWQgYSBuZXcgbmFtZXNwYWNlIGZvciBzdHJ1Y3QgbXV0ZXggbG9jayAKbmVz dGluZywgbGlrZSBJOTE1X1NUUlVDVF9NVVRFWC4uLgoKQW5kIHRoaXMgb25lIHdvdWxkIHRoZW4g YmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIHNocmlua2VyLiBTaW5jZSAKaXQgaXMgbm90 IHRyaWdnZXJlZCBieSB0aGUgc2hyaW5rZXIgYnV0IHBhZ2UgbWlncmF0aW9uLCByaWdodD8KCj4g KwljYXNlIE1VVEVYX1RSWUxPQ0tfU1VDQ0VTUzoKPiArCQlyZXR1cm4gbTsKPiArCj4gKwljYXNl IE1VVEVYX1RSWUxPQ0tfUkVDVVJTSVZFOgo+ICsJCXJldHVybiBFUlJfUFRSKC1FRVhJU1QpOwo+ ICsJfQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfbW5faW52YWxp ZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICpfbW4sCj4gLQkJCQkJCSAgICAg ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAtCQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc3Rh cnQsCj4gLQkJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwKPiAtCQkJCQkJICAgICAgIGJv b2wgYmxvY2thYmxlKQo+ICsJCQkJCQkgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiArCQkJ CQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKPiArCQkJCQkJICAgICAgdW5zaWduZWQgbG9u ZyBlbmQsCj4gKwkJCQkJCSAgICAgIGJvb2wgYmxvY2thYmxlKQo+ICAgewo+ICAgCXN0cnVjdCBp OTE1X21tdV9ub3RpZmllciAqbW4gPQo+ICAgCQljb250YWluZXJfb2YoX21uLCBzdHJ1Y3QgaTkx NV9tbXVfbm90aWZpZXIsIG1uKTsKPiAtCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vOwo+ICAg CXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0Owo+IC0JTElTVF9IRUFEKGNhbmNlbGxlZCk7 Cj4gKwlzdHJ1Y3QgbXV0ZXggKnVubG9jayA9IE5VTEw7Cj4gKwlpbnQgcmV0ID0gMDsKPiAgIAo+ ICAgCWlmIChSQl9FTVBUWV9ST09UKCZtbi0+b2JqZWN0cy5yYl9yb290KSkKPiAgIAkJcmV0dXJu IDA7Cj4gQEAgLTEzMywxMSArMTM4LDE1IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fdXNlcnB0cl9t bl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKl9tbiwKPiAgIAlz cGluX2xvY2soJm1uLT5sb2NrKTsKPiAgIAlpdCA9IGludGVydmFsX3RyZWVfaXRlcl9maXJzdCgm bW4tPm9iamVjdHMsIHN0YXJ0LCBlbmQpOwo+ICAgCXdoaWxlIChpdCkgewo+ICsJCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwo+ICAgCQlpZiAoIWJsb2NrYWJsZSkgewo+IC0J CQlzcGluX3VubG9jaygmbW4tPmxvY2spOwo+IC0JCQlyZXR1cm4gLUVBR0FJTjsKPiArCQkJcmV0 ID0gLUVBR0FJTjsKPiArCQkJYnJlYWs7Cj4gICAJCX0KPiAtCQkvKiBUaGUgbW11X29iamVjdCBp cyByZWxlYXNlZCBsYXRlIHdoZW4gZGVzdHJveWluZyB0aGUKPiArCj4gKwkJLyoKPiArCQkgKiBU aGUgbW11X29iamVjdCBpcyByZWxlYXNlZCBsYXRlIHdoZW4gZGVzdHJveWluZyB0aGUKPiAgIAkJ ICogR0VNIG9iamVjdCBzbyBpdCBpcyBlbnRpcmVseSBwb3NzaWJsZSB0byBnYWluIGEKPiAgIAkJ ICogcmVmZXJlbmNlIG9uIGFuIG9iamVjdCBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZAo+ ICAgCQkgKiBzaW5jZSBvdXIgc2VyaWFsaXNhdGlvbiBpcyB2aWEgdGhlIHNwaW5sb2NrIGFuZCBu b3QKPiBAQCAtMTQ2LDIxICsxNTUsMzkgQEAgc3RhdGljIGludCBpOTE1X2dlbV91c2VycHRyX21u X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAqX21uLAo+ICAgCQkg KiB1c2UtYWZ0ZXItZnJlZSB3ZSBvbmx5IGFjcXVpcmUgYSByZWZlcmVuY2Ugb24gdGhlCj4gICAJ CSAqIG9iamVjdCBpZiBpdCBpcyBub3QgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVk Lgo+ICAgCQkgKi8KPiAtCQltbyA9IGNvbnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29i amVjdCwgaXQpOwo+IC0JCWlmIChrcmVmX2dldF91bmxlc3NfemVybygmbW8tPm9iai0+YmFzZS5y ZWZjb3VudCkpCj4gLQkJCXF1ZXVlX3dvcmsobW4tPndxLCAmbW8tPndvcmspOwo+ICsJCW9iaiA9 IGNvbnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpLT5vYmo7Cj4gKwkJ aWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmb2JqLT5iYXNlLnJlZmNvdW50KSkgewo+ICsJCQlp dCA9IGludGVydmFsX3RyZWVfaXRlcl9uZXh0KGl0LCBzdGFydCwgZW5kKTsKPiArCQkJY29udGlu dWU7Cj4gKwkJfQo+ICsJCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7Cj4gICAKPiAtCQlsaXN0X2Fk ZCgmbW8tPmxpbmssICZjYW5jZWxsZWQpOwo+IC0JCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25l eHQoaXQsIHN0YXJ0LCBlbmQpOwo+ICsJCWlmICghdW5sb2NrKQo+ICsJCQl1bmxvY2sgPSBfX2k5 MTVfbXV0ZXhfbG9ja19yZWN1cnNpdmUoJm1uLT5tbS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4gKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOwo+ICsJCWlmIChyZXQgPT0g MCkKPiArCQkJcmV0ID0gX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaiwgSTkxNV9NTV9T SFJJTktFUik7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCWlmIChyZXQpCj4g KwkJCWdvdG8gdW5sb2NrOwo+ICsKPiArCQlzcGluX2xvY2soJm1uLT5sb2NrKTsKPiArCj4gKwkJ LyoKPiArCQkgKiBBcyB3ZSBkbyBub3QgKHlldCkgcHJvdGVjdCB0aGUgbW11IGZyb20gY29uY3Vy cmVudCBpbnNlcnRpb24KPiArCQkgKiBvdmVyIHRoaXMgcmFuZ2UsIHRoZXJlIGlzIG5vIGd1YXJh bnRlZSB0aGF0IHRoaXMgc2VhcmNoIHdpbGwKPiArCQkgKiB0ZXJtaW5hdGUgZ2l2ZW4gYSBwYXRo b2xvZ2ljIHdvcmtsb2FkLgo+ICsJCSAqLwoKSG1tIG15IGNvbmNlcm4gZnJvbSB0aGUgb3RoZXIg ZGF5LiBCdXQgaXQgbXVzdCBleGl0LCBzb21lIGNsaWVudCB3aWxsIApldmVudHVhbGx5IHN0YWxs IGZvciBhIGJpdCBJIHRoaW5rLiBJZiBub3Qgc29vbmVyIHRoZW4gd2hlbiBldmVyeXRoaW5nIApn cmluZHMgdG8gYSBoYWx0IGR1ZSBldmVyeW9uZSBiZWluZyBzdHVjayBpbiB0aGlzIGxvb3AuCgo+ ICsJCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0cywgc3RhcnQsIGVu ZCk7Cj4gICAJfQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShtbywgJmNhbmNlbGxlZCwgbGluaykK PiAtCQlkZWxfb2JqZWN0KG1vKTsKPiAgIAlzcGluX3VubG9jaygmbW4tPmxvY2spOwo+ICAgCj4g LQlpZiAoIWxpc3RfZW1wdHkoJmNhbmNlbGxlZCkpCj4gLQkJZmx1c2hfd29ya3F1ZXVlKG1uLT53 cSk7Cj4gK3VubG9jazoKPiArCWlmICghSVNfRVJSX09SX05VTEwodW5sb2NrKSkKPiArCQltdXRl eF91bmxvY2sodW5sb2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXR1cm4gMDsK PiAgIH0KPiAgIAo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGk5MTVf Z2VtX3VzZXJwdHJfbm90aWZpZXIgPSB7Cj4gQEAgLTE2OCw3ICsxOTUsNyBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMgaTkxNV9nZW1fdXNlcnB0cl9ub3RpZmllciA9IHsK PiAgIH07Cj4gICAKPiAgIHN0YXRpYyBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKgo+IC1pOTE1 X21tdV9ub3RpZmllcl9jcmVhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gK2k5MTVfbW11X25v dGlmaWVyX2NyZWF0ZShzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tKQo+ICAgewo+ICAgCXN0cnVj dCBpOTE1X21tdV9ub3RpZmllciAqbW47Cj4gICAKPiBAQCAtMTc5LDEzICsyMDYsNyBAQCBpOTE1 X21tdV9ub3RpZmllcl9jcmVhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gICAJc3Bpbl9sb2Nr X2luaXQoJm1uLT5sb2NrKTsKPiAgIAltbi0+bW4ub3BzID0gJmk5MTVfZ2VtX3VzZXJwdHJfbm90 aWZpZXI7Cj4gICAJbW4tPm9iamVjdHMgPSBSQl9ST09UX0NBQ0hFRDsKPiAtCW1uLT53cSA9IGFs bG9jX3dvcmtxdWV1ZSgiaTkxNS11c2VycHRyLXJlbGVhc2UiLAo+IC0JCQkJIFdRX1VOQk9VTkQg fCBXUV9NRU1fUkVDTEFJTSwKPiAtCQkJCSAwKTsKPiAtCWlmIChtbi0+d3EgPT0gTlVMTCkgewo+ IC0JCWtmcmVlKG1uKTsKPiAtCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAtCX0KPiArCW1u LT5tbSA9IG1tOwo+ICAgCj4gICAJcmV0dXJuIG1uOwo+ICAgfQo+IEBAIC0xOTUsMTYgKzIxNiwx NCBAQCBpOTE1X2dlbV91c2VycHRyX3JlbGVhc2VfX21tdV9ub3RpZmllcihzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1v Owo+ICAgCj4gLQltbyA9IG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0Owo+IC0JaWYgKG1vID09IE5V TEwpCj4gKwltbyA9IGZldGNoX2FuZF96ZXJvKCZvYmotPnVzZXJwdHIubW11X29iamVjdCk7Cj4g KwlpZiAoIW1vKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlzcGluX2xvY2soJm1vLT5tbi0+bG9j ayk7Cj4gICAJZGVsX29iamVjdChtbyk7Cj4gICAJc3Bpbl91bmxvY2soJm1vLT5tbi0+bG9jayk7 Cj4gICAJa2ZyZWUobW8pOwo+IC0KPiAtCW9iai0+dXNlcnB0ci5tbXVfb2JqZWN0ID0gTlVMTDsK PiAgIH0KPiAgIAo+ICAgc3RhdGljIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqCj4gQEAgLTIx Nyw3ICsyMzYsNyBAQCBpOTE1X21tdV9ub3RpZmllcl9maW5kKHN0cnVjdCBpOTE1X21tX3N0cnVj dCAqbW0pCj4gICAJaWYgKG1uKQo+ICAgCQlyZXR1cm4gbW47Cj4gICAKPiAtCW1uID0gaTkxNV9t bXVfbm90aWZpZXJfY3JlYXRlKG1tLT5tbSk7Cj4gKwltbiA9IGk5MTVfbW11X25vdGlmaWVyX2Ny ZWF0ZShtbSk7Cj4gICAJaWYgKElTX0VSUihtbikpCj4gICAJCWVyciA9IFBUUl9FUlIobW4pOwo+ ICAgCj4gQEAgLTI0MCwxMCArMjU5LDggQEAgaTkxNV9tbXVfbm90aWZpZXJfZmluZChzdHJ1Y3Qg aTkxNV9tbV9zdHJ1Y3QgKm1tKQo+ICAgCW11dGV4X3VubG9jaygmbW0tPmk5MTUtPm1tX2xvY2sp Owo+ICAgCXVwX3dyaXRlKCZtbS0+bW0tPm1tYXBfc2VtKTsKPiAgIAo+IC0JaWYgKG1uICYmICFJ U19FUlIobW4pKSB7Cj4gLQkJZGVzdHJveV93b3JrcXVldWUobW4tPndxKTsKPiArCWlmIChtbiAm JiAhSVNfRVJSKG1uKSkKPiAgIAkJa2ZyZWUobW4pOwo+IC0JfQo+ICAgCj4gICAJcmV0dXJuIGVy ciA/IEVSUl9QVFIoZXJyKSA6IG1tLT5tbjsKPiAgIH0KPiBAQCAtMjY2LDE0ICsyODMsMTQgQEAg aTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwKPiAgIAkJcmV0dXJuIFBUUl9FUlIobW4pOwo+ICAgCj4gICAJbW8gPSBremFs bG9jKHNpemVvZigqbW8pLCBHRlBfS0VSTkVMKTsKPiAtCWlmIChtbyA9PSBOVUxMKQo+ICsJaWYg KCFtbykKPiAgIAkJcmV0dXJuIC1FTk9NRU07Cj4gICAKPiAgIAltby0+bW4gPSBtbjsKPiAgIAlt by0+b2JqID0gb2JqOwo+ICAgCW1vLT5pdC5zdGFydCA9IG9iai0+dXNlcnB0ci5wdHI7Cj4gICAJ bW8tPml0Lmxhc3QgPSBvYmotPnVzZXJwdHIucHRyICsgb2JqLT5iYXNlLnNpemUgLSAxOwo+IC0J SU5JVF9XT1JLKCZtby0+d29yaywgY2FuY2VsX3VzZXJwdHIpOwo+ICsJUkJfQ0xFQVJfTk9ERSgm bW8tPml0LnJiKTsKPiAgIAo+ICAgCW9iai0+dXNlcnB0ci5tbXVfb2JqZWN0ID0gbW87Cj4gICAJ cmV0dXJuIDA7Cj4gQEAgLTI4NywxMiArMzA0LDE2IEBAIGk5MTVfbW11X25vdGlmaWVyX2ZyZWUo c3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbiwKPiAgIAkJcmV0dXJuOwo+ICAgCj4gICAJbW11 X25vdGlmaWVyX3VucmVnaXN0ZXIoJm1uLT5tbiwgbW0pOwo+IC0JZGVzdHJveV93b3JrcXVldWUo bW4tPndxKTsKPiAgIAlrZnJlZShtbik7Cj4gICB9Cj4gICAKPiAgICNlbHNlCj4gICAKPiArc3Rh dGljIHZvaWQKPiArX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB2YWx1ZSkKPiArewo+ICt9Cj4gKwo+ICAgc3RhdGljIHZv aWQKPiAgIGk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICB7Cj4gQEAgLTQ2MSw0MiArNDgyLDYgQEAgX19pOTE1 X2dlbV91c2VycHRyX2FsbG9jX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos Cj4gICAJcmV0dXJuIHN0Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQKPiAtX19pOTE1X2dlbV91 c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJ ICAgICAgYm9vbCB2YWx1ZSkKPiAtewo+IC0JaW50IHJldCA9IDA7Cj4gLQo+IC0JLyogRHVyaW5n IG1tX2ludmFsaWRhdGVfcmFuZ2Ugd2UgbmVlZCB0byBjYW5jZWwgYW55IHVzZXJwdHIgdGhhdAo+ IC0JICogb3ZlcmxhcHMgdGhlIHJhbmdlIGJlaW5nIGludmFsaWRhdGVkLiBEb2luZyBzbyByZXF1 aXJlcyB0aGUKPiAtCSAqIHN0cnVjdF9tdXRleCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJ biBvcmRlciB0byBjYXVzZQo+IC0JICogcmVjdXJzaW9uLCB0aGUgdXNlciBtdXN0IGFsaWFzIHRo ZSB1c2VycHRyIGFkZHJlc3Mgc3BhY2Ugd2l0aAo+IC0JICogYSBHVFQgbW1hcHBpbmcgKHBvc3Np YmxlIHdpdGggYSBNQVBfRklYRUQpIC0gdGhlbiB3aGVuIHdlIGhhdmUKPiAtCSAqIHRvIGludmFs aWRhdGUgdGhhdCBtbWFwaW5nLCBtbV9pbnZhbGlkYXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCj4g LQkgKiB0aGUgdXNlcnB0ciBhZGRyZXNzICphbmQqIHRoZSBzdHJ1Y3RfbXV0ZXggaGVsZC4gIFRv IHByZXZlbnQgdGhhdAo+IC0JICogd2Ugc2V0IGEgZmxhZyB1bmRlciB0aGUgaTkxNV9tbXVfbm90 aWZpZXIgc3BpbmxvY2sgdG8gaW5kaWNhdGUKPiAtCSAqIHdoZXRoZXIgdGhpcyBvYmplY3QgaXMg dmFsaWQuCj4gLQkgKi8KPiAtI2lmIGRlZmluZWQoQ09ORklHX01NVV9OT1RJRklFUikKPiAtCWlm IChvYmotPnVzZXJwdHIubW11X29iamVjdCA9PSBOVUxMKQo+IC0JCXJldHVybiAwOwo+IC0KPiAt CXNwaW5fbG9jaygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QtPm1uLT5sb2NrKTsKPiAtCS8qIElu IG9yZGVyIHRvIHNlcmlhbGlzZSBnZXRfcGFnZXMgd2l0aCBhbiBvdXRzdGFuZGluZwo+IC0JICog Y2FuY2VsX3VzZXJwdHIsIHdlIG11c3QgZHJvcCB0aGUgc3RydWN0X211dGV4IGFuZCB0cnkgYWdh aW4uCj4gLQkgKi8KPiAtCWlmICghdmFsdWUpCj4gLQkJZGVsX29iamVjdChvYmotPnVzZXJwdHIu bW11X29iamVjdCk7Cj4gLQllbHNlIGlmICghd29ya19wZW5kaW5nKCZvYmotPnVzZXJwdHIubW11 X29iamVjdC0+d29yaykpCj4gLQkJYWRkX29iamVjdChvYmotPnVzZXJwdHIubW11X29iamVjdCk7 Cj4gLQllbHNlCj4gLQkJcmV0ID0gLUVBR0FJTjsKPiAtCXNwaW5fdW5sb2NrKCZvYmotPnVzZXJw dHIubW11X29iamVjdC0+bW4tPmxvY2spOwo+IC0jZW5kaWYKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ IC19Cj4gLQo+ICAgc3RhdGljIHZvaWQKPiAgIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNf d29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqX3dvcmspCj4gICB7Cj4gQEAgLTY4Miw4ICs2Njcs MTEgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgIAlzdHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7Cj4gICAJc3RydWN0IHBhZ2Ug KnBhZ2U7Cj4gICAKPiAtCUJVR19PTihvYmotPnVzZXJwdHIud29yayAhPSBOVUxMKTsKPiArCS8q IENhbmNlbCBhbnkgaW5mbGlnaHQgd29yayBhbmQgZm9yY2UgdGhlbSB0byByZXN0YXJ0IHRoZWly IGd1cCAqLwo+ICsJb2JqLT51c2VycHRyLndvcmsgPSBOVUxMOwo+ICAgCV9faTkxNV9nZW1fdXNl cnB0cl9zZXRfYWN0aXZlKG9iaiwgZmFsc2UpOwo+ICsJaWYgKCFwYWdlcykKPiArCQlyZXR1cm47 Cj4gICAKPiAgIAlpZiAob2JqLT5tbS5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRCkKPiAgIAkJ b2JqLT5tbS5kaXJ0eSA9IGZhbHNlOwo+IEBAIC03MjEsNyArNzA5LDggQEAgaTkxNV9nZW1fdXNl cnB0cl9kbWFidWZfZXhwb3J0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAK PiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1f dXNlcnB0cl9vcHMgPSB7Cj4gICAJLmZsYWdzID0gSTkxNV9HRU1fT0JKRUNUX0hBU19TVFJVQ1Rf UEFHRSB8Cj4gLQkJIEk5MTVfR0VNX09CSkVDVF9JU19TSFJJTktBQkxFLAo+ICsJCSBJOTE1X0dF TV9PQkpFQ1RfSVNfU0hSSU5LQUJMRSB8Cj4gKwkJIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5D RUwsCj4gICAJLmdldF9wYWdlcyA9IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzLAo+ICAgCS5w dXRfcGFnZXMgPSBpOTE1X2dlbV91c2VycHRyX3B1dF9wYWdlcywKPiAgIAkuZG1hYnVmX2V4cG9y dCA9IGk5MTVfZ2VtX3VzZXJwdHJfZG1hYnVmX2V4cG9ydCwKPiAKClJlZ2FyZHMsCgpUdnJ0a28K X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==