From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Philip" Subject: Re: [PATCH 3/3] drm/amdgpu: replace get_user_pages with HMM address mirror helpers v4 Date: Fri, 14 Dec 2018 21:08:45 +0000 Message-ID: <4e52920e-fd83-e970-a133-6094c31c4d93@amd.com> References: <20181213210115.6843-1-Philip.Yang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US Content-ID: <1C05C742F0B06049BAEDFCD97F903049-asWib9pRmPqcE4WynfumptQqCkab/8FMAL8bYrjMMd8@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Kuehling, Felix" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "Koenig, Christian" SGkgRmVsaXgsDQoNClRoYW5rcywgSSB3aWxsIHN1Ym1pdCBhbm90aGVyIHBhdGNoIHRvIGZpeCB0 aG9zZSBLRkQgcGFydCBpc3N1ZXMuDQoNClBoaWxpcA0KDQpPbiAyMDE4LTEyLTE0IDI6NTQgcC5t LiwgS3VlaGxpbmcsIEZlbGl4IHdyb3RlOg0KPiBMb29rcyBnb29kIGZvciB0aGUgS0ZEIHBhcnQu IE9uZSBuaXQtcGljayBpbmxpbmUuIEFuZCB0d28gbW9yZQ0KPiBzdWdnZXN0aW9ucyBhYm91dCBh bWRncHVfdHRtLmMgdG8gbWFrZSBvdXIgaGFuZGxpbmcgb2YNCj4gZ2V0X3VzZXJfcGFnZXNfZG9u ZSBtb3JlIHJvYnVzdC4NCj4gDQo+IENocmlzdGlhbiwgd291bGQgeW91IHJldmlldyB0aGUgQ1Mg YW5kIEdFTSBwYXJ0cz8gQW5kIG1heWJlIHRha2UgYSBsb29rDQo+IHlvdSBzZWUgbm90aGluZyB3 cm9uZyB3aXRoIHRoZSBhbWRncHVfdHRtIGNoYW5nZXMgZWl0aGVyLg0KPiANCj4gT24gMjAxOC0x Mi0xMyA0OjAxIHAubS4sIFlhbmcsIFBoaWxpcCB3cm90ZToNCj4+IFVzZSBITU0gaGVscGVyIGZ1 bmN0aW9uIGhtbV92bWFfZmF1bHQoKSB0byBnZXQgcGh5c2ljYWwgcGFnZXMgYmFja2luZw0KPj4g dXNlcnB0ciBhbmQgc3RhcnQgQ1BVIHBhZ2UgdGFibGUgdXBkYXRlIHRyYWNrIG9mIHRob3NlIHBh Z2VzLiBUaGVuIHVzZQ0KPj4gaG1tX3ZtYV9yYW5nZV9kb25lKCkgdG8gY2hlY2sgaWYgdGhvc2Ug cGFnZXMgYXJlIHVwZGF0ZWQgYmVmb3JlDQo+PiBhbWRncHVfY3Nfc3VibWl0IGZvciBnZnggb3Ig YmVmb3JlIHVzZXIgcXVldWVzIGFyZSByZXN1bWVkIGZvciBrZmQuDQo+Pg0KPj4gSWYgdXNlcnB0 ciBwYWdlcyBhcmUgdXBkYXRlZCwgZm9yIGdmeCwgYW1kZ3B1X2NzX2lvY3RsIHdpbGwgcmVzdGFy dA0KPj4gZnJvbSBzY3JhdGNoLCBmb3Iga2ZkLCByZXN0b3JlIHdvcmtlciBpcyByZXNjaGVkdWxl ZCB0byByZXRyeS4NCj4+DQo+PiBITU0gc2ltcGxpZnkgdGhlIENQVSBwYWdlIHRhYmxlIGNvbmN1 cnJlbnQgdXBkYXRlIGNoZWNrLCBzbyByZW1vdmUNCj4+IGd1cHRhc2tsb2NrLCBtbXVfaW52YWxp ZGF0aW9ucywgbGFzdF9zZXRfcGFnZXMgZmllbGRzIGZyb20NCj4+IGFtZGdwdV90dG1fdHQgc3Ry dWN0Lg0KPj4NCj4+IEhNTSBkb2VzIG5vdCBwaW4gdGhlIHBhZ2UgKGluY3JlYXNlIHBhZ2UgcmVm IGNvdW50KSwgc28gcmVtb3ZlIHJlbGF0ZWQNCj4+IG9wZXJhdGlvbnMgbGlrZSByZWxlYXNlX3Bh Z2VzKCksIHB1dF9wYWdlKCksIG1hcmtfcGFnZV9kaXJ0eSgpLg0KPj4NCj4+IENoYW5nZS1JZDog STJlOGMwYzZmMGQ4YzIxZTU1OTZhMzJkN2ZjOTE3NjI3NzhiYzllNjcNCj4+IFNpZ25lZC1vZmYt Ynk6IFBoaWxpcCBZYW5nIDxQaGlsaXAuWWFuZ0BhbWQuY29tPg0KPj4gLS0tDQo+PiAgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaCAgICB8ICAgMSAtDQo+PiAgIC4u Li9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jICB8ICA5NSArKystLS0t LS0NCj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYyAgIHwg ICAyIC0NCj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuaCAg IHwgICAzICstDQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jICAg ICAgICB8IDE4NSArKysrKysrKystLS0tLS0tLS0NCj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2dlbS5jICAgICAgIHwgIDE0ICstDQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9tbi5jICAgICAgICB8ICAyNyArKy0NCj4+ICAgZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmggICAgICAgIHwgICA0ICstDQo+PiAgIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYyAgICAgICB8IDE2NiArKysrKystLS0tLS0t LS0tDQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaCAgICAgICB8 ICAgNCArLQ0KPj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyAgICAg ICAgfCAgIDEgLQ0KPj4gICAxMSBmaWxlcyBjaGFuZ2VkLCAyMDggaW5zZXJ0aW9ucygrKSwgMjk0 IGRlbGV0aW9ucygtKQ0KPj4NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfYW1ka2ZkLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf YW1ka2ZkLmgNCj4+IGluZGV4IDcwNDI5ZjdhYTlhOC4uNzE3NzkxZDRmYTQ1IDEwMDY0NA0KPj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oDQo+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmgNCj4+IEBAIC02Miw3 ICs2Miw2IEBAIHN0cnVjdCBrZ2RfbWVtIHsNCj4+ICAgDQo+PiAgIAlhdG9taWNfdCBpbnZhbGlk Ow0KPj4gICAJc3RydWN0IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbzsNCj4+IC0J c3RydWN0IHBhZ2UgKip1c2VyX3BhZ2VzOw0KPj4gICANCj4+ICAgCXN0cnVjdCBhbWRncHVfc3lu YyBzeW5jOw0KPj4gICANCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfYW1ka2ZkX2dwdXZtLmMNCj4+IGluZGV4IGJlMWFiNDM0NzNjNi4uMjg5Nzc5MzYwMGY3IDEw MDY0NA0KPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9n cHV2bS5jDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2Zk X2dwdXZtLmMNCj4+IEBAIC01ODIsMjggKzU4MiwxMiBAQCBzdGF0aWMgaW50IGluaXRfdXNlcl9w YWdlcyhzdHJ1Y3Qga2dkX21lbSAqbWVtLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwNCj4+ICAgCQln b3RvIG91dDsNCj4+ICAgCX0NCj4+ICAgDQo+PiAtCS8qIElmIG5vIHJlc3RvcmUgd29ya2VyIGlz IHJ1bm5pbmcgY29uY3VycmVudGx5LCB1c2VyX3BhZ2VzDQo+PiAtCSAqIHNob3VsZCBub3QgYmUg YWxsb2NhdGVkDQo+PiAtCSAqLw0KPj4gLQlXQVJOKG1lbS0+dXNlcl9wYWdlcywgIkxlYWtpbmcg dXNlcl9wYWdlcyBhcnJheSIpOw0KPj4gLQ0KPj4gLQltZW0tPnVzZXJfcGFnZXMgPSBrdm1hbGxv Y19hcnJheShiby0+dGJvLnR0bS0+bnVtX3BhZ2VzLA0KPj4gLQkJCQkJICAgc2l6ZW9mKHN0cnVj dCBwYWdlICopLA0KPj4gLQkJCQkJICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOw0KPj4gLQlp ZiAoIW1lbS0+dXNlcl9wYWdlcykgew0KPj4gLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9j YXRlIHBhZ2VzIGFycmF5XG4iLCBfX2Z1bmNfXyk7DQo+PiAtCQlyZXQgPSAtRU5PTUVNOw0KPj4g LQkJZ290byB1bnJlZ2lzdGVyX291dDsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQlyZXQgPSBhbWRncHVf dHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLCBtZW0tPnVzZXJfcGFnZXMpOw0KPj4g KwlyZXQgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLCBiby0+dGJv LnR0bS0+cGFnZXMpOw0KPj4gICAJaWYgKHJldCkgew0KPj4gICAJCXByX2VycigiJXM6IEZhaWxl ZCB0byBnZXQgdXNlciBwYWdlczogJWRcbiIsIF9fZnVuY19fLCByZXQpOw0KPj4gLQkJZ290byBm cmVlX291dDsNCj4+ICsJCWdvdG8gdW5yZWdpc3Rlcl9vdXQ7DQo+PiAgIAl9DQo+PiAgIA0KPj4g LQlhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLCBtZW0tPnVzZXJfcGFn ZXMpOw0KPj4gLQ0KPj4gICAJcmV0ID0gYW1kZ3B1X2JvX3Jlc2VydmUoYm8sIHRydWUpOw0KPj4g ICAJaWYgKHJldCkgew0KPj4gICAJCXByX2VycigiJXM6IEZhaWxlZCB0byByZXNlcnZlIEJPXG4i LCBfX2Z1bmNfXyk7DQo+PiBAQCAtNjE2LDExICs2MDAsNyBAQCBzdGF0aWMgaW50IGluaXRfdXNl cl9wYWdlcyhzdHJ1Y3Qga2dkX21lbSAqbWVtLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwNCj4+ICAg CWFtZGdwdV9ib191bnJlc2VydmUoYm8pOw0KPj4gICANCj4+ICAgcmVsZWFzZV9vdXQ6DQo+PiAt CWlmIChyZXQpDQo+PiAtCQlyZWxlYXNlX3BhZ2VzKG1lbS0+dXNlcl9wYWdlcywgYm8tPnRiby50 dG0tPm51bV9wYWdlcyk7DQo+PiAtZnJlZV9vdXQ6DQo+PiAtCWt2ZnJlZShtZW0tPnVzZXJfcGFn ZXMpOw0KPj4gLQltZW0tPnVzZXJfcGFnZXMgPSBOVUxMOw0KPj4gKwlhbWRncHVfdHRtX3R0X2dl dF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOw0KPj4gICB1bnJlZ2lzdGVyX291dDoNCj4+ ICAgCWlmIChyZXQpDQo+PiAgIAkJYW1kZ3B1X21uX3VucmVnaXN0ZXIoYm8pOw0KPj4gQEAgLTY3 OSw3ICs2NTksNiBAQCBzdGF0aWMgaW50IHJlc2VydmVfYm9fYW5kX3ZtKHN0cnVjdCBrZ2RfbWVt ICptZW0sDQo+PiAgIAljdHgtPmtmZF9iby5wcmlvcml0eSA9IDA7DQo+PiAgIAljdHgtPmtmZF9i by50di5ibyA9ICZiby0+dGJvOw0KPj4gICAJY3R4LT5rZmRfYm8udHYubnVtX3NoYXJlZCA9IDE7 DQo+PiAtCWN0eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBOVUxMOw0KPj4gICAJbGlzdF9hZGQoJmN0 eC0+a2ZkX2JvLnR2LmhlYWQsICZjdHgtPmxpc3QpOw0KPj4gICANCj4+ICAgCWFtZGdwdV92bV9n ZXRfcGRfYm8odm0sICZjdHgtPmxpc3QsICZjdHgtPnZtX3BkWzBdKTsNCj4+IEBAIC03NDMsNyAr NzIyLDYgQEAgc3RhdGljIGludCByZXNlcnZlX2JvX2FuZF9jb25kX3ZtcyhzdHJ1Y3Qga2dkX21l bSAqbWVtLA0KPj4gICAJY3R4LT5rZmRfYm8ucHJpb3JpdHkgPSAwOw0KPj4gICAJY3R4LT5rZmRf Ym8udHYuYm8gPSAmYm8tPnRibzsNCj4+ICAgCWN0eC0+a2ZkX2JvLnR2Lm51bV9zaGFyZWQgPSAx Ow0KPj4gLQljdHgtPmtmZF9iby51c2VyX3BhZ2VzID0gTlVMTDsNCj4+ICAgCWxpc3RfYWRkKCZj dHgtPmtmZF9iby50di5oZWFkLCAmY3R4LT5saXN0KTsNCj4+ICAgDQo+PiAgIAlpID0gMDsNCj4+ IEBAIC0xMzcxLDE1ICsxMzQ5LDYgQEAgaW50IGFtZGdwdV9hbWRrZmRfZ3B1dm1fZnJlZV9tZW1v cnlfb2ZfZ3B1KA0KPj4gICAJbGlzdF9kZWwoJmJvX2xpc3RfZW50cnktPmhlYWQpOw0KPj4gICAJ bXV0ZXhfdW5sb2NrKCZwcm9jZXNzX2luZm8tPmxvY2spOw0KPj4gICANCj4+IC0JLyogRnJlZSB1 c2VyIHBhZ2VzIGlmIG5lY2Vzc2FyeSAqLw0KPj4gLQlpZiAobWVtLT51c2VyX3BhZ2VzKSB7DQo+ PiAtCQlwcl9kZWJ1ZygiJXM6IEZyZWVpbmcgdXNlcl9wYWdlcyBhcnJheVxuIiwgX19mdW5jX18p Ow0KPj4gLQkJaWYgKG1lbS0+dXNlcl9wYWdlc1swXSkNCj4+IC0JCQlyZWxlYXNlX3BhZ2VzKG1l bS0+dXNlcl9wYWdlcywNCj4+IC0JCQkJCW1lbS0+Ym8tPnRiby50dG0tPm51bV9wYWdlcyk7DQo+ PiAtCQlrdmZyZWUobWVtLT51c2VyX3BhZ2VzKTsNCj4+IC0JfQ0KPj4gLQ0KPj4gICAJcmV0ID0g cmVzZXJ2ZV9ib19hbmRfY29uZF92bXMobWVtLCBOVUxMLCBCT19WTV9BTEwsICZjdHgpOw0KPj4g ICAJaWYgKHVubGlrZWx5KHJldCkpDQo+PiAgIAkJcmV0dXJuIHJldDsNCj4+IEBAIC0xODU1LDI1 ICsxODI0LDExIEBAIHN0YXRpYyBpbnQgdXBkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3Qg YW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvLA0KPj4gICANCj4+ICAgCQlibyA9IG1l bS0+Ym87DQo+PiAgIA0KPj4gLQkJaWYgKCFtZW0tPnVzZXJfcGFnZXMpIHsNCj4+IC0JCQltZW0t PnVzZXJfcGFnZXMgPQ0KPj4gLQkJCQlrdm1hbGxvY19hcnJheShiby0+dGJvLnR0bS0+bnVtX3Bh Z2VzLA0KPj4gLQkJCQkJCSBzaXplb2Yoc3RydWN0IHBhZ2UgKiksDQo+PiAtCQkJCQkJIEdGUF9L RVJORUwgfCBfX0dGUF9aRVJPKTsNCj4+IC0JCQlpZiAoIW1lbS0+dXNlcl9wYWdlcykgew0KPj4g LQkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFnZXMgYXJyYXlcbiIsDQo+PiAt CQkJCSAgICAgICBfX2Z1bmNfXyk7DQo+PiAtCQkJCXJldHVybiAtRU5PTUVNOw0KPj4gLQkJCX0N Cj4+IC0JCX0gZWxzZSBpZiAobWVtLT51c2VyX3BhZ2VzWzBdKSB7DQo+PiAtCQkJcmVsZWFzZV9w YWdlcyhtZW0tPnVzZXJfcGFnZXMsIGJvLT50Ym8udHRtLT5udW1fcGFnZXMpOw0KPj4gLQkJfQ0K Pj4gLQ0KPj4gICAJCS8qIEdldCB1cGRhdGVkIHVzZXIgcGFnZXMgKi8NCj4+ICAgCQlyZXQgPSBh bWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLA0KPj4gLQkJCQkJCSAgIG1l bS0+dXNlcl9wYWdlcyk7DQo+PiArCQkJCQkJICAgYm8tPnRiby50dG0tPnBhZ2VzKTsNCj4+ICAg CQlpZiAocmV0KSB7DQo+PiAtCQkJbWVtLT51c2VyX3BhZ2VzWzBdID0gTlVMTDsNCj4+ICsJCQli by0+dGJvLnR0bS0+cGFnZXNbMF0gPSBOVUxMOw0KPj4gICAJCQlwcl9pbmZvKCIlczogRmFpbGVk IHRvIGdldCB1c2VyIHBhZ2VzOiAlZFxuIiwNCj4+ICAgCQkJCV9fZnVuY19fLCByZXQpOw0KPj4g ICAJCQkvKiBQcmV0ZW5kIGl0IHN1Y2NlZWRlZC4gSXQgd2lsbCBmYWlsIGxhdGVyDQo+PiBAQCAt MTg4MiwxMiArMTgzNyw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhz dHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvLA0KPj4gICAJCQkgKiBzdGFs bGVkIHVzZXIgbW9kZSBxdWV1ZXMuDQo+PiAgIAkJCSAqLw0KPj4gICAJCX0NCj4+IC0NCj4+IC0J CS8qIE1hcmsgdGhlIEJPIGFzIHZhbGlkIHVubGVzcyBpdCB3YXMgaW52YWxpZGF0ZWQNCj4+IC0J CSAqIGFnYWluIGNvbmN1cnJlbnRseQ0KPj4gLQkJICovDQo+PiAtCQlpZiAoYXRvbWljX2NtcHhj aGcoJm1lbS0+aW52YWxpZCwgaW52YWxpZCwgMCkgIT0gaW52YWxpZCkNCj4+IC0JCQlyZXR1cm4g LUVBR0FJTjsNCj4+ICAgCX0NCj4+ICAgDQo+PiAgIAlyZXR1cm4gMDsNCj4+IEBAIC0xOTE3LDcg KzE4NjYsOCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3Qg YW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvKQ0KPj4gICAJCQkJICAgICBHRlBfS0VS TkVMKTsNCj4+ICAgCWlmICghcGRfYm9fbGlzdF9lbnRyaWVzKSB7DQo+PiAgIAkJcHJfZXJyKCIl czogRmFpbGVkIHRvIGFsbG9jYXRlIFBEIEJPIGxpc3QgZW50cmllc1xuIiwgX19mdW5jX18pOw0K Pj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+PiArCQlyZXQgPSAtRU5PTUVNOw0KPj4gKwkJZ290byBv dXRfbm9fbWVtOw0KPj4gICAJfQ0KPj4gICANCj4+ICAgCUlOSVRfTElTVF9IRUFEKCZyZXN2X2xp c3QpOw0KPj4gQEAgLTE5NDEsNyArMTg5MSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxp ZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8pDQo+ PiAgIAlyZXQgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZ0aWNrZXQsICZyZXN2X2xpc3QsIGZh bHNlLCAmZHVwbGljYXRlcyk7DQo+PiAgIAlXQVJOKCFsaXN0X2VtcHR5KCZkdXBsaWNhdGVzKSwg IkR1cGxpY2F0ZXMgc2hvdWxkIGJlIGVtcHR5Iik7DQo+PiAgIAlpZiAocmV0KQ0KPj4gLQkJZ290 byBvdXQ7DQo+PiArCQlnb3RvIG91dF9mcmVlOw0KPj4gICANCj4+ICAgCWFtZGdwdV9zeW5jX2Ny ZWF0ZSgmc3luYyk7DQo+PiAgIA0KPj4gQEAgLTE5NjcsMTAgKzE5MTcsOCBAQCBzdGF0aWMgaW50 IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAq cHJvY2Vzc19pbmZvKQ0KPj4gICANCj4+ICAgCQlibyA9IG1lbS0+Ym87DQo+PiAgIA0KPj4gLQkJ LyogQ29weSBwYWdlcyBhcnJheSBhbmQgdmFsaWRhdGUgdGhlIEJPIGlmIHdlIGdvdCB1c2VyIHBh Z2VzICovDQo+PiAtCQlpZiAobWVtLT51c2VyX3BhZ2VzWzBdKSB7DQo+PiAtCQkJYW1kZ3B1X3R0 bV90dF9zZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSwNCj4+IC0JCQkJCQkgICAgIG1lbS0+dXNl cl9wYWdlcyk7DQo+PiArCQkvKiBWYWxpZGF0ZSB0aGUgQk8gaWYgd2UgZ290IHVzZXIgcGFnZXMg Ki8NCj4+ICsJCWlmIChiby0+dGJvLnR0bS0+cGFnZXNbMF0pIHsNCj4+ICAgCQkJYW1kZ3B1X2Jv X3BsYWNlbWVudF9mcm9tX2RvbWFpbihibywgbWVtLT5kb21haW4pOw0KPj4gICAJCQlyZXQgPSB0 dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsNCj4+ICAgCQkJ aWYgKHJldCkgew0KPj4gQEAgLTE5NzksMTYgKzE5MjcsMTYgQEAgc3RhdGljIGludCB2YWxpZGF0 ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nlc3Nf aW5mbykNCj4+ICAgCQkJfQ0KPj4gICAJCX0NCj4+ICAgDQo+PiAtCQkvKiBWYWxpZGF0ZSBzdWNj ZWVkZWQsIG5vdyB0aGUgQk8gb3ducyB0aGUgcGFnZXMsIGZyZWUNCj4+IC0JCSAqIG91ciBjb3B5 IG9mIHRoZSBwb2ludGVyIGFycmF5LiBQdXQgdGhpcyBCTyBiYWNrIG9uDQo+PiAtCQkgKiB0aGUg dXNlcnB0cl92YWxpZF9saXN0LiBJZiB3ZSBuZWVkIHRvIHJldmFsaWRhdGUNCj4+IC0JCSAqIGl0 LCB3ZSBuZWVkIHRvIHN0YXJ0IGZyb20gc2NyYXRjaC4NCj4+IC0JCSAqLw0KPj4gLQkJa3ZmcmVl KG1lbS0+dXNlcl9wYWdlcyk7DQo+PiAtCQltZW0tPnVzZXJfcGFnZXMgPSBOVUxMOw0KPj4gICAJ CWxpc3RfbW92ZV90YWlsKCZtZW0tPnZhbGlkYXRlX2xpc3QuaGVhZCwNCj4+ICAgCQkJICAgICAg ICZwcm9jZXNzX2luZm8tPnVzZXJwdHJfdmFsaWRfbGlzdCk7DQo+PiAgIA0KPj4gKwkJLyogU3Rv cCBITU0gdHJhY2sgdGhlIHVzZXJwdHIgdXBkYXRlLiBXZSBkb250IGNoZWNrIHRoZSByZXR1cm4N Cj4+ICsJCSAqIHZhbHVlIGZvciBjb25jdXJyZW50IENQVSBwYWdlIHRhYmxlIHVwZGF0ZSBiZWNh dXNlIHdlIHdpbGwNCj4+ICsJCSAqIHJlc2NoZWR1bGUgdGhlIHJlc3RvcmUgd29ya2VyIGlmIHBy b2Nlc3NfaW5mby0+ZXZpY3RlZF9ib3MNCj4+ICsJCSAqIGlzIHVwZGF0ZWQuDQo+PiArCQkgKi8N Cj4+ICsJCWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7DQo+ PiArDQo+PiAgIAkJLyogVXBkYXRlIG1hcHBpbmcuIElmIHRoZSBCTyB3YXMgbm90IHZhbGlkYXRl ZA0KPj4gICAJCSAqIChiZWNhdXNlIHdlIGNvdWxkbid0IGdldCB1c2VyIHBhZ2VzKSwgdGhpcyB3 aWxsDQo+PiAgIAkJICogY2xlYXIgdGhlIHBhZ2UgdGFibGUgZW50cmllcywgd2hpY2ggd2lsbCBy ZXN1bHQgaW4NCj4+IEBAIC0yMDIyLDggKzE5NzAsMTUgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9p bnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nlc3NfaW5m bykNCj4+ICAgCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZ0aWNrZXQsICZyZXN2X2xpc3Qp Ow0KPj4gICAJYW1kZ3B1X3N5bmNfd2FpdCgmc3luYywgZmFsc2UpOw0KPj4gICAJYW1kZ3B1X3N5 bmNfZnJlZSgmc3luYyk7DQo+PiAtb3V0Og0KPj4gK291dF9mcmVlOg0KPj4gICAJa2ZyZWUocGRf Ym9fbGlzdF9lbnRyaWVzKTsNCj4+ICtvdXRfbm9fbWVtOg0KPj4gKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUobWVtLCB0bXBfbWVtLA0KPj4gKwkJCQkgJnByb2Nlc3NfaW5mby0+dXNlcnB0cl9p bnZhbF9saXN0LA0KPj4gKwkJCQkgdmFsaWRhdGVfbGlzdC5oZWFkKSB7DQo+PiArCQlibyA9IG1l bS0+Ym87DQo+PiArCQlhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50 dG0pOw0KPj4gKwl9DQo+PiAgIA0KPj4gICAJcmV0dXJuIHJldDsNCj4+ICAgfQ0KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmMgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jDQo+PiBpbmRleCA1Yzc5ZGE4 ZTExNTAuLjM4NDIxODM5NzBjYyAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9ib19saXN0LmMNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9ib19saXN0LmMNCj4+IEBAIC0yMDAsOCArMjAwLDYgQEAgdm9pZCBhbWRncHVf Ym9fbGlzdF9nZXRfbGlzdChzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3QgKmxpc3QsDQo+PiAgIA0KPj4g ICAJCWlmICghYm8tPnBhcmVudCkNCj4+ICAgCQkJbGlzdF9hZGRfdGFpbCgmZS0+dHYuaGVhZCwg JmJ1Y2tldFtwcmlvcml0eV0pOw0KPj4gLQ0KPj4gLQkJZS0+dXNlcl9wYWdlcyA9IE5VTEw7DQo+ PiAgIAl9DQo+PiAgIA0KPj4gICAJLyogQ29ubmVjdCB0aGUgc29ydGVkIGJ1Y2tldHMgaW4gdGhl IG91dHB1dCBsaXN0LiAqLw0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9ib19saXN0LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf Ym9fbGlzdC5oDQo+PiBpbmRleCA3YzVmNWQxNjAxZTYuLjRiZWFiMmRlMDliMyAxMDA2NDQNCj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmgNCj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmgNCj4+IEBAIC0z NSw4ICszNSw3IEBAIHN0cnVjdCBhbWRncHVfYm9fbGlzdF9lbnRyeSB7DQo+PiAgIAlzdHJ1Y3Qg dHRtX3ZhbGlkYXRlX2J1ZmZlcgl0djsNCj4+ICAgCXN0cnVjdCBhbWRncHVfYm9fdmEJCSpib192 YTsNCj4+ICAgCXVpbnQzMl90CQkJcHJpb3JpdHk7DQo+PiAtCXN0cnVjdCBwYWdlCQkJKip1c2Vy X3BhZ2VzOw0KPj4gLQlpbnQJCQkJdXNlcl9pbnZhbGlkYXRlZDsNCj4+ICsJYm9vbAkJCQl1c2Vy X2ludmFsaWRhdGVkOw0KPj4gICB9Ow0KPj4gICANCj4+ICAgc3RydWN0IGFtZGdwdV9ib19saXN0 IHsNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3Mu YyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jDQo+PiBpbmRleCAxYzQ5 YjgyNjZkNjkuLmUzMGUzOWZiNzIyNCAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9jcy5jDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfY3MuYw0KPj4gQEAgLTUyLDcgKzUyLDYgQEAgc3RhdGljIGludCBhbWRncHVfY3Nf dXNlcl9mZW5jZV9jaHVuayhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwNCj4+ICAgCXAtPnVm X2VudHJ5LnR2LmJvID0gJmJvLT50Ym87DQo+PiAgIAkvKiBPbmUgZm9yIFRUTSBhbmQgb25lIGZv ciB0aGUgQ1Mgam9iICovDQo+PiAgIAlwLT51Zl9lbnRyeS50di5udW1fc2hhcmVkID0gMjsNCj4+ IC0JcC0+dWZfZW50cnkudXNlcl9wYWdlcyA9IE5VTEw7DQo+PiAgIA0KPj4gICAJZHJtX2dlbV9v YmplY3RfcHV0X3VubG9ja2VkKGdvYmopOw0KPj4gICANCj4+IEBAIC01MzIsMjQgKzUzMSwxOSBA QCBzdGF0aWMgaW50IGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKHN0cnVjdCBhbWRncHVfY3NfcGFy c2VyICpwLA0KPj4gICANCj4+ICAgCWxpc3RfZm9yX2VhY2hfZW50cnkobG9iaiwgdmFsaWRhdGVk LCB0di5oZWFkKSB7DQo+PiAgIAkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1 X2JvKGxvYmotPnR2LmJvKTsNCj4+IC0JCWJvb2wgYmluZGluZ191c2VycHRyID0gZmFsc2U7DQo+ PiAgIAkJc3RydWN0IG1tX3N0cnVjdCAqdXNlcm1tOw0KPj4gICANCj4+ICAgCQl1c2VybW0gPSBh bWRncHVfdHRtX3R0X2dldF91c2VybW0oYm8tPnRiby50dG0pOw0KPj4gICAJCWlmICh1c2VybW0g JiYgdXNlcm1tICE9IGN1cnJlbnQtPm1tKQ0KPj4gICAJCQlyZXR1cm4gLUVQRVJNOw0KPj4gICAN Cj4+IC0JCS8qIENoZWNrIGlmIHdlIGhhdmUgdXNlciBwYWdlcyBhbmQgbm9ib2R5IGJvdW5kIHRo ZSBCTyBhbHJlYWR5ICovDQo+PiAtCQlpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3Bh Z2VzKGJvLT50Ym8udHRtKSAmJg0KPj4gLQkJICAgIGxvYmotPnVzZXJfcGFnZXMpIHsNCj4+ICsJ CWlmIChhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoYm8tPnRiby50dG0pICYmDQo+PiArCQkgICAg bG9iai0+dXNlcl9pbnZhbGlkYXRlZCkgew0KPj4gICAJCQlhbWRncHVfYm9fcGxhY2VtZW50X2Zy b21fZG9tYWluKGJvLA0KPj4gICAJCQkJCQkJQU1ER1BVX0dFTV9ET01BSU5fQ1BVKTsNCj4+ICAg CQkJciA9IHR0bV9ib192YWxpZGF0ZSgmYm8tPnRibywgJmJvLT5wbGFjZW1lbnQsICZjdHgpOw0K Pj4gICAJCQlpZiAocikNCj4+ICAgCQkJCXJldHVybiByOw0KPj4gLQkJCWFtZGdwdV90dG1fdHRf c2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sDQo+PiAtCQkJCQkJICAgICBsb2JqLT51c2VyX3Bh Z2VzKTsNCj4+IC0JCQliaW5kaW5nX3VzZXJwdHIgPSB0cnVlOw0KPj4gICAJCX0NCj4+ICAgDQo+ PiAgIAkJaWYgKHAtPmV2aWN0YWJsZSA9PSBsb2JqKQ0KPj4gQEAgLTU1OCwxMSArNTUyLDYgQEAg c3RhdGljIGludCBhbWRncHVfY3NfbGlzdF92YWxpZGF0ZShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNl ciAqcCwNCj4+ICAgCQlyID0gYW1kZ3B1X2NzX3ZhbGlkYXRlKHAsIGJvKTsNCj4+ICAgCQlpZiAo cikNCj4+ICAgCQkJcmV0dXJuIHI7DQo+PiAtDQo+PiAtCQlpZiAoYmluZGluZ191c2VycHRyKSB7 DQo+PiAtCQkJa3ZmcmVlKGxvYmotPnVzZXJfcGFnZXMpOw0KPj4gLQkJCWxvYmotPnVzZXJfcGFn ZXMgPSBOVUxMOw0KPj4gLQkJfQ0KPj4gICAJfQ0KPj4gICAJcmV0dXJuIDA7DQo+PiAgIH0NCj4+ IEBAIC01NzcsNyArNTY2LDcgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1 Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwNCj4+ICAgCXN0cnVjdCBhbWRncHVfYm8gKmdkczsNCj4+ ICAgCXN0cnVjdCBhbWRncHVfYm8gKmd3czsNCj4+ICAgCXN0cnVjdCBhbWRncHVfYm8gKm9hOw0K Pj4gLQl1bnNpZ25lZCB0cmllcyA9IDEwOw0KPj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZXJwYWdl X2xpc3Q7DQo+PiAgIAlpbnQgcjsNCj4+ICAgDQo+PiAgIAlJTklUX0xJU1RfSEVBRCgmcC0+dmFs aWRhdGVkKTsNCj4+IEBAIC01ODYsNyArNTc1LDYgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFy c2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwNCj4+ICAgCWlmIChjcy0+aW4uYm9f bGlzdF9oYW5kbGUpIHsNCj4+ICAgCQlpZiAocC0+Ym9fbGlzdCkNCj4+ICAgCQkJcmV0dXJuIC1F SU5WQUw7DQo+PiAtDQo+PiAgIAkJciA9IGFtZGdwdV9ib19saXN0X2dldChmcHJpdiwgY3MtPmlu LmJvX2xpc3RfaGFuZGxlLA0KPj4gICAJCQkJICAgICAgICZwLT5ib19saXN0KTsNCj4+ICAgCQlp ZiAocikNCj4+IEBAIC02MTMsNzkgKzYwMSw3MiBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19wYXJz ZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLA0KPj4gICAJaWYgKHAtPnVmX2VudHJ5 LnR2LmJvICYmICF0dG1fdG9fYW1kZ3B1X2JvKHAtPnVmX2VudHJ5LnR2LmJvKS0+cGFyZW50KQ0K Pj4gICAJCWxpc3RfYWRkKCZwLT51Zl9lbnRyeS50di5oZWFkLCAmcC0+dmFsaWRhdGVkKTsNCj4+ ICAgDQo+PiAtCXdoaWxlICgxKSB7DQo+PiAtCQlzdHJ1Y3QgbGlzdF9oZWFkIG5lZWRfcGFnZXM7 DQo+PiArCXIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZwLT50aWNrZXQsICZwLT52YWxpZGF0 ZWQsIHRydWUsDQo+PiArCQkJCSAgICZkdXBsaWNhdGVzKTsNCj4+ICsJaWYgKHVubGlrZWx5KHIg IT0gMCkpIHsNCj4+ICsJCWlmIChyICE9IC1FUkVTVEFSVFNZUykNCj4+ICsJCQlEUk1fRVJST1Io InR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMgZmFpbGVkLlxuIik7DQo+PiArCQlnb3RvIG91dDsNCj4+ ICsJfQ0KPj4gICANCj4+IC0JCXIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZwLT50aWNrZXQs ICZwLT52YWxpZGF0ZWQsIHRydWUsDQo+PiAtCQkJCQkgICAmZHVwbGljYXRlcyk7DQo+PiAtCQlp ZiAodW5saWtlbHkociAhPSAwKSkgew0KPj4gLQkJCWlmIChyICE9IC1FUkVTVEFSVFNZUykNCj4+ IC0JCQkJRFJNX0VSUk9SKCJ0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzIGZhaWxlZC5cbiIpOw0KPj4g LQkJCWdvdG8gZXJyb3JfZnJlZV9wYWdlczsNCj4+IC0JCX0NCj4+ICsJSU5JVF9MSVNUX0hFQUQo JnVzZXJwYWdlX2xpc3QpOw0KPj4gKwlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2Vu dHJ5KGUsIHAtPmJvX2xpc3QpIHsNCj4+ICsJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gdHRtX3Rv X2FtZGdwdV9ibyhlLT50di5ibyk7DQo+PiAgIA0KPj4gLQkJSU5JVF9MSVNUX0hFQUQoJm5lZWRf cGFnZXMpOw0KPj4gLQkJYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRyeShlLCBw LT5ib19saXN0KSB7DQo+PiAtCQkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1 X2JvKGUtPnR2LmJvKTsNCj4+ICsJCWxpc3RfZGVsKCZlLT50di5oZWFkKTsNCj4+ICsJCWxpc3Rf YWRkKCZlLT50di5oZWFkLCAmdXNlcnBhZ2VfbGlzdCk7DQo+PiArCQlhbWRncHVfYm9fdW5yZXNl cnZlKGJvKTsNCj4+ICsJfQ0KPj4gICANCj4+IC0JCQlpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRy X2ludmFsaWRhdGVkKGJvLT50Ym8udHRtLA0KPj4gLQkJCQkgJmUtPnVzZXJfaW52YWxpZGF0ZWQp ICYmIGUtPnVzZXJfcGFnZXMpIHsNCj4+ICsJLyogR2V0IHVzZXJwdHIgYmFja2luZyBwYWdlcy4g SWYgcGFnZXMgYXJlIHVwZGF0ZWQgYWZ0ZXIgcmVnaXN0ZXJlZA0KPj4gKwkgKiBpbiBhbWRncHVf Z2VtX3VzZXJwdHJfaW9jdGwoKSwgYW1kZ3B1X2NzX2xpc3RfdmFsaWRhdGUoKSB3aWxsIGRvDQo+ PiArCSAqIGFtZGdwdV90dG1fYmFja2VuZF9iaW5kKCkgdG8gZmx1c2ggYW5kIGludmFsaWRhdGUg bmV3IHBhZ2VzDQo+PiArCSAqLw0KPj4gKwlpZiAoIWxpc3RfZW1wdHkoJnVzZXJwYWdlX2xpc3Qp KSB7DQo+PiArCQkvKiBVbnJlc2VydmUgZXZlcnl0aGluZyBhZ2FpbiwgdG8gYXZvaWQgY2lyY3Vs YXIgbG9ja2luZyBjYXNlDQo+PiArCQkgKiBibzo6cmVzZXJ2ZSAtPiBtbWFwLT5zZW0NCj4+ICsJ CSAqLw0KPj4gKwkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnAtPnRpY2tldCwgJnAtPnZh bGlkYXRlZCk7DQo+PiAgIA0KPj4gLQkJCQkvKiBXZSBhY3F1aXJlZCBhIHBhZ2UgYXJyYXksIGJ1 dCBzb21lYm9keQ0KPj4gLQkJCQkgKiBpbnZhbGlkYXRlZCBpdC4gRnJlZSBpdCBhbmQgdHJ5IGFn YWluDQo+PiAtCQkJCSAqLw0KPj4gLQkJCQlyZWxlYXNlX3BhZ2VzKGUtPnVzZXJfcGFnZXMsDQo+ PiAtCQkJCQkgICAgICBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsNCj4+IC0JCQkJa3ZmcmVlKGUt PnVzZXJfcGFnZXMpOw0KPj4gLQkJCQllLT51c2VyX3BhZ2VzID0gTlVMTDsNCj4+ICsJCWxpc3Rf Zm9yX2VhY2hfZW50cnkoZSwgJnVzZXJwYWdlX2xpc3QsIHR2LmhlYWQpIHsNCj4+ICsJCQlzdHJ1 Y3QgYW1kZ3B1X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYuYm8pOw0KPj4gKwkJCWJv b2wgdXNlcnBhZ2VfaW52YWxpZGF0ZWQgPSBmYWxzZTsNCj4+ICsJCQlzdHJ1Y3QgcGFnZSAqKnBh Z2VzOw0KPj4gKwkJCWludCBpOw0KPj4gKw0KPj4gKwkJCXBhZ2VzID0ga3ZtYWxsb2NfYXJyYXko Ym8tPnRiby50dG0tPm51bV9wYWdlcywNCj4+ICsJCQkJCQlzaXplb2YoKnBhZ2VzKSwNCj4+ICsJ CQkJCQlHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7DQo+PiArCQkJaWYgKCFwYWdlcykgew0KPj4g KwkJCQlEUk1fRVJST1IoImNhbGxvYyBmYWlsdXJlXG4iKTsNCj4+ICsJCQkJcmV0dXJuIC1FTk9N RU07DQo+PiAgIAkJCX0NCj4+ICAgDQo+PiAtCQkJaWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9u ZWVkc19wYWdlcyhiby0+dGJvLnR0bSkgJiYNCj4+IC0JCQkgICAgIWUtPnVzZXJfcGFnZXMpIHsN Cj4+IC0JCQkJbGlzdF9kZWwoJmUtPnR2LmhlYWQpOw0KPj4gLQkJCQlsaXN0X2FkZCgmZS0+dHYu aGVhZCwgJm5lZWRfcGFnZXMpOw0KPj4gLQ0KPj4gLQkJCQlhbWRncHVfYm9fdW5yZXNlcnZlKGJv KTsNCj4+ICsJCQlyID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSwg cGFnZXMpOw0KPj4gKwkJCWlmIChyKSB7DQo+PiArCQkJCWt2ZnJlZShwYWdlcyk7DQo+PiArCQkJ CXJldHVybiByOw0KPj4gICAJCQl9DQo+PiAtCQl9DQo+PiAgIA0KPj4gLQkJaWYgKGxpc3RfZW1w dHkoJm5lZWRfcGFnZXMpKQ0KPj4gLQkJCWJyZWFrOw0KPj4gLQ0KPj4gLQkJLyogVW5yZXNlcnZl IGV2ZXJ5dGhpbmcgYWdhaW4uICovDQo+PiAtCQl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigm cC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkKTsNCj4+IC0NCj4+IC0JCS8qIFdlIHRyaWVkIHRvbyBt YW55IHRpbWVzLCBqdXN0IGFib3J0ICovDQo+PiAtCQlpZiAoIS0tdHJpZXMpIHsNCj4+IC0JCQly ID0gLUVERUFETEs7DQo+PiAtCQkJRFJNX0VSUk9SKCJkZWFkbG9jayBpbiAlc1xuIiwgX19mdW5j X18pOw0KPj4gLQkJCWdvdG8gZXJyb3JfZnJlZV9wYWdlczsNCj4+ICsJCQlmb3IgKGkgPSAwOyBp IDwgYm8tPnRiby50dG0tPm51bV9wYWdlczsgaSsrKSB7DQo+PiArCQkJCWlmIChiby0+dGJvLnR0 bS0+cGFnZXNbaV0gIT0gcGFnZXNbaV0pIHsNCj4+ICsJCQkJCWJvLT50Ym8udHRtLT5wYWdlc1tp XSA9IHBhZ2VzW2ldOw0KPj4gKwkJCQkJdXNlcnBhZ2VfaW52YWxpZGF0ZWQgPSB0cnVlOw0KPj4g KwkJCQl9DQo+PiArCQkJfQ0KPj4gKwkJCWUtPnVzZXJfaW52YWxpZGF0ZWQgPSB1c2VycGFnZV9p bnZhbGlkYXRlZDsNCj4+ICsJCQlrdmZyZWUocGFnZXMpOw0KPj4gICAJCX0NCj4+ICAgDQo+PiAt CQkvKiBGaWxsIHRoZSBwYWdlIGFycmF5cyBmb3IgYWxsIHVzZXJwdHJzLiAqLw0KPj4gLQkJbGlz dF9mb3JfZWFjaF9lbnRyeShlLCAmbmVlZF9wYWdlcywgdHYuaGVhZCkgew0KPj4gLQkJCXN0cnVj dCB0dG1fdHQgKnR0bSA9IGUtPnR2LmJvLT50dG07DQo+PiAtDQo+PiAtCQkJZS0+dXNlcl9wYWdl cyA9IGt2bWFsbG9jX2FycmF5KHR0bS0+bnVtX3BhZ2VzLA0KPj4gLQkJCQkJCQkgc2l6ZW9mKHN0 cnVjdCBwYWdlKiksDQo+PiAtCQkJCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7DQo+PiAt CQkJaWYgKCFlLT51c2VyX3BhZ2VzKSB7DQo+PiAtCQkJCXIgPSAtRU5PTUVNOw0KPj4gLQkJCQlE Uk1fRVJST1IoImNhbGxvYyBmYWlsdXJlIGluICVzXG4iLCBfX2Z1bmNfXyk7DQo+PiAtCQkJCWdv dG8gZXJyb3JfZnJlZV9wYWdlczsNCj4+IC0JCQl9DQo+PiArCQlsaXN0X3NwbGljZSgmdXNlcnBh Z2VfbGlzdCwgJnAtPnZhbGlkYXRlZCk7DQo+PiAgIA0KPj4gLQkJCXIgPSBhbWRncHVfdHRtX3R0 X2dldF91c2VyX3BhZ2VzKHR0bSwgZS0+dXNlcl9wYWdlcyk7DQo+PiAtCQkJaWYgKHIpIHsNCj4+ IC0JCQkJRFJNX0VSUk9SKCJhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzIGZhaWxlZC5cbiIp Ow0KPj4gLQkJCQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7DQo+PiAtCQkJCWUtPnVzZXJfcGFnZXMg PSBOVUxMOw0KPj4gLQkJCQlnb3RvIGVycm9yX2ZyZWVfcGFnZXM7DQo+PiAtCQkJfQ0KPj4gKwkJ ciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCwgdHJ1 ZSwNCj4+ICsJCQkJCSAgICZkdXBsaWNhdGVzKTsNCj4+ICsJCWlmICh1bmxpa2VseShyICE9IDAp KSB7DQo+PiArCQkJaWYgKHIgIT0gLUVSRVNUQVJUU1lTKQ0KPj4gKwkJCQlEUk1fRVJST1IoInR0 bV9ldV9yZXNlcnZlX2J1ZmZlcnMgZmFpbGVkLlxuIik7DQo+PiArCQkJZ290byBvdXQ7DQo+PiAg IAkJfQ0KPj4gLQ0KPj4gLQkJLyogQW5kIHRyeSBhZ2Fpbi4gKi8NCj4+IC0JCWxpc3Rfc3BsaWNl KCZuZWVkX3BhZ2VzLCAmcC0+dmFsaWRhdGVkKTsNCj4+ICAgCX0NCj4+ICAgDQo+PiAgIAlhbWRn cHVfY3NfZ2V0X3RocmVzaG9sZF9mb3JfbW92ZXMocC0+YWRldiwgJnAtPmJ5dGVzX21vdmVkX3Ro cmVzaG9sZCwNCj4+IEBAIC03NTQsMTcgKzczNSw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3Bh cnNlcl9ib3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsDQo+PiAgIGVycm9yX3ZhbGlkYXRl Og0KPj4gICAJaWYgKHIpDQo+PiAgIAkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnAtPnRp Y2tldCwgJnAtPnZhbGlkYXRlZCk7DQo+PiAtDQo+PiAtZXJyb3JfZnJlZV9wYWdlczoNCj4+IC0N Cj4+IC0JYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRyeShlLCBwLT5ib19saXN0 KSB7DQo+PiAtCQlpZiAoIWUtPnVzZXJfcGFnZXMpDQo+PiAtCQkJY29udGludWU7DQo+PiAtDQo+ PiAtCQlyZWxlYXNlX3BhZ2VzKGUtPnVzZXJfcGFnZXMsIGUtPnR2LmJvLT50dG0tPm51bV9wYWdl cyk7DQo+PiAtCQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7DQo+PiAtCX0NCj4+IC0NCj4+ICtvdXQ6 DQo+PiAgIAlyZXR1cm4gcjsNCj4+ICAgfQ0KPj4gICANCj4+IEBAIC0xMjEzLDggKzExODQsNyBA QCBzdGF0aWMgaW50IGFtZGdwdV9jc19zdWJtaXQoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAs DQo+PiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmU7DQo+PiAgIAlzdHJ1Y3QgYW1k Z3B1X2pvYiAqam9iOw0KPj4gICAJdWludDY0X3Qgc2VxOw0KPj4gLQ0KPj4gLQlpbnQgcjsNCj4+ ICsJaW50IHIgPSAwOw0KPj4gICANCj4+ICAgCWpvYiA9IHAtPmpvYjsNCj4+ICAgCXAtPmpvYiA9 IE5VTEw7DQo+PiBAQCAtMTIyMywxNSArMTE5MywyMSBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19z dWJtaXQoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsDQo+PiAgIAlpZiAocikNCj4+ICAgCQln b3RvIGVycm9yX3VubG9jazsNCj4+ICAgDQo+PiAtCS8qIE5vIG1lbW9yeSBhbGxvY2F0aW9uIGlz IGFsbG93ZWQgd2hpbGUgaG9sZGluZyB0aGUgbW4gbG9jayAqLw0KPj4gKwkvKiBObyBtZW1vcnkg YWxsb2NhdGlvbiBpcyBhbGxvd2VkIHdoaWxlIGhvbGRpbmcgdGhlIG1uIGxvY2suDQo+PiArCSAq IHAtPm1uIGlzIGhvbGQgdW50aWwgYW1kZ3B1X2NzX3N1Ym1pdCBpcyBmaW5pc2hlZCBhbmQgZmVu Y2UgaXMgYWRkZWQNCj4+ICsJICogdG8gQk9zLg0KPj4gKwkgKi8NCj4+ICAgCWFtZGdwdV9tbl9s b2NrKHAtPm1uKTsNCj4+ICsNCj4+ICsJLyogSWYgdXNlcnB0ciBhcmUgdXBkYXRlZCBhZnRlciBh bWRncHVfY3NfcGFyc2VyX2JvcygpLCByZXN0YXJ0IGNzICovDQo+PiAgIAlhbWRncHVfYm9fbGlz dF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xpc3QpIHsNCj4+ICAgCQlzdHJ1Y3Qg YW1kZ3B1X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYuYm8pOw0KPj4gICANCj4+IC0J CWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoYm8tPnRiby50dG0pKSB7DQo+ PiAtCQkJciA9IC1FUkVTVEFSVFNZUzsNCj4+IC0JCQlnb3RvIGVycm9yX2Fib3J0Ow0KPj4gLQkJ fQ0KPj4gKwkJciB8PSAhYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKGJvLT50Ym8u dHRtKTsNCj4+ICsJfQ0KPj4gKwlpZiAocikgew0KPj4gKwkJciA9IC1FUkVTVEFSVFNZUzsNCj4+ ICsJCWdvdG8gZXJyb3JfYWJvcnQ7DQo+PiAgIAl9DQo+PiAgIA0KPj4gICAJam9iLT5vd25lciA9 IHAtPmZpbHA7DQo+PiBAQCAtMTI3OCwxNCArMTI1NCwyMCBAQCBzdGF0aWMgaW50IGFtZGdwdV9j c19zdWJtaXQoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsDQo+PiAgIGludCBhbWRncHVfY3Nf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxl ICpmaWxwKQ0KPj4gICB7DQo+PiAgIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRldi0+ ZGV2X3ByaXZhdGU7DQo+PiAtCXVuaW9uIGRybV9hbWRncHVfY3MgKmNzID0gZGF0YTsNCj4+IC0J c3RydWN0IGFtZGdwdV9jc19wYXJzZXIgcGFyc2VyID0ge307DQo+PiAtCWJvb2wgcmVzZXJ2ZWRf YnVmZmVycyA9IGZhbHNlOw0KPj4gKwl1bmlvbiBkcm1fYW1kZ3B1X2NzICpjczsNCj4+ICsJc3Ry dWN0IGFtZGdwdV9jc19wYXJzZXIgcGFyc2VyOw0KPj4gKwlib29sIHJlc2VydmVkX2J1ZmZlcnM7 DQo+PiArCWludCB0cmllcyA9IDEwOw0KPj4gICAJaW50IGksIHI7DQo+PiAgIA0KPj4gICAJaWYg KCFhZGV2LT5hY2NlbF93b3JraW5nKQ0KPj4gICAJCXJldHVybiAtRUJVU1k7DQo+PiAgIA0KPj4g K3Jlc3RhcnQ6DQo+PiArCW1lbXNldCgmcGFyc2VyLCAwLCBzaXplb2YocGFyc2VyKSk7DQo+PiAr CWNzID0gZGF0YTsNCj4+ICsJcmVzZXJ2ZWRfYnVmZmVycyA9IGZhbHNlOw0KPj4gKw0KPj4gICAJ cGFyc2VyLmFkZXYgPSBhZGV2Ow0KPj4gICAJcGFyc2VyLmZpbHAgPSBmaWxwOw0KPj4gICANCj4+ IEBAIC0xMzI3LDYgKzEzMDksMTUgQEAgaW50IGFtZGdwdV9jc19pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApDQo+PiAgIA0KPj4g ICBvdXQ6DQo+PiAgIAlhbWRncHVfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgciwgcmVzZXJ2ZWRf YnVmZmVycyk7DQo+PiArDQo+PiArCWlmIChyID09IC1FUkVTVEFSVFNZUykgew0KPj4gKwkJaWYg KCEtLXRyaWVzKSB7DQo+PiArCQkJRFJNX0VSUk9SKCJQb3NzaWJsZSBkZWFkbG9jaz8gUmV0cnkg dG9vIG1hbnkgdGltZXNcbiIpOw0KPj4gKwkJCXJldHVybiAtRURFQURMSzsNCj4+ICsJCX0NCj4+ ICsJCWdvdG8gcmVzdGFydDsNCj4+ICsJfQ0KPj4gKw0KPj4gICAJcmV0dXJuIHI7DQo+PiAgIH0N Cj4+ICAgDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jDQo+PiBpbmRl eCBmNGYwMDIxNzU0NmUuLjkyMDI1OTkzYmZiMSAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYw0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2dlbS5jDQo+PiBAQCAtMzM2LDI2ICszMzYsMjQgQEAgaW50IGFtZGdw dV9nZW1fdXNlcnB0cl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLA0K Pj4gICANCj4+ICAgCQlyID0gYW1kZ3B1X2JvX3Jlc2VydmUoYm8sIHRydWUpOw0KPj4gICAJCWlm IChyKQ0KPj4gLQkJCWdvdG8gZnJlZV9wYWdlczsNCj4+ICsJCQlnb3RvIHVzZXJfcGFnZXNfZG9u ZTsNCj4+ICAgDQo+PiAgIAkJYW1kZ3B1X2JvX3BsYWNlbWVudF9mcm9tX2RvbWFpbihibywgQU1E R1BVX0dFTV9ET01BSU5fR1RUKTsNCj4+ICAgCQlyID0gdHRtX2JvX3ZhbGlkYXRlKCZiby0+dGJv LCAmYm8tPnBsYWNlbWVudCwgJmN0eCk7DQo+PiAgIAkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7 DQo+PiAgIAkJaWYgKHIpDQo+PiAtCQkJZ290byBmcmVlX3BhZ2VzOw0KPj4gKwkJCWdvdG8gdXNl cl9wYWdlc19kb25lOw0KPj4gICAJfQ0KPj4gICANCj4+ICAgCXIgPSBkcm1fZ2VtX2hhbmRsZV9j cmVhdGUoZmlscCwgZ29iaiwgJmhhbmRsZSk7DQo+PiAtCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20g YWxsb2NhdGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93ICovDQo+PiAtCWRybV9nZW1fb2JqZWN0X3B1 dF91bmxvY2tlZChnb2JqKTsNCj4+ICAgCWlmIChyKQ0KPj4gLQkJcmV0dXJuIHI7DQo+PiArCQln b3RvIHVzZXJfcGFnZXNfZG9uZTsNCj4+ICAgDQo+PiAgIAlhcmdzLT5oYW5kbGUgPSBoYW5kbGU7 DQo+PiAtCXJldHVybiAwOw0KPj4gICANCj4+IC1mcmVlX3BhZ2VzOg0KPj4gLQlyZWxlYXNlX3Bh Z2VzKGJvLT50Ym8udHRtLT5wYWdlcywgYm8tPnRiby50dG0tPm51bV9wYWdlcyk7DQo+PiArdXNl cl9wYWdlc19kb25lOg0KPj4gKwlpZiAoYXJncy0+ZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJf VkFMSURBVEUpDQo+PiArCQlhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRi by50dG0pOw0KPj4gICANCj4+ICAgcmVsZWFzZV9vYmplY3Q6DQo+PiAgIAlkcm1fZ2VtX29iamVj dF9wdXRfdW5sb2NrZWQoZ29iaik7DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X21uLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf bW4uYw0KPj4gaW5kZXggNWQ1MThkMmJiOWJlLi41YzI0ZmIyNzA0ODAgMTAwNjQ0DQo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYw0KPj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmMNCj4+IEBAIC0yMjksOCArMjI5LDYgQEAg c3RhdGljIHZvaWQgYW1kZ3B1X21uX2ludmFsaWRhdGVfbm9kZShzdHJ1Y3QgYW1kZ3B1X21uX25v ZGUgKm5vZGUsDQo+PiAgIAkJCXRydWUsIGZhbHNlLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7DQo+ PiAgIAkJaWYgKHIgPD0gMCkNCj4+ICAgCQkJRFJNX0VSUk9SKCIoJWxkKSBmYWlsZWQgdG8gd2Fp dCBmb3IgdXNlciBib1xuIiwgcik7DQo+PiAtDQo+PiAtCQlhbWRncHVfdHRtX3R0X21hcmtfdXNl cl9wYWdlcyhiby0+dGJvLnR0bSk7DQo+PiAgIAl9DQo+PiAgIH0NCj4+ICAgDQo+PiBAQCAtMzU2 LDcgKzM1NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaG1tX21pcnJvcl9vcHMgYW1kZ3B1X2htbV9taXJy b3Jfb3BzW10gPSB7DQo+PiAgICAqIEBhZGV2OiBhbWRncHUgZGV2aWNlIHBvaW50ZXINCj4+ICAg ICogQHR5cGU6IHR5cGUgb2YgTU1VIG5vdGlmaWVyIGNvbnRleHQNCj4+ICAgICoNCj4+IC0gKiBD cmVhdGVzIGEgSE1NIG1pcnJvciBjb250ZXh0IGZvciBjdXJyZW50LT5tbS4NCj4+ICsgKiBDcmVh dGVzIGEgSE1NIG1pcnJvciBjb250ZXh0IGZvciBtbS4NCj4gDQo+IFBsZWFzZSByZXN0b3JlIHRo ZSBvcmlnaW5hbCBjb21tZW50LiBObyBuZWVkIHRvIGNoYW5nZSB0aGlzLg0KPiANCj4gDQo+PiAg ICAqLw0KPj4gICBzdHJ1Y3QgYW1kZ3B1X21uICphbWRncHVfbW5fZ2V0KHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LA0KPj4gICAJCQkJZW51bSBhbWRncHVfbW5fdHlwZSB0eXBlKQ0KPj4gQEAg LTUxMywzICs1MTEsMjYgQEAgdm9pZCBhbWRncHVfbW5fdW5yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1 X2JvICpibykNCj4+ICAgCW11dGV4X3VubG9jaygmYWRldi0+bW5fbG9jayk7DQo+PiAgIH0NCj4+ ICAgDQo+PiArLyogZmxhZ3MgdXNlZCBieSBITU0gaW50ZXJuYWwsIG5vdCByZWxhdGVkIHRvIENQ VS9HUFUgUFRFIGZsYWdzICovDQo+PiArc3RhdGljIGNvbnN0IHVpbnQ2NF90IGhtbV9yYW5nZV9m bGFnc1tITU1fUEZOX0ZMQUdfTUFYXSA9IHsNCj4+ICsJCSgxIDw8IDApLCAvKiBITU1fUEZOX1ZB TElEICovDQo+PiArCQkoMSA8PCAxKSwgLyogSE1NX1BGTl9XUklURSAqLw0KPj4gKwkJMCAvKiBI TU1fUEZOX0RFVklDRV9QUklWQVRFICovDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qg dWludDY0X3QgaG1tX3JhbmdlX3ZhbHVlc1tITU1fUEZOX1ZBTFVFX01BWF0gPSB7DQo+PiArCQkw eGZmZmZmZmZmZmZmZmZmZmVVTCwgLyogSE1NX1BGTl9FUlJPUiAqLw0KPj4gKwkJMCwgLyogSE1N X1BGTl9OT05FICovDQo+PiArCQkweGZmZmZmZmZmZmZmZmZmZmNVTCAvKiBITU1fUEZOX1NQRUNJ QUwgKi8NCj4+ICt9Ow0KPj4gKw0KPj4gK3ZvaWQgYW1kZ3B1X2htbV9pbml0X3JhbmdlKHN0cnVj dCBobW1fcmFuZ2UgKnJhbmdlKQ0KPj4gK3sNCj4+ICsJaWYgKHJhbmdlKSB7DQo+PiArCQlyYW5n ZS0+ZmxhZ3MgPSBobW1fcmFuZ2VfZmxhZ3M7DQo+PiArCQlyYW5nZS0+dmFsdWVzID0gaG1tX3Jh bmdlX3ZhbHVlczsNCj4+ICsJCXJhbmdlLT5wZm5fc2hpZnQgPSBQQUdFX1NISUZUOw0KPj4gKwkJ cmFuZ2UtPnBmbnMgPSBOVUxMOw0KPj4gKwkJSU5JVF9MSVNUX0hFQUQoJnJhbmdlLT5saXN0KTsN Cj4+ICsJfQ0KPj4gK30NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfbW4uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oDQo+ PiBpbmRleCAwYTUxZmQwMDAyMWMuLjQ4MDNlMjE2ZTE3NCAxMDA2NDQNCj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oDQo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaA0KPj4gQEAgLTI1LDkgKzI1LDEwIEBADQo+PiAgICNk ZWZpbmUgX19BTURHUFVfTU5fSF9fDQo+PiAgIA0KPj4gICAvKg0KPj4gLSAqIE1NVSBOb3RpZmll cg0KPj4gKyAqIEhNTSBtaXJyb3INCj4+ICAgICovDQo+PiAgIHN0cnVjdCBhbWRncHVfbW47DQo+ PiArc3RydWN0IGhtbV9yYW5nZTsNCj4+ICAgDQo+PiAgIGVudW0gYW1kZ3B1X21uX3R5cGUgew0K Pj4gICAJQU1ER1BVX01OX1RZUEVfR0ZYLA0KPj4gQEAgLTQxLDYgKzQyLDcgQEAgc3RydWN0IGFt ZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwNCj4+ICAg CQkJCWVudW0gYW1kZ3B1X21uX3R5cGUgdHlwZSk7DQo+PiAgIGludCBhbWRncHVfbW5fcmVnaXN0 ZXIoc3RydWN0IGFtZGdwdV9ibyAqYm8sIHVuc2lnbmVkIGxvbmcgYWRkcik7DQo+PiAgIHZvaWQg YW1kZ3B1X21uX3VucmVnaXN0ZXIoc3RydWN0IGFtZGdwdV9ibyAqYm8pOw0KPj4gK3ZvaWQgYW1k Z3B1X2htbV9pbml0X3JhbmdlKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTsNCj4+ICAgI2Vsc2UN Cj4+ICAgc3RhdGljIGlubGluZSB2b2lkIGFtZGdwdV9tbl9sb2NrKHN0cnVjdCBhbWRncHVfbW4g Km1uKSB7fQ0KPj4gICBzdGF0aWMgaW5saW5lIHZvaWQgYW1kZ3B1X21uX3VubG9jayhzdHJ1Y3Qg YW1kZ3B1X21uICptbikge30NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRt LmMNCj4+IGluZGV4IGM5MWVjMzEwMWQwMC4uNjBlN2ZmNGE5MDZkIDEwMDY0NA0KPj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jDQo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMNCj4+IEBAIC00Myw2ICs0Myw3IEBADQo+ PiAgICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+DQo+PiAgICNpbmNsdWRlIDxsaW51eC9kZWJ1 Z2ZzLmg+DQo+PiAgICNpbmNsdWRlIDxsaW51eC9pb21tdS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51 eC9obW0uaD4NCj4+ICAgI2luY2x1ZGUgImFtZGdwdS5oIg0KPj4gICAjaW5jbHVkZSAiYW1kZ3B1 X29iamVjdC5oIg0KPj4gICAjaW5jbHVkZSAiYW1kZ3B1X3RyYWNlLmgiDQo+PiBAQCAtNzA1LDEx ICs3MDYsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbWRncHVfdHRtX2lvX21lbV9wZm4oc3Ry dWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywNCj4+ICAgLyoNCj4+ICAgICogVFRNIGJhY2tlbmQg ZnVuY3Rpb25zLg0KPj4gICAgKi8NCj4+IC1zdHJ1Y3QgYW1kZ3B1X3R0bV9ndXBfdGFza19saXN0 IHsNCj4+IC0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0Ow0KPj4gLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJ KnRhc2s7DQo+PiAtfTsNCj4+IC0NCj4+ICAgc3RydWN0IGFtZGdwdV90dG1fdHQgew0KPj4gICAJ c3RydWN0IHR0bV9kbWFfdHQJdHRtOw0KPj4gICAJdTY0CQkJb2Zmc2V0Ow0KPj4gQEAgLTcxOCwx MDcgKzcxNCw5NyBAQCBzdHJ1Y3QgYW1kZ3B1X3R0bV90dCB7DQo+PiAgIAl1aW50MzJfdAkJdXNl cmZsYWdzOw0KPj4gICAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgZ3VwdGFza2xvY2s7DQo+PiAg IAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBndXB0YXNrczsNCj4+IC0JYXRvbWljX3QJCW1tdV9p bnZhbGlkYXRpb25zOw0KPj4gLQl1aW50MzJfdAkJbGFzdF9zZXRfcGFnZXM7DQo+PiArCXN0cnVj dCBobW1fcmFuZ2UJcmFuZ2U7DQo+PiAgIH07DQo+PiAgIA0KPj4gICAvKioNCj4+IC0gKiBhbWRn cHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzIC0gUGluIHBhZ2VzIG9mIG1lbW9yeSBwb2ludGVkIHRv IGJ5IGEgVVNFUlBUUg0KPj4gLSAqIHBvaW50ZXIgdG8gbWVtb3J5DQo+PiArICogYW1kZ3B1X3R0 bV90dF9nZXRfdXNlcl9wYWdlcyAtIGdldCBkZXZpY2UgYWNjZXNzaWJsZSBwYWdlcyB0aGF0IGJh Y2sgdXNlcg0KPj4gKyAqIG1lbW9yeSBhbmQgc3RhcnQgSE1NIHRyYWNraW5nIENQVSBwYWdlIHRh YmxlIHVwZGF0ZQ0KPj4gICAgKg0KPj4gLSAqIENhbGxlZCBieSBhbWRncHVfZ2VtX3VzZXJwdHJf aW9jdGwoKSBhbmQgYW1kZ3B1X2NzX3BhcnNlcl9ib3MoKS4NCj4+IC0gKiBUaGlzIHByb3ZpZGVz IGEgd3JhcHBlciBhcm91bmQgdGhlIGdldF91c2VyX3BhZ2VzKCkgY2FsbCB0byBwcm92aWRlDQo+ PiAtICogZGV2aWNlIGFjY2Vzc2libGUgcGFnZXMgdGhhdCBiYWNrIHVzZXIgbWVtb3J5Lg0KPj4g KyAqIENhbGxpbmcgZnVuY3Rpb24gbXVzdCBjYWxsIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9yYW5n ZV9kb25lKCkgb25jZSBhbmQgb25seQ0KPj4gKyAqIG9uY2UgYWZ0ZXJ3YXJkcyB0byBzdG9wIEhN TSB0cmFja2luZw0KPj4gICAgKi8NCj4+ICAgaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFn ZXMoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQ0KPj4gICB7DQo+PiAg IAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07DQo+PiAgIAlzdHJ1Y3Qg bW1fc3RydWN0ICptbSA9IGd0dC0+dXNlcnRhc2stPm1tOw0KPj4gLQl1bnNpZ25lZCBpbnQgZmxh Z3MgPSAwOw0KPj4gLQl1bnNpZ25lZCBwaW5uZWQgPSAwOw0KPj4gLQlpbnQgcjsNCj4+ICsJdW5z aWduZWQgbG9uZyBlbmQgPSBndHQtPnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0la RTsNCj4+ICsJc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UgPSAmZ3R0LT5yYW5nZTsNCj4+ICsJaW50 IHIgPSAwLCBpOw0KPj4gICANCj4+ICAgCWlmICghbW0pIC8qIEhhcHBlbnMgZHVyaW5nIHByb2Nl c3Mgc2h1dGRvd24gKi8NCj4+ICAgCQlyZXR1cm4gLUVTUkNIOw0KPj4gICANCj4+IC0JaWYgKCEo Z3R0LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfUkVBRE9OTFkpKQ0KPj4gLQkJZmxh Z3MgfD0gRk9MTF9XUklURTsNCj4+ICsJYW1kZ3B1X2htbV9pbml0X3JhbmdlKHJhbmdlKTsNCj4+ ICAgDQo+PiAgIAlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7DQo+PiAgIA0KPj4gLQlpZiAoZ3R0 LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfQU5PTk9OTFkpIHsNCj4+IC0JCS8qDQo+ PiAtCQkgKiBjaGVjayB0aGF0IHdlIG9ubHkgdXNlIGFub255bW91cyBtZW1vcnkgdG8gcHJldmVu dCBwcm9ibGVtcw0KPj4gLQkJICogd2l0aCB3cml0ZWJhY2sNCj4+IC0JCSAqLw0KPj4gLQkJdW5z aWduZWQgbG9uZyBlbmQgPSBndHQtPnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0la RTsNCj4+IC0JCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOw0KPj4gKwlyYW5nZS0+dm1hID0g ZmluZF92bWEobW0sIGd0dC0+dXNlcnB0cik7DQo+PiArCWlmICghcmFuZ2VfaW5fdm1hKHJhbmdl LT52bWEsIGd0dC0+dXNlcnB0ciwgZW5kKSkNCj4+ICsJCXIgPSAtRUZBVUxUOw0KPj4gKwllbHNl IGlmICgoZ3R0LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfQU5PTk9OTFkpICYmDQo+ PiArCQlyYW5nZS0+dm1hLT52bV9maWxlKQ0KPj4gKwkJciA9IC1FUEVSTTsNCj4+ICsJaWYgKHIp DQo+PiArCQlnb3RvIG91dDsNCj4+ICAgDQo+PiAtCQl2bWEgPSBmaW5kX3ZtYShtbSwgZ3R0LT51 c2VycHRyKTsNCj4+IC0JCWlmICghdm1hIHx8IHZtYS0+dm1fZmlsZSB8fCB2bWEtPnZtX2VuZCA8 IGVuZCkgew0KPj4gLQkJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7DQo+PiAtCQkJcmV0dXJuIC1F UEVSTTsNCj4+IC0JCX0NCj4+ICsJcmFuZ2UtPnBmbnMgPSBrdm1hbGxvY19hcnJheSh0dG0tPm51 bV9wYWdlcywgc2l6ZW9mKHVpbnQ2NF90KSwNCj4+ICsJCQkJICAgICBHRlBfS0VSTkVMKTsNCj4+ ICsJaWYgKHJhbmdlLT5wZm5zID09IE5VTEwpIHsNCj4+ICsJCXIgPSAtRU5PTUVNOw0KPj4gKwkJ Z290byBvdXQ7DQo+PiAgIAl9DQo+PiArCXJhbmdlLT5zdGFydCA9IGd0dC0+dXNlcnB0cjsNCj4+ ICsJcmFuZ2UtPmVuZCA9IGVuZDsNCj4+ICAgDQo+PiAtCS8qIGxvb3AgZW5vdWdoIHRpbWVzIHVz aW5nIGNvbnRpZ3VvdXMgcGFnZXMgb2YgbWVtb3J5ICovDQo+PiAtCWRvIHsNCj4+IC0JCXVuc2ln bmVkIG51bV9wYWdlcyA9IHR0bS0+bnVtX3BhZ2VzIC0gcGlubmVkOw0KPj4gLQkJdWludDY0X3Qg dXNlcnB0ciA9IGd0dC0+dXNlcnB0ciArIHBpbm5lZCAqIFBBR0VfU0laRTsNCj4+IC0JCXN0cnVj dCBwYWdlICoqcCA9IHBhZ2VzICsgcGlubmVkOw0KPj4gLQkJc3RydWN0IGFtZGdwdV90dG1fZ3Vw X3Rhc2tfbGlzdCBndXB0YXNrOw0KPj4gLQ0KPj4gLQkJZ3VwdGFzay50YXNrID0gY3VycmVudDsN Cj4+IC0JCXNwaW5fbG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7DQo+PiAtCQlsaXN0X2FkZCgmZ3Vw dGFzay5saXN0LCAmZ3R0LT5ndXB0YXNrcyk7DQo+PiAtCQlzcGluX3VubG9jaygmZ3R0LT5ndXB0 YXNrbG9jayk7DQo+PiAtDQo+PiAtCQlpZiAobW0gPT0gY3VycmVudC0+bW0pDQo+PiAtCQkJciA9 IGdldF91c2VyX3BhZ2VzKHVzZXJwdHIsIG51bV9wYWdlcywgZmxhZ3MsIHAsIE5VTEwpOw0KPj4g LQkJZWxzZQ0KPj4gLQkJCXIgPSBnZXRfdXNlcl9wYWdlc19yZW1vdGUoZ3R0LT51c2VydGFzaywN Cj4+IC0JCQkJCW1tLCB1c2VycHRyLCBudW1fcGFnZXMsDQo+PiAtCQkJCQlmbGFncywgcCwgTlVM TCwgTlVMTCk7DQo+PiArCXJhbmdlLT5wZm5zWzBdID0gcmFuZ2UtPmZsYWdzW0hNTV9QRk5fVkFM SURdOw0KPj4gKwlyYW5nZS0+cGZuc1swXSB8PSBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHR0 bSkgPw0KPj4gKwkJCQkwIDogcmFuZ2UtPmZsYWdzW0hNTV9QRk5fV1JJVEVdOw0KPj4gKwlmb3Ig KGkgPSAxOyBpIDwgdHRtLT5udW1fcGFnZXM7IGkrKykNCj4+ICsJCXJhbmdlLT5wZm5zW2ldID0g cmFuZ2UtPnBmbnNbMF07DQo+PiAgIA0KPj4gLQkJc3Bpbl9sb2NrKCZndHQtPmd1cHRhc2tsb2Nr KTsNCj4+IC0JCWxpc3RfZGVsKCZndXB0YXNrLmxpc3QpOw0KPj4gLQkJc3Bpbl91bmxvY2soJmd0 dC0+Z3VwdGFza2xvY2spOw0KPj4gLQ0KPj4gLQkJaWYgKHIgPCAwKQ0KPj4gLQkJCWdvdG8gcmVs ZWFzZV9wYWdlczsNCj4+ICsJLyogVGhpcyBtYXkgdHJpZ2dlciBwYWdlIHRhYmxlIHVwZGF0ZSAq Lw0KPj4gKwlyID0gaG1tX3ZtYV9mYXVsdChyYW5nZSwgdHJ1ZSk7DQo+PiArCWlmIChyKQ0KPj4g KwkJZ290byBvdXRfZnJlZV9wZm5zOw0KPj4gICANCj4+IC0JCXBpbm5lZCArPSByOw0KPj4gKwl1 cF9yZWFkKCZtbS0+bW1hcF9zZW0pOw0KPj4gICANCj4+IC0JfSB3aGlsZSAocGlubmVkIDwgdHRt LT5udW1fcGFnZXMpOw0KPj4gKwlmb3IgKGkgPSAwOyBpIDwgdHRtLT5udW1fcGFnZXM7IGkrKykN Cj4+ICsJCXBhZ2VzW2ldID0gaG1tX3Bmbl90b19wYWdlKHJhbmdlLCByYW5nZS0+cGZuc1tpXSk7 DQo+PiAgIA0KPj4gLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOw0KPj4gICAJcmV0dXJuIDA7DQo+ PiAgIA0KPj4gLXJlbGVhc2VfcGFnZXM6DQo+PiAtCXJlbGVhc2VfcGFnZXMocGFnZXMsIHBpbm5l ZCk7DQo+PiArb3V0X2ZyZWVfcGZuczoNCj4+ICsJa3ZmcmVlKHJhbmdlLT5wZm5zKTsNCj4+ICsJ cmFuZ2UtPnBmbnMgPSBOVUxMOw0KPj4gK291dDoNCj4+ICAgCXVwX3JlYWQoJm1tLT5tbWFwX3Nl bSk7DQo+PiAgIAlyZXR1cm4gcjsNCj4+ICAgfQ0KPj4gICANCj4+ICAgLyoqDQo+PiAtICogYW1k Z3B1X3R0bV90dF9zZXRfdXNlcl9wYWdlcyAtIENvcHkgcGFnZXMgaW4sIHB1dHRpbmcgb2xkIHBh Z2VzIGFzIG5lY2Vzc2FyeS4NCj4+ICsgKiBhbWRncHVfdHRtX3R0X3VzZXJwdHJfcmFuZ2VfZG9u ZSAtIHN0b3AgSE1NIHRyYWNrIHRoZSBDUFUgcGFnZSB0YWJsZSBjaGFuZ2UNCj4+ICsgKiBDaGVj ayBpZiB0aGUgcGFnZXMgYmFja2luZyB0aGlzIHR0bSByYW5nZSBoYXZlIGJlZW4gaW52YWxpZGF0 ZWQNCj4+ICAgICoNCj4+IC0gKiBDYWxsZWQgYnkgYW1kZ3B1X2NzX2xpc3RfdmFsaWRhdGUoKS4g VGhpcyBjcmVhdGVzIHRoZSBwYWdlIGxpc3QNCj4+IC0gKiB0aGF0IGJhY2tzIHVzZXIgbWVtb3J5 IGFuZCB3aWxsIHVsdGltYXRlbHkgYmUgbWFwcGVkIGludG8gdGhlIGRldmljZQ0KPj4gLSAqIGFk ZHJlc3Mgc3BhY2UuDQo+PiArICogUmV0dXJuczogdHJ1ZSBpZiBwYWdlcyBhcmUgc3RpbGwgdmFs aWQNCj4+ICAgICovDQo+PiAtdm9pZCBhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKHN0cnVj dCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcykNCj4+ICtib29sIGFtZGdwdV90dG1f dHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShzdHJ1Y3QgdHRtX3R0ICp0dG0pDQo+PiAgIHsNCj4+ICAg CXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsNCj4+IC0JdW5zaWduZWQg aTsNCj4+ICsJYm9vbCByOw0KPj4gICANCj4+IC0JZ3R0LT5sYXN0X3NldF9wYWdlcyA9IGF0b21p Y19yZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsNCj4+IC0JZm9yIChpID0gMDsgaSA8IHR0 bS0+bnVtX3BhZ2VzOyArK2kpIHsNCj4+IC0JCWlmICh0dG0tPnBhZ2VzW2ldKQ0KPj4gLQkJCXB1 dF9wYWdlKHR0bS0+cGFnZXNbaV0pOw0KPj4gKwlpZiAoIWd0dCB8fCAhZ3R0LT51c2VycHRyKQ0K Pj4gKwkJcmV0dXJuIGZhbHNlOw0KPj4gKw0KPj4gKwlyID0gaG1tX3ZtYV9yYW5nZV9kb25lKCZn dHQtPnJhbmdlKTsNCj4+ICAgDQo+PiAtCQl0dG0tPnBhZ2VzW2ldID0gcGFnZXMgPyBwYWdlc1tp XSA6IE5VTEw7DQo+PiArCWlmIChndHQtPnJhbmdlLnBmbnMpIHsNCj4gDQo+IElmIHRoaXMgaXMg TlVMTCwgaXQgbWVhbnMgd2UgcHJvYmFibHkgc2hvdWxkbid0IGhhdmUgY2FsbGVkDQo+IGhtbV92 bWFfcmFuZ2VfZG9uZS4gTWF5YmUgd2Ugc2hvdWxkIHVzZSBhIFdBUk5fT04gb3IgV0FSTl9PTkNF IGhlcmUgdG8NCj4gbWFrZSBzdXJlIGdldF91c2VyX3BhZ2VzX2RvbmUgaXMgb25seSBjYWxsZWQg b25jZSBhZnRlciBnZXRfdXNlcl9wYWdlcy4NCj4gQW5kIG1vdmUgaG1tX3ZtYV9yYW5nZV9kb25l IGluc2lkZSB0aGUgY29uZGl0aW9uLg0KPiANCj4gDQo+PiArCQlrdmZyZWUoZ3R0LT5yYW5nZS5w Zm5zKTsNCj4+ICsJCWd0dC0+cmFuZ2UucGZucyA9IE5VTEw7DQo+PiAgIAl9DQo+PiArDQo+PiAr CXJldHVybiByOw0KPj4gICB9DQo+PiAgIA0KPj4gICAvKioNCj4+IEBAIC05MDMsOSArODg5LDYg QEAgc3RhdGljIHZvaWQgYW1kZ3B1X3R0bV90dF91bnBpbl91c2VycHRyKHN0cnVjdCB0dG1fdHQg KnR0bSkNCj4+ICAgCS8qIHVubWFwIHRoZSBwYWdlcyBtYXBwZWQgdG8gdGhlIGRldmljZSAqLw0K Pj4gICAJZG1hX3VubWFwX3NnKGFkZXYtPmRldiwgdHRtLT5zZy0+c2dsLCB0dG0tPnNnLT5uZW50 cywgZGlyZWN0aW9uKTsNCj4+ICAgDQo+PiAtCS8qIG1hcmsgdGhlIHBhZ2VzIGFzIGRpcnR5ICov DQo+PiAtCWFtZGdwdV90dG1fdHRfbWFya191c2VyX3BhZ2VzKHR0bSk7DQo+PiAtDQo+IA0KPiBM ZXQncyBhZGQgYSBXQVJOX09OQ0UgaGVyZSB0byBjaGVjayB0aGF0IGd0dC0+cmFuZ2UucGZucyBp cyBOVUxMLiBJZg0KPiBpdCdzIG5vdCBOVUxMIHdlIGFyZSBtaXNzaW5nIGEgY2FsbCB0byBnZXRf dXNlcl9wYWdlc19kb25lIHNvbWV3aGVyZSBhbmQNCj4gdGhpcyB3b3VsZCBiZSBhIGdvb2Qgd2F5 IHRvIGNhdGNoIHN1Y2ggYSBwcm9ibGVtLg0KPiANCj4gUmVnYXJkcywNCj4gIMKgIEZlbGl4DQo+ IA0KPiANCj4+ICAgCXNnX2ZyZWVfdGFibGUodHRtLT5zZyk7DQo+PiAgIH0NCj4+ICAgDQo+PiBA QCAtMTIwNyw3ICsxMTkwLDcgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X3R0bV90dF91bnBvcHVsYXRl KHN0cnVjdCB0dG1fdHQgKnR0bSkNCj4+ICAgCWJvb2wgc2xhdmUgPSAhISh0dG0tPnBhZ2VfZmxh Z3MgJiBUVE1fUEFHRV9GTEFHX1NHKTsNCj4+ICAgDQo+PiAgIAlpZiAoZ3R0ICYmIGd0dC0+dXNl cnB0cikgew0KPj4gLQkJYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdlcyh0dG0sIE5VTEwpOw0K Pj4gKwkJbWVtc2V0KHR0bS0+cGFnZXMsIDAsIHR0bS0+bnVtX3BhZ2VzICogc2l6ZW9mKHN0cnVj dCBwYWdlICopKTsNCj4+ICAgCQlrZnJlZSh0dG0tPnNnKTsNCj4+ICAgCQl0dG0tPnBhZ2VfZmxh Z3MgJj0gflRUTV9QQUdFX0ZMQUdfU0c7DQo+PiAgIAkJcmV0dXJuOw0KPj4gQEAgLTEyNTgsOCAr MTI0MSw2IEBAIGludCBhbWRncHVfdHRtX3R0X3NldF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0 bSwgdWludDY0X3QgYWRkciwNCj4+ICAgDQo+PiAgIAlzcGluX2xvY2tfaW5pdCgmZ3R0LT5ndXB0 YXNrbG9jayk7DQo+PiAgIAlJTklUX0xJU1RfSEVBRCgmZ3R0LT5ndXB0YXNrcyk7DQo+PiAtCWF0 b21pY19zZXQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMsIDApOw0KPj4gLQlndHQtPmxhc3Rfc2V0 X3BhZ2VzID0gMDsNCj4+ICAgDQo+PiAgIAlyZXR1cm4gMDsNCj4+ICAgfQ0KPj4gQEAgLTEyODks NyArMTI3MCw2IEBAIGJvb2wgYW1kZ3B1X3R0bV90dF9hZmZlY3RfdXNlcnB0cihzdHJ1Y3QgdHRt X3R0ICp0dG0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsDQo+PiAgIAkJCQkgIHVuc2lnbmVkIGxvbmcg ZW5kKQ0KPj4gICB7DQo+PiAgIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0 dG07DQo+PiAtCXN0cnVjdCBhbWRncHVfdHRtX2d1cF90YXNrX2xpc3QgKmVudHJ5Ow0KPj4gICAJ dW5zaWduZWQgbG9uZyBzaXplOw0KPj4gICANCj4+ICAgCWlmIChndHQgPT0gTlVMTCB8fCAhZ3R0 LT51c2VycHRyKQ0KPj4gQEAgLTEzMDIsNDggKzEyODIsMjAgQEAgYm9vbCBhbWRncHVfdHRtX3R0 X2FmZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdW5zaWduZWQgbG9uZyBzdGFydCwN Cj4+ICAgCWlmIChndHQtPnVzZXJwdHIgPiBlbmQgfHwgZ3R0LT51c2VycHRyICsgc2l6ZSA8PSBz dGFydCkNCj4+ICAgCQlyZXR1cm4gZmFsc2U7DQo+PiAgIA0KPj4gLQkvKiBTZWFyY2ggdGhlIGxp c3RzIG9mIHRhc2tzIHRoYXQgaG9sZCB0aGlzIG1hcHBpbmcgYW5kIHNlZQ0KPj4gLQkgKiBpZiBj dXJyZW50IGlzIG9uZSBvZiB0aGVtLiAgSWYgaXQgaXMgcmV0dXJuIGZhbHNlLg0KPj4gLQkgKi8N Cj4+IC0Jc3Bpbl9sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsNCj4+IC0JbGlzdF9mb3JfZWFjaF9l bnRyeShlbnRyeSwgJmd0dC0+Z3VwdGFza3MsIGxpc3QpIHsNCj4+IC0JCWlmIChlbnRyeS0+dGFz ayA9PSBjdXJyZW50KSB7DQo+PiAtCQkJc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOw0K Pj4gLQkJCXJldHVybiBmYWxzZTsNCj4+IC0JCX0NCj4+IC0JfQ0KPj4gLQlzcGluX3VubG9jaygm Z3R0LT5ndXB0YXNrbG9jayk7DQo+PiAtDQo+PiAtCWF0b21pY19pbmMoJmd0dC0+bW11X2ludmFs aWRhdGlvbnMpOw0KPj4gLQ0KPj4gICAJcmV0dXJuIHRydWU7DQo+PiAgIH0NCj4+ICAgDQo+PiAg IC8qKg0KPj4gLSAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZCAtIEhhcyB0aGUg dHRtX3R0IG9iamVjdCBiZWVuIGludmFsaWRhdGVkPw0KPj4gKyAqIGFtZGdwdV90dG1fdHRfaXNf dXNlcnB0ciAtIEhhdmUgdGhlIHBhZ2VzIGJhY2tpbmcgYnkgdXNlcnB0cj8NCj4+ICAgICovDQo+ PiAtYm9vbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQoc3RydWN0IHR0bV90dCAq dHRtLA0KPj4gLQkJCQkgICAgICAgaW50ICpsYXN0X2ludmFsaWRhdGVkKQ0KPj4gLXsNCj4+IC0J c3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOw0KPj4gLQlpbnQgcHJldl9p bnZhbGlkYXRlZCA9ICpsYXN0X2ludmFsaWRhdGVkOw0KPj4gLQ0KPj4gLQkqbGFzdF9pbnZhbGlk YXRlZCA9IGF0b21pY19yZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsNCj4+IC0JcmV0dXJu IHByZXZfaW52YWxpZGF0ZWQgIT0gKmxhc3RfaW52YWxpZGF0ZWQ7DQo+PiAtfQ0KPj4gLQ0KPj4g LS8qKg0KPj4gLSAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyAtIEhhdmUgdGhl IHBhZ2VzIGJhY2tpbmcgdGhpcyB0dG1fdHQgb2JqZWN0DQo+PiAtICogYmVlbiBpbnZhbGlkYXRl ZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZXkndmUgYmVlbiBzZXQ/DQo+PiAtICovDQo+PiAtYm9v bCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKQ0K Pj4gK2Jvb2wgYW1kZ3B1X3R0bV90dF9pc191c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSkNCj4+ ICAgew0KPj4gICAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOw0KPj4g ICANCj4+ICAgCWlmIChndHQgPT0gTlVMTCB8fCAhZ3R0LT51c2VycHRyKQ0KPj4gICAJCXJldHVy biBmYWxzZTsNCj4+ICAgDQo+PiAtCXJldHVybiBhdG9taWNfcmVhZCgmZ3R0LT5tbXVfaW52YWxp ZGF0aW9ucykgIT0gZ3R0LT5sYXN0X3NldF9wYWdlczsNCj4+ICsJcmV0dXJuIHRydWU7DQo+PiAg IH0NCj4+ICAgDQo+PiAgIC8qKg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV90dG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90 dG0uaA0KPj4gaW5kZXggYjViMmQxMDFmN2RiLi5jNWExZTc4YTA5YjEgMTAwNjQ0DQo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmgNCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaA0KPj4gQEAgLTEwMiw3ICsxMDIsNyBA QCBpbnQgYW1kZ3B1X3R0bV9hbGxvY19nYXJ0KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8p Ow0KPj4gICBpbnQgYW1kZ3B1X3R0bV9yZWNvdmVyX2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2Jq ZWN0ICp0Ym8pOw0KPj4gICANCj4+ICAgaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMo c3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsNCj4+IC12b2lkIGFtZGdw dV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAq KnBhZ2VzKTsNCj4+ICtib29sIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShzdHJ1 Y3QgdHRtX3R0ICp0dG0pOw0KPj4gICB2b2lkIGFtZGdwdV90dG1fdHRfbWFya191c2VyX3BhZ2Vz KHN0cnVjdCB0dG1fdHQgKnR0bSk7DQo+PiAgIGludCBhbWRncHVfdHRtX3R0X3NldF91c2VycHRy KHN0cnVjdCB0dG1fdHQgKnR0bSwgdWludDY0X3QgYWRkciwNCj4+ICAgCQkJCSAgICAgdWludDMy X3QgZmxhZ3MpOw0KPj4gQEAgLTExMiw3ICsxMTIsNyBAQCBib29sIGFtZGdwdV90dG1fdHRfYWZm ZWN0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LA0KPj4g ICAJCQkJICB1bnNpZ25lZCBsb25nIGVuZCk7DQo+PiAgIGJvb2wgYW1kZ3B1X3R0bV90dF91c2Vy cHRyX2ludmFsaWRhdGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwNCj4+ICAgCQkJCSAgICAgICBpbnQg Kmxhc3RfaW52YWxpZGF0ZWQpOw0KPj4gLWJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRz X3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSk7DQo+PiArYm9vbCBhbWRncHVfdHRtX3R0X2lzX3Vz ZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKTsNCj4+ICAgYm9vbCBhbWRncHVfdHRtX3R0X2lzX3Jl YWRvbmx5KHN0cnVjdCB0dG1fdHQgKnR0bSk7DQo+PiAgIHVpbnQ2NF90IGFtZGdwdV90dG1fdHRf cGRlX2ZsYWdzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pOw0K Pj4gICB1aW50NjRfdCBhbWRncHVfdHRtX3R0X3B0ZV9mbGFncyhzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwgc3RydWN0IHR0bV90dCAqdHRtLA0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X3ZtLmMNCj4+IGluZGV4IGU3M2QxNTI2NTlhMi4uMWY4YWIxYTRmYWJjIDEwMDY0NA0K Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMNCj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jDQo+PiBAQCAtNjE5LDcgKzYx OSw2IEBAIHZvaWQgYW1kZ3B1X3ZtX2dldF9wZF9ibyhzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwNCj4+ ICAgCWVudHJ5LT50di5ibyA9ICZ2bS0+cm9vdC5iYXNlLmJvLT50Ym87DQo+PiAgIAkvKiBPbmUg Zm9yIHRoZSBWTSB1cGRhdGVzLCBvbmUgZm9yIFRUTSBhbmQgb25lIGZvciB0aGUgQ1Mgam9iICov DQo+PiAgIAllbnRyeS0+dHYubnVtX3NoYXJlZCA9IDM7DQo+PiAtCWVudHJ5LT51c2VyX3BhZ2Vz ID0gTlVMTDsNCj4+ICAgCWxpc3RfYWRkKCZlbnRyeS0+dHYuaGVhZCwgdmFsaWRhdGVkKTsNCj4+ ICAgfQ0KPj4gICANCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=