From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Kuehling, Felix" Subject: Re: [PATCH 3/3] drm/amdgpu: replace get_user_pages with HMM address mirror helpers v3 Date: Tue, 11 Dec 2018 00:12:20 +0000 Message-ID: References: <20181206210235.12036-1-Philip.Yang@amd.com> <20181206210235.12036-3-Philip.Yang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181206210235.12036-3-Philip.Yang-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US Content-ID: <26BC70B002018E498711739D37622483-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: "Yang, Philip" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" VGhpcyBpcyBhIG5pY2UgaW1wcm92ZW1lbnQgZnJvbSB0aGUgbGFzdCB2ZXJzaW9uLiBJIHN0aWxs IHNlZSBzb21lDQpwb3RlbnRpYWwgcHJvYmxlbXMuIFNlZSBpbmxpbmUgLi4uDQoNCkknbSBza2lw cGluZyBvdmVyIHRoZSBDUyBhbmQgR0VNIHBhcnRzLiBJIGhvcGUgQ2hyaXN0aWFuIGNhbiByZXZp ZXcNCnRob3NlIHBhcnRzLg0KDQpPbiAyMDE4LTEyLTA2IDQ6MDIgcC5tLiwgWWFuZywgUGhpbGlw IHdyb3RlOg0KPiBVc2UgSE1NIGhlbHBlciBmdW5jdGlvbiBobW1fdm1hX2ZhdWx0KCkgdG8gZ2V0 IHBoeXNpY2FsIHBhZ2VzIGJhY2tpbmcNCj4gdXNlcnB0ciBhbmQgc3RhcnQgQ1BVIHBhZ2UgdGFi bGUgdXBkYXRlIHRyYWNrIG9mIHRob3NlIHBhZ2VzLiBUaGVuIHVzZQ0KPiBobW1fdm1hX3Jhbmdl X2RvbmUoKSB0byBjaGVjayBpZiB0aG9zZSBwYWdlcyBhcmUgdXBkYXRlZCBiZWZvcmUNCj4gYW1k Z3B1X2NzX3N1Ym1pdCBmb3IgZ2Z4IG9yIGJlZm9yZSB1c2VyIHF1ZXVlcyBhcmUgcmVzdW1lZCBm b3Iga2ZkLg0KPg0KPiBJZiB1c2VycHRyIHBhZ2VzIGFyZSB1cGRhdGVkLCBmb3IgZ2Z4LCBhbWRn cHVfY3NfaW9jdGwgd2lsbCByZXN0YXJ0DQo+IGZyb20gc2NyYXRjaCwgZm9yIGtmZCwgcmVzdG9y ZSB3b3JrZXIgaXMgcmVzY2hlZHVsZWQgdG8gcmV0cnkuDQo+DQo+IEhNTSBzaW1wbGlmeSB0aGUg Q1BVIHBhZ2UgdGFibGUgY29uY3VycmVudCB1cGRhdGUgY2hlY2ssIHNvIHJlbW92ZQ0KPiBndXB0 YXNrbG9jaywgbW11X2ludmFsaWRhdGlvbnMsIGxhc3Rfc2V0X3BhZ2VzIGZpZWxkcyBmcm9tDQo+ IGFtZGdwdV90dG1fdHQgc3RydWN0Lg0KPg0KPiBITU0gZG9lcyBub3QgcGluIHRoZSBwYWdlIChp bmNyZWFzZSBwYWdlIHJlZiBjb3VudCksIHNvIHJlbW92ZSByZWxhdGVkDQo+IG9wZXJhdGlvbnMg bGlrZSByZWxlYXNlX3BhZ2VzKCksIHB1dF9wYWdlKCksIG1hcmtfcGFnZV9kaXJ0eSgpLg0KPg0K PiBDaGFuZ2UtSWQ6IElkMmQzMTMwMzc4YjQ0YTc3NGUwZDc3MTU2MTAyYTIwYTIwM2I1MDM2DQo+ IFNpZ25lZC1vZmYtYnk6IFBoaWxpcCBZYW5nIDxQaGlsaXAuWWFuZ0BhbWQuY29tPg0KPiAtLS0N Cj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaCAgICB8ICAgMSAt DQo+ICAuLi4vZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYyAgfCAgODEg KystLS0tLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmMg ICB8ICAgMiAtDQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5o ICAgfCAgIDMgKy0NCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jICAg ICAgICB8IDE4OCArKysrKysrKystLS0tLS0tLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9nZW0uYyAgICAgICB8ICAxNCArLQ0KPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X21uLmMgICAgICAgIHwgIDM0ICsrKy0NCj4gIGRyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9tbi5oICAgICAgICB8ICAgNyArLQ0KPiAgZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jICAgICAgIHwgMTYwICsrKysrKy0tLS0tLS0tLQ0KPiAg ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oICAgICAgIHwgICA0ICstDQo+ ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyAgICAgICAgfCAgIDEgLQ0K PiAgMTEgZmlsZXMgY2hhbmdlZCwgMjA2IGluc2VydGlvbnMoKyksIDI4OSBkZWxldGlvbnMoLSkN Cj4NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRr ZmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaA0KPiBpbmRl eCBiY2Y1ODdiNGJhOTguLmI0OTJkZDllNTQxYSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaA0KPiBAQCAtNjIsNyArNjIsNiBAQCBzdHJ1Y3Qga2dk X21lbSB7DQo+ICANCj4gIAlhdG9taWNfdCBpbnZhbGlkOw0KPiAgCXN0cnVjdCBhbWRrZmRfcHJv Y2Vzc19pbmZvICpwcm9jZXNzX2luZm87DQo+IC0Jc3RydWN0IHBhZ2UgKip1c2VyX3BhZ2VzOw0K PiAgDQo+ICAJc3RydWN0IGFtZGdwdV9zeW5jIHN5bmM7DQo+ICANCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYw0KPiBpbmRleCBiMjllZjA4 OGZhMTQuLjc1ODMzYjQwNTA3YiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYw0KPiBAQCAtNTgwLDI4ICs1ODAsMTIgQEAgc3Rh dGljIGludCBpbml0X3VzZXJfcGFnZXMoc3RydWN0IGtnZF9tZW0gKm1lbSwgc3RydWN0IG1tX3N0 cnVjdCAqbW0sDQo+ICAJCWdvdG8gb3V0Ow0KPiAgCX0NCj4gIA0KPiAtCS8qIElmIG5vIHJlc3Rv cmUgd29ya2VyIGlzIHJ1bm5pbmcgY29uY3VycmVudGx5LCB1c2VyX3BhZ2VzDQo+IC0JICogc2hv dWxkIG5vdCBiZSBhbGxvY2F0ZWQNCj4gLQkgKi8NCj4gLQlXQVJOKG1lbS0+dXNlcl9wYWdlcywg IkxlYWtpbmcgdXNlcl9wYWdlcyBhcnJheSIpOw0KPiAtDQo+IC0JbWVtLT51c2VyX3BhZ2VzID0g a3ZtYWxsb2NfYXJyYXkoYm8tPnRiby50dG0tPm51bV9wYWdlcywNCj4gLQkJCQkJICAgc2l6ZW9m KHN0cnVjdCBwYWdlICopLA0KPiAtCQkJCQkgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7DQo+ IC0JaWYgKCFtZW0tPnVzZXJfcGFnZXMpIHsNCj4gLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFs bG9jYXRlIHBhZ2VzIGFycmF5XG4iLCBfX2Z1bmNfXyk7DQo+IC0JCXJldCA9IC1FTk9NRU07DQo+ IC0JCWdvdG8gdW5yZWdpc3Rlcl9vdXQ7DQo+IC0JfQ0KPiAtDQo+IC0JcmV0ID0gYW1kZ3B1X3R0 bV90dF9nZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSwgbWVtLT51c2VyX3BhZ2VzKTsNCj4gKwly ZXQgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLCBiby0+dGJvLnR0 bS0+cGFnZXMpOw0KPiAgCWlmIChyZXQpIHsNCj4gIAkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGdl dCB1c2VyIHBhZ2VzOiAlZFxuIiwgX19mdW5jX18sIHJldCk7DQo+IC0JCWdvdG8gZnJlZV9vdXQ7 DQo+ICsJCWdvdG8gdW5yZWdpc3Rlcl9vdXQ7DQo+ICAJfQ0KPiAgDQo+IC0JYW1kZ3B1X3R0bV90 dF9zZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSwgbWVtLT51c2VyX3BhZ2VzKTsNCj4gLQ0KPiAg CXJldCA9IGFtZGdwdV9ib19yZXNlcnZlKGJvLCB0cnVlKTsNCj4gIAlpZiAocmV0KSB7DQo+ICAJ CXByX2VycigiJXM6IEZhaWxlZCB0byByZXNlcnZlIEJPXG4iLCBfX2Z1bmNfXyk7DQo+IEBAIC02 MTQsMTEgKzU5OCw3IEBAIHN0YXRpYyBpbnQgaW5pdF91c2VyX3BhZ2VzKHN0cnVjdCBrZ2RfbWVt ICptZW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLA0KPiAgCWFtZGdwdV9ib191bnJlc2VydmUoYm8p Ow0KPiAgDQo+ICByZWxlYXNlX291dDoNCj4gLQlpZiAocmV0KQ0KPiAtCQlyZWxlYXNlX3BhZ2Vz KG1lbS0+dXNlcl9wYWdlcywgYm8tPnRiby50dG0tPm51bV9wYWdlcyk7DQo+IC1mcmVlX291dDoN Cj4gLQlrdmZyZWUobWVtLT51c2VyX3BhZ2VzKTsNCj4gLQltZW0tPnVzZXJfcGFnZXMgPSBOVUxM Ow0KPiArCWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7DQo+ ICB1bnJlZ2lzdGVyX291dDoNCj4gIAlpZiAocmV0KQ0KPiAgCQlhbWRncHVfbW5fdW5yZWdpc3Rl cihibyk7DQo+IEBAIC02NzcsNyArNjU3LDYgQEAgc3RhdGljIGludCByZXNlcnZlX2JvX2FuZF92 bShzdHJ1Y3Qga2dkX21lbSAqbWVtLA0KPiAgCWN0eC0+a2ZkX2JvLnByaW9yaXR5ID0gMDsNCj4g IAljdHgtPmtmZF9iby50di5ibyA9ICZiby0+dGJvOw0KPiAgCWN0eC0+a2ZkX2JvLnR2Lm51bV9z aGFyZWQgPSAxOw0KPiAtCWN0eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBOVUxMOw0KPiAgCWxpc3Rf YWRkKCZjdHgtPmtmZF9iby50di5oZWFkLCAmY3R4LT5saXN0KTsNCj4gIA0KPiAgCWFtZGdwdV92 bV9nZXRfcGRfYm8odm0sICZjdHgtPmxpc3QsICZjdHgtPnZtX3BkWzBdKTsNCj4gQEAgLTc0MSw3 ICs3MjAsNiBAQCBzdGF0aWMgaW50IHJlc2VydmVfYm9fYW5kX2NvbmRfdm1zKHN0cnVjdCBrZ2Rf bWVtICptZW0sDQo+ICAJY3R4LT5rZmRfYm8ucHJpb3JpdHkgPSAwOw0KPiAgCWN0eC0+a2ZkX2Jv LnR2LmJvID0gJmJvLT50Ym87DQo+ICAJY3R4LT5rZmRfYm8udHYubnVtX3NoYXJlZCA9IDE7DQo+ IC0JY3R4LT5rZmRfYm8udXNlcl9wYWdlcyA9IE5VTEw7DQo+ICAJbGlzdF9hZGQoJmN0eC0+a2Zk X2JvLnR2LmhlYWQsICZjdHgtPmxpc3QpOw0KPiAgDQo+ICAJaSA9IDA7DQo+IEBAIC0xMzI5LDE1 ICsxMzA3LDYgQEAgaW50IGFtZGdwdV9hbWRrZmRfZ3B1dm1fZnJlZV9tZW1vcnlfb2ZfZ3B1KA0K PiAgCWxpc3RfZGVsKCZib19saXN0X2VudHJ5LT5oZWFkKTsNCj4gIAltdXRleF91bmxvY2soJnBy b2Nlc3NfaW5mby0+bG9jayk7DQo+ICANCj4gLQkvKiBGcmVlIHVzZXIgcGFnZXMgaWYgbmVjZXNz YXJ5ICovDQo+IC0JaWYgKG1lbS0+dXNlcl9wYWdlcykgew0KPiAtCQlwcl9kZWJ1ZygiJXM6IEZy ZWVpbmcgdXNlcl9wYWdlcyBhcnJheVxuIiwgX19mdW5jX18pOw0KPiAtCQlpZiAobWVtLT51c2Vy X3BhZ2VzWzBdKQ0KPiAtCQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsDQo+IC0JCQkJ CW1lbS0+Ym8tPnRiby50dG0tPm51bV9wYWdlcyk7DQo+IC0JCWt2ZnJlZShtZW0tPnVzZXJfcGFn ZXMpOw0KPiAtCX0NCj4gLQ0KPiAgCXJldCA9IHJlc2VydmVfYm9fYW5kX2NvbmRfdm1zKG1lbSwg TlVMTCwgQk9fVk1fQUxMLCAmY3R4KTsNCj4gIAlpZiAodW5saWtlbHkocmV0KSkNCj4gIAkJcmV0 dXJuIHJldDsNCj4gQEAgLTE3NTEsMjUgKzE3MjAsMTEgQEAgc3RhdGljIGludCB1cGRhdGVfaW52 YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8s DQo+ICANCj4gIAkJYm8gPSBtZW0tPmJvOw0KPiAgDQo+IC0JCWlmICghbWVtLT51c2VyX3BhZ2Vz KSB7DQo+IC0JCQltZW0tPnVzZXJfcGFnZXMgPQ0KPiAtCQkJCWt2bWFsbG9jX2FycmF5KGJvLT50 Ym8udHRtLT5udW1fcGFnZXMsDQo+IC0JCQkJCQkgc2l6ZW9mKHN0cnVjdCBwYWdlICopLA0KPiAt CQkJCQkJIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsNCj4gLQkJCWlmICghbWVtLT51c2VyX3Bh Z2VzKSB7DQo+IC0JCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2VzIGFycmF5 XG4iLA0KPiAtCQkJCSAgICAgICBfX2Z1bmNfXyk7DQo+IC0JCQkJcmV0dXJuIC1FTk9NRU07DQo+ IC0JCQl9DQo+IC0JCX0gZWxzZSBpZiAobWVtLT51c2VyX3BhZ2VzWzBdKSB7DQo+IC0JCQlyZWxl YXNlX3BhZ2VzKG1lbS0+dXNlcl9wYWdlcywgYm8tPnRiby50dG0tPm51bV9wYWdlcyk7DQo+IC0J CX0NCj4gLQ0KPiAgCQkvKiBHZXQgdXBkYXRlZCB1c2VyIHBhZ2VzICovDQo+ICAJCXJldCA9IGFt ZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sDQo+IC0JCQkJCQkgICBtZW0t PnVzZXJfcGFnZXMpOw0KPiArCQkJCQkJICAgYm8tPnRiby50dG0tPnBhZ2VzKTsNCj4gIAkJaWYg KHJldCkgew0KPiAtCQkJbWVtLT51c2VyX3BhZ2VzWzBdID0gTlVMTDsNCj4gKwkJCWJvLT50Ym8u dHRtLT5wYWdlc1swXSA9IE5VTEw7DQo+ICAJCQlwcl9pbmZvKCIlczogRmFpbGVkIHRvIGdldCB1 c2VyIHBhZ2VzOiAlZFxuIiwNCj4gIAkJCQlfX2Z1bmNfXywgcmV0KTsNCj4gIAkJCS8qIFByZXRl bmQgaXQgc3VjY2VlZGVkLiBJdCB3aWxsIGZhaWwgbGF0ZXINCj4gQEAgLTE3NzgsMTIgKzE3MzMs NiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9w cm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbywNCj4gIAkJCSAqIHN0YWxsZWQgdXNlciBtb2RlIHF1 ZXVlcy4NCj4gIAkJCSAqLw0KPiAgCQl9DQo+IC0NCj4gLQkJLyogTWFyayB0aGUgQk8gYXMgdmFs aWQgdW5sZXNzIGl0IHdhcyBpbnZhbGlkYXRlZA0KPiAtCQkgKiBhZ2FpbiBjb25jdXJyZW50bHkN Cj4gLQkJICovDQo+IC0JCWlmIChhdG9taWNfY21weGNoZygmbWVtLT5pbnZhbGlkLCBpbnZhbGlk LCAwKSAhPSBpbnZhbGlkKQ0KPiAtCQkJcmV0dXJuIC1FQUdBSU47DQoNCkkgdGhpbmsgeW91J3Jl IHJlbW92aW5nIHRoaXMgdG8gbWFrZSBzdXJlIHdlIGV4YWN0bHkgcGFpciB1cA0KYW1kZ3B1X3R0 bV90dF9nZXRfdXNlcl9wYWdlcyBhbmQgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25l DQpjYWxscy4gQnV0IHRoZXJlIGFyZSBvdGhlciBlcnJvciBjb25kaXRpb25zIGluDQp2YWxpZGF0 ZV9pbnZhbGlkX3VzZXJfcGFnZXMgdGhhdCB3b3VsZCBza2lwIHRoZQ0KYW1kZ3B1X3R0bV90dF9n ZXRfdXNlcl9wYWdlc19kb25lIGNhbGxzLiBUaGF0IHdpbGwgbmVlZCB0byBiZSBoYW5kbGVkDQpw cm9wZXJseSBpbiB0aGUgZXJyb3ItaGFuZGxpbmcgY29kZSBwYXRocyBpbiB2YWxpZGF0ZV9pbnZh bGlkX3VzZXJfcGFnZXMuDQoNCg0KPiAgCX0NCj4gIA0KPiAgCXJldHVybiAwOw0KPiBAQCAtMTg2 MywxMCArMTgxMiw4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0 cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8pDQo+ICANCj4gIAkJYm8gPSBt ZW0tPmJvOw0KPiAgDQo+IC0JCS8qIENvcHkgcGFnZXMgYXJyYXkgYW5kIHZhbGlkYXRlIHRoZSBC TyBpZiB3ZSBnb3QgdXNlciBwYWdlcyAqLw0KPiAtCQlpZiAobWVtLT51c2VyX3BhZ2VzWzBdKSB7 DQo+IC0JCQlhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLA0KPiAtCQkJ CQkJICAgICBtZW0tPnVzZXJfcGFnZXMpOw0KPiArCQkvKiBWYWxpZGF0ZSB0aGUgQk8gaWYgd2Ug Z290IHVzZXIgcGFnZXMgKi8NCj4gKwkJaWYgKGJvLT50Ym8udHRtLT5wYWdlc1swXSkgew0KPiAg CQkJYW1kZ3B1X2JvX3BsYWNlbWVudF9mcm9tX2RvbWFpbihibywgbWVtLT5kb21haW4pOw0KPiAg CQkJcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKCZiby0+dGJvLCAmYm8tPnBsYWNlbWVudCwgJmN0eCk7 DQo+ICAJCQlpZiAocmV0KSB7DQo+IEBAIC0xODc1LDE2ICsxODIyLDE2IEBAIHN0YXRpYyBpbnQg dmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpw cm9jZXNzX2luZm8pDQo+ICAJCQl9DQo+ICAJCX0NCj4gIA0KPiAtCQkvKiBWYWxpZGF0ZSBzdWNj ZWVkZWQsIG5vdyB0aGUgQk8gb3ducyB0aGUgcGFnZXMsIGZyZWUNCj4gLQkJICogb3VyIGNvcHkg b2YgdGhlIHBvaW50ZXIgYXJyYXkuIFB1dCB0aGlzIEJPIGJhY2sgb24NCj4gLQkJICogdGhlIHVz ZXJwdHJfdmFsaWRfbGlzdC4gSWYgd2UgbmVlZCB0byByZXZhbGlkYXRlDQo+IC0JCSAqIGl0LCB3 ZSBuZWVkIHRvIHN0YXJ0IGZyb20gc2NyYXRjaC4NCj4gLQkJICovDQo+IC0JCWt2ZnJlZShtZW0t PnVzZXJfcGFnZXMpOw0KPiAtCQltZW0tPnVzZXJfcGFnZXMgPSBOVUxMOw0KPiAgCQlsaXN0X21v dmVfdGFpbCgmbWVtLT52YWxpZGF0ZV9saXN0LmhlYWQsDQo+ICAJCQkgICAgICAgJnByb2Nlc3Nf aW5mby0+dXNlcnB0cl92YWxpZF9saXN0KTsNCj4gIA0KPiArCQkvKiBTdG9wIEhNTSB0cmFjayB0 aGUgdXNlcnB0ciB1cGRhdGUuIFdlIGRvbnQgY2hlY2sgdGhlIHJldHVybg0KPiArCQkgKiB2YWx1 ZSBmb3IgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZSB1cGRhdGUgYmVjYXVzZSB3ZSB3aWxsDQo+ ICsJCSAqIHJlc2NoZWR1bGUgdGhlIHJlc3RvcmUgd29ya2VyIGlmIHByb2Nlc3NfaW5mby0+ZXZp Y3RlZF9ib3MNCj4gKwkJICogaXMgdXBkYXRlZC4NCj4gKwkJICovDQo+ICsJCWFtZGdwdV90dG1f dHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7DQo+ICsNCj4gIAkJLyogVXBkYXRl IG1hcHBpbmcuIElmIHRoZSBCTyB3YXMgbm90IHZhbGlkYXRlZA0KPiAgCQkgKiAoYmVjYXVzZSB3 ZSBjb3VsZG4ndCBnZXQgdXNlciBwYWdlcyksIHRoaXMgd2lsbA0KPiAgCQkgKiBjbGVhciB0aGUg cGFnZSB0YWJsZSBlbnRyaWVzLCB3aGljaCB3aWxsIHJlc3VsdCBpbg0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmMNCj4gaW5kZXggNWM3OWRhOGUxMTUwLi4z ODQyMTgzOTcwY2MgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9ib19saXN0LmMNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2JvX2xpc3QuYw0KPiBAQCAtMjAwLDggKzIwMCw2IEBAIHZvaWQgYW1kZ3B1X2JvX2xpc3RfZ2V0 X2xpc3Qoc3RydWN0IGFtZGdwdV9ib19saXN0ICpsaXN0LA0KPiAgDQo+ICAJCWlmICghYm8tPnBh cmVudCkNCj4gIAkJCWxpc3RfYWRkX3RhaWwoJmUtPnR2LmhlYWQsICZidWNrZXRbcHJpb3JpdHld KTsNCj4gLQ0KPiAtCQllLT51c2VyX3BhZ2VzID0gTlVMTDsNCj4gIAl9DQo+ICANCj4gIAkvKiBD b25uZWN0IHRoZSBzb3J0ZWQgYnVja2V0cyBpbiB0aGUgb3V0cHV0IGxpc3QuICovDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuaA0KPiBpbmRleCA3YzVmNWQx NjAxZTYuLjRiZWFiMmRlMDliMyAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2JvX2xpc3QuaA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfYm9fbGlzdC5oDQo+IEBAIC0zNSw4ICszNSw3IEBAIHN0cnVjdCBhbWRncHVfYm9f bGlzdF9lbnRyeSB7DQo+ICAJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIJdHY7DQo+ICAJc3Ry dWN0IGFtZGdwdV9ib192YQkJKmJvX3ZhOw0KPiAgCXVpbnQzMl90CQkJcHJpb3JpdHk7DQo+IC0J c3RydWN0IHBhZ2UJCQkqKnVzZXJfcGFnZXM7DQo+IC0JaW50CQkJCXVzZXJfaW52YWxpZGF0ZWQ7 DQo+ICsJYm9vbAkJCQl1c2VyX2ludmFsaWRhdGVkOw0KPiAgfTsNCj4gIA0KPiAgc3RydWN0IGFt ZGdwdV9ib19saXN0IHsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMNCltz bmlwXQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dl bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jDQpbc25pcF0NCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmMNCj4gaW5kZXggNWQ1MThkMmJiOWJl Li5jODAwMmVlMWQ0MTUgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9tbi5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9t bi5jDQo+IEBAIC0yMjksOCArMjI5LDYgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X21uX2ludmFsaWRh dGVfbm9kZShzdHJ1Y3QgYW1kZ3B1X21uX25vZGUgKm5vZGUsDQo+ICAJCQl0cnVlLCBmYWxzZSwg TUFYX1NDSEVEVUxFX1RJTUVPVVQpOw0KPiAgCQlpZiAociA8PSAwKQ0KPiAgCQkJRFJNX0VSUk9S KCIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgdXNlciBib1xuIiwgcik7DQo+IC0NCj4gLQkJYW1k Z3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXMoYm8tPnRiby50dG0pOw0KPiAgCX0NCj4gIH0NCj4g IA0KPiBAQCAtMzUzLDE1ICszNTEsMTYgQEAgc3RhdGljIHN0cnVjdCBobW1fbWlycm9yX29wcyBh bWRncHVfaG1tX21pcnJvcl9vcHNbXSA9IHsNCj4gIC8qKg0KPiAgICogYW1kZ3B1X21uX2dldCAt IGNyZWF0ZSBITU0gbWlycm9yIGNvbnRleHQNCj4gICAqDQo+ICsgKiBAbW06IHRoZSBtbSBzdHJ1 Y3QNCj4gICAqIEBhZGV2OiBhbWRncHUgZGV2aWNlIHBvaW50ZXINCj4gICAqIEB0eXBlOiB0eXBl IG9mIE1NVSBub3RpZmllciBjb250ZXh0DQo+ICAgKg0KPiAtICogQ3JlYXRlcyBhIEhNTSBtaXJy b3IgY29udGV4dCBmb3IgY3VycmVudC0+bW0uDQo+ICsgKiBDcmVhdGVzIGEgSE1NIG1pcnJvciBj b250ZXh0IGZvciBtbS4NCj4gICAqLw0KPiAtc3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dl dChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwNCj4gK3N0cnVjdCBhbWRncHVfbW4gKmFtZGdw dV9tbl9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sDQoNCkkgdGhpbmsgdGhpcyBjaGFuZ2UgaXNu J3QgbmVlZGVkIGFueSBtb3JlLiBBbGwgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uDQpzcGVjaWZ5 IG1tIGFzIGN1cnJlbnQtPm1tIGFueXdheS4NCg0KDQo+ICsJCQkJc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsDQo+ICAJCQkJZW51bSBhbWRncHVfbW5fdHlwZSB0eXBlKQ0KPiAgew0KPiAtCXN0 cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07DQo+ICAJc3RydWN0IGFtZGdwdV9tbiAq YW1uOw0KPiAgCXVuc2lnbmVkIGxvbmcga2V5ID0gQU1ER1BVX01OX0tFWShtbSwgdHlwZSk7DQo+ ICAJaW50IHI7DQo+IEBAIC00MzEsNyArNDMwLDcgQEAgaW50IGFtZGdwdV9tbl9yZWdpc3Rlcihz dHJ1Y3QgYW1kZ3B1X2JvICpibywgdW5zaWduZWQgbG9uZyBhZGRyKQ0KPiAgCXN0cnVjdCBsaXN0 X2hlYWQgYm9zOw0KPiAgCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0Ow0KPiAgDQo+IC0J YW1uID0gYW1kZ3B1X21uX2dldChhZGV2LCB0eXBlKTsNCj4gKwlhbW4gPSBhbWRncHVfbW5fZ2V0 KGN1cnJlbnQtPm1tLCBhZGV2LCB0eXBlKTsNCj4gIAlpZiAoSVNfRVJSKGFtbikpDQo+ICAJCXJl dHVybiBQVFJfRVJSKGFtbik7DQo+ICANCj4gQEAgLTUxMywzICs1MTIsMjYgQEAgdm9pZCBhbWRn cHVfbW5fdW5yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1X2JvICpibykNCj4gIAltdXRleF91bmxvY2so JmFkZXYtPm1uX2xvY2spOw0KPiAgfQ0KPiAgDQo+ICsvKiBmbGFncyB1c2VkIGJ5IEhNTSBpbnRl cm5hbCwgbm90IHJlbGF0ZWQgdG8gQ1BVL0dQVSBQVEUgZmxhZ3MgKi8NCj4gK3N0YXRpYyBjb25z dCB1aW50NjRfdCBobW1fcmFuZ2VfZmxhZ3NbSE1NX1BGTl9GTEFHX01BWF0gPSB7DQo+ICsJCSgx IDw8IDApLCAvKiBITU1fUEZOX1ZBTElEICovDQo+ICsJCSgxIDw8IDEpLCAvKiBITU1fUEZOX1dS SVRFICovDQo+ICsJCTAgLyogSE1NX1BGTl9ERVZJQ0VfUFJJVkFURSAqLw0KPiArfTsNCj4gKw0K PiArc3RhdGljIGNvbnN0IHVpbnQ2NF90IGhtbV9yYW5nZV92YWx1ZXNbSE1NX1BGTl9WQUxVRV9N QVhdID0gew0KPiArCQkweGZmZmZmZmZmZmZmZmZmZmVVTCwgLyogSE1NX1BGTl9FUlJPUiAqLw0K PiArCQkwLCAvKiBITU1fUEZOX05PTkUgKi8NCj4gKwkJMHhmZmZmZmZmZmZmZmZmZmZjVUwgLyog SE1NX1BGTl9TUEVDSUFMICovDQo+ICt9Ow0KPiArDQo+ICt2b2lkIGFtZGdwdV9obW1faW5pdF9y YW5nZShzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSkNCj4gK3sNCj4gKwlpZiAocmFuZ2UpIHsNCj4g KwkJcmFuZ2UtPmZsYWdzID0gaG1tX3JhbmdlX2ZsYWdzOw0KPiArCQlyYW5nZS0+dmFsdWVzID0g aG1tX3JhbmdlX3ZhbHVlczsNCj4gKwkJcmFuZ2UtPnBmbl9zaGlmdCA9IFBBR0VfU0hJRlQ7DQo+ ICsJCXJhbmdlLT5wZm5zID0gTlVMTDsNCj4gKwkJSU5JVF9MSVNUX0hFQUQoJnJhbmdlLT5saXN0 KTsNCj4gKwl9DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfbW4uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oDQo+ IGluZGV4IDBhNTFmZDAwMDIxYy4uNGM1ZTg2ODQ3YTNiIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfbW4uaA0KPiBAQCAtMjUsOSArMjUsMTAgQEANCj4gICNkZWZpbmUg X19BTURHUFVfTU5fSF9fDQo+ICANCj4gIC8qDQo+IC0gKiBNTVUgTm90aWZpZXINCj4gKyAqIEhN TSBtaXJyb3INCj4gICAqLw0KPiAgc3RydWN0IGFtZGdwdV9tbjsNCj4gK3N0cnVjdCBobW1fcmFu Z2U7DQo+ICANCj4gIGVudW0gYW1kZ3B1X21uX3R5cGUgew0KPiAgCUFNREdQVV9NTl9UWVBFX0dG WCwNCj4gQEAgLTM3LDEwICszOCwxMiBAQCBlbnVtIGFtZGdwdV9tbl90eXBlIHsNCj4gICNpZiBk ZWZpbmVkKENPTkZJR19ITU1fTUlSUk9SKQ0KPiAgdm9pZCBhbWRncHVfbW5fbG9jayhzdHJ1Y3Qg YW1kZ3B1X21uICptbik7DQo+ICB2b2lkIGFtZGdwdV9tbl91bmxvY2soc3RydWN0IGFtZGdwdV9t biAqbW4pOw0KPiAtc3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwNCj4gK3N0cnVjdCBhbWRncHVfbW4gKmFtZGdwdV9tbl9nZXQoc3RydWN0 IG1tX3N0cnVjdCAqbW0sDQo+ICsJCQkJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsDQo+ICAJ CQkJZW51bSBhbWRncHVfbW5fdHlwZSB0eXBlKTsNCj4gIGludCBhbWRncHVfbW5fcmVnaXN0ZXIo c3RydWN0IGFtZGdwdV9ibyAqYm8sIHVuc2lnbmVkIGxvbmcgYWRkcik7DQo+ICB2b2lkIGFtZGdw dV9tbl91bnJlZ2lzdGVyKHN0cnVjdCBhbWRncHVfYm8gKmJvKTsNCj4gK3ZvaWQgYW1kZ3B1X2ht bV9pbml0X3JhbmdlKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTsNCj4gICNlbHNlDQo+ICBzdGF0 aWMgaW5saW5lIHZvaWQgYW1kZ3B1X21uX2xvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pIHt9DQo+ ICBzdGF0aWMgaW5saW5lIHZvaWQgYW1kZ3B1X21uX3VubG9jayhzdHJ1Y3QgYW1kZ3B1X21uICpt bikge30NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90 dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYw0KPiBpbmRleCBj OTFlYzMxMDFkMDAuLjMzMDU3ZDYxMTRjNyAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV90dG0uYw0KPiBAQCAtNDMsNiArNDMsNyBAQA0KPiAgI2luY2x1ZGUgPGxpbnV4 L3BhZ2VtYXAuaD4NCj4gICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+DQo+ICAjaW5jbHVkZSA8 bGludXgvaW9tbXUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9obW0uaD4NCj4gICNpbmNsdWRlICJh bWRncHUuaCINCj4gICNpbmNsdWRlICJhbWRncHVfb2JqZWN0LmgiDQo+ICAjaW5jbHVkZSAiYW1k Z3B1X3RyYWNlLmgiDQo+IEBAIC03MDUsMTEgKzcwNiw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25n IGFtZGdwdV90dG1faW9fbWVtX3BmbihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLA0KPiAg LyoNCj4gICAqIFRUTSBiYWNrZW5kIGZ1bmN0aW9ucy4NCj4gICAqLw0KPiAtc3RydWN0IGFtZGdw dV90dG1fZ3VwX3Rhc2tfbGlzdCB7DQo+IC0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0Ow0KPiAtCXN0 cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsNCj4gLX07DQo+IC0NCj4gIHN0cnVjdCBhbWRncHVfdHRt X3R0IHsNCj4gIAlzdHJ1Y3QgdHRtX2RtYV90dAl0dG07DQo+ICAJdTY0CQkJb2Zmc2V0Ow0KPiBA QCAtNzE4LDEwNyArNzE0LDEwNSBAQCBzdHJ1Y3QgYW1kZ3B1X3R0bV90dCB7DQo+ICAJdWludDMy X3QJCXVzZXJmbGFnczsNCj4gIAlzcGlubG9ja190ICAgICAgICAgICAgICBndXB0YXNrbG9jazsN Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBndXB0YXNrczsNCj4gLQlhdG9taWNfdAkJbW11 X2ludmFsaWRhdGlvbnM7DQo+IC0JdWludDMyX3QJCWxhc3Rfc2V0X3BhZ2VzOw0KPiArCXN0cnVj dCBobW1fcmFuZ2UJcmFuZ2U7DQo+ICB9Ow0KPiAgDQo+ICAvKioNCj4gLSAqIGFtZGdwdV90dG1f dHRfZ2V0X3VzZXJfcGFnZXMgLSBQaW4gcGFnZXMgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYSBV U0VSUFRSDQo+IC0gKiBwb2ludGVyIHRvIG1lbW9yeQ0KPiArICogYW1kZ3B1X3R0bV90dF9nZXRf dXNlcl9wYWdlcyAtIGdldCBkZXZpY2UgYWNjZXNzaWJsZSBwYWdlcyB0aGF0IGJhY2sgdXNlcg0K PiArICogbWVtb3J5IGFuZCBzdGFydCBITU0gdHJhY2tpbmcgQ1BVIHBhZ2UgdGFibGUgdXBkYXRl DQo+ICAgKg0KPiAtICogQ2FsbGVkIGJ5IGFtZGdwdV9nZW1fdXNlcnB0cl9pb2N0bCgpIGFuZCBh bWRncHVfY3NfcGFyc2VyX2JvcygpLg0KPiAtICogVGhpcyBwcm92aWRlcyBhIHdyYXBwZXIgYXJv dW5kIHRoZSBnZXRfdXNlcl9wYWdlcygpIGNhbGwgdG8gcHJvdmlkZQ0KPiAtICogZGV2aWNlIGFj Y2Vzc2libGUgcGFnZXMgdGhhdCBiYWNrIHVzZXIgbWVtb3J5Lg0KPiArICogQ2FsbGluZyBmdW5j dGlvbiBtdXN0IGNhbGwgYW1kZ3B1X3R0bV90dF91c2VycHRyX3JhbmdlX2RvbmUoKSBvbmNlIGFu ZCBvbmx5DQo+ICsgKiBvbmNlIGFmdGVyd2FyZHMgdG8gc3RvcCBITU0gdHJhY2tpbmcNCj4gICAq Lw0KPiAgaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRt LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQ0KPiAgew0KPiAgCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpn dHQgPSAodm9pZCAqKXR0bTsNCj4gIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGd0dC0+dXNlcnRh c2stPm1tOw0KPiAtCXVuc2lnbmVkIGludCBmbGFncyA9IDA7DQo+IC0JdW5zaWduZWQgcGlubmVk ID0gMDsNCj4gLQlpbnQgcjsNCj4gKwl1bnNpZ25lZCBsb25nIGVuZCA9IGd0dC0+dXNlcnB0ciAr IHR0bS0+bnVtX3BhZ2VzICogUEFHRV9TSVpFOw0KPiArCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdl ID0gJmd0dC0+cmFuZ2U7DQo+ICsJaW50IHIsIGk7DQo+ICANCj4gIAlpZiAoIW1tKSAvKiBIYXBw ZW5zIGR1cmluZyBwcm9jZXNzIHNodXRkb3duICovDQo+ICAJCXJldHVybiAtRVNSQ0g7DQo+ICAN Cj4gLQlpZiAoIShndHQtPnVzZXJmbGFncyAmIEFNREdQVV9HRU1fVVNFUlBUUl9SRUFET05MWSkp DQo+IC0JCWZsYWdzIHw9IEZPTExfV1JJVEU7DQo+ICsJYW1kZ3B1X2htbV9pbml0X3JhbmdlKHJh bmdlKTsNCj4gIA0KPiAgCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsNCj4gIA0KPiArCXJhbmdl LT52bWEgPSBmaW5kX3ZtYShtbSwgZ3R0LT51c2VycHRyKTsNCg0KVGhlcmUgaXMgc3RpbGwgYW4g YXNzdW1wdGlvbiBoZXJlIHRoYXQgb3VyIHVzZXJwdHIgQk9zIGNvdmVyIG9ubHkgYQ0Kc2luZ2xl IFZNLiBUaGlzIGlzIGEgbmV3IGxpbWl0YXRpb24gd2l0aCBITU0gdGhhdCB0aGUgcHJldmlvdXMN CmdldF91c2VyX3BhZ2VzLWJhc2VkIGltcGxlbWVudGF0aW9uIGRpZCBub3QgaGF2ZS4gV2UncmUg cHJvYmFibHkgT0sgd2l0aA0KdGhpcyBmb3Igbm93LiBCdXQgd2UgbWF5IHJ1biBpbnRvIHJlZ3Jl c3Npb25zIGlmIHRoZXJlIGFyZSBhbnkgUk9DbQ0KYXBwbGljYXRpb24gdGhhdCByZWdpc3RlciB1 c2VyIG1lbW9yeSBzcGFubmluZyBtdWx0aXBsZSBWTUFzLiBJZiB0aGF0DQpoYXBwZW5zLCB3ZSBt YXkgbmVlZCB0byBnZW5lcmFsaXplIHRoaXMgc28gdGhhdCBlYWNoIHVzZXJwdHIgQk8gY2FuIGhh dmUNCm11bHRpcGxlIEhNTSByYW5nZXMuDQoNCg0KPiAgCWlmIChndHQtPnVzZXJmbGFncyAmIEFN REdQVV9HRU1fVVNFUlBUUl9BTk9OT05MWSkgew0KPiAgCQkvKg0KPiAgCQkgKiBjaGVjayB0aGF0 IHdlIG9ubHkgdXNlIGFub255bW91cyBtZW1vcnkgdG8gcHJldmVudCBwcm9ibGVtcw0KPiAgCQkg KiB3aXRoIHdyaXRlYmFjaw0KPiAgCQkgKi8NCj4gLQkJdW5zaWduZWQgbG9uZyBlbmQgPSBndHQt PnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0laRTsNCj4gLQkJc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWE7DQo+ICsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcmFuZ2Ut PnZtYTsNCj4gIA0KPiAtCQl2bWEgPSBmaW5kX3ZtYShtbSwgZ3R0LT51c2VycHRyKTsNCj4gLQkJ aWYgKCF2bWEgfHwgdm1hLT52bV9maWxlIHx8IHZtYS0+dm1fZW5kIDwgZW5kKSB7DQo+IC0JCQl1 cF9yZWFkKCZtbS0+bW1hcF9zZW0pOw0KPiAtCQkJcmV0dXJuIC1FUEVSTTsNCj4gLQkJfQ0KPiAr CQlpZiAoIXZtYSB8fCB2bWEtPnZtX2ZpbGUgfHwgdm1hLT52bV9lbmQgPCBlbmQpDQo+ICsJCQly YW5nZS0+dm1hID0gTlVMTDsNCj4gIAl9DQo+ICANCj4gLQkvKiBsb29wIGVub3VnaCB0aW1lcyB1 c2luZyBjb250aWd1b3VzIHBhZ2VzIG9mIG1lbW9yeSAqLw0KPiAtCWRvIHsNCj4gLQkJdW5zaWdu ZWQgbnVtX3BhZ2VzID0gdHRtLT5udW1fcGFnZXMgLSBwaW5uZWQ7DQo+IC0JCXVpbnQ2NF90IHVz ZXJwdHIgPSBndHQtPnVzZXJwdHIgKyBwaW5uZWQgKiBQQUdFX1NJWkU7DQo+IC0JCXN0cnVjdCBw YWdlICoqcCA9IHBhZ2VzICsgcGlubmVkOw0KPiAtCQlzdHJ1Y3QgYW1kZ3B1X3R0bV9ndXBfdGFz a19saXN0IGd1cHRhc2s7DQo+IC0NCj4gLQkJZ3VwdGFzay50YXNrID0gY3VycmVudDsNCj4gLQkJ c3Bpbl9sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsNCj4gLQkJbGlzdF9hZGQoJmd1cHRhc2subGlz dCwgJmd0dC0+Z3VwdGFza3MpOw0KPiAtCQlzcGluX3VubG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7 DQo+ICsJaWYgKCFyYW5nZS0+dm1hKSB7DQo+ICsJCXIgPSAtRVBFUk07DQoNCllvdSdyZSB0cmVh dGluZyBwZXJtaXNzaW9ucyBlcnJvcnMgYW5kIGVycm9ycyBmaW5kaW5nIGEgVk1BIHRoZSBzYW1l DQp3YXkuIEFuZCBJIHRoaW5rIHlvdSBkb24ndCBkZXRlY3QgZmFpbHVyZXMgdG8gZmluZCBhIFZN QSBwcm9wZXJseSBpbiB0aGUNCmZpcnN0IHBsYWNlLiBmaW5kX3ZtYSBtYXkgcmV0dXJuIGEgVk1B IHRoYXQgZG9lc24ndCBpbmNsdWRlIHRoZSBhZGRyZXNzDQpwcm92aWRlZC4gSXQncyBkb2N1bWVu dGVkIGFzICJMb29rIHVwIHRoZSBmaXJzdCBWTUEgd2hpY2ggc2F0aXNmaWVzwqANCmFkZHIgPCB2 bV9lbmQswqAgTlVMTCBpZiBub25lLiIgWW91IHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlIFZN QSBjb3ZlcnMNCnRoZSBlbnRpcmUgYWRkcmVzcyByYW5nZSBvZiB0aGUgdXNlcnB0ciBCTy4gVGhl cmUgaXMgYSBoZWxwZXIgZnVuY3Rpb24NCmluIGxpbnV4L21tLmggdGhhdCBkb2VzIHRoYXQ6IHJh bmdlX2luX3ZtYShyYW5nZS0+dm1hLCBndHQtPnVzZXJwdHIsDQpndHQtPnVzZXJwdHIgKyBndHQt PnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0laRSkuIFlvdSBzaG91bGQNCmNoZWNr IHRoaXMgY29uZGl0aW9uIGluIGFsbCBjYXNlcy4NCg0KVGhlcmUgc2hvdWxkIGJlIHR3byBkaXN0 aW5jdCB0eXBlcyBvZiBlcnJvcnMuIElmIGZpbmRfdm1hIGZhaWxzIHRvIGZpbmQNCmEgbWF0Y2hp bmcgVk1BLCB0aGF0IHNob3VsZCBiZSAtRUZBVUxULiBJZiB0aGUgZ3R0LT51c2VyZmxhZ3MgZG9u J3QNCm1hdGNoIHRoZSBWTUEgcHJvcGVydGllcywgdGhhdCBzaG91bGQgYmUgLUVQRVJNLg0KDQoN Cj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiAgDQo+IC0JCWlmIChtbSA9PSBjdXJyZW50LT5tbSkN Cj4gLQkJCXIgPSBnZXRfdXNlcl9wYWdlcyh1c2VycHRyLCBudW1fcGFnZXMsIGZsYWdzLCBwLCBO VUxMKTsNCj4gLQkJZWxzZQ0KPiAtCQkJciA9IGdldF91c2VyX3BhZ2VzX3JlbW90ZShndHQtPnVz ZXJ0YXNrLA0KPiAtCQkJCQltbSwgdXNlcnB0ciwgbnVtX3BhZ2VzLA0KPiAtCQkJCQlmbGFncywg cCwgTlVMTCwgTlVMTCk7DQo+ICsJcmFuZ2UtPnBmbnMgPSBrdm1hbGxvY19hcnJheSh0dG0tPm51 bV9wYWdlcywgc2l6ZW9mKHVpbnQ2NF90KSwNCj4gKwkJCQkgICAgIEdGUF9LRVJORUwpOw0KPiAr CWlmIChyYW5nZS0+cGZucyA9PSBOVUxMKSB7DQo+ICsJCXIgPSAtRU5PTUVNOw0KPiArCQlnb3Rv IG91dDsNCj4gKwl9DQo+ICsJcmFuZ2UtPnN0YXJ0ID0gZ3R0LT51c2VycHRyOw0KPiArCXJhbmdl LT5lbmQgPSBlbmQ7DQo+ICANCj4gLQkJc3Bpbl9sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsNCj4g LQkJbGlzdF9kZWwoJmd1cHRhc2subGlzdCk7DQo+IC0JCXNwaW5fdW5sb2NrKCZndHQtPmd1cHRh c2tsb2NrKTsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgdHRtLT5udW1fcGFnZXM7IGkrKykgew0KPiAr CQlyYW5nZS0+cGZuc1tpXSA9IHJhbmdlLT5mbGFnc1tITU1fUEZOX1ZBTElEXTsNCj4gKwkJcmFu Z2UtPnBmbnNbaV0gfD0gYW1kZ3B1X3R0bV90dF9pc19yZWFkb25seSh0dG0pID8NCj4gKwkJCQkJ MCA6IHJhbmdlLT5mbGFnc1tITU1fUEZOX1dSSVRFXTsNCj4gKwl9DQoNCllvdSBjb3VsZCBvcHRp bWl6ZSB0aGlzIHNsaWdodGx5LiBZb3UgZG9uJ3QgbmVlZCB0byBjYWxsDQphbWRncHVfdHRtX3R0 X2lzX3JlYWRvbmx5IGluIGVhY2ggbG9vcCBpdGVyYXRpb24uIFRoZSBmbGFncyBhcmUgdGhlIHNh bWUNCmZvciBhbGwgcGZucy4gU28gZG8gdGhlIGNvbmRpdGlvbmFsIHRoaW5nIG9uIHJhbmdlLT5w Zm5zWzBdLCBhbmQgdGhlbg0KanVzdCBjb3B5IHRoYXQgdG8gYWxsIHRoZSByZW1haW5pbmcgcGZu cy4NCg0KDQo+ICANCj4gLQkJaWYgKHIgPCAwKQ0KPiAtCQkJZ290byByZWxlYXNlX3BhZ2VzOw0K PiArCS8qIFRoaXMgbWF5IHRyaWdnZXIgcGFnZSB0YWJsZSB1cGRhdGUgKi8NCj4gKwlyID0gaG1t X3ZtYV9mYXVsdChyYW5nZSwgdHJ1ZSk7DQo+ICsJaWYgKHIpDQo+ICsJCWdvdG8gb3V0X2ZyZWVf cGZuczsNCj4gIA0KPiAtCQlwaW5uZWQgKz0gcjsNCj4gKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0p Ow0KPiAgDQo+IC0JfSB3aGlsZSAocGlubmVkIDwgdHRtLT5udW1fcGFnZXMpOw0KPiArCWZvciAo aSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgaSsrKQ0KPiArCQlwYWdlc1tpXSA9IGhtbV9wZm5f dG9fcGFnZShyYW5nZSwgcmFuZ2UtPnBmbnNbaV0pOw0KPiAgDQo+IC0JdXBfcmVhZCgmbW0tPm1t YXBfc2VtKTsNCj4gIAlyZXR1cm4gMDsNCj4gIA0KPiAtcmVsZWFzZV9wYWdlczoNCj4gLQlyZWxl YXNlX3BhZ2VzKHBhZ2VzLCBwaW5uZWQpOw0KPiArb3V0X2ZyZWVfcGZuczoNCj4gKwlrdmZyZWUo cmFuZ2UtPnBmbnMpOw0KPiArCXJhbmdlLT5wZm5zID0gTlVMTDsNCj4gK291dDoNCj4gIAl1cF9y ZWFkKCZtbS0+bW1hcF9zZW0pOw0KPiAgCXJldHVybiByOw0KPiAgfQ0KPiAgDQo+ICAvKioNCj4g LSAqIGFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMgLSBDb3B5IHBhZ2VzIGluLCBwdXR0aW5n IG9sZCBwYWdlcyBhcyBuZWNlc3NhcnkuDQo+ICsgKiBhbWRncHVfdHRtX3R0X3VzZXJwdHJfcmFu Z2VfZG9uZSAtIHN0b3AgSE1NIHRyYWNrIHRoZSBDUFUgcGFnZSB0YWJsZSBjaGFuZ2UNCj4gKyAq IENoZWNrIGlmIHRoZSBwYWdlcyBiYWNraW5nIHRoaXMgdHRtIHJhbmdlIGhhdmUgYmVlbiBpbnZh bGlkYXRlZA0KPiAgICoNCj4gLSAqIENhbGxlZCBieSBhbWRncHVfY3NfbGlzdF92YWxpZGF0ZSgp LiBUaGlzIGNyZWF0ZXMgdGhlIHBhZ2UgbGlzdA0KPiAtICogdGhhdCBiYWNrcyB1c2VyIG1lbW9y eSBhbmQgd2lsbCB1bHRpbWF0ZWx5IGJlIG1hcHBlZCBpbnRvIHRoZSBkZXZpY2UNCj4gLSAqIGFk ZHJlc3Mgc3BhY2UuDQo+ICsgKiBSZXR1cm5zOiB0cnVlIGlmIHBhZ2VzIGFyZSBpbnZhbGlkYXRl ZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZXkndmUgYmVlbiBzZXQNCg0KSSBzdGlsbCBkb24ndCBs aWtlIHRoYXQgeW91J3JlIGludmVydGluZyB0aGUgcmV0dXJuIHZhbHVlIG9mDQpobW1fdm1hX3Jh bmdlX2RvbmUuIFRoaXMgd2lsbCBnZXQgY29uZnVzaW5nIGluIHRoZSBmdXR1cmUuIENvdWxkIHRo aXMNCmZ1bmN0aW9uIGluc3RlYWQgcmV0dXJuICJ0cnVlIGlmIHBhZ2VzIGFyZSBzdGlsbCB2YWxp ZCI/DQoNCg0KPiAgICovDQo+IC12b2lkIGFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoc3Ry dWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQ0KPiArYm9vbCBhbWRncHVfdHRt X3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoc3RydWN0IHR0bV90dCAqdHRtKQ0KPiAgew0KPiAgCXN0 cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsNCj4gLQl1bnNpZ25lZCBpOw0K PiArCWJvb2wgcjsNCj4gIA0KPiAtCWd0dC0+bGFzdF9zZXRfcGFnZXMgPSBhdG9taWNfcmVhZCgm Z3R0LT5tbXVfaW52YWxpZGF0aW9ucyk7DQo+IC0JZm9yIChpID0gMDsgaSA8IHR0bS0+bnVtX3Bh Z2VzOyArK2kpIHsNCj4gLQkJaWYgKHR0bS0+cGFnZXNbaV0pDQo+IC0JCQlwdXRfcGFnZSh0dG0t PnBhZ2VzW2ldKTsNCj4gKwlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikNCj4gKwkJ cmV0dXJuIGZhbHNlOw0KDQpVc2UgIiFndHQiIGluc3RlYWQgb2YgImd0dCA9PSBOVUxMIi4gQWxz bywgcmV0dXJuaW5nICJmYWxzZSIgaGVyZSBtZWFucw0KdGhlIHBhZ2VzIGFyZSBzdGlsbCB2YWxp ZC4gVGhhdCBzZWVtcyBsaWtlIHRoZSB3cm9uZyBhbnN3ZXIgZm9yIHRoaXMNCmtpbmQgb2YgZmFp bHVyZS4gImZhbHNlIiB3b3VsZCBtYWtlIHNlbnNlIGhlcmUgaWYgeW91IGZvbGxvd2VkIG15DQpz dWdnZXN0aW9uIGFib3ZlIHRvIHJldHVybiB0cnVlLCBpZiB0aGUgcGFnZXMgYXJlIHN0aWxsIHZh bGlkLg0KDQoNCj4gIA0KPiAtCQl0dG0tPnBhZ2VzW2ldID0gcGFnZXMgPyBwYWdlc1tpXSA6IE5V TEw7DQo+ICsJciA9IGhtbV92bWFfcmFuZ2VfZG9uZSgmZ3R0LT5yYW5nZSk7DQo+ICsNCj4gKwlp ZiAoZ3R0LT5yYW5nZS5wZm5zKSB7DQo+ICsJCWt2ZnJlZShndHQtPnJhbmdlLnBmbnMpOw0KPiAr CQlndHQtPnJhbmdlLnBmbnMgPSBOVUxMOw0KPiAgCX0NCj4gKw0KPiArCXJldHVybiAhcjsNCg0K SSBzdGlsbCBkb24ndCBsaWtlIHRoYXQgeW91J3JlIGludmVydGluZyB0aGUgcmV0dXJuIHZhbHVl IG9mDQpobW1fdm1hX3JhbmdlX2RvbmUuIFRoaXMgd2lsbCBnZXQgY29uZnVzaW5nIGluIHRoZSBm dXR1cmUuDQoNClJlZ2FyZHMsDQrCoCBGZWxpeA0KDQoNCj4gIH0NCj4gIA0KPiAgLyoqDQo+IEBA IC05MDMsOSArODk3LDYgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X3R0bV90dF91bnBpbl91c2VycHRy KHN0cnVjdCB0dG1fdHQgKnR0bSkNCj4gIAkvKiB1bm1hcCB0aGUgcGFnZXMgbWFwcGVkIHRvIHRo ZSBkZXZpY2UgKi8NCj4gIAlkbWFfdW5tYXBfc2coYWRldi0+ZGV2LCB0dG0tPnNnLT5zZ2wsIHR0 bS0+c2ctPm5lbnRzLCBkaXJlY3Rpb24pOw0KPiAgDQo+IC0JLyogbWFyayB0aGUgcGFnZXMgYXMg ZGlydHkgKi8NCj4gLQlhbWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyh0dG0pOw0KPiAtDQo+ ICAJc2dfZnJlZV90YWJsZSh0dG0tPnNnKTsNCj4gIH0NCj4gIA0KPiBAQCAtMTIwNyw3ICsxMTk4 LDcgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X3R0bV90dF91bnBvcHVsYXRlKHN0cnVjdCB0dG1fdHQg KnR0bSkNCj4gIAlib29sIHNsYXZlID0gISEodHRtLT5wYWdlX2ZsYWdzICYgVFRNX1BBR0VfRkxB R19TRyk7DQo+ICANCj4gIAlpZiAoZ3R0ICYmIGd0dC0+dXNlcnB0cikgew0KPiAtCQlhbWRncHVf dHRtX3R0X3NldF91c2VyX3BhZ2VzKHR0bSwgTlVMTCk7DQo+ICsJCW1lbXNldCh0dG0tPnBhZ2Vz LCAwLCB0dG0tPm51bV9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7DQo+ICAJCWtmcmVl KHR0bS0+c2cpOw0KPiAgCQl0dG0tPnBhZ2VfZmxhZ3MgJj0gflRUTV9QQUdFX0ZMQUdfU0c7DQo+ ICAJCXJldHVybjsNCj4gQEAgLTEyNTgsOCArMTI0OSw2IEBAIGludCBhbWRncHVfdHRtX3R0X3Nl dF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdWludDY0X3QgYWRkciwNCj4gIA0KPiAgCXNw aW5fbG9ja19pbml0KCZndHQtPmd1cHRhc2tsb2NrKTsNCj4gIAlJTklUX0xJU1RfSEVBRCgmZ3R0 LT5ndXB0YXNrcyk7DQo+IC0JYXRvbWljX3NldCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucywgMCk7 DQo+IC0JZ3R0LT5sYXN0X3NldF9wYWdlcyA9IDA7DQo+ICANCj4gIAlyZXR1cm4gMDsNCj4gIH0N Cj4gQEAgLTEyODksNyArMTI3OCw2IEBAIGJvb2wgYW1kZ3B1X3R0bV90dF9hZmZlY3RfdXNlcnB0 cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsDQo+ICAJCQkJICB1bnNp Z25lZCBsb25nIGVuZCkNCj4gIHsNCj4gIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZv aWQgKil0dG07DQo+IC0Jc3RydWN0IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlzdCAqZW50cnk7DQo+ ICAJdW5zaWduZWQgbG9uZyBzaXplOw0KPiAgDQo+ICAJaWYgKGd0dCA9PSBOVUxMIHx8ICFndHQt PnVzZXJwdHIpDQo+IEBAIC0xMzAyLDQ4ICsxMjkwLDIwIEBAIGJvb2wgYW1kZ3B1X3R0bV90dF9h ZmZlY3RfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsDQo+ ICAJaWYgKGd0dC0+dXNlcnB0ciA+IGVuZCB8fCBndHQtPnVzZXJwdHIgKyBzaXplIDw9IHN0YXJ0 KQ0KPiAgCQlyZXR1cm4gZmFsc2U7DQo+ICANCj4gLQkvKiBTZWFyY2ggdGhlIGxpc3RzIG9mIHRh c2tzIHRoYXQgaG9sZCB0aGlzIG1hcHBpbmcgYW5kIHNlZQ0KPiAtCSAqIGlmIGN1cnJlbnQgaXMg b25lIG9mIHRoZW0uICBJZiBpdCBpcyByZXR1cm4gZmFsc2UuDQo+IC0JICovDQo+IC0Jc3Bpbl9s b2NrKCZndHQtPmd1cHRhc2tsb2NrKTsNCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAm Z3R0LT5ndXB0YXNrcywgbGlzdCkgew0KPiAtCQlpZiAoZW50cnktPnRhc2sgPT0gY3VycmVudCkg ew0KPiAtCQkJc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOw0KPiAtCQkJcmV0dXJuIGZh bHNlOw0KPiAtCQl9DQo+IC0JfQ0KPiAtCXNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsN Cj4gLQ0KPiAtCWF0b21pY19pbmMoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpOw0KPiAtDQo+ICAJ cmV0dXJuIHRydWU7DQo+ICB9DQo+ICANCj4gIC8qKg0KPiAtICogYW1kZ3B1X3R0bV90dF91c2Vy cHRyX2ludmFsaWRhdGVkIC0gSGFzIHRoZSB0dG1fdHQgb2JqZWN0IGJlZW4gaW52YWxpZGF0ZWQ/ DQo+ICsgKiBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIgLSBIYXZlIHRoZSBwYWdlcyBiYWNraW5n IGJ5IHVzZXJwdHI/DQo+ICAgKi8NCj4gLWJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRyX2ludmFs aWRhdGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwNCj4gLQkJCQkgICAgICAgaW50ICpsYXN0X2ludmFs aWRhdGVkKQ0KPiAtew0KPiAtCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0 bTsNCj4gLQlpbnQgcHJldl9pbnZhbGlkYXRlZCA9ICpsYXN0X2ludmFsaWRhdGVkOw0KPiAtDQo+ IC0JKmxhc3RfaW52YWxpZGF0ZWQgPSBhdG9taWNfcmVhZCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9u cyk7DQo+IC0JcmV0dXJuIHByZXZfaW52YWxpZGF0ZWQgIT0gKmxhc3RfaW52YWxpZGF0ZWQ7DQo+ IC19DQo+IC0NCj4gLS8qKg0KPiAtICogYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2Vz IC0gSGF2ZSB0aGUgcGFnZXMgYmFja2luZyB0aGlzIHR0bV90dCBvYmplY3QNCj4gLSAqIGJlZW4g aW52YWxpZGF0ZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGV5J3ZlIGJlZW4gc2V0Pw0KPiAtICov DQo+IC1ib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhzdHJ1Y3QgdHRtX3R0 ICp0dG0pDQo+ICtib29sIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0 dG0pDQo+ICB7DQo+ICAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOw0K PiAgDQo+ICAJaWYgKGd0dCA9PSBOVUxMIHx8ICFndHQtPnVzZXJwdHIpDQo+ICAJCXJldHVybiBm YWxzZTsNCj4gIA0KPiAtCXJldHVybiBhdG9taWNfcmVhZCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9u cykgIT0gZ3R0LT5sYXN0X3NldF9wYWdlczsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gIH0NCj4gIA0K PiAgLyoqDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dHRtLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmgNCj4gaW5kZXgg YjViMmQxMDFmN2RiLi5jNWExZTc4YTA5YjEgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdHRtLmgNCj4gQEAgLTEwMiw3ICsxMDIsNyBAQCBpbnQgYW1kZ3B1X3R0bV9h bGxvY19nYXJ0KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOw0KPiAgaW50IGFtZGdwdV90 dG1fcmVjb3Zlcl9nYXJ0KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJvKTsNCj4gIA0KPiAg aW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1 Y3QgcGFnZSAqKnBhZ2VzKTsNCj4gLXZvaWQgYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdlcyhz dHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpOw0KPiArYm9vbCBhbWRncHVf dHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoc3RydWN0IHR0bV90dCAqdHRtKTsNCj4gIHZvaWQg YW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKTsNCj4gIGlu dCBhbWRncHVfdHRtX3R0X3NldF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdWludDY0X3Qg YWRkciwNCj4gIAkJCQkgICAgIHVpbnQzMl90IGZsYWdzKTsNCj4gQEAgLTExMiw3ICsxMTIsNyBA QCBib29sIGFtZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1 bnNpZ25lZCBsb25nIHN0YXJ0LA0KPiAgCQkJCSAgdW5zaWduZWQgbG9uZyBlbmQpOw0KPiAgYm9v bCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQoc3RydWN0IHR0bV90dCAqdHRtLA0K PiAgCQkJCSAgICAgICBpbnQgKmxhc3RfaW52YWxpZGF0ZWQpOw0KPiAtYm9vbCBhbWRncHVfdHRt X3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKTsNCj4gK2Jvb2wgYW1k Z3B1X3R0bV90dF9pc191c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSk7DQo+ICBib29sIGFtZGdw dV90dG1fdHRfaXNfcmVhZG9ubHkoc3RydWN0IHR0bV90dCAqdHRtKTsNCj4gIHVpbnQ2NF90IGFt ZGdwdV90dG1fdHRfcGRlX2ZsYWdzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHR0bV9tZW1f cmVnICptZW0pOw0KPiAgdWludDY0X3QgYW1kZ3B1X3R0bV90dF9wdGVfZmxhZ3Moc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCB0dG1fdHQgKnR0bSwNCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3ZtLmMNCj4gaW5kZXggZjA1OWVjMzE0ZjJiLi5hYjhmYTg0YjI3YTYg MTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jDQo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jDQo+IEBAIC02MTks NyArNjE5LDYgQEAgdm9pZCBhbWRncHVfdm1fZ2V0X3BkX2JvKHN0cnVjdCBhbWRncHVfdm0gKnZt LA0KPiAgCWVudHJ5LT50di5ibyA9ICZ2bS0+cm9vdC5iYXNlLmJvLT50Ym87DQo+ICAJLyogT25l IGZvciB0aGUgVk0gdXBkYXRlcywgb25lIGZvciBUVE0gYW5kIG9uZSBmb3IgdGhlIENTIGpvYiAq Lw0KPiAgCWVudHJ5LT50di5udW1fc2hhcmVkID0gMzsNCj4gLQllbnRyeS0+dXNlcl9wYWdlcyA9 IE5VTEw7DQo+ICAJbGlzdF9hZGQoJmVudHJ5LT50di5oZWFkLCB2YWxpZGF0ZWQpOw0KPiAgfQ0K PiAgDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQt Z2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK