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 v3 Date: Tue, 11 Dec 2018 09:27:28 +0100 Message-ID: <98e19ada-5468-727b-bc70-bba72c0c009e@gmail.com> References: <20181206210235.12036-1-Philip.Yang@amd.com> <20181206210235.12036-3-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: 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: "Kuehling, Felix" , "Yang, Philip" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" QW0gMTEuMTIuMTggdW0gMDE6MTIgc2NocmllYiBLdWVobGluZywgRmVsaXg6Cj4gVGhpcyBpcyBh IG5pY2UgaW1wcm92ZW1lbnQgZnJvbSB0aGUgbGFzdCB2ZXJzaW9uLiBJIHN0aWxsIHNlZSBzb21l Cj4gcG90ZW50aWFsIHByb2JsZW1zLiBTZWUgaW5saW5lIC4uLgo+Cj4gSSdtIHNraXBwaW5nIG92 ZXIgdGhlIENTIGFuZCBHRU0gcGFydHMuIEkgaG9wZSBDaHJpc3RpYW4gY2FuIHJldmlldwo+IHRo b3NlIHBhcnRzLgoKR29pbmcgdG8gZG8gdGhpcyBhcyBzb29uIGFzIHlvdSBoYXZlIHNvcnRlZCBv dXQgYWxsIHRoZSBpc3N1ZXMgd2l0aCB0aGUgCktGRCBpbXBsZW1lbnRhdGlvbi4KClNvIHBsZWFz ZSBwaW5nIG1lIHdoZW4geW91IHRoaW5rIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgaXNzdWVzIGxl ZnQgdGhlcmUuCgpUaGFua3MsCkNocmlzdGlhbi4KCj4KPiBPbiAyMDE4LTEyLTA2IDQ6MDIgcC5t LiwgWWFuZywgUGhpbGlwIHdyb3RlOgo+PiBVc2UgSE1NIGhlbHBlciBmdW5jdGlvbiBobW1fdm1h X2ZhdWx0KCkgdG8gZ2V0IHBoeXNpY2FsIHBhZ2VzIGJhY2tpbmcKPj4gdXNlcnB0ciBhbmQgc3Rh cnQgQ1BVIHBhZ2UgdGFibGUgdXBkYXRlIHRyYWNrIG9mIHRob3NlIHBhZ2VzLiBUaGVuIHVzZQo+ PiBobW1fdm1hX3JhbmdlX2RvbmUoKSB0byBjaGVjayBpZiB0aG9zZSBwYWdlcyBhcmUgdXBkYXRl ZCBiZWZvcmUKPj4gYW1kZ3B1X2NzX3N1Ym1pdCBmb3IgZ2Z4IG9yIGJlZm9yZSB1c2VyIHF1ZXVl cyBhcmUgcmVzdW1lZCBmb3Iga2ZkLgo+Pgo+PiBJZiB1c2VycHRyIHBhZ2VzIGFyZSB1cGRhdGVk LCBmb3IgZ2Z4LCBhbWRncHVfY3NfaW9jdGwgd2lsbCByZXN0YXJ0Cj4+IGZyb20gc2NyYXRjaCwg Zm9yIGtmZCwgcmVzdG9yZSB3b3JrZXIgaXMgcmVzY2hlZHVsZWQgdG8gcmV0cnkuCj4+Cj4+IEhN TSBzaW1wbGlmeSB0aGUgQ1BVIHBhZ2UgdGFibGUgY29uY3VycmVudCB1cGRhdGUgY2hlY2ssIHNv IHJlbW92ZQo+PiBndXB0YXNrbG9jaywgbW11X2ludmFsaWRhdGlvbnMsIGxhc3Rfc2V0X3BhZ2Vz IGZpZWxkcyBmcm9tCj4+IGFtZGdwdV90dG1fdHQgc3RydWN0Lgo+Pgo+PiBITU0gZG9lcyBub3Qg cGluIHRoZSBwYWdlIChpbmNyZWFzZSBwYWdlIHJlZiBjb3VudCksIHNvIHJlbW92ZSByZWxhdGVk Cj4+IG9wZXJhdGlvbnMgbGlrZSByZWxlYXNlX3BhZ2VzKCksIHB1dF9wYWdlKCksIG1hcmtfcGFn ZV9kaXJ0eSgpLgo+Pgo+PiBDaGFuZ2UtSWQ6IElkMmQzMTMwMzc4YjQ0YTc3NGUwZDc3MTU2MTAy YTIwYTIwM2I1MDM2Cj4+IFNpZ25lZC1vZmYtYnk6IFBoaWxpcCBZYW5nIDxQaGlsaXAuWWFuZ0Bh bWQuY29tPgo+PiAtLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1k a2ZkLmggICAgfCAgIDEgLQo+PiAgIC4uLi9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtm ZF9ncHV2bS5jICB8ICA4MSArKy0tLS0tLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9ib19saXN0LmMgICB8ICAgMiAtCj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2JvX2xpc3QuaCAgIHwgICAzICstCj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2NzLmMgICAgICAgIHwgMTg4ICsrKysrKysrKy0tLS0tLS0tLQo+PiAgIGRy aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyAgICAgICB8ICAxNCArLQo+PiAg IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jICAgICAgICB8ICAzNCArKyst Cj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmggICAgICAgIHwgICA3 ICstCj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jICAgICAgIHwg MTYwICsrKysrKy0tLS0tLS0tLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV90dG0uaCAgICAgICB8ICAgNCArLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV92bS5jICAgICAgICB8ICAgMSAtCj4+ICAgMTEgZmlsZXMgY2hhbmdlZCwgMjA2IGluc2Vy dGlvbnMoKyksIDI4OSBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9hbWRrZmQuaAo+PiBpbmRleCBiY2Y1ODdiNGJhOTguLmI0OTJkZDllNTQxYSAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5o Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaAo+PiBA QCAtNjIsNyArNjIsNiBAQCBzdHJ1Y3Qga2dkX21lbSB7Cj4+ICAgCj4+ICAgCWF0b21pY190IGlu dmFsaWQ7Cj4+ICAgCXN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm87Cj4+ IC0Jc3RydWN0IHBhZ2UgKip1c2VyX3BhZ2VzOwo+PiAgIAo+PiAgIAlzdHJ1Y3QgYW1kZ3B1X3N5 bmMgc3luYzsKPj4gICAKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9hbWRrZmRfZ3B1dm0uYwo+PiBpbmRleCBiMjllZjA4OGZhMTQuLjc1ODMzYjQwNTA3YiAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2 bS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1 dm0uYwo+PiBAQCAtNTgwLDI4ICs1ODAsMTIgQEAgc3RhdGljIGludCBpbml0X3VzZXJfcGFnZXMo c3RydWN0IGtnZF9tZW0gKm1lbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4+ICAgCQlnb3RvIG91 dDsKPj4gICAJfQo+PiAgIAo+PiAtCS8qIElmIG5vIHJlc3RvcmUgd29ya2VyIGlzIHJ1bm5pbmcg Y29uY3VycmVudGx5LCB1c2VyX3BhZ2VzCj4+IC0JICogc2hvdWxkIG5vdCBiZSBhbGxvY2F0ZWQK Pj4gLQkgKi8KPj4gLQlXQVJOKG1lbS0+dXNlcl9wYWdlcywgIkxlYWtpbmcgdXNlcl9wYWdlcyBh cnJheSIpOwo+PiAtCj4+IC0JbWVtLT51c2VyX3BhZ2VzID0ga3ZtYWxsb2NfYXJyYXkoYm8tPnRi by50dG0tPm51bV9wYWdlcywKPj4gLQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBwYWdlICopLAo+PiAt CQkJCQkgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4+IC0JaWYgKCFtZW0tPnVzZXJfcGFn ZXMpIHsKPj4gLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2VzIGFycmF5XG4i LCBfX2Z1bmNfXyk7Cj4+IC0JCXJldCA9IC1FTk9NRU07Cj4+IC0JCWdvdG8gdW5yZWdpc3Rlcl9v dXQ7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0ID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhi by0+dGJvLnR0bSwgbWVtLT51c2VyX3BhZ2VzKTsKPj4gKwlyZXQgPSBhbWRncHVfdHRtX3R0X2dl dF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLCBiby0+dGJvLnR0bS0+cGFnZXMpOwo+PiAgIAlpZiAo cmV0KSB7Cj4+ICAgCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZ2V0IHVzZXIgcGFnZXM6ICVkXG4i LCBfX2Z1bmNfXywgcmV0KTsKPj4gLQkJZ290byBmcmVlX291dDsKPj4gKwkJZ290byB1bnJlZ2lz dGVyX291dDsKPj4gICAJfQo+PiAgIAo+PiAtCWFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMo Ym8tPnRiby50dG0sIG1lbS0+dXNlcl9wYWdlcyk7Cj4+IC0KPj4gICAJcmV0ID0gYW1kZ3B1X2Jv X3Jlc2VydmUoYm8sIHRydWUpOwo+PiAgIAlpZiAocmV0KSB7Cj4+ICAgCQlwcl9lcnIoIiVzOiBG YWlsZWQgdG8gcmVzZXJ2ZSBCT1xuIiwgX19mdW5jX18pOwo+PiBAQCAtNjE0LDExICs1OTgsNyBA QCBzdGF0aWMgaW50IGluaXRfdXNlcl9wYWdlcyhzdHJ1Y3Qga2dkX21lbSAqbWVtLCBzdHJ1Y3Qg bW1fc3RydWN0ICptbSwKPj4gICAJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7Cj4+ICAgCj4+ICAg cmVsZWFzZV9vdXQ6Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJf cGFnZXMsIGJvLT50Ym8udHRtLT5udW1fcGFnZXMpOwo+PiAtZnJlZV9vdXQ6Cj4+IC0Ja3ZmcmVl KG1lbS0+dXNlcl9wYWdlcyk7Cj4+IC0JbWVtLT51c2VyX3BhZ2VzID0gTlVMTDsKPj4gKwlhbWRn cHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOwo+PiAgIHVucmVnaXN0 ZXJfb3V0Ogo+PiAgIAlpZiAocmV0KQo+PiAgIAkJYW1kZ3B1X21uX3VucmVnaXN0ZXIoYm8pOwo+ PiBAQCAtNjc3LDcgKzY1Nyw2IEBAIHN0YXRpYyBpbnQgcmVzZXJ2ZV9ib19hbmRfdm0oc3RydWN0 IGtnZF9tZW0gKm1lbSwKPj4gICAJY3R4LT5rZmRfYm8ucHJpb3JpdHkgPSAwOwo+PiAgIAljdHgt PmtmZF9iby50di5ibyA9ICZiby0+dGJvOwo+PiAgIAljdHgtPmtmZF9iby50di5udW1fc2hhcmVk ID0gMTsKPj4gLQljdHgtPmtmZF9iby51c2VyX3BhZ2VzID0gTlVMTDsKPj4gICAJbGlzdF9hZGQo JmN0eC0+a2ZkX2JvLnR2LmhlYWQsICZjdHgtPmxpc3QpOwo+PiAgIAo+PiAgIAlhbWRncHVfdm1f Z2V0X3BkX2JvKHZtLCAmY3R4LT5saXN0LCAmY3R4LT52bV9wZFswXSk7Cj4+IEBAIC03NDEsNyAr NzIwLDYgQEAgc3RhdGljIGludCByZXNlcnZlX2JvX2FuZF9jb25kX3ZtcyhzdHJ1Y3Qga2dkX21l bSAqbWVtLAo+PiAgIAljdHgtPmtmZF9iby5wcmlvcml0eSA9IDA7Cj4+ICAgCWN0eC0+a2ZkX2Jv LnR2LmJvID0gJmJvLT50Ym87Cj4+ICAgCWN0eC0+a2ZkX2JvLnR2Lm51bV9zaGFyZWQgPSAxOwo+ PiAtCWN0eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBOVUxMOwo+PiAgIAlsaXN0X2FkZCgmY3R4LT5r ZmRfYm8udHYuaGVhZCwgJmN0eC0+bGlzdCk7Cj4+ICAgCj4+ICAgCWkgPSAwOwo+PiBAQCAtMTMy OSwxNSArMTMwNyw2IEBAIGludCBhbWRncHVfYW1ka2ZkX2dwdXZtX2ZyZWVfbWVtb3J5X29mX2dw dSgKPj4gICAJbGlzdF9kZWwoJmJvX2xpc3RfZW50cnktPmhlYWQpOwo+PiAgIAltdXRleF91bmxv Y2soJnByb2Nlc3NfaW5mby0+bG9jayk7Cj4+ICAgCj4+IC0JLyogRnJlZSB1c2VyIHBhZ2VzIGlm IG5lY2Vzc2FyeSAqLwo+PiAtCWlmIChtZW0tPnVzZXJfcGFnZXMpIHsKPj4gLQkJcHJfZGVidWco IiVzOiBGcmVlaW5nIHVzZXJfcGFnZXMgYXJyYXlcbiIsIF9fZnVuY19fKTsKPj4gLQkJaWYgKG1l bS0+dXNlcl9wYWdlc1swXSkKPj4gLQkJCXJlbGVhc2VfcGFnZXMobWVtLT51c2VyX3BhZ2VzLAo+ PiAtCQkJCQltZW0tPmJvLT50Ym8udHRtLT5udW1fcGFnZXMpOwo+PiAtCQlrdmZyZWUobWVtLT51 c2VyX3BhZ2VzKTsKPj4gLQl9Cj4+IC0KPj4gICAJcmV0ID0gcmVzZXJ2ZV9ib19hbmRfY29uZF92 bXMobWVtLCBOVUxMLCBCT19WTV9BTEwsICZjdHgpOwo+PiAgIAlpZiAodW5saWtlbHkocmV0KSkK Pj4gICAJCXJldHVybiByZXQ7Cj4+IEBAIC0xNzUxLDI1ICsxNzIwLDExIEBAIHN0YXRpYyBpbnQg dXBkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJv Y2Vzc19pbmZvLAo+PiAgIAo+PiAgIAkJYm8gPSBtZW0tPmJvOwo+PiAgIAo+PiAtCQlpZiAoIW1l bS0+dXNlcl9wYWdlcykgewo+PiAtCQkJbWVtLT51c2VyX3BhZ2VzID0KPj4gLQkJCQlrdm1hbGxv Y19hcnJheShiby0+dGJvLnR0bS0+bnVtX3BhZ2VzLAo+PiAtCQkJCQkJIHNpemVvZihzdHJ1Y3Qg cGFnZSAqKSwKPj4gLQkJCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4+IC0JCQlpZiAo IW1lbS0+dXNlcl9wYWdlcykgewo+PiAtCQkJCXByX2VycigiJXM6IEZhaWxlZCB0byBhbGxvY2F0 ZSBwYWdlcyBhcnJheVxuIiwKPj4gLQkJCQkgICAgICAgX19mdW5jX18pOwo+PiAtCQkJCXJldHVy biAtRU5PTUVNOwo+PiAtCQkJfQo+PiAtCQl9IGVsc2UgaWYgKG1lbS0+dXNlcl9wYWdlc1swXSkg ewo+PiAtCQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsIGJvLT50Ym8udHRtLT5udW1f cGFnZXMpOwo+PiAtCQl9Cj4+IC0KPj4gICAJCS8qIEdldCB1cGRhdGVkIHVzZXIgcGFnZXMgKi8K Pj4gICAJCXJldCA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sCj4+ IC0JCQkJCQkgICBtZW0tPnVzZXJfcGFnZXMpOwo+PiArCQkJCQkJICAgYm8tPnRiby50dG0tPnBh Z2VzKTsKPj4gICAJCWlmIChyZXQpIHsKPj4gLQkJCW1lbS0+dXNlcl9wYWdlc1swXSA9IE5VTEw7 Cj4+ICsJCQliby0+dGJvLnR0bS0+cGFnZXNbMF0gPSBOVUxMOwo+PiAgIAkJCXByX2luZm8oIiVz OiBGYWlsZWQgdG8gZ2V0IHVzZXIgcGFnZXM6ICVkXG4iLAo+PiAgIAkJCQlfX2Z1bmNfXywgcmV0 KTsKPj4gICAJCQkvKiBQcmV0ZW5kIGl0IHN1Y2NlZWRlZC4gSXQgd2lsbCBmYWlsIGxhdGVyCj4+ IEBAIC0xNzc4LDEyICsxNzMzLDYgQEAgc3RhdGljIGludCB1cGRhdGVfaW52YWxpZF91c2VyX3Bh Z2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8sCj4+ICAgCQkJICog c3RhbGxlZCB1c2VyIG1vZGUgcXVldWVzLgo+PiAgIAkJCSAqLwo+PiAgIAkJfQo+PiAtCj4+IC0J CS8qIE1hcmsgdGhlIEJPIGFzIHZhbGlkIHVubGVzcyBpdCB3YXMgaW52YWxpZGF0ZWQKPj4gLQkJ ICogYWdhaW4gY29uY3VycmVudGx5Cj4+IC0JCSAqLwo+PiAtCQlpZiAoYXRvbWljX2NtcHhjaGco Jm1lbS0+aW52YWxpZCwgaW52YWxpZCwgMCkgIT0gaW52YWxpZCkKPj4gLQkJCXJldHVybiAtRUFH QUlOOwo+IEkgdGhpbmsgeW91J3JlIHJlbW92aW5nIHRoaXMgdG8gbWFrZSBzdXJlIHdlIGV4YWN0 bHkgcGFpciB1cAo+IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMgYW5kIGFtZGdwdV90dG1f dHRfZ2V0X3VzZXJfcGFnZXNfZG9uZQo+IGNhbGxzLiBCdXQgdGhlcmUgYXJlIG90aGVyIGVycm9y IGNvbmRpdGlvbnMgaW4KPiB2YWxpZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMgdGhhdCB3b3VsZCBz a2lwIHRoZQo+IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZSBjYWxscy4gVGhhdCB3 aWxsIG5lZWQgdG8gYmUgaGFuZGxlZAo+IHByb3Blcmx5IGluIHRoZSBlcnJvci1oYW5kbGluZyBj b2RlIHBhdGhzIGluIHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcy4KPgo+Cj4+ICAgCX0KPj4g ICAKPj4gICAJcmV0dXJuIDA7Cj4+IEBAIC0xODYzLDEwICsxODEyLDggQEAgc3RhdGljIGludCB2 YWxpZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2luZm8gKnBy b2Nlc3NfaW5mbykKPj4gICAKPj4gICAJCWJvID0gbWVtLT5ibzsKPj4gICAKPj4gLQkJLyogQ29w eSBwYWdlcyBhcnJheSBhbmQgdmFsaWRhdGUgdGhlIEJPIGlmIHdlIGdvdCB1c2VyIHBhZ2VzICov Cj4+IC0JCWlmIChtZW0tPnVzZXJfcGFnZXNbMF0pIHsKPj4gLQkJCWFtZGdwdV90dG1fdHRfc2V0 X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sCj4+IC0JCQkJCQkgICAgIG1lbS0+dXNlcl9wYWdlcyk7 Cj4+ICsJCS8qIFZhbGlkYXRlIHRoZSBCTyBpZiB3ZSBnb3QgdXNlciBwYWdlcyAqLwo+PiArCQlp ZiAoYm8tPnRiby50dG0tPnBhZ2VzWzBdKSB7Cj4+ICAgCQkJYW1kZ3B1X2JvX3BsYWNlbWVudF9m cm9tX2RvbWFpbihibywgbWVtLT5kb21haW4pOwo+PiAgIAkJCXJldCA9IHR0bV9ib192YWxpZGF0 ZSgmYm8tPnRibywgJmJvLT5wbGFjZW1lbnQsICZjdHgpOwo+PiAgIAkJCWlmIChyZXQpIHsKPj4g QEAgLTE4NzUsMTYgKzE4MjIsMTYgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9pbnZhbGlkX3VzZXJf cGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbykKPj4gICAJCQl9 Cj4+ICAgCQl9Cj4+ICAgCj4+IC0JCS8qIFZhbGlkYXRlIHN1Y2NlZWRlZCwgbm93IHRoZSBCTyBv d25zIHRoZSBwYWdlcywgZnJlZQo+PiAtCQkgKiBvdXIgY29weSBvZiB0aGUgcG9pbnRlciBhcnJh eS4gUHV0IHRoaXMgQk8gYmFjayBvbgo+PiAtCQkgKiB0aGUgdXNlcnB0cl92YWxpZF9saXN0LiBJ ZiB3ZSBuZWVkIHRvIHJldmFsaWRhdGUKPj4gLQkJICogaXQsIHdlIG5lZWQgdG8gc3RhcnQgZnJv bSBzY3JhdGNoLgo+PiAtCQkgKi8KPj4gLQkJa3ZmcmVlKG1lbS0+dXNlcl9wYWdlcyk7Cj4+IC0J CW1lbS0+dXNlcl9wYWdlcyA9IE5VTEw7Cj4+ICAgCQlsaXN0X21vdmVfdGFpbCgmbWVtLT52YWxp ZGF0ZV9saXN0LmhlYWQsCj4+ICAgCQkJICAgICAgICZwcm9jZXNzX2luZm8tPnVzZXJwdHJfdmFs aWRfbGlzdCk7Cj4+ICAgCj4+ICsJCS8qIFN0b3AgSE1NIHRyYWNrIHRoZSB1c2VycHRyIHVwZGF0 ZS4gV2UgZG9udCBjaGVjayB0aGUgcmV0dXJuCj4+ICsJCSAqIHZhbHVlIGZvciBjb25jdXJyZW50 IENQVSBwYWdlIHRhYmxlIHVwZGF0ZSBiZWNhdXNlIHdlIHdpbGwKPj4gKwkJICogcmVzY2hlZHVs ZSB0aGUgcmVzdG9yZSB3b3JrZXIgaWYgcHJvY2Vzc19pbmZvLT5ldmljdGVkX2Jvcwo+PiArCQkg KiBpcyB1cGRhdGVkLgo+PiArCQkgKi8KPj4gKwkJYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdl c19kb25lKGJvLT50Ym8udHRtKTsKPj4gKwo+PiAgIAkJLyogVXBkYXRlIG1hcHBpbmcuIElmIHRo ZSBCTyB3YXMgbm90IHZhbGlkYXRlZAo+PiAgIAkJICogKGJlY2F1c2Ugd2UgY291bGRuJ3QgZ2V0 IHVzZXIgcGFnZXMpLCB0aGlzIHdpbGwKPj4gICAJCSAqIGNsZWFyIHRoZSBwYWdlIHRhYmxlIGVu dHJpZXMsIHdoaWNoIHdpbGwgcmVzdWx0IGluCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2JvX2xpc3QuYwo+PiBpbmRleCA1Yzc5ZGE4ZTExNTAuLjM4NDIxODM5NzBjYyAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3Qu Ywo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jCj4+ IEBAIC0yMDAsOCArMjAwLDYgQEAgdm9pZCBhbWRncHVfYm9fbGlzdF9nZXRfbGlzdChzdHJ1Y3Qg YW1kZ3B1X2JvX2xpc3QgKmxpc3QsCj4+ICAgCj4+ICAgCQlpZiAoIWJvLT5wYXJlbnQpCj4+ICAg CQkJbGlzdF9hZGRfdGFpbCgmZS0+dHYuaGVhZCwgJmJ1Y2tldFtwcmlvcml0eV0pOwo+PiAtCj4+ IC0JCWUtPnVzZXJfcGFnZXMgPSBOVUxMOwo+PiAgIAl9Cj4+ICAgCj4+ICAgCS8qIENvbm5lY3Qg dGhlIHNvcnRlZCBidWNrZXRzIGluIHRoZSBvdXRwdXQgbGlzdC4gKi8KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmggYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oCj4+IGluZGV4IDdjNWY1ZDE2MDFlNi4u NGJlYWIyZGUwOWIzIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfYm9fbGlzdC5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9ib19saXN0LmgKPj4gQEAgLTM1LDggKzM1LDcgQEAgc3RydWN0IGFtZGdwdV9ib19saXN0X2Vu dHJ5IHsKPj4gICAJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIJdHY7Cj4+ICAgCXN0cnVjdCBh bWRncHVfYm9fdmEJCSpib192YTsKPj4gICAJdWludDMyX3QJCQlwcmlvcml0eTsKPj4gLQlzdHJ1 Y3QgcGFnZQkJCSoqdXNlcl9wYWdlczsKPj4gLQlpbnQJCQkJdXNlcl9pbnZhbGlkYXRlZDsKPj4g Kwlib29sCQkJCXVzZXJfaW52YWxpZGF0ZWQ7Cj4+ICAgfTsKPj4gICAKPj4gICBzdHJ1Y3QgYW1k Z3B1X2JvX2xpc3Qgewo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYwo+IFtz bmlwXQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dl bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jCj4gW3NuaXBdCj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCj4+IGluZGV4IDVkNTE4ZDJiYjli ZS4uYzgwMDJlZTFkNDE1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfbW4uYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf bW4uYwo+PiBAQCAtMjI5LDggKzIyOSw2IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9tbl9pbnZhbGlk YXRlX25vZGUoc3RydWN0IGFtZGdwdV9tbl9ub2RlICpub2RlLAo+PiAgIAkJCXRydWUsIGZhbHNl LCBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4+ICAgCQlpZiAociA8PSAwKQo+PiAgIAkJCURSTV9F UlJPUigiKCVsZCkgZmFpbGVkIHRvIHdhaXQgZm9yIHVzZXIgYm9cbiIsIHIpOwo+PiAtCj4+IC0J CWFtZGdwdV90dG1fdHRfbWFya191c2VyX3BhZ2VzKGJvLT50Ym8udHRtKTsKPj4gICAJfQo+PiAg IH0KPj4gICAKPj4gQEAgLTM1MywxNSArMzUxLDE2IEBAIHN0YXRpYyBzdHJ1Y3QgaG1tX21pcnJv cl9vcHMgYW1kZ3B1X2htbV9taXJyb3Jfb3BzW10gPSB7Cj4+ICAgLyoqCj4+ICAgICogYW1kZ3B1 X21uX2dldCAtIGNyZWF0ZSBITU0gbWlycm9yIGNvbnRleHQKPj4gICAgKgo+PiArICogQG1tOiB0 aGUgbW0gc3RydWN0Cj4+ICAgICogQGFkZXY6IGFtZGdwdSBkZXZpY2UgcG9pbnRlcgo+PiAgICAq IEB0eXBlOiB0eXBlIG9mIE1NVSBub3RpZmllciBjb250ZXh0Cj4+ICAgICoKPj4gLSAqIENyZWF0 ZXMgYSBITU0gbWlycm9yIGNvbnRleHQgZm9yIGN1cnJlbnQtPm1tLgo+PiArICogQ3JlYXRlcyBh IEhNTSBtaXJyb3IgY29udGV4dCBmb3IgbW0uCj4+ICAgICovCj4+IC1zdHJ1Y3QgYW1kZ3B1X21u ICphbWRncHVfbW5fZ2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiArc3RydWN0IGFt ZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiBJIHRoaW5rIHRo aXMgY2hhbmdlIGlzbid0IG5lZWRlZCBhbnkgbW9yZS4gQWxsIGNhbGxlcnMgb2YgdGhpcyBmdW5j dGlvbgo+IHNwZWNpZnkgbW0gYXMgY3VycmVudC0+bW0gYW55d2F5Lgo+Cj4KPj4gKwkJCQlzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4gICAJCQkJZW51bSBhbWRncHVfbW5fdHlwZSB0eXBl KQo+PiAgIHsKPj4gLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwo+PiAgIAlz dHJ1Y3QgYW1kZ3B1X21uICphbW47Cj4+ICAgCXVuc2lnbmVkIGxvbmcga2V5ID0gQU1ER1BVX01O X0tFWShtbSwgdHlwZSk7Cj4+ICAgCWludCByOwo+PiBAQCAtNDMxLDcgKzQzMCw3IEBAIGludCBh bWRncHVfbW5fcmVnaXN0ZXIoc3RydWN0IGFtZGdwdV9ibyAqYm8sIHVuc2lnbmVkIGxvbmcgYWRk cikKPj4gICAJc3RydWN0IGxpc3RfaGVhZCBib3M7Cj4+ICAgCXN0cnVjdCBpbnRlcnZhbF90cmVl X25vZGUgKml0Owo+PiAgIAo+PiAtCWFtbiA9IGFtZGdwdV9tbl9nZXQoYWRldiwgdHlwZSk7Cj4+ ICsJYW1uID0gYW1kZ3B1X21uX2dldChjdXJyZW50LT5tbSwgYWRldiwgdHlwZSk7Cj4+ICAgCWlm IChJU19FUlIoYW1uKSkKPj4gICAJCXJldHVybiBQVFJfRVJSKGFtbik7Cj4+ICAgCj4+IEBAIC01 MTMsMyArNTEyLDI2IEBAIHZvaWQgYW1kZ3B1X21uX3VucmVnaXN0ZXIoc3RydWN0IGFtZGdwdV9i byAqYm8pCj4+ICAgCW11dGV4X3VubG9jaygmYWRldi0+bW5fbG9jayk7Cj4+ICAgfQo+PiAgIAo+ PiArLyogZmxhZ3MgdXNlZCBieSBITU0gaW50ZXJuYWwsIG5vdCByZWxhdGVkIHRvIENQVS9HUFUg UFRFIGZsYWdzICovCj4+ICtzdGF0aWMgY29uc3QgdWludDY0X3QgaG1tX3JhbmdlX2ZsYWdzW0hN TV9QRk5fRkxBR19NQVhdID0gewo+PiArCQkoMSA8PCAwKSwgLyogSE1NX1BGTl9WQUxJRCAqLwo+ PiArCQkoMSA8PCAxKSwgLyogSE1NX1BGTl9XUklURSAqLwo+PiArCQkwIC8qIEhNTV9QRk5fREVW SUNFX1BSSVZBVEUgKi8KPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCB1aW50NjRfdCBobW1f cmFuZ2VfdmFsdWVzW0hNTV9QRk5fVkFMVUVfTUFYXSA9IHsKPj4gKwkJMHhmZmZmZmZmZmZmZmZm ZmZlVUwsIC8qIEhNTV9QRk5fRVJST1IgKi8KPj4gKwkJMCwgLyogSE1NX1BGTl9OT05FICovCj4+ ICsJCTB4ZmZmZmZmZmZmZmZmZmZmY1VMIC8qIEhNTV9QRk5fU1BFQ0lBTCAqLwo+PiArfTsKPj4g Kwo+PiArdm9pZCBhbWRncHVfaG1tX2luaXRfcmFuZ2Uoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2Up Cj4+ICt7Cj4+ICsJaWYgKHJhbmdlKSB7Cj4+ICsJCXJhbmdlLT5mbGFncyA9IGhtbV9yYW5nZV9m bGFnczsKPj4gKwkJcmFuZ2UtPnZhbHVlcyA9IGhtbV9yYW5nZV92YWx1ZXM7Cj4+ICsJCXJhbmdl LT5wZm5fc2hpZnQgPSBQQUdFX1NISUZUOwo+PiArCQlyYW5nZS0+cGZucyA9IE5VTEw7Cj4+ICsJ CUlOSVRfTElTVF9IRUFEKCZyYW5nZS0+bGlzdCk7Cj4+ICsJfQo+PiArfQo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmggYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaAo+PiBpbmRleCAwYTUxZmQwMDAyMWMuLjRjNWU4Njg0 N2EzYiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21u LmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmgKPj4gQEAg LTI1LDkgKzI1LDEwIEBACj4+ICAgI2RlZmluZSBfX0FNREdQVV9NTl9IX18KPj4gICAKPj4gICAv Kgo+PiAtICogTU1VIE5vdGlmaWVyCj4+ICsgKiBITU0gbWlycm9yCj4+ICAgICovCj4+ICAgc3Ry dWN0IGFtZGdwdV9tbjsKPj4gK3N0cnVjdCBobW1fcmFuZ2U7Cj4+ICAgCj4+ICAgZW51bSBhbWRn cHVfbW5fdHlwZSB7Cj4+ICAgCUFNREdQVV9NTl9UWVBFX0dGWCwKPj4gQEAgLTM3LDEwICszOCwx MiBAQCBlbnVtIGFtZGdwdV9tbl90eXBlIHsKPj4gICAjaWYgZGVmaW5lZChDT05GSUdfSE1NX01J UlJPUikKPj4gICB2b2lkIGFtZGdwdV9tbl9sb2NrKHN0cnVjdCBhbWRncHVfbW4gKm1uKTsKPj4g ICB2b2lkIGFtZGdwdV9tbl91bmxvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pOwo+PiAtc3RydWN0 IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4g K3N0cnVjdCBhbWRncHVfbW4gKmFtZGdwdV9tbl9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4+ ICsJCQkJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+ICAgCQkJCWVudW0gYW1kZ3B1X21u X3R5cGUgdHlwZSk7Cj4+ICAgaW50IGFtZGdwdV9tbl9yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1X2Jv ICpibywgdW5zaWduZWQgbG9uZyBhZGRyKTsKPj4gICB2b2lkIGFtZGdwdV9tbl91bnJlZ2lzdGVy KHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKPj4gK3ZvaWQgYW1kZ3B1X2htbV9pbml0X3JhbmdlKHN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTsKPj4gICAjZWxzZQo+PiAgIHN0YXRpYyBpbmxpbmUgdm9p ZCBhbWRncHVfbW5fbG9jayhzdHJ1Y3QgYW1kZ3B1X21uICptbikge30KPj4gICBzdGF0aWMgaW5s aW5lIHZvaWQgYW1kZ3B1X21uX3VubG9jayhzdHJ1Y3QgYW1kZ3B1X21uICptbikge30KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYwo+PiBpbmRleCBjOTFlYzMxMDFkMDAu LjMzMDU3ZDYxMTRjNyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X3R0bS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90 dG0uYwo+PiBAQCAtNDMsNiArNDMsNyBAQAo+PiAgICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+ Cj4+ICAgI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPj4gICAjaW5jbHVkZSA8bGludXgvaW9t bXUuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9obW0uaD4KPj4gICAjaW5jbHVkZSAiYW1kZ3B1Lmgi Cj4+ICAgI2luY2x1ZGUgImFtZGdwdV9vYmplY3QuaCIKPj4gICAjaW5jbHVkZSAiYW1kZ3B1X3Ry YWNlLmgiCj4+IEBAIC03MDUsMTEgKzcwNiw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFtZGdw dV90dG1faW9fbWVtX3BmbihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+PiAgIC8qCj4+ ICAgICogVFRNIGJhY2tlbmQgZnVuY3Rpb25zLgo+PiAgICAqLwo+PiAtc3RydWN0IGFtZGdwdV90 dG1fZ3VwX3Rhc2tfbGlzdCB7Cj4+IC0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0Owo+PiAtCXN0cnVj dCB0YXNrX3N0cnVjdAkqdGFzazsKPj4gLX07Cj4+IC0KPj4gICBzdHJ1Y3QgYW1kZ3B1X3R0bV90 dCB7Cj4+ICAgCXN0cnVjdCB0dG1fZG1hX3R0CXR0bTsKPj4gICAJdTY0CQkJb2Zmc2V0Owo+PiBA QCAtNzE4LDEwNyArNzE0LDEwNSBAQCBzdHJ1Y3QgYW1kZ3B1X3R0bV90dCB7Cj4+ICAgCXVpbnQz Ml90CQl1c2VyZmxhZ3M7Cj4+ICAgCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGd1cHRhc2tsb2Nr Owo+PiAgIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBndXB0YXNrczsKPj4gLQlhdG9taWNfdAkJ bW11X2ludmFsaWRhdGlvbnM7Cj4+IC0JdWludDMyX3QJCWxhc3Rfc2V0X3BhZ2VzOwo+PiArCXN0 cnVjdCBobW1fcmFuZ2UJcmFuZ2U7Cj4+ICAgfTsKPj4gICAKPj4gICAvKioKPj4gLSAqIGFtZGdw dV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMgLSBQaW4gcGFnZXMgb2YgbWVtb3J5IHBvaW50ZWQgdG8g YnkgYSBVU0VSUFRSCj4+IC0gKiBwb2ludGVyIHRvIG1lbW9yeQo+PiArICogYW1kZ3B1X3R0bV90 dF9nZXRfdXNlcl9wYWdlcyAtIGdldCBkZXZpY2UgYWNjZXNzaWJsZSBwYWdlcyB0aGF0IGJhY2sg dXNlcgo+PiArICogbWVtb3J5IGFuZCBzdGFydCBITU0gdHJhY2tpbmcgQ1BVIHBhZ2UgdGFibGUg dXBkYXRlCj4+ICAgICoKPj4gLSAqIENhbGxlZCBieSBhbWRncHVfZ2VtX3VzZXJwdHJfaW9jdGwo KSBhbmQgYW1kZ3B1X2NzX3BhcnNlcl9ib3MoKS4KPj4gLSAqIFRoaXMgcHJvdmlkZXMgYSB3cmFw cGVyIGFyb3VuZCB0aGUgZ2V0X3VzZXJfcGFnZXMoKSBjYWxsIHRvIHByb3ZpZGUKPj4gLSAqIGRl dmljZSBhY2Nlc3NpYmxlIHBhZ2VzIHRoYXQgYmFjayB1c2VyIG1lbW9yeS4KPj4gKyAqIENhbGxp bmcgZnVuY3Rpb24gbXVzdCBjYWxsIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9yYW5nZV9kb25lKCkg b25jZSBhbmQgb25seQo+PiArICogb25jZSBhZnRlcndhcmRzIHRvIHN0b3AgSE1NIHRyYWNraW5n Cj4+ICAgICovCj4+ICAgaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0 bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQo+PiAgIHsKPj4gICAJc3RydWN0IGFtZGdw dV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwo+PiAgIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9 IGd0dC0+dXNlcnRhc2stPm1tOwo+PiAtCXVuc2lnbmVkIGludCBmbGFncyA9IDA7Cj4+IC0JdW5z aWduZWQgcGlubmVkID0gMDsKPj4gLQlpbnQgcjsKPj4gKwl1bnNpZ25lZCBsb25nIGVuZCA9IGd0 dC0+dXNlcnB0ciArIHR0bS0+bnVtX3BhZ2VzICogUEFHRV9TSVpFOwo+PiArCXN0cnVjdCBobW1f cmFuZ2UgKnJhbmdlID0gJmd0dC0+cmFuZ2U7Cj4+ICsJaW50IHIsIGk7Cj4+ICAgCj4+ICAgCWlm ICghbW0pIC8qIEhhcHBlbnMgZHVyaW5nIHByb2Nlc3Mgc2h1dGRvd24gKi8KPj4gICAJCXJldHVy biAtRVNSQ0g7Cj4+ICAgCj4+IC0JaWYgKCEoZ3R0LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VT RVJQVFJfUkVBRE9OTFkpKQo+PiAtCQlmbGFncyB8PSBGT0xMX1dSSVRFOwo+PiArCWFtZGdwdV9o bW1faW5pdF9yYW5nZShyYW5nZSk7Cj4+ICAgCj4+ICAgCWRvd25fcmVhZCgmbW0tPm1tYXBfc2Vt KTsKPj4gICAKPj4gKwlyYW5nZS0+dm1hID0gZmluZF92bWEobW0sIGd0dC0+dXNlcnB0cik7Cj4g VGhlcmUgaXMgc3RpbGwgYW4gYXNzdW1wdGlvbiBoZXJlIHRoYXQgb3VyIHVzZXJwdHIgQk9zIGNv dmVyIG9ubHkgYQo+IHNpbmdsZSBWTS4gVGhpcyBpcyBhIG5ldyBsaW1pdGF0aW9uIHdpdGggSE1N IHRoYXQgdGhlIHByZXZpb3VzCj4gZ2V0X3VzZXJfcGFnZXMtYmFzZWQgaW1wbGVtZW50YXRpb24g ZGlkIG5vdCBoYXZlLiBXZSdyZSBwcm9iYWJseSBPSyB3aXRoCj4gdGhpcyBmb3Igbm93LiBCdXQg d2UgbWF5IHJ1biBpbnRvIHJlZ3Jlc3Npb25zIGlmIHRoZXJlIGFyZSBhbnkgUk9DbQo+IGFwcGxp Y2F0aW9uIHRoYXQgcmVnaXN0ZXIgdXNlciBtZW1vcnkgc3Bhbm5pbmcgbXVsdGlwbGUgVk1Bcy4g SWYgdGhhdAo+IGhhcHBlbnMsIHdlIG1heSBuZWVkIHRvIGdlbmVyYWxpemUgdGhpcyBzbyB0aGF0 IGVhY2ggdXNlcnB0ciBCTyBjYW4gaGF2ZQo+IG11bHRpcGxlIEhNTSByYW5nZXMuCj4KPgo+PiAg IAlpZiAoZ3R0LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfQU5PTk9OTFkpIHsKPj4g ICAJCS8qCj4+ICAgCQkgKiBjaGVjayB0aGF0IHdlIG9ubHkgdXNlIGFub255bW91cyBtZW1vcnkg dG8gcHJldmVudCBwcm9ibGVtcwo+PiAgIAkJICogd2l0aCB3cml0ZWJhY2sKPj4gICAJCSAqLwo+ PiAtCQl1bnNpZ25lZCBsb25nIGVuZCA9IGd0dC0+dXNlcnB0ciArIHR0bS0+bnVtX3BhZ2VzICog UEFHRV9TSVpFOwo+PiAtCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKPj4gKwkJc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEgPSByYW5nZS0+dm1hOwo+PiAgIAo+PiAtCQl2bWEgPSBmaW5k X3ZtYShtbSwgZ3R0LT51c2VycHRyKTsKPj4gLQkJaWYgKCF2bWEgfHwgdm1hLT52bV9maWxlIHx8 IHZtYS0+dm1fZW5kIDwgZW5kKSB7Cj4+IC0JCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwo+PiAt CQkJcmV0dXJuIC1FUEVSTTsKPj4gLQkJfQo+PiArCQlpZiAoIXZtYSB8fCB2bWEtPnZtX2ZpbGUg fHwgdm1hLT52bV9lbmQgPCBlbmQpCj4+ICsJCQlyYW5nZS0+dm1hID0gTlVMTDsKPj4gICAJfQo+ PiAgIAo+PiAtCS8qIGxvb3AgZW5vdWdoIHRpbWVzIHVzaW5nIGNvbnRpZ3VvdXMgcGFnZXMgb2Yg bWVtb3J5ICovCj4+IC0JZG8gewo+PiAtCQl1bnNpZ25lZCBudW1fcGFnZXMgPSB0dG0tPm51bV9w YWdlcyAtIHBpbm5lZDsKPj4gLQkJdWludDY0X3QgdXNlcnB0ciA9IGd0dC0+dXNlcnB0ciArIHBp bm5lZCAqIFBBR0VfU0laRTsKPj4gLQkJc3RydWN0IHBhZ2UgKipwID0gcGFnZXMgKyBwaW5uZWQ7 Cj4+IC0JCXN0cnVjdCBhbWRncHVfdHRtX2d1cF90YXNrX2xpc3QgZ3VwdGFzazsKPj4gLQo+PiAt CQlndXB0YXNrLnRhc2sgPSBjdXJyZW50Owo+PiAtCQlzcGluX2xvY2soJmd0dC0+Z3VwdGFza2xv Y2spOwo+PiAtCQlsaXN0X2FkZCgmZ3VwdGFzay5saXN0LCAmZ3R0LT5ndXB0YXNrcyk7Cj4+IC0J CXNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKPj4gKwlpZiAoIXJhbmdlLT52bWEpIHsK Pj4gKwkJciA9IC1FUEVSTTsKPiBZb3UncmUgdHJlYXRpbmcgcGVybWlzc2lvbnMgZXJyb3JzIGFu ZCBlcnJvcnMgZmluZGluZyBhIFZNQSB0aGUgc2FtZQo+IHdheS4gQW5kIEkgdGhpbmsgeW91IGRv bid0IGRldGVjdCBmYWlsdXJlcyB0byBmaW5kIGEgVk1BIHByb3Blcmx5IGluIHRoZQo+IGZpcnN0 IHBsYWNlLiBmaW5kX3ZtYSBtYXkgcmV0dXJuIGEgVk1BIHRoYXQgZG9lc24ndCBpbmNsdWRlIHRo ZSBhZGRyZXNzCj4gcHJvdmlkZWQuIEl0J3MgZG9jdW1lbnRlZCBhcyAiTG9vayB1cCB0aGUgZmly c3QgVk1BIHdoaWNoIHNhdGlzZmllcwo+IGFkZHIgPCB2bV9lbmQswqAgTlVMTCBpZiBub25lLiIg WW91IHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlIFZNQSBjb3ZlcnMKPiB0aGUgZW50aXJlIGFk ZHJlc3MgcmFuZ2Ugb2YgdGhlIHVzZXJwdHIgQk8uIFRoZXJlIGlzIGEgaGVscGVyIGZ1bmN0aW9u Cj4gaW4gbGludXgvbW0uaCB0aGF0IGRvZXMgdGhhdDogcmFuZ2VfaW5fdm1hKHJhbmdlLT52bWEs IGd0dC0+dXNlcnB0ciwKPiBndHQtPnVzZXJwdHIgKyBndHQtPnVzZXJwdHIgKyB0dG0tPm51bV9w YWdlcyAqIFBBR0VfU0laRSkuIFlvdSBzaG91bGQKPiBjaGVjayB0aGlzIGNvbmRpdGlvbiBpbiBh bGwgY2FzZXMuCj4KPiBUaGVyZSBzaG91bGQgYmUgdHdvIGRpc3RpbmN0IHR5cGVzIG9mIGVycm9y cy4gSWYgZmluZF92bWEgZmFpbHMgdG8gZmluZAo+IGEgbWF0Y2hpbmcgVk1BLCB0aGF0IHNob3Vs ZCBiZSAtRUZBVUxULiBJZiB0aGUgZ3R0LT51c2VyZmxhZ3MgZG9uJ3QKPiBtYXRjaCB0aGUgVk1B IHByb3BlcnRpZXMsIHRoYXQgc2hvdWxkIGJlIC1FUEVSTS4KPgo+Cj4+ICsJCWdvdG8gb3V0Owo+ PiArCX0KPj4gICAKPj4gLQkJaWYgKG1tID09IGN1cnJlbnQtPm1tKQo+PiAtCQkJciA9IGdldF91 c2VyX3BhZ2VzKHVzZXJwdHIsIG51bV9wYWdlcywgZmxhZ3MsIHAsIE5VTEwpOwo+PiAtCQllbHNl Cj4+IC0JCQlyID0gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKGd0dC0+dXNlcnRhc2ssCj4+IC0JCQkJ CW1tLCB1c2VycHRyLCBudW1fcGFnZXMsCj4+IC0JCQkJCWZsYWdzLCBwLCBOVUxMLCBOVUxMKTsK Pj4gKwlyYW5nZS0+cGZucyA9IGt2bWFsbG9jX2FycmF5KHR0bS0+bnVtX3BhZ2VzLCBzaXplb2Yo dWludDY0X3QpLAo+PiArCQkJCSAgICAgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKHJhbmdlLT5wZm5z ID09IE5VTEwpIHsKPj4gKwkJciA9IC1FTk9NRU07Cj4+ICsJCWdvdG8gb3V0Owo+PiArCX0KPj4g KwlyYW5nZS0+c3RhcnQgPSBndHQtPnVzZXJwdHI7Cj4+ICsJcmFuZ2UtPmVuZCA9IGVuZDsKPj4g ICAKPj4gLQkJc3Bpbl9sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKPj4gLQkJbGlzdF9kZWwoJmd1 cHRhc2subGlzdCk7Cj4+IC0JCXNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKPj4gKwlm b3IgKGkgPSAwOyBpIDwgdHRtLT5udW1fcGFnZXM7IGkrKykgewo+PiArCQlyYW5nZS0+cGZuc1tp XSA9IHJhbmdlLT5mbGFnc1tITU1fUEZOX1ZBTElEXTsKPj4gKwkJcmFuZ2UtPnBmbnNbaV0gfD0g YW1kZ3B1X3R0bV90dF9pc19yZWFkb25seSh0dG0pID8KPj4gKwkJCQkJMCA6IHJhbmdlLT5mbGFn c1tITU1fUEZOX1dSSVRFXTsKPj4gKwl9Cj4gWW91IGNvdWxkIG9wdGltaXplIHRoaXMgc2xpZ2h0 bHkuIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwKPiBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5IGlu IGVhY2ggbG9vcCBpdGVyYXRpb24uIFRoZSBmbGFncyBhcmUgdGhlIHNhbWUKPiBmb3IgYWxsIHBm bnMuIFNvIGRvIHRoZSBjb25kaXRpb25hbCB0aGluZyBvbiByYW5nZS0+cGZuc1swXSwgYW5kIHRo ZW4KPiBqdXN0IGNvcHkgdGhhdCB0byBhbGwgdGhlIHJlbWFpbmluZyBwZm5zLgo+Cj4KPj4gICAK Pj4gLQkJaWYgKHIgPCAwKQo+PiAtCQkJZ290byByZWxlYXNlX3BhZ2VzOwo+PiArCS8qIFRoaXMg bWF5IHRyaWdnZXIgcGFnZSB0YWJsZSB1cGRhdGUgKi8KPj4gKwlyID0gaG1tX3ZtYV9mYXVsdChy YW5nZSwgdHJ1ZSk7Cj4+ICsJaWYgKHIpCj4+ICsJCWdvdG8gb3V0X2ZyZWVfcGZuczsKPj4gICAK Pj4gLQkJcGlubmVkICs9IHI7Cj4+ICsJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKPj4gICAKPj4g LQl9IHdoaWxlIChwaW5uZWQgPCB0dG0tPm51bV9wYWdlcyk7Cj4+ICsJZm9yIChpID0gMDsgaSA8 IHR0bS0+bnVtX3BhZ2VzOyBpKyspCj4+ICsJCXBhZ2VzW2ldID0gaG1tX3Bmbl90b19wYWdlKHJh bmdlLCByYW5nZS0+cGZuc1tpXSk7Cj4+ICAgCj4+IC0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsK Pj4gICAJcmV0dXJuIDA7Cj4+ICAgCj4+IC1yZWxlYXNlX3BhZ2VzOgo+PiAtCXJlbGVhc2VfcGFn ZXMocGFnZXMsIHBpbm5lZCk7Cj4+ICtvdXRfZnJlZV9wZm5zOgo+PiArCWt2ZnJlZShyYW5nZS0+ cGZucyk7Cj4+ICsJcmFuZ2UtPnBmbnMgPSBOVUxMOwo+PiArb3V0Ogo+PiAgIAl1cF9yZWFkKCZt bS0+bW1hcF9zZW0pOwo+PiAgIAlyZXR1cm4gcjsKPj4gICB9Cj4+ICAgCj4+ICAgLyoqCj4+IC0g KiBhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzIC0gQ29weSBwYWdlcyBpbiwgcHV0dGluZyBv bGQgcGFnZXMgYXMgbmVjZXNzYXJ5Lgo+PiArICogYW1kZ3B1X3R0bV90dF91c2VycHRyX3Jhbmdl X2RvbmUgLSBzdG9wIEhNTSB0cmFjayB0aGUgQ1BVIHBhZ2UgdGFibGUgY2hhbmdlCj4+ICsgKiBD aGVjayBpZiB0aGUgcGFnZXMgYmFja2luZyB0aGlzIHR0bSByYW5nZSBoYXZlIGJlZW4gaW52YWxp ZGF0ZWQKPj4gICAgKgo+PiAtICogQ2FsbGVkIGJ5IGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKCku IFRoaXMgY3JlYXRlcyB0aGUgcGFnZSBsaXN0Cj4+IC0gKiB0aGF0IGJhY2tzIHVzZXIgbWVtb3J5 IGFuZCB3aWxsIHVsdGltYXRlbHkgYmUgbWFwcGVkIGludG8gdGhlIGRldmljZQo+PiAtICogYWRk cmVzcyBzcGFjZS4KPj4gKyAqIFJldHVybnM6IHRydWUgaWYgcGFnZXMgYXJlIGludmFsaWRhdGVk IHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhleSd2ZSBiZWVuIHNldAo+IEkgc3RpbGwgZG9uJ3QgbGlr ZSB0aGF0IHlvdSdyZSBpbnZlcnRpbmcgdGhlIHJldHVybiB2YWx1ZSBvZgo+IGhtbV92bWFfcmFu Z2VfZG9uZS4gVGhpcyB3aWxsIGdldCBjb25mdXNpbmcgaW4gdGhlIGZ1dHVyZS4gQ291bGQgdGhp cwo+IGZ1bmN0aW9uIGluc3RlYWQgcmV0dXJuICJ0cnVlIGlmIHBhZ2VzIGFyZSBzdGlsbCB2YWxp ZCI/Cj4KPgo+PiAgICAqLwo+PiAtdm9pZCBhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKHN0 cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcykKPj4gK2Jvb2wgYW1kZ3B1X3R0 bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKHN0cnVjdCB0dG1fdHQgKnR0bSkKPj4gICB7Cj4+ICAg CXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKPj4gLQl1bnNpZ25lZCBp Owo+PiArCWJvb2wgcjsKPj4gICAKPj4gLQlndHQtPmxhc3Rfc2V0X3BhZ2VzID0gYXRvbWljX3Jl YWQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpOwo+PiAtCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51 bV9wYWdlczsgKytpKSB7Cj4+IC0JCWlmICh0dG0tPnBhZ2VzW2ldKQo+PiAtCQkJcHV0X3BhZ2Uo dHRtLT5wYWdlc1tpXSk7Cj4+ICsJaWYgKGd0dCA9PSBOVUxMIHx8ICFndHQtPnVzZXJwdHIpCj4+ ICsJCXJldHVybiBmYWxzZTsKPiBVc2UgIiFndHQiIGluc3RlYWQgb2YgImd0dCA9PSBOVUxMIi4g QWxzbywgcmV0dXJuaW5nICJmYWxzZSIgaGVyZSBtZWFucwo+IHRoZSBwYWdlcyBhcmUgc3RpbGwg dmFsaWQuIFRoYXQgc2VlbXMgbGlrZSB0aGUgd3JvbmcgYW5zd2VyIGZvciB0aGlzCj4ga2luZCBv ZiBmYWlsdXJlLiAiZmFsc2UiIHdvdWxkIG1ha2Ugc2Vuc2UgaGVyZSBpZiB5b3UgZm9sbG93ZWQg bXkKPiBzdWdnZXN0aW9uIGFib3ZlIHRvIHJldHVybiB0cnVlLCBpZiB0aGUgcGFnZXMgYXJlIHN0 aWxsIHZhbGlkLgo+Cj4KPj4gICAKPj4gLQkJdHRtLT5wYWdlc1tpXSA9IHBhZ2VzID8gcGFnZXNb aV0gOiBOVUxMOwo+PiArCXIgPSBobW1fdm1hX3JhbmdlX2RvbmUoJmd0dC0+cmFuZ2UpOwo+PiAr Cj4+ICsJaWYgKGd0dC0+cmFuZ2UucGZucykgewo+PiArCQlrdmZyZWUoZ3R0LT5yYW5nZS5wZm5z KTsKPj4gKwkJZ3R0LT5yYW5nZS5wZm5zID0gTlVMTDsKPj4gICAJfQo+PiArCj4+ICsJcmV0dXJu ICFyOwo+IEkgc3RpbGwgZG9uJ3QgbGlrZSB0aGF0IHlvdSdyZSBpbnZlcnRpbmcgdGhlIHJldHVy biB2YWx1ZSBvZgo+IGhtbV92bWFfcmFuZ2VfZG9uZS4gVGhpcyB3aWxsIGdldCBjb25mdXNpbmcg aW4gdGhlIGZ1dHVyZS4KPgo+IFJlZ2FyZHMsCj4gIMKgIEZlbGl4Cj4KPgo+PiAgIH0KPj4gICAK Pj4gICAvKioKPj4gQEAgLTkwMyw5ICs4OTcsNiBAQCBzdGF0aWMgdm9pZCBhbWRncHVfdHRtX3R0 X3VucGluX3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKQo+PiAgIAkvKiB1bm1hcCB0aGUgcGFn ZXMgbWFwcGVkIHRvIHRoZSBkZXZpY2UgKi8KPj4gICAJZG1hX3VubWFwX3NnKGFkZXYtPmRldiwg dHRtLT5zZy0+c2dsLCB0dG0tPnNnLT5uZW50cywgZGlyZWN0aW9uKTsKPj4gICAKPj4gLQkvKiBt YXJrIHRoZSBwYWdlcyBhcyBkaXJ0eSAqLwo+PiAtCWFtZGdwdV90dG1fdHRfbWFya191c2VyX3Bh Z2VzKHR0bSk7Cj4+IC0KPj4gICAJc2dfZnJlZV90YWJsZSh0dG0tPnNnKTsKPj4gICB9Cj4+ICAg Cj4+IEBAIC0xMjA3LDcgKzExOTgsNyBAQCBzdGF0aWMgdm9pZCBhbWRncHVfdHRtX3R0X3VucG9w dWxhdGUoc3RydWN0IHR0bV90dCAqdHRtKQo+PiAgIAlib29sIHNsYXZlID0gISEodHRtLT5wYWdl X2ZsYWdzICYgVFRNX1BBR0VfRkxBR19TRyk7Cj4+ICAgCj4+ICAgCWlmIChndHQgJiYgZ3R0LT51 c2VycHRyKSB7Cj4+IC0JCWFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXModHRtLCBOVUxMKTsK Pj4gKwkJbWVtc2V0KHR0bS0+cGFnZXMsIDAsIHR0bS0+bnVtX3BhZ2VzICogc2l6ZW9mKHN0cnVj dCBwYWdlICopKTsKPj4gICAJCWtmcmVlKHR0bS0+c2cpOwo+PiAgIAkJdHRtLT5wYWdlX2ZsYWdz ICY9IH5UVE1fUEFHRV9GTEFHX1NHOwo+PiAgIAkJcmV0dXJuOwo+PiBAQCAtMTI1OCw4ICsxMjQ5 LDYgQEAgaW50IGFtZGdwdV90dG1fdHRfc2V0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1 aW50NjRfdCBhZGRyLAo+PiAgIAo+PiAgIAlzcGluX2xvY2tfaW5pdCgmZ3R0LT5ndXB0YXNrbG9j ayk7Cj4+ICAgCUlOSVRfTElTVF9IRUFEKCZndHQtPmd1cHRhc2tzKTsKPj4gLQlhdG9taWNfc2V0 KCZndHQtPm1tdV9pbnZhbGlkYXRpb25zLCAwKTsKPj4gLQlndHQtPmxhc3Rfc2V0X3BhZ2VzID0g MDsKPj4gICAKPj4gICAJcmV0dXJuIDA7Cj4+ICAgfQo+PiBAQCAtMTI4OSw3ICsxMjc4LDYgQEAg Ym9vbCBhbWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdW5z aWduZWQgbG9uZyBzdGFydCwKPj4gICAJCQkJICB1bnNpZ25lZCBsb25nIGVuZCkKPj4gICB7Cj4+ ICAgCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKPj4gLQlzdHJ1Y3Qg YW1kZ3B1X3R0bV9ndXBfdGFza19saXN0ICplbnRyeTsKPj4gICAJdW5zaWduZWQgbG9uZyBzaXpl Owo+PiAgIAo+PiAgIAlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikKPj4gQEAgLTEz MDIsNDggKzEyOTAsMjAgQEAgYm9vbCBhbWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVj dCB0dG1fdHQgKnR0bSwgdW5zaWduZWQgbG9uZyBzdGFydCwKPj4gICAJaWYgKGd0dC0+dXNlcnB0 ciA+IGVuZCB8fCBndHQtPnVzZXJwdHIgKyBzaXplIDw9IHN0YXJ0KQo+PiAgIAkJcmV0dXJuIGZh bHNlOwo+PiAgIAo+PiAtCS8qIFNlYXJjaCB0aGUgbGlzdHMgb2YgdGFza3MgdGhhdCBob2xkIHRo aXMgbWFwcGluZyBhbmQgc2VlCj4+IC0JICogaWYgY3VycmVudCBpcyBvbmUgb2YgdGhlbS4gIElm IGl0IGlzIHJldHVybiBmYWxzZS4KPj4gLQkgKi8KPj4gLQlzcGluX2xvY2soJmd0dC0+Z3VwdGFz a2xvY2spOwo+PiAtCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZndHQtPmd1cHRhc2tzLCBs aXN0KSB7Cj4+IC0JCWlmIChlbnRyeS0+dGFzayA9PSBjdXJyZW50KSB7Cj4+IC0JCQlzcGluX3Vu bG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7Cj4+IC0JCQlyZXR1cm4gZmFsc2U7Cj4+IC0JCX0KPj4g LQl9Cj4+IC0Jc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOwo+PiAtCj4+IC0JYXRvbWlj X2luYygmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucyk7Cj4+IC0KPj4gICAJcmV0dXJuIHRydWU7Cj4+ ICAgfQo+PiAgIAo+PiAgIC8qKgo+PiAtICogYW1kZ3B1X3R0bV90dF91c2VycHRyX2ludmFsaWRh dGVkIC0gSGFzIHRoZSB0dG1fdHQgb2JqZWN0IGJlZW4gaW52YWxpZGF0ZWQ/Cj4+ICsgKiBhbWRn cHVfdHRtX3R0X2lzX3VzZXJwdHIgLSBIYXZlIHRoZSBwYWdlcyBiYWNraW5nIGJ5IHVzZXJwdHI/ Cj4+ICAgICovCj4+IC1ib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZChzdHJ1 Y3QgdHRtX3R0ICp0dG0sCj4+IC0JCQkJICAgICAgIGludCAqbGFzdF9pbnZhbGlkYXRlZCkKPj4g LXsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07Cj4+IC0JaW50 IHByZXZfaW52YWxpZGF0ZWQgPSAqbGFzdF9pbnZhbGlkYXRlZDsKPj4gLQo+PiAtCSpsYXN0X2lu dmFsaWRhdGVkID0gYXRvbWljX3JlYWQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpOwo+PiAtCXJl dHVybiBwcmV2X2ludmFsaWRhdGVkICE9ICpsYXN0X2ludmFsaWRhdGVkOwo+PiAtfQo+PiAtCj4+ IC0vKioKPj4gLSAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyAtIEhhdmUgdGhl IHBhZ2VzIGJhY2tpbmcgdGhpcyB0dG1fdHQgb2JqZWN0Cj4+IC0gKiBiZWVuIGludmFsaWRhdGVk IHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhleSd2ZSBiZWVuIHNldD8KPj4gLSAqLwo+PiAtYm9vbCBh bWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKQo+PiAr Ym9vbCBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKQo+PiAgIHsK Pj4gICAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwo+PiAgIAo+PiAg IAlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikKPj4gICAJCXJldHVybiBmYWxzZTsK Pj4gICAKPj4gLQlyZXR1cm4gYXRvbWljX3JlYWQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpICE9 IGd0dC0+bGFzdF9zZXRfcGFnZXM7Cj4+ICsJcmV0dXJuIHRydWU7Cj4+ICAgfQo+PiAgIAo+PiAg IC8qKgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0 bS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCj4+IGluZGV4IGI1 YjJkMTAxZjdkYi4uYzVhMWU3OGEwOWIxIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfdHRtLmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3R0bS5oCj4+IEBAIC0xMDIsNyArMTAyLDcgQEAgaW50IGFtZGdwdV90dG1fYWxs b2NfZ2FydChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsKPj4gICBpbnQgYW1kZ3B1X3R0 bV9yZWNvdmVyX2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8pOwo+PiAgIAo+PiAg IGludCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3Ry dWN0IHBhZ2UgKipwYWdlcyk7Cj4+IC12b2lkIGFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMo c3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKPj4gK2Jvb2wgYW1kZ3B1 X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKHN0cnVjdCB0dG1fdHQgKnR0bSk7Cj4+ICAgdm9p ZCBhbWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pOwo+PiAg IGludCBhbWRncHVfdHRtX3R0X3NldF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdWludDY0 X3QgYWRkciwKPj4gICAJCQkJICAgICB1aW50MzJfdCBmbGFncyk7Cj4+IEBAIC0xMTIsNyArMTEy LDcgQEAgYm9vbCBhbWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0 bSwgdW5zaWduZWQgbG9uZyBzdGFydCwKPj4gICAJCQkJICB1bnNpZ25lZCBsb25nIGVuZCk7Cj4+ ICAgYm9vbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQoc3RydWN0IHR0bV90dCAq dHRtLAo+PiAgIAkJCQkgICAgICAgaW50ICpsYXN0X2ludmFsaWRhdGVkKTsKPj4gLWJvb2wgYW1k Z3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSk7Cj4+ICti b29sIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pOwo+PiAgIGJv b2wgYW1kZ3B1X3R0bV90dF9pc19yZWFkb25seShzdHJ1Y3QgdHRtX3R0ICp0dG0pOwo+PiAgIHVp bnQ2NF90IGFtZGdwdV90dG1fdHRfcGRlX2ZsYWdzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0 IHR0bV9tZW1fcmVnICptZW0pOwo+PiAgIHVpbnQ2NF90IGFtZGdwdV90dG1fdHRfcHRlX2ZsYWdz KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgdHRtX3R0ICp0dG0sCj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4+IGluZGV4IGYwNTllYzMxNGYyYi4uYWI4 ZmE4NGIyN2E2IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfdm0uYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+ PiBAQCAtNjE5LDcgKzYxOSw2IEBAIHZvaWQgYW1kZ3B1X3ZtX2dldF9wZF9ibyhzdHJ1Y3QgYW1k Z3B1X3ZtICp2bSwKPj4gICAJZW50cnktPnR2LmJvID0gJnZtLT5yb290LmJhc2UuYm8tPnRibzsK Pj4gICAJLyogT25lIGZvciB0aGUgVk0gdXBkYXRlcywgb25lIGZvciBUVE0gYW5kIG9uZSBmb3Ig dGhlIENTIGpvYiAqLwo+PiAgIAllbnRyeS0+dHYubnVtX3NoYXJlZCA9IDM7Cj4+IC0JZW50cnkt PnVzZXJfcGFnZXMgPSBOVUxMOwo+PiAgIAlsaXN0X2FkZCgmZW50cnktPnR2LmhlYWQsIHZhbGlk YXRlZCk7Cj4+ICAgfQo+PiAgIAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QKPiBhbWQtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vYW1kLWdmeAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==