From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 2/2] drm/amdgpu: replace get_user_pages with HMM address mirror helpers Date: Wed, 17 Oct 2018 10:13:41 +0200 Message-ID: <8d7ffe4d-afe0-a3ea-1cd9-69f0bcae25a0@gmail.com> References: <1539744965-9103-1-git-send-email-Philip.Yang@amd.com> <1539744965-9103-2-git-send-email-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: <1539744965-9103-2-git-send-email-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" QW0gMTcuMTAuMTggdW0gMDQ6NTYgc2NocmllYiBZYW5nLCBQaGlsaXA6Cj4gVXNlIEhNTSBoZWxw ZXIgZnVuY3Rpb24gaG1tX3ZtYV9mYXVsdCgpIHRvIGdldCBwaHlzaWNhbCBwYWdlcyBiYWNraW5n Cj4gdXNlcnB0ciBhbmQgc3RhcnQgQ1BVIHBhZ2UgdGFibGUgdXBkYXRlIHRyYWNrIG9mIHRob3Nl IHBhZ2VzLiBUaGVuIHVzZQo+IGhtbV92bWFfcmFuZ2VfZG9uZSgpIHRvIGNoZWNrIGlmIHRob3Nl IHBhZ2VzIGFyZSB1cGRhdGVkIGJlZm9yZQo+IGFtZGdwdV9jc19zdWJtaXQgZm9yIGdmeCBvciBi ZWZvcmUgdXNlciBxdWV1ZXMgYXJlIHJlc3VtZWQgZm9yIGtmZC4KPgo+IElmIHVzZXJwdHIgcGFn ZXMgYXJlIHVwZGF0ZWQsIGZvciBnZngsIGFtZGdwdV9jc19pb2N0bCB3aWxsIHJlc3RhcnQKPiBm cm9tIHNjcmF0Y2gsIGZvciBrZmQsIHJlc3RvcmUgd29ya2VyIGlzIHJlc2NoZWR1bGVkIHRvIHJl dHJ5Lgo+Cj4gVG8gYXZvaWQgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5LCB0aGUgbG9ja2luZyBv cmRlciBpczoKPiBtbWFwX3NlbSAtPiBhbWRncHVfbW5fbG9jayhwLT5tbikgLT4gYm86OnJlc2Vy dmUKPiBtbWFwX3NlbSAtPiBibzo6cmVzZXJ2ZQoKSSdtIG5vdCBzdXJlIHRoYXQgdGhpcyB3aWxs IHdvcmssIHdlIHVzZWQgdG8gaGF2ZSBzb21lIGRlcGVuZGVuY2llcyBvbiAKYm86OnJlc2VydmUg LT4gbW1hcF9zZW0uCgpTZWUgdGhlIGZvbGxvd2luZyBwYXRjaCBhcyB3ZWxsOgoKY29tbWl0IDJm NTY4ZGJkNmI5NDRjMmU4YzBjNTRiNTNjMjIxMWMyMzk5NWU2YTQKQXV0aG9yOiBDaHJpc3RpYW4g S8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+CkRhdGU6wqDCoCBUdWUgRmViIDIzIDEy OjM2OjU5IDIwMTYgKzAxMDAKCiDCoMKgwqAgZHJtL2FtZGdwdTogbW92ZSBnZXRfdXNlcl9wYWdl cyBvdXQgb2YgYW1kZ3B1X3R0bV90dF9waW5fdXNlcnB0ciB2NgoKIMKgwqDCoCBUaGF0IGF2b2lk cyBsb2NrIGludmVyc2lvbiBiZXR3ZWVuIHRoZSBCTyByZXNlcnZhdGlvbiBsb2NrCiDCoMKgwqAg YW5kIHRoZSBhbm9uX3ZtYSBsb2NrLgoKQSBmZXcgbW9yZSBjb21tZW50cyBiZWxvdy4KCj4KPiBI TU0gc2ltcGxpZnkgdGhlIENQVSBwYWdlIHRhYmxlIGNvbmN1cnJlbnRseSB1cGRhdGUgY2hlY2ss IHNvIHJlbW92ZQo+IGd1cHRhc2tsb2NrLCBtbXVfaW52YWxpZGF0aW9ucywgbGFzdF9zZXRfcGFn ZXMgZmllbGRzIGZyb20KPiBhbWRncHVfdHRtX3R0IHN0cnVjdC4KPgo+IEhNTSBkb2Vzbm90IHBp biB0aGUgcGFnZSAoaW5jcmVhc2UgcGFnZSByZWYgY291bnQpLCBzbyByZW1vdmUgcmVsYXRlZAo+ IG9wZXJhdGlvbnMgbGlrZSByZWxlYXNlX3BhZ2VzKCksIHB1dF9wYWdlKCksIG1hcmtfcGFnZV9k aXJ0eSgpLgo+Cj4gQ2hhbmdlLUlkOiBJZmZkNWY4NTVjYzljZTQwMmNkZmNhMTY3ZjY4ZjgzZmUz OWFjNTZmOQo+IFNpZ25lZC1vZmYtYnk6IFBoaWxpcCBZYW5nIDxQaGlsaXAuWWFuZ0BhbWQuY29t Pgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2 bS5jIHwgMTAxICsrKysrKysrKystLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9ib19saXN0LmMgICAgICB8ICAgMiAtCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfYm9fbGlzdC5oICAgICAgfCAgIDMgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9jcy5jICAgICAgICAgICB8IDE3MSArKysrKysrKystLS0tLS0tLS0tLS0t LQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jICAgICAgICAgIHwg IDE0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYyAgICAgICAg ICAgfCAgMzQgKysrKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5o ICAgICAgICAgICB8ICAgNyArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3R0bS5jICAgICAgICAgIHwgMTY0ICsrKysrKysrKy0tLS0tLS0tLS0tLS0KPiAgIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaCAgICAgICAgICB8ICAgMyArLQo+ICAgZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMgICAgICAgICAgIHwgICAxIC0KPiAg IDEwIGZpbGVzIGNoYW5nZWQsIDI1MiBpbnNlcnRpb25zKCspLCAyNDggZGVsZXRpb25zKC0pCj4K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9n cHV2bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5j Cj4gaW5kZXggZGYwYTA1OS4uM2ZkMDM0MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMKPiBAQCAtNjE1LDggKzYxNSw3IEBAIHN0 YXRpYyBpbnQgaW5pdF91c2VyX3BhZ2VzKHN0cnVjdCBrZ2RfbWVtICptZW0sIHN0cnVjdCBtbV9z dHJ1Y3QgKm1tLAo+ICAgCWFtZGdwdV9ib191bnJlc2VydmUoYm8pOwo+ICAgCj4gICByZWxlYXNl X291dDoKPiAtCWlmIChyZXQpCj4gLQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsIGJv LT50Ym8udHRtLT5udW1fcGFnZXMpOwo+ICsJYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19k b25lKGJvLT50Ym8udHRtKTsKPiAgIGZyZWVfb3V0Ogo+ICAgCWt2ZnJlZShtZW0tPnVzZXJfcGFn ZXMpOwo+ICAgCW1lbS0+dXNlcl9wYWdlcyA9IE5VTEw7Cj4gQEAgLTY3OCw3ICs2NzcsNiBAQCBz dGF0aWMgaW50IHJlc2VydmVfYm9fYW5kX3ZtKHN0cnVjdCBrZ2RfbWVtICptZW0sCj4gICAJY3R4 LT5rZmRfYm8ucHJpb3JpdHkgPSAwOwo+ICAgCWN0eC0+a2ZkX2JvLnR2LmJvID0gJmJvLT50Ym87 Cj4gICAJY3R4LT5rZmRfYm8udHYuc2hhcmVkID0gdHJ1ZTsKPiAtCWN0eC0+a2ZkX2JvLnVzZXJf cGFnZXMgPSBOVUxMOwo+ICAgCWxpc3RfYWRkKCZjdHgtPmtmZF9iby50di5oZWFkLCAmY3R4LT5s aXN0KTsKPiAgIAo+ICAgCWFtZGdwdV92bV9nZXRfcGRfYm8odm0sICZjdHgtPmxpc3QsICZjdHgt PnZtX3BkWzBdKTsKPiBAQCAtNzQyLDcgKzc0MCw2IEBAIHN0YXRpYyBpbnQgcmVzZXJ2ZV9ib19h bmRfY29uZF92bXMoc3RydWN0IGtnZF9tZW0gKm1lbSwKPiAgIAljdHgtPmtmZF9iby5wcmlvcml0 eSA9IDA7Cj4gICAJY3R4LT5rZmRfYm8udHYuYm8gPSAmYm8tPnRibzsKPiAgIAljdHgtPmtmZF9i by50di5zaGFyZWQgPSB0cnVlOwo+IC0JY3R4LT5rZmRfYm8udXNlcl9wYWdlcyA9IE5VTEw7Cj4g ICAJbGlzdF9hZGQoJmN0eC0+a2ZkX2JvLnR2LmhlYWQsICZjdHgtPmxpc3QpOwo+ICAgCj4gICAJ aSA9IDA7Cj4gQEAgLTEzMTEsOSArMTMwOCw2IEBAIGludCBhbWRncHVfYW1ka2ZkX2dwdXZtX2Zy ZWVfbWVtb3J5X29mX2dwdSgKPiAgIAkvKiBGcmVlIHVzZXIgcGFnZXMgaWYgbmVjZXNzYXJ5ICov Cj4gICAJaWYgKG1lbS0+dXNlcl9wYWdlcykgewo+ICAgCQlwcl9kZWJ1ZygiJXM6IEZyZWVpbmcg dXNlcl9wYWdlcyBhcnJheVxuIiwgX19mdW5jX18pOwo+IC0JCWlmIChtZW0tPnVzZXJfcGFnZXNb MF0pCj4gLQkJCXJlbGVhc2VfcGFnZXMobWVtLT51c2VyX3BhZ2VzLAo+IC0JCQkJCW1lbS0+Ym8t PnRiby50dG0tPm51bV9wYWdlcyk7Cj4gICAJCWt2ZnJlZShtZW0tPnVzZXJfcGFnZXMpOwo+ICAg CX0KPiAgIAo+IEBAIC0xNzM5LDggKzE3MzMsNiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9pbnZhbGlk X3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbywKPiAg IAkJCQkgICAgICAgX19mdW5jX18pOwo+ICAgCQkJCXJldHVybiAtRU5PTUVNOwo+ICAgCQkJfQo+ IC0JCX0gZWxzZSBpZiAobWVtLT51c2VyX3BhZ2VzWzBdKSB7Cj4gLQkJCXJlbGVhc2VfcGFnZXMo bWVtLT51c2VyX3BhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKPiAgIAkJfQo+ICAgCj4g ICAJCS8qIEdldCB1cGRhdGVkIHVzZXIgcGFnZXMgKi8KPiBAQCAtMTc1NiwxMiArMTc0OCw2IEBA IHN0YXRpYyBpbnQgdXBkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nl c3NfaW5mbyAqcHJvY2Vzc19pbmZvLAo+ICAgCQkJICogc3RhbGxlZCB1c2VyIG1vZGUgcXVldWVz Lgo+ICAgCQkJICovCj4gICAJCX0KPiAtCj4gLQkJLyogTWFyayB0aGUgQk8gYXMgdmFsaWQgdW5s ZXNzIGl0IHdhcyBpbnZhbGlkYXRlZAo+IC0JCSAqIGFnYWluIGNvbmN1cnJlbnRseQo+IC0JCSAq Lwo+IC0JCWlmIChhdG9taWNfY21weGNoZygmbWVtLT5pbnZhbGlkLCBpbnZhbGlkLCAwKSAhPSBp bnZhbGlkKQo+IC0JCQlyZXR1cm4gLUVBR0FJTjsKPiAgIAl9Cj4gICAKPiAgIAlyZXR1cm4gMDsK PiBAQCAtMTg1NCwxNCArMTg0MCwxMCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2ludmFsaWRfdXNl cl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvKQo+ICAgCQl9 Cj4gICAKPiAgIAkJLyogVmFsaWRhdGUgc3VjY2VlZGVkLCBub3cgdGhlIEJPIG93bnMgdGhlIHBh Z2VzLCBmcmVlCj4gLQkJICogb3VyIGNvcHkgb2YgdGhlIHBvaW50ZXIgYXJyYXkuIFB1dCB0aGlz IEJPIGJhY2sgb24KPiAtCQkgKiB0aGUgdXNlcnB0cl92YWxpZF9saXN0LiBJZiB3ZSBuZWVkIHRv IHJldmFsaWRhdGUKPiAtCQkgKiBpdCwgd2UgbmVlZCB0byBzdGFydCBmcm9tIHNjcmF0Y2guCj4g KwkJICogb3VyIGNvcHkgb2YgdGhlIHBvaW50ZXIgYXJyYXkuCj4gICAJCSAqLwo+ICAgCQlrdmZy ZWUobWVtLT51c2VyX3BhZ2VzKTsKPiAgIAkJbWVtLT51c2VyX3BhZ2VzID0gTlVMTDsKPiAtCQls aXN0X21vdmVfdGFpbCgmbWVtLT52YWxpZGF0ZV9saXN0LmhlYWQsCj4gLQkJCSAgICAgICAmcHJv Y2Vzc19pbmZvLT51c2VycHRyX3ZhbGlkX2xpc3QpOwoKSSdtIG5vdCBhbiBleHBlcnQgb24gdGhl IEtGRCBzdHVmZiwgYnV0IHRoYXQgZG9lc24ndCBsb29rcyBjb3JyZWN0IHRvIG1lLgoKPiAgIAo+ ICAgCQkvKiBVcGRhdGUgbWFwcGluZy4gSWYgdGhlIEJPIHdhcyBub3QgdmFsaWRhdGVkCj4gICAJ CSAqIChiZWNhdXNlIHdlIGNvdWxkbid0IGdldCB1c2VyIHBhZ2VzKSwgdGhpcyB3aWxsCj4gQEAg LTE5MDIsNiArMTg4NCw3MCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdl cyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvKQo+ICAgCXJldHVybiBy ZXQ7Cj4gICB9Cj4gICAKPiArLyogdXNlcl9wYWdlc19pbnZhbGlkYXRlZCAtIGlmIENQVSBwYWdl IHRhYmxlIGlzIHVwZGF0ZWQgYWZ0ZXIgZ2V0dGluZyB1c2VyCj4gKyAqIHBhZ2VzCj4gKyAqCj4g KyAqIEhNTSBtaXJyb3IgY2FsbGJhY2sgbG9jayBhbW4gaXMgaG9sZCB0byBwcmV2ZW50IHRoZSBj b25jdXJyZW50IENQVQo+ICsgKiBwYWdlIHRhYmxlIHVwZGF0ZSB3aGlsZSByZXN1bWluZyB1c2Vy IHF1ZXVlcy4KPiArICoKPiArICogUmV0dXJuczogdHJ1ZSBpZiBDUFUgcGFnZSB0YWJsZSBpcyB1 cGRhdGVkLCBmYWxzZSBvdGhlcndpc2UKPiArICovCj4gK3N0YXRpYyBpbnQgdXNlcl9wYWdlc19p bnZhbGlkYXRlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiArCQkJc3RydWN0IGFtZGtmZF9wcm9j ZXNzX2luZm8gKnByb2Nlc3NfaW5mbywKPiArCQkJc3RydWN0IGFtZGdwdV9tbiAqKmFtbikKPiAr ewo+ICsJc3RydWN0IGtnZF9tZW0gKm1lbSwgKnRtcF9tZW07Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2Jv ICpibzsKPiArCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2Owo+ICsJaW50IGludmFsaWQsIHIg PSAwOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtZW0sIHRtcF9tZW0sCj4gKwkJ CQkgJnByb2Nlc3NfaW5mby0+dXNlcnB0cl9pbnZhbF9saXN0LAo+ICsJCQkJIHZhbGlkYXRlX2xp c3QuaGVhZCkgewo+ICsKPiArCQlpbnZhbGlkID0gYXRvbWljX3JlYWQoJm1lbS0+aW52YWxpZCk7 Cj4gKwkJaWYgKCFpbnZhbGlkKQo+ICsJCQkvKiBCTyBoYXNuJ3QgYmVlbiBpbnZhbGlkYXRlZCBz aW5jZSB0aGUgbGFzdAo+ICsJCQkgKiByZXZhbGlkYXRpb24gYXR0ZW1wdC4gS2VlcCBpdHMgQk8g bGlzdC4KPiArCQkJICovCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlibyA9IG1lbS0+Ym87Cj4g Kwo+ICsJCS8qIEdldCBITU0gbWlycm9yIGNhbGxiYWNrIGxvY2sgKi8KPiArCQlpZiAoISphbW4p IHsKPiArCQkJYWRldiA9IGFtZGdwdV90dG1fYWRldihiby0+dGJvLmJkZXYpOwo+ICsJCQkqYW1u ID0gYW1kZ3B1X21uX2dldChtbSwgYWRldiwgQU1ER1BVX01OX1RZUEVfSFNBKTsKPiArCQkJaWYg KElTX0VSUigqYW1uKSkgewo+ICsJCQkJciA9IHRydWU7Cj4gKwkJCQkqYW1uID0gTlVMTDsKPiAr CQkJCWdvdG8gb3V0Owo+ICsJCQl9Cj4gKwo+ICsJCQlhbWRncHVfbW5fbG9jaygqYW1uKTsKPiAr CQl9Cj4gKwo+ICsJCXIgfD0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKGJvLT50 Ym8udHRtKTsKPiArCj4gKwkJLyogUHV0IHRoaXMgQk8gYmFjayBvbiB0aGUgdXNlcnB0cl92YWxp ZF9saXN0LiBJZiB3ZSBuZWVkIHRvCj4gKwkJICogcmV2YWxpZGF0ZSBpdCwgd2UgbmVlZCB0byBz dGFydCBmcm9tIHNjcmF0Y2guCj4gKwkJICovCj4gKwkJbGlzdF9tb3ZlX3RhaWwoJm1lbS0+dmFs aWRhdGVfbGlzdC5oZWFkLAo+ICsJCQkgICAgICAgJnByb2Nlc3NfaW5mby0+dXNlcnB0cl92YWxp ZF9saXN0KTsKPiArCj4gKwkJLyogTWFyayB0aGUgQk8gYXMgdmFsaWQgdW5sZXNzIGl0IHdhcyBp bnZhbGlkYXRlZAo+ICsJCSAqIGFnYWluIGNvbmN1cnJlbnRseQo+ICsJCSAqLwo+ICsJCWlmIChh dG9taWNfY21weGNoZygmbWVtLT5pbnZhbGlkLCBpbnZhbGlkLCAwKSAhPSBpbnZhbGlkKSB7Cj4g KwkJCXIgPSB0cnVlOwo+ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4g KwlyZXR1cm4gcjsKPiArfQo+ICsKPiAgIC8qIFdvcmtlciBjYWxsYmFjayB0byByZXN0b3JlIGV2 aWN0ZWQgdXNlcnB0ciBCT3MKPiAgICAqCj4gICAgKiBUcmllcyB0byB1cGRhdGUgYW5kIHZhbGlk YXRlIGFsbCB1c2VycHRyIEJPcy4gSWYgc3VjY2Vzc2Z1bCBhbmQgbm8KPiBAQCAtMTkxNyw2ICsx OTYzLDcgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X2FtZGtmZF9yZXN0b3JlX3VzZXJwdHJfd29ya2Vy KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnVzZXJ0 YXNrOwo+ICAgCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwo+ICAgCWludCBldmljdGVkX2JvczsKPiAr CXN0cnVjdCBhbWRncHVfbW4gKmFtbiA9IE5VTEw7Cj4gICAKPiAgIAlldmljdGVkX2JvcyA9IGF0 b21pY19yZWFkKCZwcm9jZXNzX2luZm8tPmV2aWN0ZWRfYm9zKTsKPiAgIAlpZiAoIWV2aWN0ZWRf Ym9zKQo+IEBAIC0xOTU1LDEzICsyMDAyLDI3IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9hbWRrZmRf cmVzdG9yZV91c2VycHRyX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gICAJaWYg KGF0b21pY19jbXB4Y2hnKCZwcm9jZXNzX2luZm8tPmV2aWN0ZWRfYm9zLCBldmljdGVkX2Jvcywg MCkgIT0KPiAgIAkgICAgZXZpY3RlZF9ib3MpCj4gICAJCWdvdG8gdW5sb2NrX291dDsKPiArCj4g KwkvKiBJZiBDUFUgcGFnZSB0YWJsZSBpcyB1cGRhdGVkIGFnYWluIGFmdGVyIGdldHRpbmcgdXNl ciBwYWdlcywKPiArCSAqIHNjaGVkdWxlIHRvIHJlc3RhcnQgdGhlIHJlc3RvcmUgcHJvY2VzcyBh Z2Fpbi4KPiArCSAqCj4gKwkgKiBhbW4gaXMgYWxzbyBsb2NrZWQgdG8gcHJldmVudCBDUFUgcGFn ZSB0YWJsZSB1cGRhdGUgd2hpbGUgcmVzdW1pbmcKPiArCSAqIHVzZXIgcXVldWVzLiBhbW4gaXMg dW5sb2NrZWQgYWZ0ZXIgdXNlciBxdWV1ZXMgYXJlIHJlc3VtZWQuCj4gKwkgKi8KPiArCWlmICh1 c2VyX3BhZ2VzX2ludmFsaWRhdGVkKG1tLCBwcm9jZXNzX2luZm8sICZhbW4pKQo+ICsJCWdvdG8g dW5sb2NrX21uX291dDsKPiArCj4gICAJZXZpY3RlZF9ib3MgPSAwOwo+ICsKPiAgIAlpZiAoa2dk MmtmZC0+cmVzdW1lX21tKG1tKSkgewo+ICAgCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gcmVzdW1l IEtGRFxuIiwgX19mdW5jX18pOwo+ICAgCQkvKiBObyByZWNvdmVyeSBmcm9tIHRoaXMgZmFpbHVy ZS4gUHJvYmFibHkgdGhlIENQIGlzCj4gICAJCSAqIGhhbmdpbmcuIE5vIHBvaW50IHRyeWluZyBh Z2Fpbi4KPiAgIAkJICovCj4gICAJfQo+ICsKPiArdW5sb2NrX21uX291dDoKPiArCWFtZGdwdV9t bl91bmxvY2soYW1uKTsKPiAgIHVubG9ja19vdXQ6Cj4gICAJbXV0ZXhfdW5sb2NrKCZwcm9jZXNz X2luZm8tPmxvY2spOwo+ICAgCW1tcHV0KG1tKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9ib19saXN0LmMKPiBpbmRleCAxNGQyOTgyLi4yNzE2YzI0IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jCj4gQEAgLTIwMSw4ICsy MDEsNiBAQCB2b2lkIGFtZGdwdV9ib19saXN0X2dldF9saXN0KHN0cnVjdCBhbWRncHVfYm9fbGlz dCAqbGlzdCwKPiAgIAo+ICAgCQlpZiAoIWJvLT5wYXJlbnQpCj4gICAJCQlsaXN0X2FkZF90YWls KCZlLT50di5oZWFkLCAmYnVja2V0W3ByaW9yaXR5XSk7Cj4gLQo+IC0JCWUtPnVzZXJfcGFnZXMg PSBOVUxMOwo+ICAgCX0KPiAgIAo+ICAgCS8qIENvbm5lY3QgdGhlIHNvcnRlZCBidWNrZXRzIGlu IHRoZSBvdXRwdXQgbGlzdC4gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2JvX2xpc3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9ib19saXN0LmgKPiBpbmRleCA3YzVmNWQxLi40YmVhYjJkIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oCj4gQEAgLTM1LDggKzM1LDcgQEAgc3Ry dWN0IGFtZGdwdV9ib19saXN0X2VudHJ5IHsKPiAgIAlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZl cgl0djsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvX3ZhCQkqYm9fdmE7Cj4gICAJdWludDMyX3QJCQlw cmlvcml0eTsKPiAtCXN0cnVjdCBwYWdlCQkJKip1c2VyX3BhZ2VzOwo+IC0JaW50CQkJCXVzZXJf aW52YWxpZGF0ZWQ7Cj4gKwlib29sCQkJCXVzZXJfaW52YWxpZGF0ZWQ7Cj4gICB9Owo+ICAgCj4g ICBzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3Qgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9jcy5jCj4gaW5kZXggODgzNjE4Ni4uYzQ2YWYxOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9jcy5jCj4gQEAgLTUxLDcgKzUxLDYgQEAgc3RhdGljIGludCBhbWRncHVf Y3NfdXNlcl9mZW5jZV9jaHVuayhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKPiAgIAlwLT51 Zl9lbnRyeS5wcmlvcml0eSA9IDA7Cj4gICAJcC0+dWZfZW50cnkudHYuYm8gPSAmYm8tPnRibzsK PiAgIAlwLT51Zl9lbnRyeS50di5zaGFyZWQgPSB0cnVlOwo+IC0JcC0+dWZfZW50cnkudXNlcl9w YWdlcyA9IE5VTEw7Cj4gICAKPiAgIAlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoZ29iaik7 Cj4gICAKPiBAQCAtNTMxLDI0ICs1MzAsMTkgQEAgc3RhdGljIGludCBhbWRncHVfY3NfbGlzdF92 YWxpZGF0ZShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKPiAgIAo+ICAgCWxpc3RfZm9yX2Vh Y2hfZW50cnkobG9iaiwgdmFsaWRhdGVkLCB0di5oZWFkKSB7Cj4gICAJCXN0cnVjdCBhbWRncHVf Ym8gKmJvID0gdHRtX3RvX2FtZGdwdV9ibyhsb2JqLT50di5ibyk7Cj4gLQkJYm9vbCBiaW5kaW5n X3VzZXJwdHIgPSBmYWxzZTsKPiAgIAkJc3RydWN0IG1tX3N0cnVjdCAqdXNlcm1tOwo+ICAgCj4g ICAJCXVzZXJtbSA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJtbShiby0+dGJvLnR0bSk7Cj4gICAJ CWlmICh1c2VybW0gJiYgdXNlcm1tICE9IGN1cnJlbnQtPm1tKQo+ICAgCQkJcmV0dXJuIC1FUEVS TTsKPiAgIAo+IC0JCS8qIENoZWNrIGlmIHdlIGhhdmUgdXNlciBwYWdlcyBhbmQgbm9ib2R5IGJv dW5kIHRoZSBCTyBhbHJlYWR5ICovCj4gLQkJaWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVk c19wYWdlcyhiby0+dGJvLnR0bSkgJiYKPiAtCQkgICAgbG9iai0+dXNlcl9wYWdlcykgewo+ICsJ CWlmIChhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoYm8tPnRiby50dG0pICYmCj4gKwkJICAgIGxv YmotPnVzZXJfaW52YWxpZGF0ZWQpIHsKPiAgIAkJCWFtZGdwdV9ib19wbGFjZW1lbnRfZnJvbV9k b21haW4oYm8sCj4gICAJCQkJCQkJQU1ER1BVX0dFTV9ET01BSU5fQ1BVKTsKPiAgIAkJCXIgPSB0 dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsKPiAgIAkJCWlm IChyKQo+ICAgCQkJCXJldHVybiByOwo+IC0JCQlhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2Vz KGJvLT50Ym8udHRtLAo+IC0JCQkJCQkgICAgIGxvYmotPnVzZXJfcGFnZXMpOwo+IC0JCQliaW5k aW5nX3VzZXJwdHIgPSB0cnVlOwo+ICAgCQl9Cj4gICAKPiAgIAkJaWYgKHAtPmV2aWN0YWJsZSA9 PSBsb2JqKQo+IEBAIC01NTcsMTEgKzU1MSw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX2xpc3Rf dmFsaWRhdGUoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4gICAJCXIgPSBhbWRncHVfY3Nf dmFsaWRhdGUocCwgYm8pOwo+ICAgCQlpZiAocikKPiAgIAkJCXJldHVybiByOwo+IC0KPiAtCQlp ZiAoYmluZGluZ191c2VycHRyKSB7Cj4gLQkJCWt2ZnJlZShsb2JqLT51c2VyX3BhZ2VzKTsKPiAt CQkJbG9iai0+dXNlcl9wYWdlcyA9IE5VTEw7Cj4gLQkJfQo+ICAgCX0KPiAgIAlyZXR1cm4gMDsK PiAgIH0KPiBAQCAtNTc2LDcgKzU2NSw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9i b3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4gICAJc3RydWN0IGFtZGdwdV9ibyAqZ2Rz Owo+ICAgCXN0cnVjdCBhbWRncHVfYm8gKmd3czsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvICpvYTsK PiAtCXVuc2lnbmVkIHRyaWVzID0gMTA7Cj4gICAJaW50IHI7Cj4gICAKPiAgIAlJTklUX0xJU1Rf SEVBRCgmcC0+dmFsaWRhdGVkKTsKPiBAQCAtNTg1LDcgKzU3Myw2IEBAIHN0YXRpYyBpbnQgYW1k Z3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4gICAJaWYgKGNz LT5pbi5ib19saXN0X2hhbmRsZSkgewo+ICAgCQlpZiAocC0+Ym9fbGlzdCkKPiAgIAkJCXJldHVy biAtRUlOVkFMOwo+IC0KPiAgIAkJciA9IGFtZGdwdV9ib19saXN0X2dldChmcHJpdiwgY3MtPmlu LmJvX2xpc3RfaGFuZGxlLAo+ICAgCQkJCSAgICAgICAmcC0+Ym9fbGlzdCk7Cj4gICAJCWlmIChy KQo+IEBAIC01OTksOCArNTg2LDEwIEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Mo c3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4gICAJfQo+ICAgCj4gICAJYW1kZ3B1X2JvX2xp c3RfZ2V0X2xpc3QocC0+Ym9fbGlzdCwgJnAtPnZhbGlkYXRlZCk7Cj4gLQlpZiAocC0+Ym9fbGlz dC0+Zmlyc3RfdXNlcnB0ciAhPSBwLT5ib19saXN0LT5udW1fZW50cmllcykKPiAtCQlwLT5tbiA9 IGFtZGdwdV9tbl9nZXQocC0+YWRldiwgQU1ER1BVX01OX1RZUEVfR0ZYKTsKPiArCWlmIChwLT5i b19saXN0LT5maXJzdF91c2VycHRyICE9IHAtPmJvX2xpc3QtPm51bV9lbnRyaWVzKSB7Cj4gKwkJ cC0+bW4gPSBhbWRncHVfbW5fZ2V0KGN1cnJlbnQtPm1tLCBwLT5hZGV2LAo+ICsJCQkJCUFNREdQ VV9NTl9UWVBFX0dGWCk7Cj4gKwl9CgpQbGVhc2UgZG9uJ3QgYWRkIHt9IGhlcmUuCgo+ICAgCj4g ICAJSU5JVF9MSVNUX0hFQUQoJmR1cGxpY2F0ZXMpOwo+ICAgCWFtZGdwdV92bV9nZXRfcGRfYm8o JmZwcml2LT52bSwgJnAtPnZhbGlkYXRlZCwgJnAtPnZtX3BkKTsKPiBAQCAtNjA4LDc5ICs1OTcs NDEgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3Bh cnNlciAqcCwKPiAgIAlpZiAocC0+dWZfZW50cnkudHYuYm8gJiYgIXR0bV90b19hbWRncHVfYm8o cC0+dWZfZW50cnkudHYuYm8pLT5wYXJlbnQpCj4gICAJCWxpc3RfYWRkKCZwLT51Zl9lbnRyeS50 di5oZWFkLCAmcC0+dmFsaWRhdGVkKTsKPiAgIAo+IC0Jd2hpbGUgKDEpIHsKPiAtCQlzdHJ1Y3Qg bGlzdF9oZWFkIG5lZWRfcGFnZXM7Cj4gLQo+IC0JCXIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJz KCZwLT50aWNrZXQsICZwLT52YWxpZGF0ZWQsIHRydWUsCj4gLQkJCQkJICAgJmR1cGxpY2F0ZXMp Owo+IC0JCWlmICh1bmxpa2VseShyICE9IDApKSB7Cj4gLQkJCWlmIChyICE9IC1FUkVTVEFSVFNZ UykKPiAtCQkJCURSTV9FUlJPUigidHRtX2V1X3Jlc2VydmVfYnVmZmVycyBmYWlsZWQuXG4iKTsK PiAtCQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOwo+IC0JCX0KPiAtCj4gLQkJSU5JVF9MSVNUX0hF QUQoJm5lZWRfcGFnZXMpOwo+IC0JCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50 cnkoZSwgcC0+Ym9fbGlzdCkgewo+IC0JCQlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IHR0bV90b19h bWRncHVfYm8oZS0+dHYuYm8pOwo+IC0KPiAtCQkJaWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9p bnZhbGlkYXRlZChiby0+dGJvLnR0bSwKPiAtCQkJCSAmZS0+dXNlcl9pbnZhbGlkYXRlZCkgJiYg ZS0+dXNlcl9wYWdlcykgewo+IC0KPiAtCQkJCS8qIFdlIGFjcXVpcmVkIGEgcGFnZSBhcnJheSwg YnV0IHNvbWVib2R5Cj4gLQkJCQkgKiBpbnZhbGlkYXRlZCBpdC4gRnJlZSBpdCBhbmQgdHJ5IGFn YWluCj4gLQkJCQkgKi8KPiAtCQkJCXJlbGVhc2VfcGFnZXMoZS0+dXNlcl9wYWdlcywKPiAtCQkJ CQkgICAgICBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKPiAtCQkJCWt2ZnJlZShlLT51c2VyX3Bh Z2VzKTsKPiAtCQkJCWUtPnVzZXJfcGFnZXMgPSBOVUxMOwo+IC0JCQl9Cj4gKwkvKiBHZXQgdXNl cnB0ciBiYWNraW5nIHBhZ2VzLiBJZiBwYWdlcyBhcmUgdXBkYXRlZCBhZnRlciByZWdpc3RlcmVk Cj4gKwkgKiBpbiBhbWRncHVfZ2VtX3VzZXJwdHJfaW9jdGwoKSwgYW1kZ3B1X2NzX2xpc3RfdmFs aWRhdGUoKSB3aWxsIGRvCj4gKwkgKiBhbWRncHVfdHRtX2JhY2tlbmRfYmluZCgpIHRvIGZsdXNo IGFuZCBpbnZhbGlkYXRlIG5ldyBwYWdlcwo+ICsJICovCj4gKwlhbWRncHVfYm9fbGlzdF9mb3Jf ZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xpc3QpIHsKPiArCQlzdHJ1Y3QgYW1kZ3B1X2Jv ICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYuYm8pOwo+ICsJCXN0cnVjdCBwYWdlICp1c2Vy X3BhZ2VzW2JvLT50Ym8udHRtLT5udW1fcGFnZXNdOwoKRHluYW1pYyBhbGxvY2F0aW9uIG9mIGFy cmF5cyBvbiB0aGUgc3RhY2sgaXMgaWxsZWdhbCBpbiB0aGUga2VybmVsLgoKPiArCQlpbnQgaTsK PiArCQlib29sIHVzZXJfaW52YWxpZGF0ZWQgPSBmYWxzZTsKPiAgIAo+IC0JCQlpZiAoYW1kZ3B1 X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKGJvLT50Ym8udHRtKSAmJgo+IC0JCQkgICAgIWUt PnVzZXJfcGFnZXMpIHsKPiAtCQkJCWxpc3RfZGVsKCZlLT50di5oZWFkKTsKPiAtCQkJCWxpc3Rf YWRkKCZlLT50di5oZWFkLCAmbmVlZF9wYWdlcyk7Cj4gKwkJciA9IGFtZGdwdV90dG1fdHRfZ2V0 X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sIHVzZXJfcGFnZXMpOwo+ICsJCWlmIChyKQo+ICsJCQly ZXR1cm4gcjsKPiAgIAo+IC0JCQkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7Cj4gKwkJZm9yIChp ID0gMDsgaSA8IGJvLT50Ym8udHRtLT5udW1fcGFnZXM7IGkrKykgewo+ICsJCQlpZiAoYm8tPnRi by50dG0tPnBhZ2VzW2ldICE9IHVzZXJfcGFnZXNbaV0pIHsKPiArCQkJCWJvLT50Ym8udHRtLT5w YWdlc1tpXSA9IHVzZXJfcGFnZXNbaV07Cj4gKwkJCQl1c2VyX2ludmFsaWRhdGVkID0gdHJ1ZTsK ClRoZSBCTyBpcyBub3QgcmVzZXJ2ZWQsIGlzbid0IGl0PyBTbyB0aGF0IGlzIG5vdCBwcm90ZWN0 ZWQgYnkgYW55IGxvY2tzPwoKPiAgIAkJCX0KPiAgIAkJfQo+ICsJCWUtPnVzZXJfaW52YWxpZGF0 ZWQgPSB1c2VyX2ludmFsaWRhdGVkOwo+ICsJfQo+ICAgCj4gLQkJaWYgKGxpc3RfZW1wdHkoJm5l ZWRfcGFnZXMpKQo+IC0JCQlicmVhazsKPiAtCj4gLQkJLyogVW5yZXNlcnZlIGV2ZXJ5dGhpbmcg YWdhaW4uICovCj4gLQkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnAtPnRpY2tldCwgJnAt PnZhbGlkYXRlZCk7Cj4gLQo+IC0JCS8qIFdlIHRyaWVkIHRvbyBtYW55IHRpbWVzLCBqdXN0IGFi b3J0ICovCj4gLQkJaWYgKCEtLXRyaWVzKSB7Cj4gLQkJCXIgPSAtRURFQURMSzsKPiAtCQkJRFJN X0VSUk9SKCJkZWFkbG9jayBpbiAlc1xuIiwgX19mdW5jX18pOwo+IC0JCQlnb3RvIGVycm9yX2Zy ZWVfcGFnZXM7Cj4gLQkJfQo+IC0KPiAtCQkvKiBGaWxsIHRoZSBwYWdlIGFycmF5cyBmb3IgYWxs IHVzZXJwdHJzLiAqLwo+IC0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJm5lZWRfcGFnZXMsIHR2 LmhlYWQpIHsKPiAtCQkJc3RydWN0IHR0bV90dCAqdHRtID0gZS0+dHYuYm8tPnR0bTsKPiAtCj4g LQkJCWUtPnVzZXJfcGFnZXMgPSBrdm1hbGxvY19hcnJheSh0dG0tPm51bV9wYWdlcywKPiAtCQkJ CQkJCSBzaXplb2Yoc3RydWN0IHBhZ2UqKSwKPiAtCQkJCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBf WkVSTyk7Cj4gLQkJCWlmICghZS0+dXNlcl9wYWdlcykgewo+IC0JCQkJciA9IC1FTk9NRU07Cj4g LQkJCQlEUk1fRVJST1IoImNhbGxvYyBmYWlsdXJlIGluICVzXG4iLCBfX2Z1bmNfXyk7Cj4gLQkJ CQlnb3RvIGVycm9yX2ZyZWVfcGFnZXM7Cj4gLQkJCX0KPiAtCj4gLQkJCXIgPSBhbWRncHVfdHRt X3R0X2dldF91c2VyX3BhZ2VzKHR0bSwgZS0+dXNlcl9wYWdlcyk7Cj4gLQkJCWlmIChyKSB7Cj4g LQkJCQlEUk1fRVJST1IoImFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMgZmFpbGVkLlxuIik7 Cj4gLQkJCQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7Cj4gLQkJCQllLT51c2VyX3BhZ2VzID0gTlVM TDsKPiAtCQkJCWdvdG8gZXJyb3JfZnJlZV9wYWdlczsKPiAtCQkJfQo+IC0JCX0KPiArCS8qIE5v IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGFsbG93ZWQgd2hpbGUgaG9sZGluZyB0aGUgbW4gbG9jay4K PiArCSAqIHAtPm1uIGlzIGhvbGQgdW50aWwgYW1kZ3B1X2NzX3N1Ym1pdCBpcyBmaW5pc2hlZCBh bmQgZmVuY2UgaXMgYWRkZWQKPiArCSAqIHRvIEJPcy4KPiArCSAqLwo+ICsJYW1kZ3B1X21uX2xv Y2socC0+bW4pOwoKVGhhdCB3b24ndCB3b3JrLiBXZSBhbGxvY2F0ZSB0b25zIG9mIG1lbW9yeSBh ZnRlciB0aGlzIHBvaW50IGR1cmluZyBCTyAKdmFsaWRhdGlvbi4KCkNocmlzdGlhbi4KCj4gICAK PiAtCQkvKiBBbmQgdHJ5IGFnYWluLiAqLwo+IC0JCWxpc3Rfc3BsaWNlKCZuZWVkX3BhZ2VzLCAm cC0+dmFsaWRhdGVkKTsKPiArCXIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZwLT50aWNrZXQs ICZwLT52YWxpZGF0ZWQsIHRydWUsCj4gKwkJCQkgICAmZHVwbGljYXRlcyk7Cj4gKwlpZiAodW5s aWtlbHkociAhPSAwKSkgewo+ICsJCWlmIChyICE9IC1FUkVTVEFSVFNZUykKPiArCQkJRFJNX0VS Uk9SKCJ0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzIGZhaWxlZC5cbiIpOwo+ICsJCWdvdG8gb3V0Owo+ ICAgCX0KPiAgIAo+ICAgCWFtZGdwdV9jc19nZXRfdGhyZXNob2xkX2Zvcl9tb3ZlcyhwLT5hZGV2 LCAmcC0+Ynl0ZXNfbW92ZWRfdGhyZXNob2xkLAo+IEBAIC03NDMsMTYgKzY5NCw5IEBAIHN0YXRp YyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4g ICBlcnJvcl92YWxpZGF0ZToKPiAgIAlpZiAocikKPiAgIAkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2 YXRpb24oJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCk7Cj4gLQo+IC1lcnJvcl9mcmVlX3BhZ2Vz Ogo+IC0KPiAtCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9f bGlzdCkgewo+IC0JCWlmICghZS0+dXNlcl9wYWdlcykKPiAtCQkJY29udGludWU7Cj4gLQo+IC0J CXJlbGVhc2VfcGFnZXMoZS0+dXNlcl9wYWdlcywgZS0+dHYuYm8tPnR0bS0+bnVtX3BhZ2VzKTsK PiAtCQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7Cj4gLQl9Cj4gK291dDoKPiArCWlmIChyKQo+ICsJ CWFtZGdwdV9tbl91bmxvY2socC0+bW4pOwo+ICAgCj4gICAJcmV0dXJuIHI7Cj4gICB9Cj4gQEAg LTEyMDYsOCArMTE1MCw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1k Z3B1X2NzX3BhcnNlciAqcCwKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmU7Cj4g ICAJc3RydWN0IGFtZGdwdV9qb2IgKmpvYjsKPiAgIAl1aW50NjRfdCBzZXE7Cj4gLQo+IC0JaW50 IHI7Cj4gKwlpbnQgciA9IDA7Cj4gICAKPiAgIAlqb2IgPSBwLT5qb2I7Cj4gICAJcC0+am9iID0g TlVMTDsKPiBAQCAtMTIxNiwxNSArMTE1OSwxOCBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19zdWJt aXQoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4gICAJaWYgKHIpCj4gICAJCWdvdG8gZXJy b3JfdW5sb2NrOwo+ICAgCj4gLQkvKiBObyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBhbGxvd2VkIHdo aWxlIGhvbGRpbmcgdGhlIG1uIGxvY2sgKi8KPiAtCWFtZGdwdV9tbl9sb2NrKHAtPm1uKTsKPiAr CS8qIElmIHVzZXJwdHIgYXJlIHVwZGF0ZWQgYWZ0ZXIgYW1kZ3B1X2NzX3BhcnNlcl9ib3MoKSwg cmVzdGFydCBjcyAqLwo+ICAgCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnko ZSwgcC0+Ym9fbGlzdCkgewo+ICAgCQlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IHR0bV90b19hbWRn cHVfYm8oZS0+dHYuYm8pOwo+ICAgCj4gLQkJaWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVk c19wYWdlcyhiby0+dGJvLnR0bSkpIHsKPiAtCQkJciA9IC1FUkVTVEFSVFNZUzsKPiAtCQkJZ290 byBlcnJvcl9hYm9ydDsKPiAtCQl9Cj4gKwkJZS0+dXNlcl9pbnZhbGlkYXRlZCA9Cj4gKwkJCQlh bWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOwo+ICsKPiArCQly IHw9IGUtPnVzZXJfaW52YWxpZGF0ZWQ7Cj4gKwl9Cj4gKwlpZiAocikgewo+ICsJCXIgPSAtRVJF U1RBUlRTWVM7Cj4gKwkJZ290byBlcnJvcl9hYm9ydDsKPiAgIAl9Cj4gICAKPiAgIAlqb2ItPm93 bmVyID0gcC0+ZmlscDsKPiBAQCAtMTI3MiwxNCArMTIxOCwyMCBAQCBzdGF0aWMgaW50IGFtZGdw dV9jc19zdWJtaXQoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4gICBpbnQgYW1kZ3B1X2Nz X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmls ZSAqZmlscCkKPiAgIHsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRldi0+ZGV2 X3ByaXZhdGU7Cj4gLQl1bmlvbiBkcm1fYW1kZ3B1X2NzICpjcyA9IGRhdGE7Cj4gLQlzdHJ1Y3Qg YW1kZ3B1X2NzX3BhcnNlciBwYXJzZXIgPSB7fTsKPiAtCWJvb2wgcmVzZXJ2ZWRfYnVmZmVycyA9 IGZhbHNlOwo+ICsJdW5pb24gZHJtX2FtZGdwdV9jcyAqY3M7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2Nz X3BhcnNlciBwYXJzZXI7Cj4gKwlib29sIHJlc2VydmVkX2J1ZmZlcnM7Cj4gKwlpbnQgdHJpZXMg PSAxMDsKPiAgIAlpbnQgaSwgcjsKPiAgIAo+ICAgCWlmICghYWRldi0+YWNjZWxfd29ya2luZykK PiAgIAkJcmV0dXJuIC1FQlVTWTsKPiAgIAo+ICtyZXN0YXJ0Ogo+ICsJbWVtc2V0KCZwYXJzZXIs IDAsIHNpemVvZihwYXJzZXIpKTsKPiArCWNzID0gZGF0YTsKPiArCXJlc2VydmVkX2J1ZmZlcnMg PSBmYWxzZTsKPiArCj4gICAJcGFyc2VyLmFkZXYgPSBhZGV2Owo+ICAgCXBhcnNlci5maWxwID0g ZmlscDsKPiAgIAo+IEBAIC0xMzIxLDYgKzEyNzMsMTUgQEAgaW50IGFtZGdwdV9jc19pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAp Cj4gICAKPiAgIG91dDoKPiAgIAlhbWRncHVfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgciwgcmVz ZXJ2ZWRfYnVmZmVycyk7Cj4gKwo+ICsJaWYgKHIgPT0gLUVSRVNUQVJUU1lTKSB7Cj4gKwkJaWYg KCEtLXRyaWVzKSB7Cj4gKwkJCURSTV9FUlJPUigiUG9zc2libGUgZGVhZGxvY2s/IFJldHJ5IHRv byBtYW55IHRpbWVzXG4iKTsKPiArCQkJcmV0dXJuIC1FREVBRExLOwo+ICsJCX0KPiArCQlnb3Rv IHJlc3RhcnQ7Cj4gKwl9Cj4gKwo+ICAgCXJldHVybiByOwo+ICAgfQo+ICAgCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+IGluZGV4IDdiM2QxZWIuLmZmOWE4ZmQgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jCj4gQEAgLTMzNiwyNiAr MzM2LDI0IEBAIGludCBhbWRncHVfZ2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKPiAgIAo+ICAgCQlyID0gYW1kZ3B1X2JvX3Jlc2VydmUoYm8sIHRy dWUpOwo+ICAgCQlpZiAocikKPiAtCQkJZ290byBmcmVlX3BhZ2VzOwo+ICsJCQlnb3RvIHVzZXJf cGFnZXNfZG9uZTsKPiAgIAo+ICAgCQlhbWRncHVfYm9fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJv LCBBTURHUFVfR0VNX0RPTUFJTl9HVFQpOwo+ICAgCQlyID0gdHRtX2JvX3ZhbGlkYXRlKCZiby0+ dGJvLCAmYm8tPnBsYWNlbWVudCwgJmN0eCk7Cj4gICAJCWFtZGdwdV9ib191bnJlc2VydmUoYm8p Owo+ICAgCQlpZiAocikKPiAtCQkJZ290byBmcmVlX3BhZ2VzOwo+ICsJCQlnb3RvIHVzZXJfcGFn ZXNfZG9uZTsKPiAgIAl9Cj4gICAKPiAgIAlyID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbHAs IGdvYmosICZoYW5kbGUpOwo+IC0JLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhh bmRsZSBob2xkcyBpdCBub3cgKi8KPiAtCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2Jq KTsKPiAgIAlpZiAocikKPiAtCQlyZXR1cm4gcjsKPiArCQlnb3RvIHVzZXJfcGFnZXNfZG9uZTsK PiAgIAo+ICAgCWFyZ3MtPmhhbmRsZSA9IGhhbmRsZTsKPiAtCXJldHVybiAwOwo+ICAgCj4gLWZy ZWVfcGFnZXM6Cj4gLQlyZWxlYXNlX3BhZ2VzKGJvLT50Ym8udHRtLT5wYWdlcywgYm8tPnRiby50 dG0tPm51bV9wYWdlcyk7Cj4gK3VzZXJfcGFnZXNfZG9uZToKPiArCWlmIChhcmdzLT5mbGFncyAm IEFNREdQVV9HRU1fVVNFUlBUUl9WQUxJREFURSkKPiArCQlhbWRncHVfdHRtX3R0X2dldF91c2Vy X3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOwo+ICAgCj4gICByZWxlYXNlX29iamVjdDoKPiAgIAlk cm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoZ29iaik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X21uLmMKPiBpbmRleCA1NjU5NWIzLi42YjZiZWNkIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmMKPiBAQCAtMjI5LDggKzIyOSw2IEBAIHN0YXRpYyB2 b2lkIGFtZGdwdV9tbl9pbnZhbGlkYXRlX25vZGUoc3RydWN0IGFtZGdwdV9tbl9ub2RlICpub2Rl LAo+ICAgCQkJdHJ1ZSwgZmFsc2UsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKPiAgIAkJaWYgKHIg PD0gMCkKPiAgIAkJCURSTV9FUlJPUigiKCVsZCkgZmFpbGVkIHRvIHdhaXQgZm9yIHVzZXIgYm9c biIsIHIpOwo+IC0KPiAtCQlhbWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhiby0+dGJvLnR0 bSk7Cj4gICAJfQo+ICAgfQo+ICAgCj4gQEAgLTM1NSwxNSArMzUzLDE2IEBAIHN0YXRpYyBzdHJ1 Y3QgaG1tX21pcnJvcl9vcHMgYW1kZ3B1X2htbV9taXJyb3Jfb3BzW10gPSB7Cj4gICAvKioKPiAg ICAqIGFtZGdwdV9tbl9nZXQgLSBjcmVhdGUgSE1NIG1pcnJvciBjb250ZXh0Cj4gICAgKgo+ICsg KiBAbW06IHRoZSBtbSBzdHJ1Y3QKPiAgICAqIEBhZGV2OiBhbWRncHUgZGV2aWNlIHBvaW50ZXIK PiAgICAqIEB0eXBlOiB0eXBlIG9mIE1NVSBub3RpZmllciBjb250ZXh0Cj4gICAgKgo+IC0gKiBD cmVhdGVzIGEgSE1NIG1pcnJvciBjb250ZXh0IGZvciBjdXJyZW50LT5tbS4KPiArICogQ3JlYXRl cyBhIEhNTSBtaXJyb3IgY29udGV4dCBmb3IgbW0uCj4gICAgKi8KPiAtc3RydWN0IGFtZGdwdV9t biAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiArc3RydWN0IGFt ZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiArCQkJCXN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCQkJCWVudW0gYW1kZ3B1X21uX3R5cGUgdHlwZSkK PiAgIHsKPiAtCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Cj4gICAJc3RydWN0 IGFtZGdwdV9tbiAqYW1uOwo+ICAgCXVuc2lnbmVkIGxvbmcga2V5ID0gQU1ER1BVX01OX0tFWSht bSwgdHlwZSk7Cj4gICAJaW50IHI7Cj4gQEAgLTQzMyw3ICs0MzIsNyBAQCBpbnQgYW1kZ3B1X21u X3JlZ2lzdGVyKHN0cnVjdCBhbWRncHVfYm8gKmJvLCB1bnNpZ25lZCBsb25nIGFkZHIpCj4gICAJ c3RydWN0IGxpc3RfaGVhZCBib3M7Cj4gICAJc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSAqaXQ7 Cj4gICAKPiAtCWFtbiA9IGFtZGdwdV9tbl9nZXQoYWRldiwgdHlwZSk7Cj4gKwlhbW4gPSBhbWRn cHVfbW5fZ2V0KGN1cnJlbnQtPm1tLCBhZGV2LCB0eXBlKTsKPiAgIAlpZiAoSVNfRVJSKGFtbikp Cj4gICAJCXJldHVybiBQVFJfRVJSKGFtbik7Cj4gICAKPiBAQCAtNTE1LDMgKzUxNCwyNiBAQCB2 b2lkIGFtZGdwdV9tbl91bnJlZ2lzdGVyKHN0cnVjdCBhbWRncHVfYm8gKmJvKQo+ICAgCW11dGV4 X3VubG9jaygmYWRldi0+bW5fbG9jayk7Cj4gICB9Cj4gICAKPiArLyogZmxhZ3MgdXNlZCBieSBI TU0gaW50ZXJuYWwsIG5vdCByZWxhdGVkIHRvIENQVS9HUFUgUFRFIGZsYWdzICovCj4gK3N0YXRp YyBjb25zdCB1aW50NjRfdCBobW1fcmFuZ2VfZmxhZ3NbSE1NX1BGTl9GTEFHX01BWF0gPSB7Cj4g KwkJKDEgPDwgMCksIC8qIEhNTV9QRk5fVkFMSUQgKi8KPiArCQkoMSA8PCAxKSwgLyogSE1NX1BG Tl9XUklURSAqLwo+ICsJCTAgLyogSE1NX1BGTl9ERVZJQ0VfUFJJVkFURSAqLwo+ICt9Owo+ICsK PiArc3RhdGljIGNvbnN0IHVpbnQ2NF90IGhtbV9yYW5nZV92YWx1ZXNbSE1NX1BGTl9WQUxVRV9N QVhdID0gewo+ICsJCTB4ZmZmZmZmZmZmZmZmZmZmZVVMLCAvKiBITU1fUEZOX0VSUk9SICovCj4g KwkJMCwgLyogSE1NX1BGTl9OT05FICovCj4gKwkJMHhmZmZmZmZmZmZmZmZmZmZjVUwgLyogSE1N X1BGTl9TUEVDSUFMICovCj4gK307Cj4gKwo+ICt2b2lkIGFtZGdwdV9obW1faW5pdF9yYW5nZShz dHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSkKPiArewo+ICsJaWYgKHJhbmdlKSB7Cj4gKwkJcmFuZ2Ut PmZsYWdzID0gaG1tX3JhbmdlX2ZsYWdzOwo+ICsJCXJhbmdlLT52YWx1ZXMgPSBobW1fcmFuZ2Vf dmFsdWVzOwo+ICsJCXJhbmdlLT5wZm5fc2hpZnQgPSBQQUdFX1NISUZUOwo+ICsJCXJhbmdlLT5w Zm5zID0gTlVMTDsKPiArCQlJTklUX0xJU1RfSEVBRCgmcmFuZ2UtPmxpc3QpOwo+ICsJfQo+ICt9 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmgKPiBpbmRleCAwZTI3NTI2Li41 OWVhMzBlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9t bi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmgKPiBAQCAt MjUsOSArMjUsMTAgQEAKPiAgICNkZWZpbmUgX19BTURHUFVfTU5fSF9fCj4gICAKPiAgIC8qCj4g LSAqIE1NVSBOb3RpZmllcgo+ICsgKiBITU0gbWlycm9yCj4gICAgKi8KPiAgIHN0cnVjdCBhbWRn cHVfbW47Cj4gK3N0cnVjdCBobW1fcmFuZ2U7Cj4gICAKPiAgIGVudW0gYW1kZ3B1X21uX3R5cGUg ewo+ICAgCUFNREdQVV9NTl9UWVBFX0dGWCwKPiBAQCAtMzcsMTAgKzM4LDEyIEBAIGVudW0gYW1k Z3B1X21uX3R5cGUgewo+ICAgI2lmIGRlZmluZWQoQ09ORklHX0hNTSkKPiAgIHZvaWQgYW1kZ3B1 X21uX2xvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pOwo+ICAgdm9pZCBhbWRncHVfbW5fdW5sb2Nr KHN0cnVjdCBhbWRncHVfbW4gKm1uKTsKPiAtc3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dl dChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiArc3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1 X21uX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiArCQkJCXN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAo+ICAgCQkJCWVudW0gYW1kZ3B1X21uX3R5cGUgdHlwZSk7Cj4gICBpbnQgYW1kZ3B1 X21uX3JlZ2lzdGVyKHN0cnVjdCBhbWRncHVfYm8gKmJvLCB1bnNpZ25lZCBsb25nIGFkZHIpOwo+ ICAgdm9pZCBhbWRncHVfbW5fdW5yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1X2JvICpibyk7Cj4gK3Zv aWQgYW1kZ3B1X2htbV9pbml0X3JhbmdlKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTsKPiAgICNl bHNlCj4gICBzdGF0aWMgaW5saW5lIHZvaWQgYW1kZ3B1X21uX2xvY2soc3RydWN0IGFtZGdwdV9t biAqbW4pIHt9Cj4gICBzdGF0aWMgaW5saW5lIHZvaWQgYW1kZ3B1X21uX3VubG9jayhzdHJ1Y3Qg YW1kZ3B1X21uICptbikge30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5j Cj4gaW5kZXggM2E2ODAyOC4uYjA1MzdkMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfdHRtLmMKPiBAQCAtNDMsNiArNDMsNyBAQAo+ICAgI2luY2x1ZGUgPGxpbnV4L3Bh Z2VtYXAuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Cj4gICAjaW5jbHVkZSA8bGlu dXgvaW9tbXUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2htbS5oPgo+ICAgI2luY2x1ZGUgImFtZGdw dS5oIgo+ICAgI2luY2x1ZGUgImFtZGdwdV9vYmplY3QuaCIKPiAgICNpbmNsdWRlICJhbWRncHVf dHJhY2UuaCIKPiBAQCAtNzk5LDExICs4MDAsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbWRn cHVfdHRtX2lvX21lbV9wZm4oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKPiAgIC8qCj4g ICAgKiBUVE0gYmFja2VuZCBmdW5jdGlvbnMuCj4gICAgKi8KPiAtc3RydWN0IGFtZGdwdV90dG1f Z3VwX3Rhc2tfbGlzdCB7Cj4gLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Cj4gLQlzdHJ1Y3QgdGFz a19zdHJ1Y3QJKnRhc2s7Cj4gLX07Cj4gLQo+ICAgc3RydWN0IGFtZGdwdV90dG1fdHQgewo+ICAg CXN0cnVjdCB0dG1fZG1hX3R0CXR0bTsKPiAgIAl1NjQJCQlvZmZzZXQ7Cj4gQEAgLTgxMiw4NSAr ODA4LDkxIEBAIHN0cnVjdCBhbWRncHVfdHRtX3R0IHsKPiAgIAl1aW50MzJfdAkJdXNlcmZsYWdz Owo+ICAgCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGd1cHRhc2tsb2NrOwo+ICAgCXN0cnVjdCBs aXN0X2hlYWQgICAgICAgIGd1cHRhc2tzOwo+IC0JYXRvbWljX3QJCW1tdV9pbnZhbGlkYXRpb25z Owo+IC0JdWludDMyX3QJCWxhc3Rfc2V0X3BhZ2VzOwo+ICsJc3RydWN0IGhtbV9yYW5nZQlyYW5n ZTsKPiAgIH07Cj4gICAKPiAgIC8qKgo+IC0gKiBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2Vz IC0gUGluIHBhZ2VzIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGEgVVNFUlBUUgo+IC0gKiBwb2lu dGVyIHRvIG1lbW9yeQo+ICsgKiBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzIC0gZ2V0IGRl dmljZSBhY2Nlc3NpYmxlIHBhZ2VzIHRoYXQgYmFjayB1c2VyCj4gKyAqIG1lbW9yeSBhbmQgc3Rh cnQgSE1NIHRyYWNraW5nIENQVSBwYWdlIHRhYmxlIHVwZGF0ZQo+ICAgICoKPiAtICogQ2FsbGVk IGJ5IGFtZGdwdV9nZW1fdXNlcnB0cl9pb2N0bCgpIGFuZCBhbWRncHVfY3NfcGFyc2VyX2Jvcygp Lgo+IC0gKiBUaGlzIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgdGhlIGdldF91c2VyX3BhZ2Vz KCkgY2FsbCB0byBwcm92aWRlCj4gLSAqIGRldmljZSBhY2Nlc3NpYmxlIHBhZ2VzIHRoYXQgYmFj ayB1c2VyIG1lbW9yeS4KPiArICogQ2FsbGluZyBmdW5jdGlvbiBtdXN0IGNhbGwgYW1kZ3B1X3R0 bV90dF91c2VycHRyX3JhbmdlX2RvbmUoKSBvbmNlIGFuZCBvbmx5Cj4gKyAqIG9uY2UgYWZ0ZXJ3 YXJkcyB0byBzdG9wIEhNTSB0cmFja2luZwo+ICAgICovCj4gICBpbnQgYW1kZ3B1X3R0bV90dF9n ZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpCj4g ICB7Cj4gICAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwo+ICAgCXN0 cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZ3R0LT51c2VydGFzay0+bW07Cj4gLQl1bnNpZ25lZCBpbnQg ZmxhZ3MgPSAwOwo+IC0JdW5zaWduZWQgcGlubmVkID0gMDsKPiAtCWludCByOwo+ICsJdW5zaWdu ZWQgbG9uZyBlbmQgPSBndHQtPnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0laRTsK PiArCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlID0gJmd0dC0+cmFuZ2U7Cj4gKwlpbnQgciwgaTsK PiAgIAo+ICAgCWlmICghbW0pIC8qIEhhcHBlbnMgZHVyaW5nIHByb2Nlc3Mgc2h1dGRvd24gKi8K PiAgIAkJcmV0dXJuIC1FU1JDSDsKPiAgIAo+IC0JaWYgKCEoZ3R0LT51c2VyZmxhZ3MgJiBBTURH UFVfR0VNX1VTRVJQVFJfUkVBRE9OTFkpKQo+IC0JCWZsYWdzIHw9IEZPTExfV1JJVEU7Cj4gKwlh bWRncHVfaG1tX2luaXRfcmFuZ2UocmFuZ2UpOwo+ICAgCj4gICAJZG93bl9yZWFkKCZtbS0+bW1h cF9zZW0pOwo+ICAgCj4gLQlpZiAoZ3R0LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJf QU5PTk9OTFkpIHsKPiAtCQkvKgo+IC0JCSAqIGNoZWNrIHRoYXQgd2Ugb25seSB1c2UgYW5vbnlt b3VzIG1lbW9yeSB0byBwcmV2ZW50IHByb2JsZW1zCj4gLQkJICogd2l0aCB3cml0ZWJhY2sKPiAt CQkgKi8KPiAtCQl1bnNpZ25lZCBsb25nIGVuZCA9IGd0dC0+dXNlcnB0ciArIHR0bS0+bnVtX3Bh Z2VzICogUEFHRV9TSVpFOwo+IC0JCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwo+ICsJcmFu Z2UtPnZtYSA9IGZpbmRfdm1hKG1tLCBndHQtPnVzZXJwdHIpOwo+ICsJaWYgKCFyYW5nZS0+dm1h IHx8IHJhbmdlLT52bWEtPnZtX2ZpbGUgfHwgcmFuZ2UtPnZtYS0+dm1fZW5kIDwgZW5kKSB7Cj4g KwkJciA9IC1FUEVSTTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCXJhbmdlLT5wZm5zID0ga3Zt YWxsb2NfYXJyYXkodHRtLT5udW1fcGFnZXMsIHNpemVvZih1aW50NjRfdCksCj4gKwkJCQlHRlBf S0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4gKwlpZiAocmFuZ2UtPnBmbnMgPT0gTlVMTCkgewo+ICsJ CXIgPSAtRU5PTUVNOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsJcmFuZ2UtPnN0YXJ0ID0gZ3R0 LT51c2VycHRyOwo+ICsJcmFuZ2UtPmVuZCA9IGVuZDsKPiAgIAo+IC0JCXZtYSA9IGZpbmRfdm1h KG1tLCBndHQtPnVzZXJwdHIpOwo+IC0JCWlmICghdm1hIHx8IHZtYS0+dm1fZmlsZSB8fCB2bWEt PnZtX2VuZCA8IGVuZCkgewo+IC0JCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwo+IC0JCQlyZXR1 cm4gLUVQRVJNOwo+IC0JCX0KPiArCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgaSsr KSB7Cj4gKwkJcmFuZ2UtPnBmbnNbaV0gPSByYW5nZS0+ZmxhZ3NbSE1NX1BGTl9WQUxJRF07Cj4g KwkJcmFuZ2UtPnBmbnNbaV0gfD0gYW1kZ3B1X3R0bV90dF9pc19yZWFkb25seSh0dG0pID8KPiAr CQkJCQkwIDogcmFuZ2UtPmZsYWdzW0hNTV9QRk5fV1JJVEVdOwo+ICAgCX0KPiAgIAo+IC0JLyog bG9vcCBlbm91Z2ggdGltZXMgdXNpbmcgY29udGlndW91cyBwYWdlcyBvZiBtZW1vcnkgKi8KPiAt CWRvIHsKPiAtCQl1bnNpZ25lZCBudW1fcGFnZXMgPSB0dG0tPm51bV9wYWdlcyAtIHBpbm5lZDsK PiAtCQl1aW50NjRfdCB1c2VycHRyID0gZ3R0LT51c2VycHRyICsgcGlubmVkICogUEFHRV9TSVpF Owo+IC0JCXN0cnVjdCBwYWdlICoqcCA9IHBhZ2VzICsgcGlubmVkOwo+IC0JCXN0cnVjdCBhbWRn cHVfdHRtX2d1cF90YXNrX2xpc3QgZ3VwdGFzazsKPiArCS8qIFRoaXMgbWF5IHRyaWdnbGVzIHBh Z2UgdGFibGUgdXBkYXRlICovCj4gKwlyID0gaG1tX3ZtYV9mYXVsdChyYW5nZSwgdHJ1ZSk7Cj4g KwlpZiAocikKPiArCQlnb3RvIG91dF9mcmVlX3BmbnM7Cj4gICAKPiAtCQlndXB0YXNrLnRhc2sg PSBjdXJyZW50Owo+IC0JCXNwaW5fbG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7Cj4gLQkJbGlzdF9h ZGQoJmd1cHRhc2subGlzdCwgJmd0dC0+Z3VwdGFza3MpOwo+IC0JCXNwaW5fdW5sb2NrKCZndHQt Pmd1cHRhc2tsb2NrKTsKPiArCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgaSsrKQo+ ICsJCXBhZ2VzW2ldID0gaG1tX3Bmbl90b19wYWdlKHJhbmdlLCByYW5nZS0+cGZuc1tpXSk7Cj4g ICAKPiAtCQlpZiAobW0gPT0gY3VycmVudC0+bW0pCj4gLQkJCXIgPSBnZXRfdXNlcl9wYWdlcyh1 c2VycHRyLCBudW1fcGFnZXMsIGZsYWdzLCBwLCBOVUxMKTsKPiAtCQllbHNlCj4gLQkJCXIgPSBn ZXRfdXNlcl9wYWdlc19yZW1vdGUoZ3R0LT51c2VydGFzaywKPiAtCQkJCQltbSwgdXNlcnB0ciwg bnVtX3BhZ2VzLAo+IC0JCQkJCWZsYWdzLCBwLCBOVUxMLCBOVUxMKTsKPiArCXVwX3JlYWQoJm1t LT5tbWFwX3NlbSk7Cj4gKwlyZXR1cm4gMDsKPiAgIAo+IC0JCXNwaW5fbG9jaygmZ3R0LT5ndXB0 YXNrbG9jayk7Cj4gLQkJbGlzdF9kZWwoJmd1cHRhc2subGlzdCk7Cj4gLQkJc3Bpbl91bmxvY2so Jmd0dC0+Z3VwdGFza2xvY2spOwo+ICtvdXRfZnJlZV9wZm5zOgo+ICsJa3ZmcmVlKHJhbmdlLT5w Zm5zKTsKPiArCXJhbmdlLT5wZm5zID0gTlVMTDsKPiArb3V0Ogo+ICsJdXBfcmVhZCgmbW0tPm1t YXBfc2VtKTsKPiArCXJldHVybiByOwo+ICt9Cj4gICAKPiAtCQlpZiAociA8IDApCj4gLQkJCWdv dG8gcmVsZWFzZV9wYWdlczsKPiArLyoqCj4gKyAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9yYW5n ZV9kb25lIC0gc3RvcCBITU0gdHJhY2sgdGhlIENQVSBwYWdlIHRhYmxlIGNoYW5nZQo+ICsgKiBD aGVjayBpZiB0aGUgcGFnZXMgYmFja2luZyB0aGlzIHR0bSByYW5nZSBoYXZlIGJlZW4gaW52YWxp ZGF0ZWQKPiArICoKPiArICogUmV0dXJuczogdHJ1ZSBpZiBwYWdlcyBhcmUgaW52YWxpZGF0ZWQg c2luY2UgdGhlIGxhc3QgdGltZSB0aGV5J3ZlIGJlZW4gc2V0Cj4gKyAqLwo+ICtib29sIGFtZGdw dV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShzdHJ1Y3QgdHRtX3R0ICp0dG0pCj4gK3sKPiAr CXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKPiArCWludCByOwo+ICAg Cj4gLQkJcGlubmVkICs9IHI7Cj4gKwlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikK PiArCQlyZXR1cm4gZmFsc2U7Cj4gICAKPiAtCX0gd2hpbGUgKHBpbm5lZCA8IHR0bS0+bnVtX3Bh Z2VzKTsKPiArCXIgPSAhaG1tX3ZtYV9yYW5nZV9kb25lKCZndHQtPnJhbmdlKTsKPiAgIAo+IC0J dXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKPiAtCXJldHVybiAwOwo+ICsJaWYgKGd0dC0+cmFuZ2Uu cGZucykgewo+ICsJCWt2ZnJlZShndHQtPnJhbmdlLnBmbnMpOwo+ICsJCWd0dC0+cmFuZ2UucGZu cyA9IE5VTEw7Cj4gKwl9Cj4gICAKPiAtcmVsZWFzZV9wYWdlczoKPiAtCXJlbGVhc2VfcGFnZXMo cGFnZXMsIHBpbm5lZCk7Cj4gLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwo+ICAgCXJldHVybiBy Owo+ICAgfQo+ICAgCj4gQEAgLTkwMywxNiArOTA1LDEwIEBAIGludCBhbWRncHVfdHRtX3R0X2dl dF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcykKPiAg ICAqLwo+ICAgdm9pZCBhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQg KnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcykKPiAgIHsKPiAtCXN0cnVjdCBhbWRncHVfdHRtX3R0 ICpndHQgPSAodm9pZCAqKXR0bTsKPiAgIAl1bnNpZ25lZCBpOwo+ICAgCj4gLQlndHQtPmxhc3Rf c2V0X3BhZ2VzID0gYXRvbWljX3JlYWQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpOwo+IC0JZm9y IChpID0gMDsgaSA8IHR0bS0+bnVtX3BhZ2VzOyArK2kpIHsKPiAtCQlpZiAodHRtLT5wYWdlc1tp XSkKPiAtCQkJcHV0X3BhZ2UodHRtLT5wYWdlc1tpXSk7Cj4gLQo+ICsJZm9yIChpID0gMDsgaSA8 IHR0bS0+bnVtX3BhZ2VzOyArK2kpCj4gICAJCXR0bS0+cGFnZXNbaV0gPSBwYWdlcyA/IHBhZ2Vz W2ldIDogTlVMTDsKPiAtCX0KPiAgIH0KPiAgIAo+ICAgLyoqCj4gQEAgLTk5Nyw5ICs5OTMsNiBA QCBzdGF0aWMgdm9pZCBhbWRncHVfdHRtX3R0X3VucGluX3VzZXJwdHIoc3RydWN0IHR0bV90dCAq dHRtKQo+ICAgCS8qIHVubWFwIHRoZSBwYWdlcyBtYXBwZWQgdG8gdGhlIGRldmljZSAqLwo+ICAg CWRtYV91bm1hcF9zZyhhZGV2LT5kZXYsIHR0bS0+c2ctPnNnbCwgdHRtLT5zZy0+bmVudHMsIGRp cmVjdGlvbik7Cj4gICAKPiAtCS8qIG1hcmsgdGhlIHBhZ2VzIGFzIGRpcnR5ICovCj4gLQlhbWRn cHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyh0dG0pOwo+IC0KPiAgIAlzZ19mcmVlX3RhYmxlKHR0 bS0+c2cpOwo+ICAgfQo+ICAgCj4gQEAgLTEzNTIsOCArMTM0NSw2IEBAIGludCBhbWRncHVfdHRt X3R0X3NldF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdWludDY0X3QgYWRkciwKPiAgIAo+ ICAgCXNwaW5fbG9ja19pbml0KCZndHQtPmd1cHRhc2tsb2NrKTsKPiAgIAlJTklUX0xJU1RfSEVB RCgmZ3R0LT5ndXB0YXNrcyk7Cj4gLQlhdG9taWNfc2V0KCZndHQtPm1tdV9pbnZhbGlkYXRpb25z LCAwKTsKPiAtCWd0dC0+bGFzdF9zZXRfcGFnZXMgPSAwOwo+ICAgCj4gICAJcmV0dXJuIDA7Cj4g ICB9Cj4gQEAgLTEzODMsNyArMTM3NCw2IEBAIGJvb2wgYW1kZ3B1X3R0bV90dF9hZmZlY3RfdXNl cnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCj4gICAJCQkJICB1 bnNpZ25lZCBsb25nIGVuZCkKPiAgIHsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0g KHZvaWQgKil0dG07Cj4gLQlzdHJ1Y3QgYW1kZ3B1X3R0bV9ndXBfdGFza19saXN0ICplbnRyeTsK PiAgIAl1bnNpZ25lZCBsb25nIHNpemU7Cj4gICAKPiAgIAlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0 dC0+dXNlcnB0cikKPiBAQCAtMTM5Niw0OCArMTM4NiwyMCBAQCBib29sIGFtZGdwdV90dG1fdHRf YWZmZWN0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+ ICAgCWlmIChndHQtPnVzZXJwdHIgPiBlbmQgfHwgZ3R0LT51c2VycHRyICsgc2l6ZSA8PSBzdGFy dCkKPiAgIAkJcmV0dXJuIGZhbHNlOwo+ICAgCj4gLQkvKiBTZWFyY2ggdGhlIGxpc3RzIG9mIHRh c2tzIHRoYXQgaG9sZCB0aGlzIG1hcHBpbmcgYW5kIHNlZQo+IC0JICogaWYgY3VycmVudCBpcyBv bmUgb2YgdGhlbS4gIElmIGl0IGlzIHJldHVybiBmYWxzZS4KPiAtCSAqLwo+IC0Jc3Bpbl9sb2Nr KCZndHQtPmd1cHRhc2tsb2NrKTsKPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZndHQt Pmd1cHRhc2tzLCBsaXN0KSB7Cj4gLQkJaWYgKGVudHJ5LT50YXNrID09IGN1cnJlbnQpIHsKPiAt CQkJc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOwo+IC0JCQlyZXR1cm4gZmFsc2U7Cj4g LQkJfQo+IC0JfQo+IC0Jc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOwo+IC0KPiAtCWF0 b21pY19pbmMoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpOwo+IC0KPiAgIAlyZXR1cm4gdHJ1ZTsK PiAgIH0KPiAgIAo+ICAgLyoqCj4gLSAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRl ZCAtIEhhcyB0aGUgdHRtX3R0IG9iamVjdCBiZWVuIGludmFsaWRhdGVkPwo+ICsgKiBhbWRncHVf dHRtX3R0X2lzX3VzZXJwdHIgLSBIYXZlIHRoZSBwYWdlcyBiYWNraW5nIGJ5IHVzZXJwdHI/Cj4g ICAgKi8KPiAtYm9vbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQoc3RydWN0IHR0 bV90dCAqdHRtLAo+IC0JCQkJICAgICAgIGludCAqbGFzdF9pbnZhbGlkYXRlZCkKPiAtewo+IC0J c3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwo+IC0JaW50IHByZXZfaW52 YWxpZGF0ZWQgPSAqbGFzdF9pbnZhbGlkYXRlZDsKPiAtCj4gLQkqbGFzdF9pbnZhbGlkYXRlZCA9 IGF0b21pY19yZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsKPiAtCXJldHVybiBwcmV2X2lu dmFsaWRhdGVkICE9ICpsYXN0X2ludmFsaWRhdGVkOwo+IC19Cj4gLQo+IC0vKioKPiAtICogYW1k Z3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzIC0gSGF2ZSB0aGUgcGFnZXMgYmFja2luZyB0 aGlzIHR0bV90dCBvYmplY3QKPiAtICogYmVlbiBpbnZhbGlkYXRlZCBzaW5jZSB0aGUgbGFzdCB0 aW1lIHRoZXkndmUgYmVlbiBzZXQ/Cj4gLSAqLwo+IC1ib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0 cl9uZWVkc19wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pCj4gK2Jvb2wgYW1kZ3B1X3R0bV90dF9p c191c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSkKPiAgIHsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X3R0 bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07Cj4gICAKPiAgIAlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0 dC0+dXNlcnB0cikKPiAgIAkJcmV0dXJuIGZhbHNlOwo+ICAgCj4gLQlyZXR1cm4gYXRvbWljX3Jl YWQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpICE9IGd0dC0+bGFzdF9zZXRfcGFnZXM7Cj4gKwly ZXR1cm4gdHJ1ZTsKPiAgIH0KPiAgIAo+ICAgLyoqCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV90dG0uaAo+IGluZGV4IGZlOGYyNzYuLmFlZWVhNzcgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCj4gQEAgLTEwNCw2ICsxMDQsNyBAQCBpbnQgYW1k Z3B1X3R0bV9hbGxvY19nYXJ0KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOwo+ICAgaW50 IGFtZGdwdV90dG1fcmVjb3Zlcl9nYXJ0KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJvKTsK PiAgIAo+ICAgaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAq dHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKPiArYm9vbCBhbWRncHVfdHRtX3R0X2dldF91c2Vy X3BhZ2VzX2RvbmUoc3RydWN0IHR0bV90dCAqdHRtKTsKPiAgIHZvaWQgYW1kZ3B1X3R0bV90dF9z ZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpOwo+ ICAgdm9pZCBhbWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0p Owo+ICAgaW50IGFtZGdwdV90dG1fdHRfc2V0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1 aW50NjRfdCBhZGRyLAo+IEBAIC0xMTQsNyArMTE1LDcgQEAgYm9vbCBhbWRncHVfdHRtX3R0X2Fm ZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdW5zaWduZWQgbG9uZyBzdGFydCwKPiAg IAkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKTsKPiAgIGJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRy X2ludmFsaWRhdGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwKPiAgIAkJCQkgICAgICAgaW50ICpsYXN0 X2ludmFsaWRhdGVkKTsKPiAtYm9vbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMo c3RydWN0IHR0bV90dCAqdHRtKTsKPiArYm9vbCBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoc3Ry dWN0IHR0bV90dCAqdHRtKTsKPiAgIGJvb2wgYW1kZ3B1X3R0bV90dF9pc19yZWFkb25seShzdHJ1 Y3QgdHRtX3R0ICp0dG0pOwo+ICAgdWludDY0X3QgYW1kZ3B1X3R0bV90dF9wZGVfZmxhZ3Moc3Ry dWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSk7Cj4gICB1aW50NjRfdCBh bWRncHVfdHRtX3R0X3B0ZV9mbGFncyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgc3RydWN0 IHR0bV90dCAqdHRtLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4gaW5k ZXggNjkwNGQ3OS4uZmE1YmY0NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdm0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV92bS5jCj4gQEAgLTYxNyw3ICs2MTcsNiBAQCB2b2lkIGFtZGdwdV92bV9nZXRfcGRfYm8oc3Ry dWN0IGFtZGdwdV92bSAqdm0sCj4gICAJZW50cnktPnByaW9yaXR5ID0gMDsKPiAgIAllbnRyeS0+ dHYuYm8gPSAmdm0tPnJvb3QuYmFzZS5iby0+dGJvOwo+ICAgCWVudHJ5LT50di5zaGFyZWQgPSB0 cnVlOwo+IC0JZW50cnktPnVzZXJfcGFnZXMgPSBOVUxMOwo+ICAgCWxpc3RfYWRkKCZlbnRyeS0+ dHYuaGVhZCwgdmFsaWRhdGVkKTsKPiAgIH0KPiAgIAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9hbWQtZ2Z4Cg==