From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 3/3] drm/amdgpu: replace get_user_pages with HMM address mirror helpers v6 Date: Tue, 5 Feb 2019 12:52:51 +0100 Message-ID: References: <20190204182237.2641-1-Philip.Yang@amd.com> <20190204182237.2641-4-Philip.Yang@amd.com> Reply-To: christian.koenig-5C7GfCeVMHo@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190204182237.2641-4-Philip.Yang-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US 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" QW0gMDQuMDIuMTkgdW0gMTk6MjMgc2NocmllYiBZYW5nLCBQaGlsaXA6Cj4gVXNlIEhNTSBoZWxw ZXIgZnVuY3Rpb24gaG1tX3ZtYV9mYXVsdCgpIHRvIGdldCBwaHlzaWNhbCBwYWdlcyBiYWNraW5n Cj4gdXNlcnB0ciBhbmQgc3RhcnQgQ1BVIHBhZ2UgdGFibGUgdXBkYXRlIHRyYWNrIG9mIHRob3Nl IHBhZ2VzLiBUaGVuIHVzZQo+IGhtbV92bWFfcmFuZ2VfZG9uZSgpIHRvIGNoZWNrIGlmIHRob3Nl IHBhZ2VzIGFyZSB1cGRhdGVkIGJlZm9yZQo+IGFtZGdwdV9jc19zdWJtaXQgZm9yIGdmeCBvciBi ZWZvcmUgdXNlciBxdWV1ZXMgYXJlIHJlc3VtZWQgZm9yIGtmZC4KPgo+IElmIHVzZXJwdHIgcGFn ZXMgYXJlIHVwZGF0ZWQsIGZvciBnZngsIGFtZGdwdV9jc19pb2N0bCB3aWxsIHJlc3RhcnQKPiBm cm9tIHNjcmF0Y2gsIGZvciBrZmQsIHJlc3RvcmUgd29ya2VyIGlzIHJlc2NoZWR1bGVkIHRvIHJl dHJ5Lgo+Cj4gSE1NIHNpbXBsaWZ5IHRoZSBDUFUgcGFnZSB0YWJsZSBjb25jdXJyZW50IHVwZGF0 ZSBjaGVjaywgc28gcmVtb3ZlCj4gZ3VwdGFza2xvY2ssIG1tdV9pbnZhbGlkYXRpb25zLCBsYXN0 X3NldF9wYWdlcyBmaWVsZHMgZnJvbQo+IGFtZGdwdV90dG1fdHQgc3RydWN0Lgo+Cj4gSE1NIGRv ZXMgbm90IHBpbiB0aGUgcGFnZSAoaW5jcmVhc2UgcGFnZSByZWYgY291bnQpLCBzbyByZW1vdmUg cmVsYXRlZAo+IG9wZXJhdGlvbnMgbGlrZSByZWxlYXNlX3BhZ2VzKCksIHB1dF9wYWdlKCksIG1h cmtfcGFnZV9kaXJ0eSgpLgo+Cj4gQ2hhbmdlLUlkOiBJMmU4YzBjNmYwZDhjMjFlNTU5NmEzMmQ3 ZmM5MTc2Mjc3OGJjOWU2Nwo+IFNpZ25lZC1vZmYtYnk6IFBoaWxpcCBZYW5nIDxQaGlsaXAuWWFu Z0BhbWQuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Ft ZGtmZC5oICAgIHwgICAxIC0KPiAgIC4uLi9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtm ZF9ncHV2bS5jICB8ICA5NSArKystLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfYm9fbGlzdC5oICAgfCAgIDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9jcy5jICAgICAgICB8IDE1OCArKysrKysrLS0tLS0tLS0tCj4gICBkcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMgICAgICAgfCAgMTQgKy0KPiAgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jICAgICAgICB8ICAyNSArKy0KPiAgIGRy aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oICAgICAgICB8ICAgNCArLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jICAgICAgIHwgMTczICsrKysr KysrLS0tLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5o ICAgICAgIHwgICAzICstCj4gICA5IGZpbGVzIGNoYW5nZWQsIDE5OCBpbnNlcnRpb25zKCspLCAy NzcgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2FtZGtmZC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Ft ZGtmZC5oCj4gaW5kZXggMGIzMWExODU5MDIzLi4wZTE3MTFhNzViNjggMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oCj4gQEAgLTYxLDcgKzYxLDYgQEAg c3RydWN0IGtnZF9tZW0gewo+ICAgCj4gICAJYXRvbWljX3QgaW52YWxpZDsKPiAgIAlzdHJ1Y3Qg YW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvOwo+IC0Jc3RydWN0IHBhZ2UgKip1c2Vy X3BhZ2VzOwo+ICAgCj4gICAJc3RydWN0IGFtZGdwdV9zeW5jIHN5bmM7Cj4gICAKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jCj4gaW5kZXgg ZDdiMTBkNzlmMWRlLi5hZTJkODM4ZDMxZWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jCj4gQEAgLTU4MiwyOCArNTgyLDEyIEBA IHN0YXRpYyBpbnQgaW5pdF91c2VyX3BhZ2VzKHN0cnVjdCBrZ2RfbWVtICptZW0sIHN0cnVjdCBt bV9zdHJ1Y3QgKm1tLAo+ICAgCQlnb3RvIG91dDsKPiAgIAl9Cj4gICAKPiAtCS8qIElmIG5vIHJl c3RvcmUgd29ya2VyIGlzIHJ1bm5pbmcgY29uY3VycmVudGx5LCB1c2VyX3BhZ2VzCj4gLQkgKiBz aG91bGQgbm90IGJlIGFsbG9jYXRlZAo+IC0JICovCj4gLQlXQVJOKG1lbS0+dXNlcl9wYWdlcywg IkxlYWtpbmcgdXNlcl9wYWdlcyBhcnJheSIpOwo+IC0KPiAtCW1lbS0+dXNlcl9wYWdlcyA9IGt2 bWFsbG9jX2FycmF5KGJvLT50Ym8udHRtLT5udW1fcGFnZXMsCj4gLQkJCQkJICAgc2l6ZW9mKHN0 cnVjdCBwYWdlICopLAo+IC0JCQkJCSAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKPiAtCWlm ICghbWVtLT51c2VyX3BhZ2VzKSB7Cj4gLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRl IHBhZ2VzIGFycmF5XG4iLCBfX2Z1bmNfXyk7Cj4gLQkJcmV0ID0gLUVOT01FTTsKPiAtCQlnb3Rv IHVucmVnaXN0ZXJfb3V0Owo+IC0JfQo+IC0KPiAtCXJldCA9IGFtZGdwdV90dG1fdHRfZ2V0X3Vz ZXJfcGFnZXMoYm8tPnRiby50dG0sIG1lbS0+dXNlcl9wYWdlcyk7Cj4gKwlyZXQgPSBhbWRncHVf dHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLCBiby0+dGJvLnR0bS0+cGFnZXMpOwo+ ICAgCWlmIChyZXQpIHsKPiAgIAkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGdldCB1c2VyIHBhZ2Vz OiAlZFxuIiwgX19mdW5jX18sIHJldCk7Cj4gLQkJZ290byBmcmVlX291dDsKPiArCQlnb3RvIHVu cmVnaXN0ZXJfb3V0Owo+ICAgCX0KPiAgIAo+IC0JYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdl cyhiby0+dGJvLnR0bSwgbWVtLT51c2VyX3BhZ2VzKTsKPiAtCj4gICAJcmV0ID0gYW1kZ3B1X2Jv X3Jlc2VydmUoYm8sIHRydWUpOwo+ICAgCWlmIChyZXQpIHsKPiAgIAkJcHJfZXJyKCIlczogRmFp bGVkIHRvIHJlc2VydmUgQk9cbiIsIF9fZnVuY19fKTsKPiBAQCAtNjE2LDExICs2MDAsNyBAQCBz dGF0aWMgaW50IGluaXRfdXNlcl9wYWdlcyhzdHJ1Y3Qga2dkX21lbSAqbWVtLCBzdHJ1Y3QgbW1f c3RydWN0ICptbSwKPiAgIAlhbWRncHVfYm9fdW5yZXNlcnZlKGJvKTsKPiAgIAo+ICAgcmVsZWFz ZV9vdXQ6Cj4gLQlpZiAocmV0KQo+IC0JCXJlbGVhc2VfcGFnZXMobWVtLT51c2VyX3BhZ2VzLCBi by0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKPiAtZnJlZV9vdXQ6Cj4gLQlrdmZyZWUobWVtLT51c2Vy X3BhZ2VzKTsKPiAtCW1lbS0+dXNlcl9wYWdlcyA9IE5VTEw7Cj4gKwlhbWRncHVfdHRtX3R0X2dl dF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOwo+ICAgdW5yZWdpc3Rlcl9vdXQ6Cj4gICAJ aWYgKHJldCkKPiAgIAkJYW1kZ3B1X21uX3VucmVnaXN0ZXIoYm8pOwo+IEBAIC02NzksNyArNjU5 LDYgQEAgc3RhdGljIGludCByZXNlcnZlX2JvX2FuZF92bShzdHJ1Y3Qga2dkX21lbSAqbWVtLAo+ ICAgCWN0eC0+a2ZkX2JvLnByaW9yaXR5ID0gMDsKPiAgIAljdHgtPmtmZF9iby50di5ibyA9ICZi by0+dGJvOwo+ICAgCWN0eC0+a2ZkX2JvLnR2Lm51bV9zaGFyZWQgPSAxOwo+IC0JY3R4LT5rZmRf Ym8udXNlcl9wYWdlcyA9IE5VTEw7Cj4gICAJbGlzdF9hZGQoJmN0eC0+a2ZkX2JvLnR2LmhlYWQs ICZjdHgtPmxpc3QpOwo+ICAgCj4gICAJYW1kZ3B1X3ZtX2dldF9wZF9ibyh2bSwgJmN0eC0+bGlz dCwgJmN0eC0+dm1fcGRbMF0pOwo+IEBAIC03NDMsNyArNzIyLDYgQEAgc3RhdGljIGludCByZXNl cnZlX2JvX2FuZF9jb25kX3ZtcyhzdHJ1Y3Qga2dkX21lbSAqbWVtLAo+ICAgCWN0eC0+a2ZkX2Jv LnByaW9yaXR5ID0gMDsKPiAgIAljdHgtPmtmZF9iby50di5ibyA9ICZiby0+dGJvOwo+ICAgCWN0 eC0+a2ZkX2JvLnR2Lm51bV9zaGFyZWQgPSAxOwo+IC0JY3R4LT5rZmRfYm8udXNlcl9wYWdlcyA9 IE5VTEw7Cj4gICAJbGlzdF9hZGQoJmN0eC0+a2ZkX2JvLnR2LmhlYWQsICZjdHgtPmxpc3QpOwo+ ICAgCj4gICAJaSA9IDA7Cj4gQEAgLTEzNzEsMTUgKzEzNDksNiBAQCBpbnQgYW1kZ3B1X2FtZGtm ZF9ncHV2bV9mcmVlX21lbW9yeV9vZl9ncHUoCj4gICAJbGlzdF9kZWwoJmJvX2xpc3RfZW50cnkt PmhlYWQpOwo+ICAgCW11dGV4X3VubG9jaygmcHJvY2Vzc19pbmZvLT5sb2NrKTsKPiAgIAo+IC0J LyogRnJlZSB1c2VyIHBhZ2VzIGlmIG5lY2Vzc2FyeSAqLwo+IC0JaWYgKG1lbS0+dXNlcl9wYWdl cykgewo+IC0JCXByX2RlYnVnKCIlczogRnJlZWluZyB1c2VyX3BhZ2VzIGFycmF5XG4iLCBfX2Z1 bmNfXyk7Cj4gLQkJaWYgKG1lbS0+dXNlcl9wYWdlc1swXSkKPiAtCQkJcmVsZWFzZV9wYWdlcyht ZW0tPnVzZXJfcGFnZXMsCj4gLQkJCQkJbWVtLT5iby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKPiAt CQlrdmZyZWUobWVtLT51c2VyX3BhZ2VzKTsKPiAtCX0KPiAtCj4gICAJcmV0ID0gcmVzZXJ2ZV9i b19hbmRfY29uZF92bXMobWVtLCBOVUxMLCBCT19WTV9BTEwsICZjdHgpOwo+ICAgCWlmICh1bmxp a2VseShyZXQpKQo+ICAgCQlyZXR1cm4gcmV0Owo+IEBAIC0xODU1LDI1ICsxODI0LDExIEBAIHN0 YXRpYyBpbnQgdXBkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3Nf aW5mbyAqcHJvY2Vzc19pbmZvLAo+ICAgCj4gICAJCWJvID0gbWVtLT5ibzsKPiAgIAo+IC0JCWlm ICghbWVtLT51c2VyX3BhZ2VzKSB7Cj4gLQkJCW1lbS0+dXNlcl9wYWdlcyA9Cj4gLQkJCQlrdm1h bGxvY19hcnJheShiby0+dGJvLnR0bS0+bnVtX3BhZ2VzLAo+IC0JCQkJCQkgc2l6ZW9mKHN0cnVj dCBwYWdlICopLAo+IC0JCQkJCQkgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+IC0JCQlpZiAo IW1lbS0+dXNlcl9wYWdlcykgewo+IC0JCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRl IHBhZ2VzIGFycmF5XG4iLAo+IC0JCQkJICAgICAgIF9fZnVuY19fKTsKPiAtCQkJCXJldHVybiAt RU5PTUVNOwo+IC0JCQl9Cj4gLQkJfSBlbHNlIGlmIChtZW0tPnVzZXJfcGFnZXNbMF0pIHsKPiAt CQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsIGJvLT50Ym8udHRtLT5udW1fcGFnZXMp Owo+IC0JCX0KPiAtCj4gICAJCS8qIEdldCB1cGRhdGVkIHVzZXIgcGFnZXMgKi8KPiAgIAkJcmV0 ID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSwKPiAtCQkJCQkJICAg bWVtLT51c2VyX3BhZ2VzKTsKPiArCQkJCQkJICAgYm8tPnRiby50dG0tPnBhZ2VzKTsKPiAgIAkJ aWYgKHJldCkgewo+IC0JCQltZW0tPnVzZXJfcGFnZXNbMF0gPSBOVUxMOwo+ICsJCQliby0+dGJv LnR0bS0+cGFnZXNbMF0gPSBOVUxMOwo+ICAgCQkJcHJfaW5mbygiJXM6IEZhaWxlZCB0byBnZXQg dXNlciBwYWdlczogJWRcbiIsCj4gICAJCQkJX19mdW5jX18sIHJldCk7Cj4gICAJCQkvKiBQcmV0 ZW5kIGl0IHN1Y2NlZWRlZC4gSXQgd2lsbCBmYWlsIGxhdGVyCj4gQEAgLTE4ODIsMTIgKzE4Mzcs NiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9w cm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbywKPiAgIAkJCSAqIHN0YWxsZWQgdXNlciBtb2RlIHF1 ZXVlcy4KPiAgIAkJCSAqLwo+ICAgCQl9Cj4gLQo+IC0JCS8qIE1hcmsgdGhlIEJPIGFzIHZhbGlk IHVubGVzcyBpdCB3YXMgaW52YWxpZGF0ZWQKPiAtCQkgKiBhZ2FpbiBjb25jdXJyZW50bHkKPiAt CQkgKi8KPiAtCQlpZiAoYXRvbWljX2NtcHhjaGcoJm1lbS0+aW52YWxpZCwgaW52YWxpZCwgMCkg IT0gaW52YWxpZCkKPiAtCQkJcmV0dXJuIC1FQUdBSU47Cj4gICAJfQo+ICAgCj4gICAJcmV0dXJu IDA7Cj4gQEAgLTE5MTcsNyArMTg2Niw4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91 c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8pCj4gICAJ CQkJICAgICBHRlBfS0VSTkVMKTsKPiAgIAlpZiAoIXBkX2JvX2xpc3RfZW50cmllcykgewo+ICAg CQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgUEQgQk8gbGlzdCBlbnRyaWVzXG4iLCBf X2Z1bmNfXyk7Cj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQln b3RvIG91dF9ub19tZW07Cj4gICAJfQo+ICAgCj4gICAJSU5JVF9MSVNUX0hFQUQoJnJlc3ZfbGlz dCk7Cj4gQEAgLTE5NDEsNyArMTg5MSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91 c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8pCj4gICAJ cmV0ID0gdHRtX2V1X3Jlc2VydmVfYnVmZmVycygmdGlja2V0LCAmcmVzdl9saXN0LCBmYWxzZSwg JmR1cGxpY2F0ZXMpOwo+ICAgCVdBUk4oIWxpc3RfZW1wdHkoJmR1cGxpY2F0ZXMpLCAiRHVwbGlj YXRlcyBzaG91bGQgYmUgZW1wdHkiKTsKPiAgIAlpZiAocmV0KQo+IC0JCWdvdG8gb3V0Owo+ICsJ CWdvdG8gb3V0X2ZyZWU7Cj4gICAKPiAgIAlhbWRncHVfc3luY19jcmVhdGUoJnN5bmMpOwo+ICAg Cj4gQEAgLTE5NjcsMTAgKzE5MTcsOCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2ludmFsaWRfdXNl cl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvKQo+ICAgCj4g ICAJCWJvID0gbWVtLT5ibzsKPiAgIAo+IC0JCS8qIENvcHkgcGFnZXMgYXJyYXkgYW5kIHZhbGlk YXRlIHRoZSBCTyBpZiB3ZSBnb3QgdXNlciBwYWdlcyAqLwo+IC0JCWlmIChtZW0tPnVzZXJfcGFn ZXNbMF0pIHsKPiAtCQkJYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSwK PiAtCQkJCQkJICAgICBtZW0tPnVzZXJfcGFnZXMpOwo+ICsJCS8qIFZhbGlkYXRlIHRoZSBCTyBp ZiB3ZSBnb3QgdXNlciBwYWdlcyAqLwo+ICsJCWlmIChiby0+dGJvLnR0bS0+cGFnZXNbMF0pIHsK PiAgIAkJCWFtZGdwdV9ib19wbGFjZW1lbnRfZnJvbV9kb21haW4oYm8sIG1lbS0+ZG9tYWluKTsK PiAgIAkJCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmYm8tPnRibywgJmJvLT5wbGFjZW1lbnQsICZj dHgpOwo+ICAgCQkJaWYgKHJldCkgewo+IEBAIC0xOTc5LDE2ICsxOTI3LDE2IEBAIHN0YXRpYyBp bnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZv ICpwcm9jZXNzX2luZm8pCj4gICAJCQl9Cj4gICAJCX0KPiAgIAo+IC0JCS8qIFZhbGlkYXRlIHN1 Y2NlZWRlZCwgbm93IHRoZSBCTyBvd25zIHRoZSBwYWdlcywgZnJlZQo+IC0JCSAqIG91ciBjb3B5 IG9mIHRoZSBwb2ludGVyIGFycmF5LiBQdXQgdGhpcyBCTyBiYWNrIG9uCj4gLQkJICogdGhlIHVz ZXJwdHJfdmFsaWRfbGlzdC4gSWYgd2UgbmVlZCB0byByZXZhbGlkYXRlCj4gLQkJICogaXQsIHdl IG5lZWQgdG8gc3RhcnQgZnJvbSBzY3JhdGNoLgo+IC0JCSAqLwo+IC0JCWt2ZnJlZShtZW0tPnVz ZXJfcGFnZXMpOwo+IC0JCW1lbS0+dXNlcl9wYWdlcyA9IE5VTEw7Cj4gICAJCWxpc3RfbW92ZV90 YWlsKCZtZW0tPnZhbGlkYXRlX2xpc3QuaGVhZCwKPiAgIAkJCSAgICAgICAmcHJvY2Vzc19pbmZv LT51c2VycHRyX3ZhbGlkX2xpc3QpOwo+ICAgCj4gKwkJLyogU3RvcCBITU0gdHJhY2sgdGhlIHVz ZXJwdHIgdXBkYXRlLiBXZSBkb250IGNoZWNrIHRoZSByZXR1cm4KPiArCQkgKiB2YWx1ZSBmb3Ig Y29uY3VycmVudCBDUFUgcGFnZSB0YWJsZSB1cGRhdGUgYmVjYXVzZSB3ZSB3aWxsCj4gKwkJICog cmVzY2hlZHVsZSB0aGUgcmVzdG9yZSB3b3JrZXIgaWYgcHJvY2Vzc19pbmZvLT5ldmljdGVkX2Jv cwo+ICsJCSAqIGlzIHVwZGF0ZWQuCj4gKwkJICovCj4gKwkJYW1kZ3B1X3R0bV90dF9nZXRfdXNl cl9wYWdlc19kb25lKGJvLT50Ym8udHRtKTsKPiArCj4gICAJCS8qIFVwZGF0ZSBtYXBwaW5nLiBJ ZiB0aGUgQk8gd2FzIG5vdCB2YWxpZGF0ZWQKPiAgIAkJICogKGJlY2F1c2Ugd2UgY291bGRuJ3Qg Z2V0IHVzZXIgcGFnZXMpLCB0aGlzIHdpbGwKPiAgIAkJICogY2xlYXIgdGhlIHBhZ2UgdGFibGUg ZW50cmllcywgd2hpY2ggd2lsbCByZXN1bHQgaW4KPiBAQCAtMjAyMiw4ICsxOTcwLDE1IEBAIHN0 YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vz c19pbmZvICpwcm9jZXNzX2luZm8pCj4gICAJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnRp Y2tldCwgJnJlc3ZfbGlzdCk7Cj4gICAJYW1kZ3B1X3N5bmNfd2FpdCgmc3luYywgZmFsc2UpOwo+ ICAgCWFtZGdwdV9zeW5jX2ZyZWUoJnN5bmMpOwo+IC1vdXQ6Cj4gK291dF9mcmVlOgo+ICAgCWtm cmVlKHBkX2JvX2xpc3RfZW50cmllcyk7Cj4gK291dF9ub19tZW06Cj4gKwlsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUobWVtLCB0bXBfbWVtLAo+ICsJCQkJICZwcm9jZXNzX2luZm8tPnVzZXJwdHJf aW52YWxfbGlzdCwKPiArCQkJCSB2YWxpZGF0ZV9saXN0LmhlYWQpIHsKPiArCQlibyA9IG1lbS0+ Ym87Cj4gKwkJYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKGJvLT50Ym8udHRtKTsK PiArCX0KPiAgIAo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oCj4gaW5kZXggN2M1ZjVkMTYwMWU2Li5hMTMwZTc2NmNi ZGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xp c3QuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmgK PiBAQCAtMzYsNyArMzYsNyBAQCBzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgewo+ICAgCXN0 cnVjdCBhbWRncHVfYm9fdmEJCSpib192YTsKPiAgIAl1aW50MzJfdAkJCXByaW9yaXR5Owo+ICAg CXN0cnVjdCBwYWdlCQkJKip1c2VyX3BhZ2VzOwo+IC0JaW50CQkJCXVzZXJfaW52YWxpZGF0ZWQ7 Cj4gKwlib29sCQkJCXVzZXJfaW52YWxpZGF0ZWQ7Cj4gICB9Owo+ICAgCj4gICBzdHJ1Y3QgYW1k Z3B1X2JvX2xpc3Qgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jCj4gaW5k ZXggMWM0OWI4MjY2ZDY5Li40NTFhMWZhYjE3ZDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfY3MuYwo+IEBAIC01Miw3ICs1Miw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2Nz X3VzZXJfZmVuY2VfY2h1bmsoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4gICAJcC0+dWZf ZW50cnkudHYuYm8gPSAmYm8tPnRibzsKPiAgIAkvKiBPbmUgZm9yIFRUTSBhbmQgb25lIGZvciB0 aGUgQ1Mgam9iICovCj4gICAJcC0+dWZfZW50cnkudHYubnVtX3NoYXJlZCA9IDI7Cj4gLQlwLT51 Zl9lbnRyeS51c2VyX3BhZ2VzID0gTlVMTDsKPiAgIAo+ICAgCWRybV9nZW1fb2JqZWN0X3B1dF91 bmxvY2tlZChnb2JqKTsKPiAgIAo+IEBAIC01MzksMTQgKzUzOCwxNCBAQCBzdGF0aWMgaW50IGFt ZGdwdV9jc19saXN0X3ZhbGlkYXRlKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAo+ICAgCQlp ZiAodXNlcm1tICYmIHVzZXJtbSAhPSBjdXJyZW50LT5tbSkKPiAgIAkJCXJldHVybiAtRVBFUk07 Cj4gICAKPiAtCQkvKiBDaGVjayBpZiB3ZSBoYXZlIHVzZXIgcGFnZXMgYW5kIG5vYm9keSBib3Vu ZCB0aGUgQk8gYWxyZWFkeSAqLwo+IC0JCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNf cGFnZXMoYm8tPnRiby50dG0pICYmCj4gLQkJICAgIGxvYmotPnVzZXJfcGFnZXMpIHsKPiArCQlp ZiAoYW1kZ3B1X3R0bV90dF9pc191c2VycHRyKGJvLT50Ym8udHRtKSAmJgo+ICsJCSAgICBsb2Jq LT51c2VyX2ludmFsaWRhdGVkICYmIGxvYmotPnVzZXJfcGFnZXMpIHsKPiAgIAkJCWFtZGdwdV9i b19wbGFjZW1lbnRfZnJvbV9kb21haW4oYm8sCj4gICAJCQkJCQkJQU1ER1BVX0dFTV9ET01BSU5f Q1BVKTsKPiAgIAkJCXIgPSB0dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50 LCAmY3R4KTsKPiAgIAkJCWlmIChyKQo+ICAgCQkJCXJldHVybiByOwo+ICsKPiAgIAkJCWFtZGdw dV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sCj4gICAJCQkJCQkgICAgIGxvYmot PnVzZXJfcGFnZXMpOwo+ICAgCQkJYmluZGluZ191c2VycHRyID0gdHJ1ZTsKPiBAQCAtNTc3LDcg KzU3Niw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdwdV9j c19wYXJzZXIgKnAsCj4gICAJc3RydWN0IGFtZGdwdV9ibyAqZ2RzOwo+ICAgCXN0cnVjdCBhbWRn cHVfYm8gKmd3czsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvICpvYTsKPiAtCXVuc2lnbmVkIHRyaWVz ID0gMTA7Cj4gICAJaW50IHI7Cj4gICAKPiAgIAlJTklUX0xJU1RfSEVBRCgmcC0+dmFsaWRhdGVk KTsKPiBAQCAtNjEzLDc5ICs2MTEsNDUgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2Jv cyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKPiAgIAlpZiAocC0+dWZfZW50cnkudHYuYm8g JiYgIXR0bV90b19hbWRncHVfYm8ocC0+dWZfZW50cnkudHYuYm8pLT5wYXJlbnQpCj4gICAJCWxp c3RfYWRkKCZwLT51Zl9lbnRyeS50di5oZWFkLCAmcC0+dmFsaWRhdGVkKTsKPiAgIAo+IC0Jd2hp bGUgKDEpIHsKPiAtCQlzdHJ1Y3QgbGlzdF9oZWFkIG5lZWRfcGFnZXM7Cj4gLQo+IC0JCXIgPSB0 dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZwLT50aWNrZXQsICZwLT52YWxpZGF0ZWQsIHRydWUsCj4g LQkJCQkJICAgJmR1cGxpY2F0ZXMpOwo+IC0JCWlmICh1bmxpa2VseShyICE9IDApKSB7Cj4gLQkJ CWlmIChyICE9IC1FUkVTVEFSVFNZUykKPiAtCQkJCURSTV9FUlJPUigidHRtX2V1X3Jlc2VydmVf YnVmZmVycyBmYWlsZWQuXG4iKTsKPiAtCQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOwo+IC0JCX0K PiAtCj4gLQkJSU5JVF9MSVNUX0hFQUQoJm5lZWRfcGFnZXMpOwo+IC0JCWFtZGdwdV9ib19saXN0 X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9fbGlzdCkgewo+IC0JCQlzdHJ1Y3QgYW1k Z3B1X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYuYm8pOwo+IC0KPiAtCQkJaWYgKGFt ZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZChiby0+dGJvLnR0bSwKPiAtCQkJCSAmZS0+ dXNlcl9pbnZhbGlkYXRlZCkgJiYgZS0+dXNlcl9wYWdlcykgewo+IC0KPiAtCQkJCS8qIFdlIGFj cXVpcmVkIGEgcGFnZSBhcnJheSwgYnV0IHNvbWVib2R5Cj4gLQkJCQkgKiBpbnZhbGlkYXRlZCBp dC4gRnJlZSBpdCBhbmQgdHJ5IGFnYWluCj4gLQkJCQkgKi8KPiAtCQkJCXJlbGVhc2VfcGFnZXMo ZS0+dXNlcl9wYWdlcywKPiAtCQkJCQkgICAgICBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKPiAt CQkJCWt2ZnJlZShlLT51c2VyX3BhZ2VzKTsKPiAtCQkJCWUtPnVzZXJfcGFnZXMgPSBOVUxMOwo+ IC0JCQl9Cj4gLQo+IC0JCQlpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKGJv LT50Ym8udHRtKSAmJgo+IC0JCQkgICAgIWUtPnVzZXJfcGFnZXMpIHsKPiAtCQkJCWxpc3RfZGVs KCZlLT50di5oZWFkKTsKPiAtCQkJCWxpc3RfYWRkKCZlLT50di5oZWFkLCAmbmVlZF9wYWdlcyk7 Cj4gLQo+IC0JCQkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7Cj4gLQkJCX0KPiArCS8qIEdldCB1 c2VycHRyIGJhY2tpbmcgcGFnZXMuIElmIHBhZ2VzIGFyZSB1cGRhdGVkIGFmdGVyIHJlZ2lzdGVy ZWQKPiArCSAqIGluIGFtZGdwdV9nZW1fdXNlcnB0cl9pb2N0bCgpLCBhbWRncHVfY3NfbGlzdF92 YWxpZGF0ZSgpIHdpbGwgZG8KPiArCSAqIGFtZGdwdV90dG1fYmFja2VuZF9iaW5kKCkgdG8gZmx1 c2ggYW5kIGludmFsaWRhdGUgbmV3IHBhZ2VzCj4gKwkgKi8KPiArCWFtZGdwdV9ib19saXN0X2Zv cl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9fbGlzdCkgewo+ICsJCXN0cnVjdCBhbWRncHVf Ym8gKmJvID0gdHRtX3RvX2FtZGdwdV9ibyhlLT50di5ibyk7Cj4gKwkJYm9vbCB1c2VycGFnZV9p bnZhbGlkYXRlZCA9IGZhbHNlOwo+ICsJCWludCBpOwo+ICsKPiArCQllLT51c2VyX3BhZ2VzID0g a3ZtYWxsb2NfYXJyYXkoYm8tPnRiby50dG0tPm51bV9wYWdlcywKPiArCQkJCQlzaXplb2Yoc3Ry dWN0IHBhZ2UgKiksCj4gKwkJCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+ICsJCWlmICgh ZS0+dXNlcl9wYWdlcykgewo+ICsJCQlEUk1fRVJST1IoImNhbGxvYyBmYWlsdXJlXG4iKTsKPiAr CQkJcmV0dXJuIC1FTk9NRU07Cj4gICAJCX0KPiAgIAo+IC0JCWlmIChsaXN0X2VtcHR5KCZuZWVk X3BhZ2VzKSkKPiAtCQkJYnJlYWs7Cj4gLQo+IC0JCS8qIFVucmVzZXJ2ZSBldmVyeXRoaW5nIGFn YWluLiAqLwo+IC0JCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZwLT50aWNrZXQsICZwLT52 YWxpZGF0ZWQpOwo+IC0KPiAtCQkvKiBXZSB0cmllZCB0b28gbWFueSB0aW1lcywganVzdCBhYm9y dCAqLwo+IC0JCWlmICghLS10cmllcykgewo+IC0JCQlyID0gLUVERUFETEs7Cj4gLQkJCURSTV9F UlJPUigiZGVhZGxvY2sgaW4gJXNcbiIsIF9fZnVuY19fKTsKPiAtCQkJZ290byBlcnJvcl9mcmVl X3BhZ2VzOwo+ICsJCXIgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRt LCBlLT51c2VyX3BhZ2VzKTsKPiArCQlpZiAocikgewo+ICsJCQlrdmZyZWUoZS0+dXNlcl9wYWdl cyk7Cj4gKwkJCWUtPnVzZXJfcGFnZXMgPSBOVUxMOwo+ICsJCQlyZXR1cm4gcjsKPiAgIAkJfQo+ ICAgCj4gLQkJLyogRmlsbCB0aGUgcGFnZSBhcnJheXMgZm9yIGFsbCB1c2VycHRycy4gKi8KPiAt CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZuZWVkX3BhZ2VzLCB0di5oZWFkKSB7Cj4gLQkJCXN0 cnVjdCB0dG1fdHQgKnR0bSA9IGUtPnR2LmJvLT50dG07Cj4gLQo+IC0JCQllLT51c2VyX3BhZ2Vz ID0ga3ZtYWxsb2NfYXJyYXkodHRtLT5udW1fcGFnZXMsCj4gLQkJCQkJCQkgc2l6ZW9mKHN0cnVj dCBwYWdlKiksCj4gLQkJCQkJCQkgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+IC0JCQlpZiAo IWUtPnVzZXJfcGFnZXMpIHsKPiAtCQkJCXIgPSAtRU5PTUVNOwo+IC0JCQkJRFJNX0VSUk9SKCJj YWxsb2MgZmFpbHVyZSBpbiAlc1xuIiwgX19mdW5jX18pOwo+IC0JCQkJZ290byBlcnJvcl9mcmVl X3BhZ2VzOwo+IC0JCQl9Cj4gLQo+IC0JCQlyID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdl cyh0dG0sIGUtPnVzZXJfcGFnZXMpOwo+IC0JCQlpZiAocikgewo+IC0JCQkJRFJNX0VSUk9SKCJh bWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzIGZhaWxlZC5cbiIpOwo+IC0JCQkJa3ZmcmVlKGUt PnVzZXJfcGFnZXMpOwo+IC0JCQkJZS0+dXNlcl9wYWdlcyA9IE5VTEw7Cj4gLQkJCQlnb3RvIGVy cm9yX2ZyZWVfcGFnZXM7Cj4gKwkJZm9yIChpID0gMDsgaSA8IGJvLT50Ym8udHRtLT5udW1fcGFn ZXM7IGkrKykgewo+ICsJCQlpZiAoYm8tPnRiby50dG0tPnBhZ2VzW2ldICE9IGUtPnVzZXJfcGFn ZXNbaV0pIHsKPiArCQkJCXVzZXJwYWdlX2ludmFsaWRhdGVkID0gdHJ1ZTsKPiArCQkJCWJyZWFr Owo+ICAgCQkJfQo+ICAgCQl9Cj4gKwkJZS0+dXNlcl9pbnZhbGlkYXRlZCA9IHVzZXJwYWdlX2lu dmFsaWRhdGVkOwo+ICsJfQo+ICAgCj4gLQkJLyogQW5kIHRyeSBhZ2Fpbi4gKi8KPiAtCQlsaXN0 X3NwbGljZSgmbmVlZF9wYWdlcywgJnAtPnZhbGlkYXRlZCk7Cj4gKwlyID0gdHRtX2V1X3Jlc2Vy dmVfYnVmZmVycygmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkLCB0cnVlLAo+ICsJCQkJICAgJmR1 cGxpY2F0ZXMpOwo+ICsJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKPiArCQlpZiAociAhPSAtRVJF U1RBUlRTWVMpCj4gKwkJCURSTV9FUlJPUigidHRtX2V1X3Jlc2VydmVfYnVmZmVycyBmYWlsZWQu XG4iKTsKPiArCQlnb3RvIG91dDsKPiAgIAl9Cj4gICAKPiAgIAlhbWRncHVfY3NfZ2V0X3RocmVz aG9sZF9mb3JfbW92ZXMocC0+YWRldiwgJnAtPmJ5dGVzX21vdmVkX3RocmVzaG9sZCwKPiBAQCAt NzU0LDE3ICs3MTgsNyBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBh bWRncHVfY3NfcGFyc2VyICpwLAo+ICAgZXJyb3JfdmFsaWRhdGU6Cj4gICAJaWYgKHIpCj4gICAJ CXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZwLT50aWNrZXQsICZwLT52YWxpZGF0ZWQpOwo+ IC0KPiAtZXJyb3JfZnJlZV9wYWdlczoKPiAtCj4gLQlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91 c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xpc3QpIHsKPiAtCQlpZiAoIWUtPnVzZXJfcGFnZXMpCj4g LQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlyZWxlYXNlX3BhZ2VzKGUtPnVzZXJfcGFnZXMsIGUtPnR2 LmJvLT50dG0tPm51bV9wYWdlcyk7Cj4gLQkJa3ZmcmVlKGUtPnVzZXJfcGFnZXMpOwo+IC0JfQo+ IC0KPiArb3V0Ogo+ICAgCXJldHVybiByOwo+ICAgfQo+ICAgCj4gQEAgLTEyMTMsOCArMTE2Nyw3 IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAq cCwKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmU7Cj4gICAJc3RydWN0IGFtZGdw dV9qb2IgKmpvYjsKPiAgIAl1aW50NjRfdCBzZXE7Cj4gLQo+IC0JaW50IHI7Cj4gKwlpbnQgciA9 IDA7Cj4gICAKPiAgIAlqb2IgPSBwLT5qb2I7Cj4gICAJcC0+am9iID0gTlVMTDsKPiBAQCAtMTIy MywxNSArMTE3NiwyMSBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19zdWJtaXQoc3RydWN0IGFtZGdw dV9jc19wYXJzZXIgKnAsCj4gICAJaWYgKHIpCj4gICAJCWdvdG8gZXJyb3JfdW5sb2NrOwo+ICAg Cj4gLQkvKiBObyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBhbGxvd2VkIHdoaWxlIGhvbGRpbmcgdGhl IG1uIGxvY2sgKi8KPiArCS8qIE5vIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGFsbG93ZWQgd2hpbGUg aG9sZGluZyB0aGUgbW4gbG9jay4KPiArCSAqIHAtPm1uIGlzIGhvbGQgdW50aWwgYW1kZ3B1X2Nz X3N1Ym1pdCBpcyBmaW5pc2hlZCBhbmQgZmVuY2UgaXMgYWRkZWQKPiArCSAqIHRvIEJPcy4KPiAr CSAqLwo+ICAgCWFtZGdwdV9tbl9sb2NrKHAtPm1uKTsKPiArCj4gKwkvKiBJZiB1c2VycHRyIGFy ZSB1cGRhdGVkIGFmdGVyIGFtZGdwdV9jc19wYXJzZXJfYm9zKCksIHJlc3RhcnQgY3MgKi8KPiAg IAlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xpc3QpIHsK PiAgIAkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJvKTsK PiAgIAo+IC0JCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoYm8tPnRiby50 dG0pKSB7Cj4gLQkJCXIgPSAtRVJFU1RBUlRTWVM7Cj4gLQkJCWdvdG8gZXJyb3JfYWJvcnQ7Cj4g LQkJfQo+ICsJCXIgfD0gIWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJv LnR0bSk7Cj4gKwl9Cj4gKwlpZiAocikgewo+ICsJCXIgPSAtRVJFU1RBUlRTWVM7Cj4gKwkJZ290 byBlcnJvcl9hYm9ydDsKPiAgIAl9Cj4gICAKPiAgIAlqb2ItPm93bmVyID0gcC0+ZmlscDsKPiBA QCAtMTI3OCwxNCArMTIzNywyMCBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19zdWJtaXQoc3RydWN0 IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4gICBpbnQgYW1kZ3B1X2NzX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlscCkKPiAgIHsKPiAg IAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQl1bmlv biBkcm1fYW1kZ3B1X2NzICpjcyA9IGRhdGE7Cj4gLQlzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciBw YXJzZXIgPSB7fTsKPiAtCWJvb2wgcmVzZXJ2ZWRfYnVmZmVycyA9IGZhbHNlOwo+ICsJdW5pb24g ZHJtX2FtZGdwdV9jcyAqY3M7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciBwYXJzZXI7Cj4g Kwlib29sIHJlc2VydmVkX2J1ZmZlcnM7Cj4gKwlpbnQgdHJpZXMgPSAxMDsKPiAgIAlpbnQgaSwg cjsKPiAgIAo+ICAgCWlmICghYWRldi0+YWNjZWxfd29ya2luZykKPiAgIAkJcmV0dXJuIC1FQlVT WTsKPiAgIAo+ICtyZXN0YXJ0Ogo+ICsJbWVtc2V0KCZwYXJzZXIsIDAsIHNpemVvZihwYXJzZXIp KTsKPiArCWNzID0gZGF0YTsKPiArCXJlc2VydmVkX2J1ZmZlcnMgPSBmYWxzZTsKPiArCgpXZWxs IHRoYXQgaXMgYSBOQUssIHNlZSBiZWxvdy4KCj4gICAJcGFyc2VyLmFkZXYgPSBhZGV2Owo+ICAg CXBhcnNlci5maWxwID0gZmlscDsKPiAgIAo+IEBAIC0xMzI3LDYgKzEyOTIsMTUgQEAgaW50IGFt ZGdwdV9jc19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbHApCj4gICAKPiAgIG91dDoKPiAgIAlhbWRncHVfY3NfcGFyc2VyX2Zpbmko JnBhcnNlciwgciwgcmVzZXJ2ZWRfYnVmZmVycyk7Cj4gKwo+ICsJaWYgKHIgPT0gLUVSRVNUQVJU U1lTKSB7Cj4gKwkJaWYgKCEtLXRyaWVzKSB7Cj4gKwkJCURSTV9FUlJPUigiUG9zc2libGUgZGVh ZGxvY2s/IFJldHJ5IHRvbyBtYW55IHRpbWVzXG4iKTsKPiArCQkJcmV0dXJuIC1FREVBRExLOwo+ ICsJCX0KPiArCQlnb3RvIHJlc3RhcnQ7CgpZb3UgcmVhbGx5IG5lZWQgdG8gcmVzdGFydCB0aGUg SU9DVEwgdG8gcG90ZW50aWFsbHkgaGFuZGxlIHNpZ25hbHMuCgpCdXQgc2luY2UgdGhlIGNhbGxp bmcgY29kZSBjb3JyZWN0bHkgaGFuZGxlcyB0aGlzIGFscmVhZHkgeW91IGNhbiBqdXN0IApkcm9w IHRoaXMgY2hhbmdlIGFzIGZhciBhcyBJIGNhbiBzZWUuCgo+ICsJfQo+ICsKPiAgIAlyZXR1cm4g cjsKPiAgIH0KPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKPiBp bmRleCBkMjFkZDJmMzY5ZGEuLjU1NTI4NWUzMjllZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZ2VtLmMKPiBAQCAtMzI5LDI2ICszMjksMjQgQEAgaW50IGFtZGdwdV9n ZW1fdXNlcnB0cl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAg Cj4gICAJCXIgPSBhbWRncHVfYm9fcmVzZXJ2ZShibywgdHJ1ZSk7Cj4gICAJCWlmIChyKQo+IC0J CQlnb3RvIGZyZWVfcGFnZXM7Cj4gKwkJCWdvdG8gdXNlcl9wYWdlc19kb25lOwo+ICAgCj4gICAJ CWFtZGdwdV9ib19wbGFjZW1lbnRfZnJvbV9kb21haW4oYm8sIEFNREdQVV9HRU1fRE9NQUlOX0dU VCk7Cj4gICAJCXIgPSB0dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAm Y3R4KTsKPiAgIAkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7Cj4gICAJCWlmIChyKQo+IC0JCQln b3RvIGZyZWVfcGFnZXM7Cj4gKwkJCWdvdG8gdXNlcl9wYWdlc19kb25lOwo+ICAgCX0KPiAgIAo+ ICAgCXIgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlscCwgZ29iaiwgJmhhbmRsZSk7Cj4gLQkv KiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0IG5vdyAqLwo+ IC0JZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGdvYmopOwo+ICAgCWlmIChyKQo+IC0JCXJl dHVybiByOwo+ICsJCWdvdG8gdXNlcl9wYWdlc19kb25lOwo+ICAgCj4gICAJYXJncy0+aGFuZGxl ID0gaGFuZGxlOwo+IC0JcmV0dXJuIDA7Cj4gICAKPiAtZnJlZV9wYWdlczoKPiAtCXJlbGVhc2Vf cGFnZXMoYm8tPnRiby50dG0tPnBhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKPiArdXNl cl9wYWdlc19kb25lOgo+ICsJaWYgKGFyZ3MtPmZsYWdzICYgQU1ER1BVX0dFTV9VU0VSUFRSX1ZB TElEQVRFKQo+ICsJCWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0 bSk7Cj4gICAKPiAgIHJlbGVhc2Vfb2JqZWN0Ogo+ICAgCWRybV9nZW1fb2JqZWN0X3B1dF91bmxv Y2tlZChnb2JqKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X21uLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYwo+IGluZGV4 IGUzNTY4NjdkMjMwOC4uZmEyNTE2MDE2YzQzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X21uLmMKPiBAQCAtMjIyLDggKzIyMiw2IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9t bl9pbnZhbGlkYXRlX25vZGUoc3RydWN0IGFtZGdwdV9tbl9ub2RlICpub2RlLAo+ICAgCQkJdHJ1 ZSwgZmFsc2UsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKPiAgIAkJaWYgKHIgPD0gMCkKPiAgIAkJ CURSTV9FUlJPUigiKCVsZCkgZmFpbGVkIHRvIHdhaXQgZm9yIHVzZXIgYm9cbiIsIHIpOwo+IC0K PiAtCQlhbWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSk7Cj4gICAJfQo+ ICAgfQo+ICAgCj4gQEAgLTUwNCwzICs1MDIsMjYgQEAgdm9pZCBhbWRncHVfbW5fdW5yZWdpc3Rl cihzdHJ1Y3QgYW1kZ3B1X2JvICpibykKPiAgIAltdXRleF91bmxvY2soJmFkZXYtPm1uX2xvY2sp Owo+ICAgfQo+ICAgCj4gKy8qIGZsYWdzIHVzZWQgYnkgSE1NIGludGVybmFsLCBub3QgcmVsYXRl ZCB0byBDUFUvR1BVIFBURSBmbGFncyAqLwo+ICtzdGF0aWMgY29uc3QgdWludDY0X3QgaG1tX3Jh bmdlX2ZsYWdzW0hNTV9QRk5fRkxBR19NQVhdID0gewo+ICsJCSgxIDw8IDApLCAvKiBITU1fUEZO X1ZBTElEICovCj4gKwkJKDEgPDwgMSksIC8qIEhNTV9QRk5fV1JJVEUgKi8KPiArCQkwIC8qIEhN TV9QRk5fREVWSUNFX1BSSVZBVEUgKi8KPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCB1aW50NjRf dCBobW1fcmFuZ2VfdmFsdWVzW0hNTV9QRk5fVkFMVUVfTUFYXSA9IHsKPiArCQkweGZmZmZmZmZm ZmZmZmZmZmVVTCwgLyogSE1NX1BGTl9FUlJPUiAqLwo+ICsJCTAsIC8qIEhNTV9QRk5fTk9ORSAq Lwo+ICsJCTB4ZmZmZmZmZmZmZmZmZmZmY1VMIC8qIEhNTV9QRk5fU1BFQ0lBTCAqLwo+ICt9Owo+ ICsKPiArdm9pZCBhbWRncHVfaG1tX2luaXRfcmFuZ2Uoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2Up Cj4gK3sKPiArCWlmIChyYW5nZSkgewo+ICsJCXJhbmdlLT5mbGFncyA9IGhtbV9yYW5nZV9mbGFn czsKPiArCQlyYW5nZS0+dmFsdWVzID0gaG1tX3JhbmdlX3ZhbHVlczsKPiArCQlyYW5nZS0+cGZu X3NoaWZ0ID0gUEFHRV9TSElGVDsKPiArCQlyYW5nZS0+cGZucyA9IE5VTEw7Cj4gKwkJSU5JVF9M SVNUX0hFQUQoJnJhbmdlLT5saXN0KTsKPiArCX0KPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9tbi5oCj4gaW5kZXggMGE1MWZkMDAwMjFjLi40ODAzZTIxNmUxNzQgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmgKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaAo+IEBAIC0yNSw5ICsyNSwxMCBA QAo+ICAgI2RlZmluZSBfX0FNREdQVV9NTl9IX18KPiAgIAo+ICAgLyoKPiAtICogTU1VIE5vdGlm aWVyCj4gKyAqIEhNTSBtaXJyb3IKPiAgICAqLwo+ICAgc3RydWN0IGFtZGdwdV9tbjsKPiArc3Ry dWN0IGhtbV9yYW5nZTsKPiAgIAo+ICAgZW51bSBhbWRncHVfbW5fdHlwZSB7Cj4gICAJQU1ER1BV X01OX1RZUEVfR0ZYLAo+IEBAIC00MSw2ICs0Miw3IEBAIHN0cnVjdCBhbWRncHVfbW4gKmFtZGdw dV9tbl9nZXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCQkJZW51bSBhbWRncHVf bW5fdHlwZSB0eXBlKTsKPiAgIGludCBhbWRncHVfbW5fcmVnaXN0ZXIoc3RydWN0IGFtZGdwdV9i byAqYm8sIHVuc2lnbmVkIGxvbmcgYWRkcik7Cj4gICB2b2lkIGFtZGdwdV9tbl91bnJlZ2lzdGVy KHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKPiArdm9pZCBhbWRncHVfaG1tX2luaXRfcmFuZ2Uoc3Ry dWN0IGhtbV9yYW5nZSAqcmFuZ2UpOwo+ICAgI2Vsc2UKPiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBh bWRncHVfbW5fbG9jayhzdHJ1Y3QgYW1kZ3B1X21uICptbikge30KPiAgIHN0YXRpYyBpbmxpbmUg dm9pZCBhbWRncHVfbW5fdW5sb2NrKHN0cnVjdCBhbWRncHVfbW4gKm1uKSB7fQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKPiBpbmRleCA3M2U3MWU2MWRjOTkuLjNmZDc4 NTFkYTBjMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dHRtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKPiBA QCAtNDMsNiArNDMsNyBAQAo+ICAgI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KPiAgICNpbmNs dWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2htbS5oPgo+ICAgI2luY2x1ZGUgImFtZGdwdS5oIgo+ICAgI2luY2x1ZGUg ImFtZGdwdV9vYmplY3QuaCIKPiAgICNpbmNsdWRlICJhbWRncHVfdHJhY2UuaCIKPiBAQCAtNzA1 LDExICs3MDYsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbWRncHVfdHRtX2lvX21lbV9wZm4o c3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKPiAgIC8qCj4gICAgKiBUVE0gYmFja2VuZCBm dW5jdGlvbnMuCj4gICAgKi8KPiAtc3RydWN0IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlzdCB7Cj4g LQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Cj4gLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7Cj4g LX07Cj4gLQo+ICAgc3RydWN0IGFtZGdwdV90dG1fdHQgewo+ICAgCXN0cnVjdCB0dG1fZG1hX3R0 CXR0bTsKPiAgIAl1NjQJCQlvZmZzZXQ7Cj4gQEAgLTcxOCw4NSArNzE0LDk2IEBAIHN0cnVjdCBh bWRncHVfdHRtX3R0IHsKPiAgIAl1aW50MzJfdAkJdXNlcmZsYWdzOwoKPiAgIAlzcGlubG9ja190 ICAgICAgICAgICAgICBndXB0YXNrbG9jazsKPiAgIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBn dXB0YXNrczsKClRob3NlIGZpZWxkcyBhcmUgbm93IGFsc28gY29tcGxldGVseSBzdXBlcmZsdW91 cy4KCkFwYXJ0IGZyb20gdGhvc2UgdHdvIGNvbW1lbnRzIHRoYXQgbm93IGxvb2tzIHJlYWxseSBn b29kIHRvIG1lLgoKUmVnYXJkcywKQ2hyaXN0aWFuLgoKPiAtCWF0b21pY190CQltbXVfaW52YWxp ZGF0aW9uczsKPiAtCXVpbnQzMl90CQlsYXN0X3NldF9wYWdlczsKPiArCXN0cnVjdCBobW1fcmFu Z2UJcmFuZ2U7Cj4gICB9Owo+ICAgCj4gICAvKioKPiAtICogYW1kZ3B1X3R0bV90dF9nZXRfdXNl cl9wYWdlcyAtIFBpbiBwYWdlcyBvZiBtZW1vcnkgcG9pbnRlZCB0byBieSBhIFVTRVJQVFIKPiAt ICogcG9pbnRlciB0byBtZW1vcnkKPiArICogYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyAt IGdldCBkZXZpY2UgYWNjZXNzaWJsZSBwYWdlcyB0aGF0IGJhY2sgdXNlcgo+ICsgKiBtZW1vcnkg YW5kIHN0YXJ0IEhNTSB0cmFja2luZyBDUFUgcGFnZSB0YWJsZSB1cGRhdGUKPiAgICAqCj4gLSAq IENhbGxlZCBieSBhbWRncHVfZ2VtX3VzZXJwdHJfaW9jdGwoKSBhbmQgYW1kZ3B1X2NzX3BhcnNl cl9ib3MoKS4KPiAtICogVGhpcyBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBnZXRfdXNl cl9wYWdlcygpIGNhbGwgdG8gcHJvdmlkZQo+IC0gKiBkZXZpY2UgYWNjZXNzaWJsZSBwYWdlcyB0 aGF0IGJhY2sgdXNlciBtZW1vcnkuCj4gKyAqIENhbGxpbmcgZnVuY3Rpb24gbXVzdCBjYWxsIGFt ZGdwdV90dG1fdHRfdXNlcnB0cl9yYW5nZV9kb25lKCkgb25jZSBhbmQgb25seQo+ICsgKiBvbmNl IGFmdGVyd2FyZHMgdG8gc3RvcCBITU0gdHJhY2tpbmcKPiAgICAqLwo+ICAgaW50IGFtZGdwdV90 dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBh Z2VzKQo+ICAgewo+ICAgCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsK PiAgIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGd0dC0+dXNlcnRhc2stPm1tOwo+IC0JdW5zaWdu ZWQgaW50IGZsYWdzID0gMDsKPiAtCXVuc2lnbmVkIHBpbm5lZCA9IDA7Cj4gLQlpbnQgcjsKPiAr CXVuc2lnbmVkIGxvbmcgZW5kID0gZ3R0LT51c2VycHRyICsgdHRtLT5udW1fcGFnZXMgKiBQQUdF X1NJWkU7Cj4gKwlzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSA9ICZndHQtPnJhbmdlOwo+ICsJaW50 IHIgPSAwLCBpOwo+ICAgCj4gICAJaWYgKCFtbSkgLyogSGFwcGVucyBkdXJpbmcgcHJvY2VzcyBz aHV0ZG93biAqLwo+ICAgCQlyZXR1cm4gLUVTUkNIOwo+ICAgCj4gLQlpZiAoIShndHQtPnVzZXJm bGFncyAmIEFNREdQVV9HRU1fVVNFUlBUUl9SRUFET05MWSkpCj4gLQkJZmxhZ3MgfD0gRk9MTF9X UklURTsKPiArCWFtZGdwdV9obW1faW5pdF9yYW5nZShyYW5nZSk7Cj4gICAKPiAgIAlkb3duX3Jl YWQoJm1tLT5tbWFwX3NlbSk7Cj4gICAKPiAtCWlmIChndHQtPnVzZXJmbGFncyAmIEFNREdQVV9H RU1fVVNFUlBUUl9BTk9OT05MWSkgewo+IC0JCS8qCj4gLQkJICogY2hlY2sgdGhhdCB3ZSBvbmx5 IHVzZSBhbm9ueW1vdXMgbWVtb3J5IHRvIHByZXZlbnQgcHJvYmxlbXMKPiAtCQkgKiB3aXRoIHdy aXRlYmFjawo+IC0JCSAqLwo+IC0JCXVuc2lnbmVkIGxvbmcgZW5kID0gZ3R0LT51c2VycHRyICsg dHRtLT5udW1fcGFnZXMgKiBQQUdFX1NJWkU7Cj4gLQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWE7Cj4gKwlyYW5nZS0+dm1hID0gZmluZF92bWEobW0sIGd0dC0+dXNlcnB0cik7Cj4gKwlpZiAo IXJhbmdlX2luX3ZtYShyYW5nZS0+dm1hLCBndHQtPnVzZXJwdHIsIGVuZCkpCj4gKwkJciA9IC1F RkFVTFQ7Cj4gKwllbHNlIGlmICgoZ3R0LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJf QU5PTk9OTFkpICYmCj4gKwkJcmFuZ2UtPnZtYS0+dm1fZmlsZSkKPiArCQlyID0gLUVQRVJNOwo+ ICsJaWYgKHIpCj4gKwkJZ290byBvdXQ7Cj4gICAKPiAtCQl2bWEgPSBmaW5kX3ZtYShtbSwgZ3R0 LT51c2VycHRyKTsKPiAtCQlpZiAoIXZtYSB8fCB2bWEtPnZtX2ZpbGUgfHwgdm1hLT52bV9lbmQg PCBlbmQpIHsKPiAtCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKPiAtCQkJcmV0dXJuIC1FUEVS TTsKPiAtCQl9Cj4gKwlyYW5nZS0+cGZucyA9IGt2bWFsbG9jX2FycmF5KHR0bS0+bnVtX3BhZ2Vz LCBzaXplb2YodWludDY0X3QpLAo+ICsJCQkJICAgICBHRlBfS0VSTkVMKTsKPiArCWlmIChyYW5n ZS0+cGZucyA9PSBOVUxMKSB7Cj4gKwkJciA9IC1FTk9NRU07Cj4gKwkJZ290byBvdXQ7Cj4gICAJ fQo+ICsJcmFuZ2UtPnN0YXJ0ID0gZ3R0LT51c2VycHRyOwo+ICsJcmFuZ2UtPmVuZCA9IGVuZDsK PiAgIAo+IC0JLyogbG9vcCBlbm91Z2ggdGltZXMgdXNpbmcgY29udGlndW91cyBwYWdlcyBvZiBt ZW1vcnkgKi8KPiAtCWRvIHsKPiAtCQl1bnNpZ25lZCBudW1fcGFnZXMgPSB0dG0tPm51bV9wYWdl cyAtIHBpbm5lZDsKPiAtCQl1aW50NjRfdCB1c2VycHRyID0gZ3R0LT51c2VycHRyICsgcGlubmVk ICogUEFHRV9TSVpFOwo+IC0JCXN0cnVjdCBwYWdlICoqcCA9IHBhZ2VzICsgcGlubmVkOwo+IC0J CXN0cnVjdCBhbWRncHVfdHRtX2d1cF90YXNrX2xpc3QgZ3VwdGFzazsKPiArCXJhbmdlLT5wZm5z WzBdID0gcmFuZ2UtPmZsYWdzW0hNTV9QRk5fVkFMSURdOwo+ICsJcmFuZ2UtPnBmbnNbMF0gfD0g YW1kZ3B1X3R0bV90dF9pc19yZWFkb25seSh0dG0pID8KPiArCQkJCTAgOiByYW5nZS0+ZmxhZ3Nb SE1NX1BGTl9XUklURV07Cj4gKwlmb3IgKGkgPSAxOyBpIDwgdHRtLT5udW1fcGFnZXM7IGkrKykK PiArCQlyYW5nZS0+cGZuc1tpXSA9IHJhbmdlLT5wZm5zWzBdOwo+ICAgCj4gLQkJZ3VwdGFzay50 YXNrID0gY3VycmVudDsKPiAtCQlzcGluX2xvY2soJmd0dC0+Z3VwdGFza2xvY2spOwo+IC0JCWxp c3RfYWRkKCZndXB0YXNrLmxpc3QsICZndHQtPmd1cHRhc2tzKTsKPiAtCQlzcGluX3VubG9jaygm Z3R0LT5ndXB0YXNrbG9jayk7Cj4gKwkvKiBUaGlzIG1heSB0cmlnZ2VyIHBhZ2UgdGFibGUgdXBk YXRlICovCj4gKwlyID0gaG1tX3ZtYV9mYXVsdChyYW5nZSwgdHJ1ZSk7Cj4gKwlpZiAocikKPiAr CQlnb3RvIG91dF9mcmVlX3BmbnM7Cj4gICAKPiAtCQlpZiAobW0gPT0gY3VycmVudC0+bW0pCj4g LQkJCXIgPSBnZXRfdXNlcl9wYWdlcyh1c2VycHRyLCBudW1fcGFnZXMsIGZsYWdzLCBwLCBOVUxM KTsKPiAtCQllbHNlCj4gLQkJCXIgPSBnZXRfdXNlcl9wYWdlc19yZW1vdGUoZ3R0LT51c2VydGFz aywKPiAtCQkJCQltbSwgdXNlcnB0ciwgbnVtX3BhZ2VzLAo+IC0JCQkJCWZsYWdzLCBwLCBOVUxM LCBOVUxMKTsKPiArCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Cj4gICAKPiAtCQlzcGluX2xvY2so Jmd0dC0+Z3VwdGFza2xvY2spOwo+IC0JCWxpc3RfZGVsKCZndXB0YXNrLmxpc3QpOwo+IC0JCXNw aW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKPiArCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51 bV9wYWdlczsgaSsrKQo+ICsJCXBhZ2VzW2ldID0gaG1tX3Bmbl90b19wYWdlKHJhbmdlLCByYW5n ZS0+cGZuc1tpXSk7Cj4gICAKPiAtCQlpZiAociA8IDApCj4gLQkJCWdvdG8gcmVsZWFzZV9wYWdl czsKPiArCXJldHVybiAwOwo+ICAgCj4gLQkJcGlubmVkICs9IHI7Cj4gK291dF9mcmVlX3BmbnM6 Cj4gKwlrdmZyZWUocmFuZ2UtPnBmbnMpOwo+ICsJcmFuZ2UtPnBmbnMgPSBOVUxMOwo+ICtvdXQ6 Cj4gKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwo+ICsJcmV0dXJuIHI7Cj4gK30KPiAgIAo+IC0J fSB3aGlsZSAocGlubmVkIDwgdHRtLT5udW1fcGFnZXMpOwo+ICsvKioKPiArICogYW1kZ3B1X3R0 bV90dF91c2VycHRyX3JhbmdlX2RvbmUgLSBzdG9wIEhNTSB0cmFjayB0aGUgQ1BVIHBhZ2UgdGFi bGUgY2hhbmdlCj4gKyAqIENoZWNrIGlmIHRoZSBwYWdlcyBiYWNraW5nIHRoaXMgdHRtIHJhbmdl IGhhdmUgYmVlbiBpbnZhbGlkYXRlZAo+ICsgKgo+ICsgKiBSZXR1cm5zOiB0cnVlIGlmIHBhZ2Vz IGFyZSBzdGlsbCB2YWxpZAo+ICsgKi8KPiArYm9vbCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3Bh Z2VzX2RvbmUoc3RydWN0IHR0bV90dCAqdHRtKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X3R0bV90 dCAqZ3R0ID0gKHZvaWQgKil0dG07Cj4gKwlib29sIHIgPSBmYWxzZTsKPiAgIAo+IC0JdXBfcmVh ZCgmbW0tPm1tYXBfc2VtKTsKPiAtCXJldHVybiAwOwo+ICsJaWYgKCFndHQgfHwgIWd0dC0+dXNl cnB0cikKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJV0FSTl9PTkNFKCFndHQtPnJhbmdlLnBm bnMsICJObyB1c2VyIHBhZ2VzIHRvIGNoZWNrXG4iKTsKPiArCWlmIChndHQtPnJhbmdlLnBmbnMp IHsKPiArCQlyID0gaG1tX3ZtYV9yYW5nZV9kb25lKCZndHQtPnJhbmdlKTsKPiArCQlrdmZyZWUo Z3R0LT5yYW5nZS5wZm5zKTsKPiArCQlndHQtPnJhbmdlLnBmbnMgPSBOVUxMOwo+ICsJfQo+ICAg Cj4gLXJlbGVhc2VfcGFnZXM6Cj4gLQlyZWxlYXNlX3BhZ2VzKHBhZ2VzLCBwaW5uZWQpOwo+IC0J dXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKPiAgIAlyZXR1cm4gcjsKPiAgIH0KPiAgIAo+IEBAIC04 MDksMTYgKzgxNiwxMCBAQCBpbnQgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3Qg dHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpCj4gICAgKi8KPiAgIHZvaWQgYW1kZ3B1 X3R0bV90dF9zZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoq cGFnZXMpCj4gICB7Cj4gLQlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07 Cj4gICAJdW5zaWduZWQgaTsKPiAgIAo+IC0JZ3R0LT5sYXN0X3NldF9wYWdlcyA9IGF0b21pY19y ZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsKPiAtCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51 bV9wYWdlczsgKytpKSB7Cj4gLQkJaWYgKHR0bS0+cGFnZXNbaV0pCj4gLQkJCXB1dF9wYWdlKHR0 bS0+cGFnZXNbaV0pOwo+IC0KPiArCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgKytp KQo+ICAgCQl0dG0tPnBhZ2VzW2ldID0gcGFnZXMgPyBwYWdlc1tpXSA6IE5VTEw7Cj4gLQl9Cj4g ICB9Cj4gICAKPiAgIC8qKgo+IEBAIC05MDMsMTAgKzkwNCwxMSBAQCBzdGF0aWMgdm9pZCBhbWRn cHVfdHRtX3R0X3VucGluX3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKQo+ICAgCS8qIHVubWFw IHRoZSBwYWdlcyBtYXBwZWQgdG8gdGhlIGRldmljZSAqLwo+ICAgCWRtYV91bm1hcF9zZyhhZGV2 LT5kZXYsIHR0bS0+c2ctPnNnbCwgdHRtLT5zZy0+bmVudHMsIGRpcmVjdGlvbik7Cj4gICAKPiAt CS8qIG1hcmsgdGhlIHBhZ2VzIGFzIGRpcnR5ICovCj4gLQlhbWRncHVfdHRtX3R0X21hcmtfdXNl cl9wYWdlcyh0dG0pOwo+IC0KPiAgIAlzZ19mcmVlX3RhYmxlKHR0bS0+c2cpOwo+ICsKPiArCWlm IChndHQtPnJhbmdlLnBmbnMgJiYKPiArCSAgICB0dG0tPnBhZ2VzWzBdID09IGhtbV9wZm5fdG9f cGFnZSgmZ3R0LT5yYW5nZSwgZ3R0LT5yYW5nZS5wZm5zWzBdKSkKPiArCQlXQVJOX09OQ0UoMSwg Ik1pc3NpbmcgZ2V0X3VzZXJfcGFnZV9kb25lXG4iKTsKPiAgIH0KPiAgIAo+ICAgaW50IGFtZGdw dV90dG1fZ2FydF9iaW5kKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+IEBAIC0xMjU4LDgg KzEyNjAsNiBAQCBpbnQgYW1kZ3B1X3R0bV90dF9zZXRfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0 dG0sIHVpbnQ2NF90IGFkZHIsCj4gICAKPiAgIAlzcGluX2xvY2tfaW5pdCgmZ3R0LT5ndXB0YXNr bG9jayk7Cj4gICAJSU5JVF9MSVNUX0hFQUQoJmd0dC0+Z3VwdGFza3MpOwo+IC0JYXRvbWljX3Nl dCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucywgMCk7Cj4gLQlndHQtPmxhc3Rfc2V0X3BhZ2VzID0g MDsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+IEBAIC0xMjg5LDcgKzEyODksNiBAQCBib29s IGFtZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1bnNpZ25l ZCBsb25nIHN0YXJ0LAo+ICAgCQkJCSAgdW5zaWduZWQgbG9uZyBlbmQpCj4gICB7Cj4gICAJc3Ry dWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwo+IC0Jc3RydWN0IGFtZGdwdV90 dG1fZ3VwX3Rhc2tfbGlzdCAqZW50cnk7Cj4gICAJdW5zaWduZWQgbG9uZyBzaXplOwo+ICAgCj4g ICAJaWYgKGd0dCA9PSBOVUxMIHx8ICFndHQtPnVzZXJwdHIpCj4gQEAgLTEzMDIsNDggKzEzMDEs MjAgQEAgYm9vbCBhbWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0 bSwgdW5zaWduZWQgbG9uZyBzdGFydCwKPiAgIAlpZiAoZ3R0LT51c2VycHRyID4gZW5kIHx8IGd0 dC0+dXNlcnB0ciArIHNpemUgPD0gc3RhcnQpCj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAo+IC0J LyogU2VhcmNoIHRoZSBsaXN0cyBvZiB0YXNrcyB0aGF0IGhvbGQgdGhpcyBtYXBwaW5nIGFuZCBz ZWUKPiAtCSAqIGlmIGN1cnJlbnQgaXMgb25lIG9mIHRoZW0uICBJZiBpdCBpcyByZXR1cm4gZmFs c2UuCj4gLQkgKi8KPiAtCXNwaW5fbG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7Cj4gLQlsaXN0X2Zv cl9lYWNoX2VudHJ5KGVudHJ5LCAmZ3R0LT5ndXB0YXNrcywgbGlzdCkgewo+IC0JCWlmIChlbnRy eS0+dGFzayA9PSBjdXJyZW50KSB7Cj4gLQkJCXNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2Nr KTsKPiAtCQkJcmV0dXJuIGZhbHNlOwo+IC0JCX0KPiAtCX0KPiAtCXNwaW5fdW5sb2NrKCZndHQt Pmd1cHRhc2tsb2NrKTsKPiAtCj4gLQlhdG9taWNfaW5jKCZndHQtPm1tdV9pbnZhbGlkYXRpb25z KTsKPiAtCj4gICAJcmV0dXJuIHRydWU7Cj4gICB9Cj4gICAKPiAgIC8qKgo+IC0gKiBhbWRncHVf dHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQgLSBIYXMgdGhlIHR0bV90dCBvYmplY3QgYmVlbiBp bnZhbGlkYXRlZD8KPiAtICovCj4gLWJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRyX2ludmFsaWRh dGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwKPiAtCQkJCSAgICAgICBpbnQgKmxhc3RfaW52YWxpZGF0 ZWQpCj4gLXsKPiAtCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKPiAt CWludCBwcmV2X2ludmFsaWRhdGVkID0gKmxhc3RfaW52YWxpZGF0ZWQ7Cj4gLQo+IC0JKmxhc3Rf aW52YWxpZGF0ZWQgPSBhdG9taWNfcmVhZCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucyk7Cj4gLQly ZXR1cm4gcHJldl9pbnZhbGlkYXRlZCAhPSAqbGFzdF9pbnZhbGlkYXRlZDsKPiAtfQo+IC0KPiAt LyoqCj4gLSAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyAtIEhhdmUgdGhlIHBh Z2VzIGJhY2tpbmcgdGhpcyB0dG1fdHQgb2JqZWN0Cj4gLSAqIGJlZW4gaW52YWxpZGF0ZWQgc2lu Y2UgdGhlIGxhc3QgdGltZSB0aGV5J3ZlIGJlZW4gc2V0Pwo+ICsgKiBhbWRncHVfdHRtX3R0X2lz X3VzZXJwdHIgLSBIYXZlIHRoZSBwYWdlcyBiYWNraW5nIGJ5IHVzZXJwdHI/Cj4gICAgKi8KPiAt Ym9vbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRt KQo+ICtib29sIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pCj4g ICB7Cj4gICAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwo+ICAgCj4g ICAJaWYgKGd0dCA9PSBOVUxMIHx8ICFndHQtPnVzZXJwdHIpCj4gICAJCXJldHVybiBmYWxzZTsK PiAgIAo+IC0JcmV0dXJuIGF0b21pY19yZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKSAhPSBn dHQtPmxhc3Rfc2V0X3BhZ2VzOwo+ICsJcmV0dXJuIHRydWU7Cj4gICB9Cj4gICAKPiAgIC8qKgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmggYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmgKPiBpbmRleCBiNWIyZDEwMWY3 ZGIuLjg5ODhjODdmZmY5ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfdHRtLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dHRtLmgKPiBAQCAtMTAyLDYgKzEwMiw3IEBAIGludCBhbWRncHVfdHRtX2FsbG9jX2dhcnQoc3Ry dWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7Cj4gICBpbnQgYW1kZ3B1X3R0bV9yZWNvdmVyX2dh cnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8pOwo+ICAgCj4gICBpbnQgYW1kZ3B1X3R0 bV90dF9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFn ZXMpOwo+ICtib29sIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShzdHJ1Y3QgdHRt X3R0ICp0dG0pOwo+ICAgdm9pZCBhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKHN0cnVjdCB0 dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcyk7Cj4gICB2b2lkIGFtZGdwdV90dG1fdHRf bWFya191c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSk7Cj4gICBpbnQgYW1kZ3B1X3R0bV90 dF9zZXRfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVpbnQ2NF90IGFkZHIsCj4gQEAgLTEx Miw3ICsxMTMsNyBAQCBib29sIGFtZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIoc3RydWN0IHR0 bV90dCAqdHRtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+ICAgCQkJCSAgdW5zaWduZWQgbG9uZyBl bmQpOwo+ICAgYm9vbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQoc3RydWN0IHR0 bV90dCAqdHRtLAo+ICAgCQkJCSAgICAgICBpbnQgKmxhc3RfaW52YWxpZGF0ZWQpOwo+IC1ib29s IGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pOwo+ ICtib29sIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pOwo+ICAg Ym9vbCBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHN0cnVjdCB0dG1fdHQgKnR0bSk7Cj4gICB1 aW50NjRfdCBhbWRncHVfdHRtX3R0X3BkZV9mbGFncyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVj dCB0dG1fbWVtX3JlZyAqbWVtKTsKPiAgIHVpbnQ2NF90IGFtZGdwdV90dG1fdHRfcHRlX2ZsYWdz KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgdHRtX3R0ICp0dG0sCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcg bGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK