From mboxrd@z Thu Jan 1 00:00:00 1970 From: Deepak S Subject: Re: [PATCH 4/8] drm/i915: Reduce duplicated forcewake logic Date: Fri, 12 Dec 2014 18:18:16 +0530 Message-ID: <548AE410.4080007@linux.intel.com> References: <1418063262-32256-1-git-send-email-mika.kuoppala@intel.com> <1418063262-32256-4-git-send-email-mika.kuoppala@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 1151C6E452 for ; Thu, 11 Dec 2014 04:51:18 -0800 (PST) In-Reply-To: <1418063262-32256-4-git-send-email-mika.kuoppala@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIE1vbmRheSAwOCBEZWNlbWJlciAyMDE0IDExOjU3IFBNLCBNaWthIEt1b3BwYWxhIHdyb3Rl Ogo+IEZyb206IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+Cj4gSW50 cm9kdWNlIGEgc3RydWN0dXJlIHRvIHRyYWNrIHRoZSBpbmRpdmlkdWFsIGZvcmNld2FrZSBkb21h aW5zIGFuZCB1c2UKPiB0aGF0IHRvIGVsaW1pbmF0ZSBkdXBsaWNhdGUgbG9naWMuCj4KPiB2Mjog LSBSZWJhc2Ugb24gbGF0ZXN0IGRpbnEgKE1pa2EpCj4gICAgICAtIGZvcl9lYWNoX2Z3X2RvbWFp biBtYWNybyAoTWlrYSkKPiAgICAgIC0gSGFuZGxlIHJlc2V0IGF0b21pY2FsbHksIGtlZXBpbmcg dGhlIHRpbWVyIHJ1bm5pbmcgKE1pa2EpCj4gICAgICAtIGZvcl9lYWNoX2Z3X2RvbWFpbiBwYXJh bWV0ZXIgb3JkZXJpbmcgKENocmlzKQo+ICAgICAgLSBkZWZlciB0aW1lciBvbiBuZXcgcmVnaXN0 ZXIgYWNjZXNzIChNaWthKQo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+ICh2MSkKPiBTaWduZWQtb2ZmLWJ5OiBNaWthIEt1b3BwYWxhIDxt aWthLmt1b3BwYWxhQGludGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jIHwgIDY1ICsrKy0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCAgICAgfCAgNTQgKysrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VuY29y ZS5jIHwgNDEwICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAgMyBmaWxl cyBjaGFuZ2VkLCAyMDggaW5zZXJ0aW9ucygrKSwgMzIxIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBpbmRleCBlMTQyNjI5Li41Y2M4MzhiIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBAQCAtMTIzNSwxNCArMTIzNSwzNiBAQCBz dGF0aWMgaW50IGlyb25sYWtlX2RycGNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4gICAJcmV0 dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCB2bHZfZHJwY19pbmZvKHN0cnVjdCBzZXFf ZmlsZSAqbSkKPiArc3RhdGljIGludCBpOTE1X2dlbjZfZm9yY2V3YWtlX2NvdW50X2luZm8oc3Ry dWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAgewo+ICsJc3RydWN0IGRybV9pbmZvX25v ZGUgKm5vZGUgPSBtLT5wcml2YXRlOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUt Pm1pbm9yLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGludGVsX3VuY29yZV9mb3JjZXdha2VfZG9tYWluICpm d19kb21haW47Cj4gKwljb25zdCBjaGFyICpkb21haW5fbmFtZXNbXSA9IHsKPiArCQkicmVuZGVy IiwKPiArCQkiYmxpdHRlciIsCj4gKwkJIm1lZGlhIiwKPiArCX07Cj4gKwlpbnQgaTsKPiArCj4g KwlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+ICsJZm9yX2VhY2hfZndf ZG9tYWluKGZ3X2RvbWFpbiwgZGV2X3ByaXYsIGkpIHsKPiArCQlzZXFfcHJpbnRmKG0sICIlcy53 YWtlX2NvdW50ID0gJXVcbiIsCj4gKwkJCSAgIGRvbWFpbl9uYW1lc1tpXSwKPiArCQkJICAgZndf ZG9tYWluLT53YWtlX2NvdW50KTsKPiArCX0KPiArCXNwaW5fdW5sb2NrX2lycSgmZGV2X3ByaXYt PnVuY29yZS5sb2NrKTsKPiAgIAo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg dmx2X2RycGNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4gK3sKPiAgIAlzdHJ1Y3QgZHJtX2lu Zm9fbm9kZSAqbm9kZSA9IG0tPnByaXZhdGU7Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IG5vZGUtPm1pbm9yLT5kZXY7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgIAl1MzIgcnBtb2RlY3RsMSwgcmNjdGwxLCBwd19zdGF0 dXM7Cj4gLQl1bnNpZ25lZCBmd19yZW5kZXJjb3VudCA9IDAsIGZ3X21lZGlhY291bnQgPSAwOwo+ ICAgCj4gICAJaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwo+ICAgCj4gQEAgLTEyNzQs MjIgKzEyOTYsMTEgQEAgc3RhdGljIGludCB2bHZfZHJwY19pbmZvKHN0cnVjdCBzZXFfZmlsZSAq bSkKPiAgIAlzZXFfcHJpbnRmKG0sICJNZWRpYSBSQzYgcmVzaWRlbmN5IHNpbmNlIGJvb3Q6ICV1 XG4iLAo+ICAgCQkgICBJOTE1X1JFQUQoVkxWX0dUX01FRElBX1JDNikpOwo+ICAgCj4gLQlzcGlu X2xvY2tfaXJxKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+IC0JZndfcmVuZGVyY291bnQgPSBk ZXZfcHJpdi0+dW5jb3JlLmZ3X3JlbmRlcmNvdW50Owo+IC0JZndfbWVkaWFjb3VudCA9IGRldl9w cml2LT51bmNvcmUuZndfbWVkaWFjb3VudDsKPiAtCXNwaW5fdW5sb2NrX2lycSgmZGV2X3ByaXYt PnVuY29yZS5sb2NrKTsKPiAtCj4gLQlzZXFfcHJpbnRmKG0sICJGb3JjZXdha2UgUmVuZGVyIENv dW50ID0gJXVcbiIsIGZ3X3JlbmRlcmNvdW50KTsKPiAtCXNlcV9wcmludGYobSwgIkZvcmNld2Fr ZSBNZWRpYSBDb3VudCA9ICV1XG4iLCBmd19tZWRpYWNvdW50KTsKPiAtCj4gLQo+IC0JcmV0dXJu IDA7Cj4gKwlyZXR1cm4gaTkxNV9nZW42X2ZvcmNld2FrZV9jb3VudF9pbmZvKG0sIE5VTEwpOwo+ ICAgfQo+ICAgCj4gLQo+ICAgc3RhdGljIGludCBnZW42X2RycGNfaW5mbyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0pCj4gICB7Cj4gLQo+ICAgCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gbS0+cHJp dmF0ZTsKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKPiAg IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ IEBAIC0xMzAzLDcgKzEzMTQsNyBAQCBzdGF0aWMgaW50IGdlbjZfZHJwY19pbmZvKHN0cnVjdCBz ZXFfZmlsZSAqbSkKPiAgIAlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Cj4gICAKPiAg IAlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+IC0JZm9yY2V3YWtlX2Nv dW50ID0gZGV2X3ByaXYtPnVuY29yZS5mb3JjZXdha2VfY291bnQ7Cj4gKwlmb3JjZXdha2VfY291 bnQgPSBkZXZfcHJpdi0+dW5jb3JlLmZ3X2RvbWFpbltGV19ET01BSU5fSURfUkVOREVSXS53YWtl X2NvdW50Owo+ICAgCXNwaW5fdW5sb2NrX2lycSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrKTsKPiAg IAo+ICAgCWlmIChmb3JjZXdha2VfY291bnQpIHsKPiBAQCAtMTkzMSwzMCArMTk0Miw2IEBAIHN0 YXRpYyBpbnQgaTkxNV9leGVjbGlzdHMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgaTkxNV9nZW42X2ZvcmNld2Fr ZV9jb3VudF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAtewo+IC0Jc3Ry dWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSBtLT5wcml2YXRlOwo+IC0Jc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0JdW5zaWduZWQgZm9yY2V3YWtlX2NvdW50 ID0gMCwgZndfcmVuZGVyY291bnQgPSAwLCBmd19tZWRpYWNvdW50ID0gMDsKPiAtCj4gLQlzcGlu X2xvY2tfaXJxKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+IC0JaWYgKElTX1ZBTExFWVZJRVco ZGV2KSkgewo+IC0JCWZ3X3JlbmRlcmNvdW50ID0gZGV2X3ByaXYtPnVuY29yZS5md19yZW5kZXJj b3VudDsKPiAtCQlmd19tZWRpYWNvdW50ID0gZGV2X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50 Owo+IC0JfSBlbHNlCj4gLQkJZm9yY2V3YWtlX2NvdW50ID0gZGV2X3ByaXYtPnVuY29yZS5mb3Jj ZXdha2VfY291bnQ7Cj4gLQlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT51bmNvcmUubG9jayk7 Cj4gLQo+IC0JaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgewo+IC0JCXNlcV9wcmludGYobSwgImZ3 X3JlbmRlcmNvdW50ID0gJXVcbiIsIGZ3X3JlbmRlcmNvdW50KTsKPiAtCQlzZXFfcHJpbnRmKG0s ICJmd19tZWRpYWNvdW50ID0gJXVcbiIsIGZ3X21lZGlhY291bnQpOwo+IC0JfSBlbHNlCj4gLQkJ c2VxX3ByaW50ZihtLCAiZm9yY2V3YWtlIGNvdW50ID0gJXVcbiIsIGZvcmNld2FrZV9jb3VudCk7 Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gICBzdGF0aWMgY29uc3QgY2hhciAqc3dpenps ZV9zdHJpbmcodW5zaWduZWQgc3dpenpsZSkKPiAgIHsKPiAgIAlzd2l0Y2ggKHN3aXp6bGUpIHsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA5NWRmYTJkLi40MTA1NThhIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTU1NCwyMCArNTU0LDQ1IEBAIHN0cnVjdCBpbnRl bF91bmNvcmVfZnVuY3Mgewo+ICAgCQkJCXVpbnQ2NF90IHZhbCwgYm9vbCB0cmFjZSk7Cj4gICB9 Owo+ICAgCj4gK2VudW0gewo+ICsJRldfRE9NQUlOX0lEX1JFTkRFUiA9IDAsCj4gKwlGV19ET01B SU5fSURfQkxJVFRFUiwKPiArCUZXX0RPTUFJTl9JRF9NRURJQSwKPiArCj4gKwlGV19ET01BSU5f SURfQ09VTlQKPiArfTsKPiArCj4gICBzdHJ1Y3QgaW50ZWxfdW5jb3JlIHsKPiAgIAlzcGlubG9j a190IGxvY2s7IC8qKiBsb2NrIGlzIGFsc28gdGFrZW4gaW4gaXJxIGNvbnRleHRzLiAqLwo+ICAg Cj4gICAJc3RydWN0IGludGVsX3VuY29yZV9mdW5jcyBmdW5jczsKPiAgIAo+ICAgCXVuc2lnbmVk IGZpZm9fY291bnQ7Cj4gLQl1bnNpZ25lZCBmb3JjZXdha2VfY291bnQ7Cj4gLQo+IC0JdW5zaWdu ZWQgZndfcmVuZGVyY291bnQ7Cj4gLQl1bnNpZ25lZCBmd19tZWRpYWNvdW50Owo+IC0JdW5zaWdu ZWQgZndfYmxpdHRlcmNvdW50Owo+IC0KPiAtCXN0cnVjdCB0aW1lcl9saXN0IGZvcmNlX3dha2Vf dGltZXI7Cj4gLX07Cj4gKwl1bnNpZ25lZCBmd19kb21haW5zOwo+ICsKPiArCXN0cnVjdCBpbnRl bF91bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiB7Cj4gKwkJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTU7Cj4gKwkJaW50IGlkOwo+ICsJCXVuc2lnbmVkIHdha2VfY291bnQ7Cj4gKwkJc3RydWN0 IHRpbWVyX2xpc3QgdGltZXI7Cj4gKwl9IGZ3X2RvbWFpbltGV19ET01BSU5fSURfQ09VTlRdOwo+ ICsjZGVmaW5lIEZPUkNFV0FLRV9SRU5ERVIJKDEgPDwgRldfRE9NQUlOX0lEX1JFTkRFUikKPiAr I2RlZmluZSBGT1JDRVdBS0VfQkxJVFRFUgkoMSA8PCBGV19ET01BSU5fSURfQkxJVFRFUikKPiAr I2RlZmluZSBGT1JDRVdBS0VfTUVESUEJCSgxIDw8IEZXX0RPTUFJTl9JRF9NRURJQSkKPiArI2Rl ZmluZSBGT1JDRVdBS0VfQUxMCQkoRk9SQ0VXQUtFX1JFTkRFUiB8IFwKPiArCQkJCSBGT1JDRVdB S0VfQkxJVFRFUiB8IFwKPiArCQkJCSBGT1JDRVdBS0VfTUVESUEpCj4gK307Cj4gKwo+ICsvKiBJ dGVyYXRlIG92ZXIgaW5pdGlhbGlzZWQgZncgZG9tYWlucyAqLwo+ICsjZGVmaW5lIGZvcl9lYWNo X2Z3X2RvbWFpbl9tYXNrKGRvbWFpbl9fLCBtYXNrX18sIGRldl9wcml2X18sIGlfXykgXAo+ICsJ Zm9yICgoaV9fKSA9IDAsIChkb21haW5fXykgPSAmKGRldl9wcml2X18pLT51bmNvcmUuZndfZG9t YWluWzBdOyBcCj4gKwkgICAgIChpX18pIDwgRldfRE9NQUlOX0lEX0NPVU5UOyBcCj4gKwkgICAg IChpX18pKyssIChkb21haW5fXykgPSAmKGRldl9wcml2X18pLT51bmNvcmUuZndfZG9tYWluW2lf X10pIFwKPiArCQlpZiAoKChtYXNrX18pICYgKGRldl9wcml2X18pLT51bmNvcmUuZndfZG9tYWlu cykgJiAoMSA8PCAoaV9fKSkpCj4gKwo+ICsjZGVmaW5lIGZvcl9lYWNoX2Z3X2RvbWFpbihkb21h aW5fXywgZGV2X3ByaXZfXywgaV9fKSBcCj4gKwlmb3JfZWFjaF9md19kb21haW5fbWFzayhkb21h aW5fXywgRk9SQ0VXQUtFX0FMTCwgZGV2X3ByaXZfXywgaV9fKQo+ICAgCj4gICAjZGVmaW5lIERF Vl9JTkZPX0ZPUl9FQUNIX0ZMQUcoZnVuYywgc2VwKSBcCj4gICAJZnVuYyhpc19tb2JpbGUpIHNl cCBcCj4gQEAgLTI5OTgsOCArMzAyMywxMCBAQCBleHRlcm4gdm9pZCBpbnRlbF9kaXNwbGF5X3By aW50X2Vycm9yX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKmUsCj4gICAg KiBtdXN0IGJlIHNldCB0byBwcmV2ZW50IEdUIGNvcmUgZnJvbSBwb3dlciBkb3duIGFuZCBzdGFs ZSB2YWx1ZXMgYmVpbmcKPiAgICAqIHJldHVybmVkLgo+ICAgICovCj4gLXZvaWQgZ2VuNl9ndF9m b3JjZV93YWtlX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBmd19l bmdpbmUpOwo+IC12b2lkIGdlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCBpbnQgZndfZW5naW5lKTsKPiArdm9pZCBnZW42X2d0X2ZvcmNlX3dh a2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJICAgIHVuc2ln bmVkIGZ3X2RvbWFpbnMpOwo+ICt2b2lkIGdlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkgICAgdW5zaWduZWQgZndfZG9tYWlucyk7 Cj4gICB2b2lkIGFzc2VydF9mb3JjZV93YWtlX2luYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gICAKPiAgIGludCBzYW5keWJyaWRnZV9wY29kZV9yZWFkKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIG1ib3gsIHUzMiAqdmFsKTsKPiBAQCAt MzAzMSwxMyArMzA1OCw2IEBAIHZvaWQgdmx2X2ZsaXNkc2lfd3JpdGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcmVnLCB1MzIgdmFsKTsKPiAgIGludCB2bHZfZ3B1X2Zy ZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKTsKPiAgIGludCB2 bHZfZnJlcV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFs KTsKPiAgIAo+IC0jZGVmaW5lIEZPUkNFV0FLRV9SRU5ERVIJKDEgPDwgMCkKPiAtI2RlZmluZSBG T1JDRVdBS0VfTUVESUEJCSgxIDw8IDEpCj4gLSNkZWZpbmUgRk9SQ0VXQUtFX0JMSVRURVIJKDEg PDwgMikKPiAtI2RlZmluZSBGT1JDRVdBS0VfQUxMCQkoRk9SQ0VXQUtFX1JFTkRFUiB8IEZPUkNF V0FLRV9NRURJQSB8IFwKPiAtCQkJCQlGT1JDRVdBS0VfQkxJVFRFUikKPiAtCj4gLQo+ICAgI2Rl ZmluZSBJOTE1X1JFQUQ4KHJlZykJCWRldl9wcml2LT51bmNvcmUuZnVuY3MubW1pb19yZWFkYihk ZXZfcHJpdiwgKHJlZyksIHRydWUpCj4gICAjZGVmaW5lIEk5MTVfV1JJVEU4KHJlZywgdmFsKQlk ZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLm1taW9fd3JpdGViKGRldl9wcml2LCAocmVnKSwgKHZhbCks IHRydWUpCj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5j b3JlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+IGluZGV4IDA2OWZl N2EuLjg1ZTQ2YjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5j b3JlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+IEBAIC02 Nyw3ICs2Nyw3IEBAIHN0YXRpYyB2b2lkIF9fZ2VuNl9ndF9mb3JjZV93YWtlX3Jlc2V0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQg X19nZW42X2d0X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiAtCQkJCQkJCWludCBmd19lbmdpbmUpCj4gKwkJCQkgICAgIGludCBmd19lbmdpbmUpCj4g ICB7Cj4gICAJaWYgKHdhaXRfZm9yX2F0b21pYygoX19yYXdfaTkxNV9yZWFkMzIoZGV2X3ByaXYs IEZPUkNFV0FLRV9BQ0spICYgMSkgPT0gMCwKPiAgIAkJCSAgICBGT1JDRVdBS0VfQUNLX1RJTUVP VVRfTVMpKQo+IEBAIC05Myw3ICs5Myw3IEBAIHN0YXRpYyB2b2lkIF9fZ2VuN19ndF9mb3JjZV93 YWtlX210X3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIH0KPiAg IAo+ICAgc3RhdGljIHZvaWQgX19nZW43X2d0X2ZvcmNlX3dha2VfbXRfZ2V0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCQkJCWludCBmd19lbmdpbmUpCj4gKwkJCQkJ aW50IGZ3X2VuZ2luZSkKPiAgIHsKPiAgIAl1MzIgZm9yY2V3YWtlX2FjazsKPiAgIAo+IEBAIC0x MjksNyArMTI5LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9ndF9jaGVja19maWZvZGJnKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgX19n ZW42X2d0X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiAtCQkJCQkJCWludCBmd19lbmdpbmUpCj4gKwkJCQkgICAgIGludCBmd19lbmdpbmUpCj4gICB7 Cj4gICAJX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBGT1JDRVdBS0UsIDApOwo+ICAgCS8q IHNvbWV0aGluZyBmcm9tIHNhbWUgY2FjaGVsaW5lLCBidXQgIUZPUkNFV0FLRSAqLwo+IEBAIC0x MzgsNyArMTM4LDcgQEAgc3RhdGljIHZvaWQgX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQg X19nZW43X2d0X2ZvcmNlX3dha2VfbXRfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiAtCQkJCQkJCWludCBmd19lbmdpbmUpCj4gKwkJCQkJaW50IGZ3X2VuZ2luZSkKPiAg IHsKPiAgIAlfX3Jhd19pOTE1X3dyaXRlMzIoZGV2X3ByaXYsIEZPUkNFV0FLRV9NVCwKPiAgIAkJ CSAgIF9NQVNLRURfQklUX0RJU0FCTEUoRk9SQ0VXQUtFX0tFUk5FTCkpOwo+IEBAIC0xODcsNyAr MTg3LDcgQEAgc3RhdGljIHZvaWQgdmx2X2ZvcmNlX3dha2VfcmVzZXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZCBfX3Zsdl9mb3Jj ZV93YWtlX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkJCWlu dCBmd19lbmdpbmUpCj4gKwkJCQkgaW50IGZ3X2VuZ2luZSkKPiAgIHsKPiAgIAkvKiBDaGVjayBm b3IgUmVuZGVyIEVuZ2luZSAqLwo+ICAgCWlmIChGT1JDRVdBS0VfUkVOREVSICYgZndfZW5naW5l KSB7Cj4gQEAgLTIyNyw5ICsyMjcsOCBAQCBzdGF0aWMgdm9pZCBfX3Zsdl9mb3JjZV93YWtlX2dl dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICB9Cj4gICAKPiAgIHN0YXRp YyB2b2lkIF9fdmx2X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiAtCQkJCQlpbnQgZndfZW5naW5lKQo+ICsJCQkJIGludCBmd19lbmdpbmUpCj4gICB7 Cj4gLQo+ICAgCS8qIENoZWNrIGZvciBSZW5kZXIgRW5naW5lICovCj4gICAJaWYgKEZPUkNFV0FL RV9SRU5ERVIgJiBmd19lbmdpbmUpCj4gICAJCV9fcmF3X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwg Rk9SQ0VXQUtFX1ZMViwKPiBAQCAtMjQ3LDM3ICsyNDYsNiBAQCBzdGF0aWMgdm9pZCBfX3Zsdl9m b3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJCWdl bjZfZ3RfY2hlY2tfZmlmb2RiZyhkZXZfcHJpdik7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQg dmx2X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50 IGZ3X2VuZ2luZSkKPiAtewo+IC0JaWYgKGZ3X2VuZ2luZSAmIEZPUkNFV0FLRV9SRU5ERVIgJiYK PiAtCSAgICBkZXZfcHJpdi0+dW5jb3JlLmZ3X3JlbmRlcmNvdW50KysgIT0gMCkKPiAtCQlmd19l bmdpbmUgJj0gfkZPUkNFV0FLRV9SRU5ERVI7Cj4gLQlpZiAoZndfZW5naW5lICYgRk9SQ0VXQUtF X01FRElBICYmCj4gLQkgICAgZGV2X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50KysgIT0gMCkK PiAtCQlmd19lbmdpbmUgJj0gfkZPUkNFV0FLRV9NRURJQTsKPiAtCj4gLQlpZiAoZndfZW5naW5l KQo+IC0JCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsIGZ3 X2VuZ2luZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHZsdl9mb3JjZV93YWtlX3B1dChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBmd19lbmdpbmUpCj4gLXsKPiAtCWlm IChmd19lbmdpbmUgJiBGT1JDRVdBS0VfUkVOREVSKSB7Cj4gLQkJV0FSTl9PTighZGV2X3ByaXYt PnVuY29yZS5md19yZW5kZXJjb3VudCk7Cj4gLQkJaWYgKC0tZGV2X3ByaXYtPnVuY29yZS5md19y ZW5kZXJjb3VudCAhPSAwKQo+IC0JCQlmd19lbmdpbmUgJj0gfkZPUkNFV0FLRV9SRU5ERVI7Cj4g LQl9Cj4gLQo+IC0JaWYgKGZ3X2VuZ2luZSAmIEZPUkNFV0FLRV9NRURJQSkgewo+IC0JCVdBUk5f T04oIWRldl9wcml2LT51bmNvcmUuZndfbWVkaWFjb3VudCk7Cj4gLQkJaWYgKC0tZGV2X3ByaXYt PnVuY29yZS5md19tZWRpYWNvdW50ICE9IDApCj4gLQkJCWZ3X2VuZ2luZSAmPSB+Rk9SQ0VXQUtF X01FRElBOwo+IC0JfQo+IC0KPiAtCWlmIChmd19lbmdpbmUpCj4gLQkJZGV2X3ByaXYtPnVuY29y ZS5mdW5jcy5mb3JjZV93YWtlX3B1dChkZXZfcHJpdiwgZndfZW5naW5lKTsKPiAtfQo+IC0KPiAg IHN0YXRpYyB2b2lkIF9fZ2VuOV9ndF9mb3JjZV93YWtlX210X3Jlc2V0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiAgIHsKPiAgIAlfX3Jhd19pOTE1X3dyaXRlMzIoZGV2X3By aXYsIEZPUkNFV0FLRV9SRU5ERVJfR0VOOSwKPiBAQCAtMzY3LDgwICszMzUsNDAgQEAgX19nZW45 X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IGZ3 X2VuZ2luZSkKPiAgIAkJCQlfTUFTS0VEX0JJVF9ESVNBQkxFKEZPUkNFV0FLRV9LRVJORUwpKTsK PiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZAo+IC1nZW45X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IGZ3X2VuZ2luZSkKPiAtewo+IC0JaWYgKEZP UkNFV0FLRV9SRU5ERVIgJiBmd19lbmdpbmUpIHsKPiAtCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5m d19yZW5kZXJjb3VudCsrID09IDApCj4gLQkJCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vf d2FrZV9nZXQoZGV2X3ByaXYsCj4gLQkJCQkJCQlGT1JDRVdBS0VfUkVOREVSKTsKPiAtCX0KPiAt Cj4gLQlpZiAoRk9SQ0VXQUtFX01FRElBICYgZndfZW5naW5lKSB7Cj4gLQkJaWYgKGRldl9wcml2 LT51bmNvcmUuZndfbWVkaWFjb3VudCsrID09IDApCj4gLQkJCWRldl9wcml2LT51bmNvcmUuZnVu Y3MuZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsCj4gLQkJCQkJCQlGT1JDRVdBS0VfTUVESUEpOwo+ IC0JfQo+IC0KPiAtCWlmIChGT1JDRVdBS0VfQkxJVFRFUiAmIGZ3X2VuZ2luZSkgewo+IC0JCWlm IChkZXZfcHJpdi0+dW5jb3JlLmZ3X2JsaXR0ZXJjb3VudCsrID09IDApCj4gLQkJCWRldl9wcml2 LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsCj4gLQkJCQkJCQlGT1JDRVdB S0VfQkxJVFRFUik7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkCj4gLWdlbjlfZm9yY2Vf d2FrZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgZndfZW5naW5l KQo+IC17Cj4gLQlpZiAoRk9SQ0VXQUtFX1JFTkRFUiAmIGZ3X2VuZ2luZSkgewo+IC0JCVdBUk5f T04oZGV2X3ByaXYtPnVuY29yZS5md19yZW5kZXJjb3VudCA9PSAwKTsKPiAtCQlpZiAoLS1kZXZf cHJpdi0+dW5jb3JlLmZ3X3JlbmRlcmNvdW50ID09IDApCj4gLQkJCWRldl9wcml2LT51bmNvcmUu ZnVuY3MuZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYsCj4gLQkJCQkJCQlGT1JDRVdBS0VfUkVOREVS KTsKPiAtCX0KPiAtCj4gLQlpZiAoRk9SQ0VXQUtFX01FRElBICYgZndfZW5naW5lKSB7Cj4gLQkJ V0FSTl9PTihkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291bnQgPT0gMCk7Cj4gLQkJaWYgKC0t ZGV2X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50ID09IDApCj4gLQkJCWRldl9wcml2LT51bmNv cmUuZnVuY3MuZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYsCj4gLQkJCQkJCQlGT1JDRVdBS0VfTUVE SUEpOwo+IC0JfQo+IC0KPiAtCWlmIChGT1JDRVdBS0VfQkxJVFRFUiAmIGZ3X2VuZ2luZSkgewo+ IC0JCVdBUk5fT04oZGV2X3ByaXYtPnVuY29yZS5md19ibGl0dGVyY291bnQgPT0gMCk7Cj4gLQkJ aWYgKC0tZGV2X3ByaXYtPnVuY29yZS5md19ibGl0dGVyY291bnQgPT0gMCkKPiAtCQkJZGV2X3By aXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1dChkZXZfcHJpdiwKPiAtCQkJCQkJCUZPUkNF V0FLRV9CTElUVEVSKTsKPiAtCX0KPiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lkIGdlbjZfZm9yY2Vf d2FrZV90aW1lcih1bnNpZ25lZCBsb25nIGFyZykKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9ICh2b2lkICopYXJnOwo+ICsJc3RydWN0IGludGVsX3VuY29yZV9m b3JjZXdha2VfZG9tYWluICpkb21haW4gPSAodm9pZCAqKWFyZzsKPiAgIAl1bnNpZ25lZCBsb25n IGlycWZsYWdzOwo+ICAgCj4gLQlhc3NlcnRfZGV2aWNlX25vdF9zdXNwZW5kZWQoZGV2X3ByaXYp Owo+ICsJYXNzZXJ0X2RldmljZV9ub3Rfc3VzcGVuZGVkKGRvbWFpbi0+aTkxNSk7Cj4gICAKPiAt CXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKPiAt CVdBUk5fT04oIWRldl9wcml2LT51bmNvcmUuZm9yY2V3YWtlX2NvdW50KTsKPiArCXNwaW5fbG9j a19pcnFzYXZlKCZkb21haW4tPmk5MTUtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gKwlXQVJO X09OKCFkb21haW4tPndha2VfY291bnQpOwo+ICAgCj4gLQlpZiAoLS1kZXZfcHJpdi0+dW5jb3Jl LmZvcmNld2FrZV9jb3VudCA9PSAwKQo+IC0JCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vf d2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gKwlpZiAoLS1kb21haW4t Pndha2VfY291bnQgPT0gMCkKPiArCQlkb21haW4tPmk5MTUtPnVuY29yZS5mdW5jcy5mb3JjZV93 YWtlX3B1dChkb21haW4tPmk5MTUsCj4gKwkJCQkJCQkgIDEgPDwgZG9tYWluLT5pZCk7Cj4gKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmk5MTUtPnVuY29yZS5sb2NrLCBpcnFmbGFn cyk7Cj4gICB9Cj4gICAKPiAgIHZvaWQgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9yZXNldChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIHJlc3RvcmUpCj4gICB7Cj4gICAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXVuc2lnbmVkIGxv bmcgaXJxZmxhZ3M7Cj4gLQo+IC0JaWYgKGRlbF90aW1lcl9zeW5jKCZkZXZfcHJpdi0+dW5jb3Jl LmZvcmNlX3dha2VfdGltZXIpKQo+IC0JCWdlbjZfZm9yY2Vfd2FrZV90aW1lcigodW5zaWduZWQg bG9uZylkZXZfcHJpdik7Cj4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzLCBmdyA9IDA7Cj4gKwlz dHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmRvbWFpbjsKPiArCWludCBpZDsK PiAgIAo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxh Z3MpOwo+ICAgCS8qIEhvbGQgdW5jb3JlLmxvY2sgYWNyb3NzIHJlc2V0IHRvIHByZXZlbnQgYW55 IHJlZ2lzdGVyIGFjY2Vzcwo+ICAgCSAqIHdpdGggZm9yY2V3YWtlIG5vdCBzZXQgY29ycmVjdGx5 Cj4gICAJICovCj4gLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBp cnFmbGFncyk7Cj4gKwo+ICsJZm9yX2VhY2hfZndfZG9tYWluKGRvbWFpbiwgZGV2X3ByaXYsIGlk KQo+ICsJCWlmIChkb21haW4tPndha2VfY291bnQpCj4gKwkJCWZ3IHw9IDEgPDwgaWQ7Cj4gKwo+ ICsJaWYgKGZ3KQo+ICsJCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9wdXQoZGV2 X3ByaXYsIGZ3KTsKPiAgIAoKSGkgTWlrYSwKCldoeSBkbyBwdXQ/CgpJcyB0aGVyZSBhIHBvc3Np YmlsaXR5IG9mIGdldHRpbmcgZ2V0ICYgcHV0IGNvdW50IG1pc21hdGNoPyBmb3IgZXhhbXBsZSwK MS4gV2UgUmVhZCB0aGUgcmVnaXN0ZXIKICAgIC0+IGZvcmNld2FrZV9nZXQgJiBzdGFydCBkb21h aW5fdGltZXIuIChjb3VudCA9IDEpCjIuIE5vdyB3ZSBjYWxsICJpbnRlbF91bmNvcmVfZm9yY2V3 YWtlX3Jlc2V0IiB3aGljaCBkb2VzIGEgcHV0LiAoY291bnQgPSAwKQozLiBub3cgdGhlIGRvbWFp bl90aW1lciBmcm9tIHN0ZXAgIzEgY29tZXMgKGNvdW50IC0xKT8gcmlnaHQ/CiAgICBvciBpIGFt IG1pc3Npbmcgc29tZXRoaW5nIGhlcmU/CgoKT3RoZXJzIExvb2tzIGZpbmUgdG8gbWUuCkFja2Vk LWJ5OiBEZWVwYWsgUyA8ZGVlcGFrLnNAbGludXguaW50ZWwuY29tPgoKPiAgIAlpZiAoSVNfVkFM TEVZVklFVyhkZXYpKQo+ICAgCQl2bHZfZm9yY2Vfd2FrZV9yZXNldChkZXZfcHJpdik7Cj4gQEAg LTQ1NCwyOCArMzgyLDYgQEAgdm9pZCBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3Jlc2V0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgcmVzdG9yZSkKPiAgIAkJX19nZW45X2d0X2ZvcmNlX3dh a2VfbXRfcmVzZXQoZGV2X3ByaXYpOwo+ICAgCj4gICAJaWYgKHJlc3RvcmUpIHsgLyogSWYgcmVz ZXQgd2l0aCBhIHVzZXIgZm9yY2V3YWtlLCB0cnkgdG8gcmVzdG9yZSAqLwo+IC0JCXVuc2lnbmVk IGZ3ID0gMDsKPiAtCj4gLQkJaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgewo+IC0JCQlpZiAoZGV2 X3ByaXYtPnVuY29yZS5md19yZW5kZXJjb3VudCkKPiAtCQkJCWZ3IHw9IEZPUkNFV0FLRV9SRU5E RVI7Cj4gLQo+IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50KQo+IC0JCQkJ ZncgfD0gRk9SQ0VXQUtFX01FRElBOwo+IC0JCX0gZWxzZSBpZiAoSVNfR0VOOShkZXYpKSB7Cj4g LQkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X3JlbmRlcmNvdW50KQo+IC0JCQkJZncgfD0gRk9S Q0VXQUtFX1JFTkRFUjsKPiAtCj4gLQkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291 bnQpCj4gLQkJCQlmdyB8PSBGT1JDRVdBS0VfTUVESUE7Cj4gLQo+IC0JCQlpZiAoZGV2X3ByaXYt PnVuY29yZS5md19ibGl0dGVyY291bnQpCj4gLQkJCQlmdyB8PSBGT1JDRVdBS0VfQkxJVFRFUjsK PiAtCQl9IGVsc2Ugewo+IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5mb3JjZXdha2VfY291bnQp Cj4gLQkJCQlmdyA9IEZPUkNFV0FLRV9BTEw7Cj4gLQkJfQo+IC0KPiAgIAkJaWYgKGZ3KQo+ICAg CQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgZncpOwo+ ICAgCj4gQEAgLTUzMywyOCArNDM5LDI4IEBAIHZvaWQgaW50ZWxfdW5jb3JlX3Nhbml0aXplKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAgKiBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBv ZiB0aGUgc2VxdWVuY2UgZm9sbG93ZWQgYnkgYSBjYWxsIHRvCj4gICAgKiBnZW42X2d0X2ZvcmNl X3dha2VfcHV0KCkgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UuCj4gICAgKi8KPiAtdm9pZCBn ZW42X2d0X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwg aW50IGZ3X2VuZ2luZSkKPiArdm9pZCBnZW42X2d0X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJICAgIHVuc2lnbmVkIGZ3X2RvbWFpbnMpCj4g ICB7Cj4gICAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiArCXN0cnVjdCBpbnRlbF91bmNvcmVf Zm9yY2V3YWtlX2RvbWFpbiAqZG9tYWluOwo+ICsJaW50IGlkOwo+ICAgCj4gICAJaWYgKCFkZXZf cHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0KQo+ICAgCQlyZXR1cm47Cj4gICAKPiAt CWludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCgp5b3UgbmVlZCB0byBjaGFuZ2Ug dGhpcyBpbiBQYXRjaCAjMgoKPiAgIAlXQVJOX09OKCFwbV9ydW50aW1lX2FjdGl2ZSgmZGV2X3By aXYtPmRldi0+cGRldi0+ZGV2KSk7Cj4gICAKPiArCWZ3X2RvbWFpbnMgJj0gZGV2X3ByaXYtPnVu Y29yZS5md19kb21haW5zOwo+ICsKPiAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVu Y29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gICAKPiAtCWlmIChJU19HRU45KGRldl9wcml2LT5kZXYp KSB7Cj4gLQkJZ2VuOV9mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgZndfZW5naW5lKTsKPiAtCX0g ZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdi0+ZGV2KSkgewo+IC0JCXZsdl9mb3JjZV93 YWtlX2dldChkZXZfcHJpdiwgZndfZW5naW5lKTsKPiAtCX0gZWxzZSB7Cj4gLQkJaWYgKGRldl9w cml2LT51bmNvcmUuZm9yY2V3YWtlX2NvdW50KysgPT0gMCkKPiAtCQkJZGV2X3ByaXYtPnVuY29y ZS5mdW5jcy5mb3JjZV93YWtlX2dldChkZXZfcHJpdiwKPiAtCQkJCQkJCSAgICAgIEZPUkNFV0FL RV9BTEwpOwo+IC0JfQo+ICsJZm9yX2VhY2hfZndfZG9tYWluX21hc2soZG9tYWluLCBmd19kb21h aW5zLCBkZXZfcHJpdiwgaWQpCj4gKwkJaWYgKGRvbWFpbi0+d2FrZV9jb3VudCsrKQo+ICsJCQlm d19kb21haW5zICY9IH4oMSA8PCBpZCk7Cj4gKwo+ICsJaWYgKGZ3X2RvbWFpbnMpCj4gKwkJZGV2 X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgZndfZG9tYWlucyk7 Cj4gICAKPiAgIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ss IGlycWZsYWdzKTsKPiAgIH0KPiBAQCAtNTYyLDI2ICs0NjgsMjcgQEAgdm9pZCBnZW42X2d0X2Zv cmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IGZ3X2Vu Z2luZSkKPiAgIC8qCj4gICAgKiBzZWUgZ2VuNl9ndF9mb3JjZV93YWtlX2dldCgpCj4gICAgKi8K PiAtdm9pZCBnZW42X2d0X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgaW50IGZ3X2VuZ2luZSkKPiArdm9pZCBnZW42X2d0X2ZvcmNlX3dha2VfcHV0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJICAgIHVuc2lnbmVkIGZ3X2Rv bWFpbnMpCj4gICB7Cj4gICAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiArCXN0cnVjdCBpbnRl bF91bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiAqZG9tYWluOwo+ICsJaW50IGlkOwo+ICAgCj4gICAJ aWYgKCFkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0KQo+ICAgCQlyZXR1cm47 Cj4gICAKPiArCWZ3X2RvbWFpbnMgJj0gZGV2X3ByaXYtPnVuY29yZS5md19kb21haW5zOwo+ICsK PiAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7 Cj4gICAKPiAtCWlmIChJU19HRU45KGRldl9wcml2LT5kZXYpKSB7Cj4gLQkJZ2VuOV9mb3JjZV93 YWtlX3B1dChkZXZfcHJpdiwgZndfZW5naW5lKTsKPiAtCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklF VyhkZXZfcHJpdi0+ZGV2KSkgewo+IC0JCXZsdl9mb3JjZV93YWtlX3B1dChkZXZfcHJpdiwgZndf ZW5naW5lKTsKPiAtCX0gZWxzZSB7Cj4gLQkJV0FSTl9PTighZGV2X3ByaXYtPnVuY29yZS5mb3Jj ZXdha2VfY291bnQpOwo+IC0JCWlmICgtLWRldl9wcml2LT51bmNvcmUuZm9yY2V3YWtlX2NvdW50 ID09IDApIHsKPiAtCQkJZGV2X3ByaXYtPnVuY29yZS5mb3JjZXdha2VfY291bnQrKzsKPiAtCQkJ bW9kX3RpbWVyX3Bpbm5lZCgmZGV2X3ByaXYtPnVuY29yZS5mb3JjZV93YWtlX3RpbWVyLAo+IC0J CQkJCSBqaWZmaWVzICsgMSk7Cj4gLQkJfQo+ICsJZm9yX2VhY2hfZndfZG9tYWluX21hc2soZG9t YWluLCBmd19kb21haW5zLCBkZXZfcHJpdiwgaWQpIHsKPiArCQlXQVJOX09OKCFkb21haW4tPndh a2VfY291bnQpOwo+ICsJCWlmICgtLWRvbWFpbi0+d2FrZV9jb3VudCkKPiArCQkJY29udGludWU7 Cj4gKwo+ICsJCWRvbWFpbi0+d2FrZV9jb3VudCsrOwo+ICsJCW1vZF90aW1lcl9waW5uZWQoJmRv bWFpbi0+dGltZXIsIGppZmZpZXMgKyAxKTsKPiAgIAl9Cj4gICAKPiAgIAlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKPiBAQCAtNTg5LDEw ICs0OTYsMTQgQEAgdm9pZCBnZW42X2d0X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgaW50IGZ3X2VuZ2luZSkKPiAgIAo+ICAgdm9pZCBhc3NlcnRfZm9y Y2Vfd2FrZV9pbmFjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICB7 Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmRvbWFpbjsKPiArCWlu dCBpOwo+ICsKPiAgIAlpZiAoIWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQp Cj4gICAJCXJldHVybjsKPiAgIAo+IC0JV0FSTl9PTihkZXZfcHJpdi0+dW5jb3JlLmZvcmNld2Fr ZV9jb3VudCA+IDApOwo+ICsJZm9yX2VhY2hfZndfZG9tYWluKGRvbWFpbiwgZGV2X3ByaXYsIGkp Cj4gKwkJV0FSTl9PTihkb21haW4tPndha2VfY291bnQpOwo+ICAgfQo+ICAgCj4gICAvKiBXZSBn aXZlIGZhc3QgcGF0aHMgZm9yIHRoZSByZWFsbHkgY29vbCByZWdpc3RlcnMgKi8KPiBAQCAtNzU4 LDE5ICs2NjksMzYgQEAgX19nZW4yX3JlYWQoNjQpCj4gICAJdHJhY2VfaTkxNV9yZWdfcncoZmFs c2UsIHJlZywgdmFsLCBzaXplb2YodmFsKSwgdHJhY2UpOyBcCj4gICAJcmV0dXJuIHZhbAo+ICAg Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgICB1bnNpZ25lZCBmd19kb21haW5zKQo+ICt7Cj4g KwlzdHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmRvbWFpbjsKPiArCWludCBp Owo+ICsKPiArCWlmIChXQVJOX09OKCFmd19kb21haW5zKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ LyogSWRlYWxseSBHQ0Mgd291bGQgYmUgY29uc3RhbnQtZm9sZCBhbmQgZWxpbWluYXRlIHRoaXMg bG9vcCAqLwo+ICsJZm9yX2VhY2hfZndfZG9tYWluX21hc2soZG9tYWluLCBmd19kb21haW5zLCBk ZXZfcHJpdiwgaSkgewo+ICsJCWlmIChkb21haW4tPndha2VfY291bnQpCj4gKwkJCWZ3X2RvbWFp bnMgJj0gfigxIDw8IGkpOwo+ICsJCWVsc2UKPiArCQkJZG9tYWluLT53YWtlX2NvdW50Kys7Cj4g Kwo+ICsJCW1vZF90aW1lcl9waW5uZWQoJmRvbWFpbi0+dGltZXIsIGppZmZpZXMgKyAxKTsKPiAr CX0KPiArCj4gKwlpZiAoZndfZG9tYWlucykKPiArCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZv cmNlX3dha2VfZ2V0KGRldl9wcml2LCBmd19kb21haW5zKTsKPiArfQo+ICsKPiAgICNkZWZpbmUg X19nZW42X3JlYWQoeCkgXAo+ICAgc3RhdGljIHUjI3ggXAo+ICAgZ2VuNl9yZWFkIyN4KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgb2ZmX3QgcmVnLCBib29sIHRyYWNlKSB7IFwK PiAgIAlHRU42X1JFQURfSEVBREVSKHgpOyBcCj4gICAJaHN3X3VuY2xhaW1lZF9yZWdfZGVidWco ZGV2X3ByaXYsIHJlZywgdHJ1ZSwgdHJ1ZSk7IFwKPiAtCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZv cmNld2FrZV9jb3VudCA9PSAwICYmIFwKPiAtCSAgICBORUVEU19GT1JDRV9XQUtFKChkZXZfcHJp diksIChyZWcpKSkgeyBcCj4gLQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dl dChkZXZfcHJpdiwgXAo+IC0JCQkJCQkgICAgICBGT1JDRVdBS0VfQUxMKTsgXAo+IC0JCWRldl9w cml2LT51bmNvcmUuZm9yY2V3YWtlX2NvdW50Kys7IFwKPiAtCQltb2RfdGltZXJfcGlubmVkKCZk ZXZfcHJpdi0+dW5jb3JlLmZvcmNlX3dha2VfdGltZXIsIFwKPiAtCQkJCSBqaWZmaWVzICsgMSk7 IFwKPiAtCX0gXAo+ICsJaWYgKE5FRURTX0ZPUkNFX1dBS0UoKGRldl9wcml2KSwgKHJlZykpKSBc Cj4gKwkJX19mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX1JFTkRFUik7IFwKPiAg IAl2YWwgPSBfX3Jhd19pOTE1X3JlYWQjI3goZGV2X3ByaXYsIHJlZyk7IFwKPiAgIAloc3dfdW5j bGFpbWVkX3JlZ19kZWJ1ZyhkZXZfcHJpdiwgcmVnLCB0cnVlLCBmYWxzZSk7IFwKPiAgIAlHRU42 X1JFQURfRk9PVEVSOyBcCj4gQEAgLTc3OSw0NSArNzA3LDI3IEBAIGdlbjZfcmVhZCMjeChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIG9mZl90IHJlZywgYm9vbCB0cmFjZSkgeyBc Cj4gICAjZGVmaW5lIF9fdmx2X3JlYWQoeCkgXAo+ICAgc3RhdGljIHUjI3ggXAo+ICAgdmx2X3Jl YWQjI3goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBvZmZfdCByZWcsIGJvb2wg dHJhY2UpIHsgXAo+IC0JdW5zaWduZWQgZndlbmdpbmUgPSAwOyBcCj4gICAJR0VONl9SRUFEX0hF QURFUih4KTsgXAo+IC0JaWYgKEZPUkNFV0FLRV9WTFZfUkVOREVSX1JBTkdFX09GRlNFVChyZWcp KSB7IFwKPiAtCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19yZW5kZXJjb3VudCA9PSAwKSBcCj4g LQkJCWZ3ZW5naW5lID0gRk9SQ0VXQUtFX1JFTkRFUjsgXAo+IC0JfSBlbHNlIGlmIChGT1JDRVdB S0VfVkxWX01FRElBX1JBTkdFX09GRlNFVChyZWcpKSB7IFwKPiAtCQlpZiAoZGV2X3ByaXYtPnVu Y29yZS5md19tZWRpYWNvdW50ID09IDApIFwKPiAtCQkJZndlbmdpbmUgPSBGT1JDRVdBS0VfTUVE SUE7IFwKPiAtCX0gIFwKPiAtCWlmIChmd2VuZ2luZSkgXAo+IC0JCWRldl9wcml2LT51bmNvcmUu ZnVuY3MuZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsIGZ3ZW5naW5lKTsgXAo+ICsJaWYgKEZPUkNF V0FLRV9WTFZfUkVOREVSX1JBTkdFX09GRlNFVChyZWcpKSBcCj4gKwkJX19mb3JjZV93YWtlX2dl dChkZXZfcHJpdiwgRk9SQ0VXQUtFX1JFTkRFUik7IFwKPiArCWVsc2UgaWYgKEZPUkNFV0FLRV9W TFZfTUVESUFfUkFOR0VfT0ZGU0VUKHJlZykpIFwKPiArCQlfX2ZvcmNlX3dha2VfZ2V0KGRldl9w cml2LCBGT1JDRVdBS0VfTUVESUEpOyBcCj4gICAJdmFsID0gX19yYXdfaTkxNV9yZWFkIyN4KGRl dl9wcml2LCByZWcpOyBcCj4gLQlpZiAoZndlbmdpbmUpIFwKPiAtCQlkZXZfcHJpdi0+dW5jb3Jl LmZ1bmNzLmZvcmNlX3dha2VfcHV0KGRldl9wcml2LCBmd2VuZ2luZSk7IFwKPiAgIAlHRU42X1JF QURfRk9PVEVSOyBcCj4gICB9Cj4gICAKPiAgICNkZWZpbmUgX19jaHZfcmVhZCh4KSBcCj4gICBz dGF0aWMgdSMjeCBcCj4gICBjaHZfcmVhZCMjeChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsIG9mZl90IHJlZywgYm9vbCB0cmFjZSkgeyBcCj4gLQl1bnNpZ25lZCBmd2VuZ2luZSA9 IDA7IFwKPiAgIAlHRU42X1JFQURfSEVBREVSKHgpOyBcCj4gLQlpZiAoRk9SQ0VXQUtFX0NIVl9S RU5ERVJfUkFOR0VfT0ZGU0VUKHJlZykpIHsgXAo+IC0JCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3 X3JlbmRlcmNvdW50ID09IDApIFwKPiAtCQkJZndlbmdpbmUgPSBGT1JDRVdBS0VfUkVOREVSOyBc Cj4gLQl9IGVsc2UgaWYgKEZPUkNFV0FLRV9DSFZfTUVESUFfUkFOR0VfT0ZGU0VUKHJlZykpIHsg XAo+IC0JCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291bnQgPT0gMCkgXAo+IC0JCQlm d2VuZ2luZSA9IEZPUkNFV0FLRV9NRURJQTsgXAo+IC0JfSBlbHNlIGlmIChGT1JDRVdBS0VfQ0hW X0NPTU1PTl9SQU5HRV9PRkZTRVQocmVnKSkgeyBcCj4gLQkJaWYgKGRldl9wcml2LT51bmNvcmUu ZndfcmVuZGVyY291bnQgPT0gMCkgXAo+IC0JCQlmd2VuZ2luZSB8PSBGT1JDRVdBS0VfUkVOREVS OyBcCj4gLQkJaWYgKGRldl9wcml2LT51bmNvcmUuZndfbWVkaWFjb3VudCA9PSAwKSBcCj4gLQkJ CWZ3ZW5naW5lIHw9IEZPUkNFV0FLRV9NRURJQTsgXAo+IC0JfSBcCj4gLQlpZiAoZndlbmdpbmUp IFwKPiAtCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0KGRldl9wcml2LCBm d2VuZ2luZSk7IFwKPiArCWlmIChGT1JDRVdBS0VfQ0hWX1JFTkRFUl9SQU5HRV9PRkZTRVQocmVn KSkgXAo+ICsJCV9fZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9SRU5ERVIpOyBc Cj4gKwllbHNlIGlmIChGT1JDRVdBS0VfQ0hWX01FRElBX1JBTkdFX09GRlNFVChyZWcpKSBcCj4g KwkJX19mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX01FRElBKTsgXAo+ICsJZWxz ZSBpZiAoRk9SQ0VXQUtFX0NIVl9DT01NT05fUkFOR0VfT0ZGU0VUKHJlZykpIFwKPiArCQlfX2Zv cmNlX3dha2VfZ2V0KGRldl9wcml2LCBcCj4gKwkJCQkgRk9SQ0VXQUtFX1JFTkRFUiB8IEZPUkNF V0FLRV9NRURJQSk7IFwKPiAgIAl2YWwgPSBfX3Jhd19pOTE1X3JlYWQjI3goZGV2X3ByaXYsIHJl Zyk7IFwKPiAtCWlmIChmd2VuZ2luZSkgXAo+IC0JCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9y Y2Vfd2FrZV9wdXQoZGV2X3ByaXYsIGZ3ZW5naW5lKTsgXAo+ICAgCUdFTjZfUkVBRF9GT09URVI7 IFwKPiAgIH0KPiAgIAo+IEBAIC04MjcsMzIgKzczNywyMSBAQCBjaHZfcmVhZCMjeChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIG9mZl90IHJlZywgYm9vbCB0cmFjZSkgeyBcCj4g ICAjZGVmaW5lIF9fZ2VuOV9yZWFkKHgpIFwKPiAgIHN0YXRpYyB1IyN4IFwKPiAgIGdlbjlfcmVh ZCMjeChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIG9mZl90IHJlZywgYm9vbCB0 cmFjZSkgeyBcCj4gKwl1bnNpZ25lZCBmd19lbmdpbmU7IFwKPiAgIAlHRU42X1JFQURfSEVBREVS KHgpOyBcCj4gLQlpZiAoIVNLTF9ORUVEU19GT1JDRV9XQUtFKChkZXZfcHJpdiksIChyZWcpKSkg eyBcCj4gLQkJdmFsID0gX19yYXdfaTkxNV9yZWFkIyN4KGRldl9wcml2LCByZWcpOyBcCj4gLQl9 IGVsc2UgeyBcCj4gLQkJdW5zaWduZWQgZndlbmdpbmUgPSAwOyBcCj4gLQkJaWYgKEZPUkNFV0FL RV9HRU45X1JFTkRFUl9SQU5HRV9PRkZTRVQocmVnKSkgeyBcCj4gLQkJCWlmIChkZXZfcHJpdi0+ dW5jb3JlLmZ3X3JlbmRlcmNvdW50ID09IDApIFwKPiAtCQkJCWZ3ZW5naW5lID0gRk9SQ0VXQUtF X1JFTkRFUjsgXAo+IC0JCX0gZWxzZSBpZiAoRk9SQ0VXQUtFX0dFTjlfTUVESUFfUkFOR0VfT0ZG U0VUKHJlZykpIHsgXAo+IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50ID09 IDApIFwKPiAtCQkJCWZ3ZW5naW5lID0gRk9SQ0VXQUtFX01FRElBOyBcCj4gLQkJfSBlbHNlIGlm IChGT1JDRVdBS0VfR0VOOV9DT01NT05fUkFOR0VfT0ZGU0VUKHJlZykpIHsgXAo+IC0JCQlpZiAo ZGV2X3ByaXYtPnVuY29yZS5md19yZW5kZXJjb3VudCA9PSAwKSBcCj4gLQkJCQlmd2VuZ2luZSB8 PSBGT1JDRVdBS0VfUkVOREVSOyBcCj4gLQkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlh Y291bnQgPT0gMCkgXAo+IC0JCQkJZndlbmdpbmUgfD0gRk9SQ0VXQUtFX01FRElBOyBcCj4gLQkJ fSBlbHNlIHsgXAo+IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19ibGl0dGVyY291bnQgPT0g MCkgXAo+IC0JCQkJZndlbmdpbmUgPSBGT1JDRVdBS0VfQkxJVFRFUjsgXAo+IC0JCX0gXAo+IC0J CWlmIChmd2VuZ2luZSkgXAo+IC0JCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2Vf Z2V0KGRldl9wcml2LCBmd2VuZ2luZSk7IFwKPiAtCQl2YWwgPSBfX3Jhd19pOTE1X3JlYWQjI3go ZGV2X3ByaXYsIHJlZyk7IFwKPiAtCQlpZiAoZndlbmdpbmUpIFwKPiAtCQkJZGV2X3ByaXYtPnVu Y29yZS5mdW5jcy5mb3JjZV93YWtlX3B1dChkZXZfcHJpdiwgZndlbmdpbmUpOyBcCj4gLQl9IFwK PiArCWlmICghU0tMX05FRURTX0ZPUkNFX1dBS0UoKGRldl9wcml2KSwgKHJlZykpKQlcCj4gKwkJ ZndfZW5naW5lID0gMDsgXAo+ICsJZWxzZSBpZiAoRk9SQ0VXQUtFX0dFTjlfUkVOREVSX1JBTkdF X09GRlNFVChyZWcpKQlcCj4gKwkJZndfZW5naW5lID0gRk9SQ0VXQUtFX1JFTkRFUjsgXAo+ICsJ ZWxzZSBpZiAoRk9SQ0VXQUtFX0dFTjlfTUVESUFfUkFOR0VfT0ZGU0VUKHJlZykpIFwKPiArCQlm d19lbmdpbmUgPSBGT1JDRVdBS0VfTUVESUE7IFwKPiArCWVsc2UgaWYgKEZPUkNFV0FLRV9HRU45 X0NPTU1PTl9SQU5HRV9PRkZTRVQocmVnKSkgXAo+ICsJCWZ3X2VuZ2luZSA9IEZPUkNFV0FLRV9S RU5ERVIgfCBGT1JDRVdBS0VfTUVESUE7IFwKPiArCWVsc2UgXAo+ICsJCWZ3X2VuZ2luZSA9IEZP UkNFV0FLRV9CTElUVEVSOyBcCj4gKwlpZiAoZndfZW5naW5lKSBcCj4gKwkJX19mb3JjZV93YWtl X2dldChkZXZfcHJpdiwgZndfZW5naW5lKTsgXAo+ICsJdmFsID0gX19yYXdfaTkxNV9yZWFkIyN4 KGRldl9wcml2LCByZWcpOyBcCj4gICAJR0VONl9SRUFEX0ZPT1RFUjsgXAo+ICAgfQo+ICAgCj4g QEAgLTk4NiwxNyArODg1LDkgQEAgc3RhdGljIHZvaWQgXAo+ICAgZ2VuOF93cml0ZSMjeChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIG9mZl90IHJlZywgdSMjeCB2YWwsIGJvb2wg dHJhY2UpIHsgXAo+ICAgCUdFTjZfV1JJVEVfSEVBREVSOyBcCj4gICAJaHN3X3VuY2xhaW1lZF9y ZWdfZGVidWcoZGV2X3ByaXYsIHJlZywgZmFsc2UsIHRydWUpOyBcCj4gLQlpZiAocmVnIDwgMHg0 MDAwMCAmJiAhaXNfZ2VuOF9zaGFkb3dlZChkZXZfcHJpdiwgcmVnKSkgeyBcCj4gLQkJaWYgKGRl dl9wcml2LT51bmNvcmUuZm9yY2V3YWtlX2NvdW50ID09IDApIFwKPiAtCQkJZGV2X3ByaXYtPnVu Y29yZS5mdW5jcy5mb3JjZV93YWtlX2dldChkZXZfcHJpdiwJXAo+IC0JCQkJCQkJICAgICAgRk9S Q0VXQUtFX0FMTCk7IFwKPiAtCQlfX3Jhd19pOTE1X3dyaXRlIyN4KGRldl9wcml2LCByZWcsIHZh bCk7IFwKPiAtCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5mb3JjZXdha2VfY291bnQgPT0gMCkgXAo+ IC0JCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0KGRldl9wcml2LCBcCj4g LQkJCQkJCQkgICAgICBGT1JDRVdBS0VfQUxMKTsgXAo+IC0JfSBlbHNlIHsgXAo+IC0JCV9fcmF3 X2k5MTVfd3JpdGUjI3goZGV2X3ByaXYsIHJlZywgdmFsKTsgXAo+IC0JfSBcCj4gKwlpZiAocmVn IDwgMHg0MDAwMCAmJiAhaXNfZ2VuOF9zaGFkb3dlZChkZXZfcHJpdiwgcmVnKSkgXAo+ICsJCV9f Zm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9SRU5ERVIpOyBcCj4gKwlfX3Jhd19p OTE1X3dyaXRlIyN4KGRldl9wcml2LCByZWcsIHZhbCk7IFwKPiAgIAloc3dfdW5jbGFpbWVkX3Jl Z19kZWJ1ZyhkZXZfcHJpdiwgcmVnLCBmYWxzZSwgZmFsc2UpOyBcCj4gICAJaHN3X3VuY2xhaW1l ZF9yZWdfZGV0ZWN0KGRldl9wcml2KTsgXAo+ICAgCUdFTjZfV1JJVEVfRk9PVEVSOyBcCj4gQEAg LTEwMDUsMjggKzg5NiwxNyBAQCBnZW44X3dyaXRlIyN4KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgb2ZmX3QgcmVnLCB1IyN4IHZhbCwgYm9vbCB0cmFjZQo+ICAgI2RlZmluZSBf X2Nodl93cml0ZSh4KSBcCj4gICBzdGF0aWMgdm9pZCBcCj4gICBjaHZfd3JpdGUjI3goc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBvZmZfdCByZWcsIHUjI3ggdmFsLCBib29sIHRy YWNlKSB7IFwKPiAtCXVuc2lnbmVkIGZ3ZW5naW5lID0gMDsgXAo+ICAgCWJvb2wgc2hhZG93ZWQg PSBpc19nZW44X3NoYWRvd2VkKGRldl9wcml2LCByZWcpOyBcCj4gICAJR0VONl9XUklURV9IRUFE RVI7IFwKPiAgIAlpZiAoIXNoYWRvd2VkKSB7IFwKPiAtCQlpZiAoRk9SQ0VXQUtFX0NIVl9SRU5E RVJfUkFOR0VfT0ZGU0VUKHJlZykpIHsgXAo+IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19y ZW5kZXJjb3VudCA9PSAwKSBcCj4gLQkJCQlmd2VuZ2luZSA9IEZPUkNFV0FLRV9SRU5ERVI7IFwK PiAtCQl9IGVsc2UgaWYgKEZPUkNFV0FLRV9DSFZfTUVESUFfUkFOR0VfT0ZGU0VUKHJlZykpIHsg XAo+IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50ID09IDApIFwKPiAtCQkJ CWZ3ZW5naW5lID0gRk9SQ0VXQUtFX01FRElBOyBcCj4gLQkJfSBlbHNlIGlmIChGT1JDRVdBS0Vf Q0hWX0NPTU1PTl9SQU5HRV9PRkZTRVQocmVnKSkgeyBcCj4gLQkJCWlmIChkZXZfcHJpdi0+dW5j b3JlLmZ3X3JlbmRlcmNvdW50ID09IDApIFwKPiAtCQkJCWZ3ZW5naW5lIHw9IEZPUkNFV0FLRV9S RU5ERVI7IFwKPiAtCQkJaWYgKGRldl9wcml2LT51bmNvcmUuZndfbWVkaWFjb3VudCA9PSAwKSBc Cj4gLQkJCQlmd2VuZ2luZSB8PSBGT1JDRVdBS0VfTUVESUE7IFwKPiAtCQl9IFwKPiArCQlpZiAo Rk9SQ0VXQUtFX0NIVl9SRU5ERVJfUkFOR0VfT0ZGU0VUKHJlZykpIFwKPiArCQkJX19mb3JjZV93 YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX1JFTkRFUik7IFwKPiArCQllbHNlIGlmIChGT1JD RVdBS0VfQ0hWX01FRElBX1JBTkdFX09GRlNFVChyZWcpKSBcCj4gKwkJCV9fZm9yY2Vfd2FrZV9n ZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9NRURJQSk7IFwKPiArCQllbHNlIGlmIChGT1JDRVdBS0Vf Q0hWX0NPTU1PTl9SQU5HRV9PRkZTRVQocmVnKSkgXAo+ICsJCQlfX2ZvcmNlX3dha2VfZ2V0KGRl dl9wcml2LCBGT1JDRVdBS0VfUkVOREVSIHwgRk9SQ0VXQUtFX01FRElBKTsgXAo+ICAgCX0gXAo+ IC0JaWYgKGZ3ZW5naW5lKSBcCj4gLQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtl X2dldChkZXZfcHJpdiwgZndlbmdpbmUpOyBcCj4gICAJX19yYXdfaTkxNV93cml0ZSMjeChkZXZf cHJpdiwgcmVnLCB2YWwpOyBcCj4gLQlpZiAoZndlbmdpbmUpIFwKPiAtCQlkZXZfcHJpdi0+dW5j b3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0KGRldl9wcml2LCBmd2VuZ2luZSk7IFwKPiAgIAlHRU42 X1dSSVRFX0ZPT1RFUjsgXAo+ICAgfQo+ICAgCj4gQEAgLTEwNTcsMzUgKzkzNywyMiBAQCBzdGF0 aWMgYm9vbCBpc19nZW45X3NoYWRvd2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgdTMyIHJlZykKPiAgIHN0YXRpYyB2b2lkIFwKPiAgIGdlbjlfd3JpdGUjI3goc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBvZmZfdCByZWcsIHUjI3ggdmFsLCBcCj4gICAJCWJv b2wgdHJhY2UpIHsgXAo+ICsJdW5zaWduZWQgZndfZW5naW5lOyBcCj4gICAJR0VONl9XUklURV9I RUFERVI7IFwKPiAtCWlmICghU0tMX05FRURTX0ZPUkNFX1dBS0UoKGRldl9wcml2KSwgKHJlZykp IHx8IFwKPiAtCQkJaXNfZ2VuOV9zaGFkb3dlZChkZXZfcHJpdiwgcmVnKSkgeyBcCj4gLQkJX19y YXdfaTkxNV93cml0ZSMjeChkZXZfcHJpdiwgcmVnLCB2YWwpOyBcCj4gLQl9IGVsc2UgeyBcCj4g LQkJdW5zaWduZWQgZndlbmdpbmUgPSAwOyBcCj4gLQkJaWYgKEZPUkNFV0FLRV9HRU45X1JFTkRF Ul9SQU5HRV9PRkZTRVQocmVnKSkgeyBcCj4gLQkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X3Jl bmRlcmNvdW50ID09IDApIFwKPiAtCQkJCWZ3ZW5naW5lID0gRk9SQ0VXQUtFX1JFTkRFUjsgXAo+ IC0JCX0gZWxzZSBpZiAoRk9SQ0VXQUtFX0dFTjlfTUVESUFfUkFOR0VfT0ZGU0VUKHJlZykpIHsg XAo+IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50ID09IDApIFwKPiAtCQkJ CWZ3ZW5naW5lID0gRk9SQ0VXQUtFX01FRElBOyBcCj4gLQkJfSBlbHNlIGlmIChGT1JDRVdBS0Vf R0VOOV9DT01NT05fUkFOR0VfT0ZGU0VUKHJlZykpIHsgXAo+IC0JCQlpZiAoZGV2X3ByaXYtPnVu Y29yZS5md19yZW5kZXJjb3VudCA9PSAwKSBcCj4gLQkJCQlmd2VuZ2luZSB8PSBGT1JDRVdBS0Vf UkVOREVSOyBcCj4gLQkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291bnQgPT0gMCkg XAo+IC0JCQkJZndlbmdpbmUgfD0gRk9SQ0VXQUtFX01FRElBOyBcCj4gLQkJfSBlbHNlIHsgXAo+ IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19ibGl0dGVyY291bnQgPT0gMCkgXAo+IC0JCQkJ ZndlbmdpbmUgPSBGT1JDRVdBS0VfQkxJVFRFUjsgXAo+IC0JCX0gXAo+IC0JCWlmIChmd2VuZ2lu ZSkgXAo+IC0JCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0KGRldl9wcml2 LCBcCj4gLQkJCQkJZndlbmdpbmUpOyBcCj4gLQkJX19yYXdfaTkxNV93cml0ZSMjeChkZXZfcHJp diwgcmVnLCB2YWwpOyBcCj4gLQkJaWYgKGZ3ZW5naW5lKSBcCj4gLQkJCWRldl9wcml2LT51bmNv cmUuZnVuY3MuZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYsIFwKPiAtCQkJCQlmd2VuZ2luZSk7IFwK PiAtCX0gXAo+ICsJaWYgKCFTS0xfTkVFRFNfRk9SQ0VfV0FLRSgoZGV2X3ByaXYpLCAocmVnKSkg fHwJXAo+ICsJICAgIGlzX2dlbjlfc2hhZG93ZWQoZGV2X3ByaXYsIHJlZykpIFwKPiArCQlmd19l bmdpbmUgPSAwOyBcCj4gKwllbHNlIGlmIChGT1JDRVdBS0VfR0VOOV9SRU5ERVJfUkFOR0VfT0ZG U0VUKHJlZykpIFwKPiArCQlmd19lbmdpbmUgPSBGT1JDRVdBS0VfUkVOREVSOyBcCj4gKwllbHNl IGlmIChGT1JDRVdBS0VfR0VOOV9NRURJQV9SQU5HRV9PRkZTRVQocmVnKSkgXAo+ICsJCWZ3X2Vu Z2luZSA9IEZPUkNFV0FLRV9NRURJQTsgXAo+ICsJZWxzZSBpZiAoRk9SQ0VXQUtFX0dFTjlfQ09N TU9OX1JBTkdFX09GRlNFVChyZWcpKSBcCj4gKwkJZndfZW5naW5lID0gRk9SQ0VXQUtFX1JFTkRF UiB8IEZPUkNFV0FLRV9NRURJQTsgXAo+ICsJZWxzZSBcCj4gKwkJZndfZW5naW5lID0gRk9SQ0VX QUtFX0JMSVRURVI7IFwKPiArCWlmIChmd19lbmdpbmUpIFwKPiArCQlfX2ZvcmNlX3dha2VfZ2V0 KGRldl9wcml2LCBmd19lbmdpbmUpOyBcCj4gKwlfX3Jhd19pOTE1X3dyaXRlIyN4KGRldl9wcml2 LCByZWcsIHZhbCk7IFwKPiAgIAlHRU42X1dSSVRFX0ZPT1RFUjsgXAo+ICAgfQo+ICAgCj4gQEAg LTExMzcsMjEgKzEwMDQsMjQgQEAgZG8geyBcCj4gICB2b2lkIGludGVsX3VuY29yZV9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCj4gLQlzZXR1cF90aW1lcigmZGV2X3By aXYtPnVuY29yZS5mb3JjZV93YWtlX3RpbWVyLAo+IC0JCSAgICBnZW42X2ZvcmNlX3dha2VfdGlt ZXIsICh1bnNpZ25lZCBsb25nKWRldl9wcml2KTsKPiArCXN0cnVjdCBpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2RvbWFpbiAqZG9tYWluOwo+ICsJaW50IGk7Cj4gICAKPiAgIAlfX2ludGVsX3VuY29y ZV9lYXJseV9zYW5pdGl6ZShkZXYsIGZhbHNlKTsKPiAgIAo+ICAgCWlmIChJU19HRU45KGRldikp IHsKPiAgIAkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldCA9IF9fZ2VuOV9m b3JjZV93YWtlX2dldDsKPiAgIAkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1 dCA9IF9fZ2VuOV9mb3JjZV93YWtlX3B1dDsKPiArCQlkZXZfcHJpdi0+dW5jb3JlLmZ3X2RvbWFp bnMgPSBGT1JDRVdBS0VfUkVOREVSIHwKPiArCQkJRk9SQ0VXQUtFX0JMSVRURVIgfCBGT1JDRVdB S0VfTUVESUE7Cj4gICAJfSBlbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldikpIHsKPiAgIAkJZGV2 X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldCA9IF9fdmx2X2ZvcmNlX3dha2VfZ2V0 Owo+ICAgCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0ID0gX192bHZfZm9y Y2Vfd2FrZV9wdXQ7Cj4gKwkJZGV2X3ByaXYtPnVuY29yZS5md19kb21haW5zID0gRk9SQ0VXQUtF X1JFTkRFUiB8IEZPUkNFV0FLRV9NRURJQTsKPiAgIAl9IGVsc2UgaWYgKElTX0hBU1dFTEwoZGV2 KSB8fCBJU19CUk9BRFdFTEwoZGV2KSkgewo+ICAgCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZv cmNlX3dha2VfZ2V0ID0gX19nZW43X2d0X2ZvcmNlX3dha2VfbXRfZ2V0Owo+ICAgCQlkZXZfcHJp di0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0ID0gX19nZW43X2d0X2ZvcmNlX3dha2VfbXRf cHV0Owo+ICsJCWRldl9wcml2LT51bmNvcmUuZndfZG9tYWlucyA9IEZPUkNFV0FLRV9SRU5ERVI7 Cj4gICAJfSBlbHNlIGlmIChJU19JVllCUklER0UoZGV2KSkgewo+ICAgCQl1MzIgZWNvYnVzOwo+ ICAgCj4gQEAgLTExODMsMTEgKzEwNTMsMjEgQEAgdm9pZCBpbnRlbF91bmNvcmVfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgCQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93 YWtlX3B1dCA9Cj4gICAJCQkJX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0Owo+ICAgCQl9Cj4gKwkJ ZGV2X3ByaXYtPnVuY29yZS5md19kb21haW5zID0gRk9SQ0VXQUtFX1JFTkRFUjsKPiAgIAl9IGVs c2UgaWYgKElTX0dFTjYoZGV2KSkgewo+ICAgCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNl X3dha2VfZ2V0ID0KPiAgIAkJCV9fZ2VuNl9ndF9mb3JjZV93YWtlX2dldDsKPiAgIAkJZGV2X3By aXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1dCA9Cj4gICAJCQlfX2dlbjZfZ3RfZm9yY2Vf d2FrZV9wdXQ7Cj4gKwkJZGV2X3ByaXYtPnVuY29yZS5md19kb21haW5zID0gRk9SQ0VXQUtFX1JF TkRFUjsKPiArCX0KPiArCj4gKwlmb3JfZWFjaF9md19kb21haW4oZG9tYWluLCBkZXZfcHJpdiwg aSkgewo+ICsJCWRvbWFpbi0+aTkxNSA9IGRldl9wcml2Owo+ICsJCWRvbWFpbi0+aWQgPSBpOwo+ ICsKPiArCQlzZXR1cF90aW1lcigmZG9tYWluLT50aW1lciwgZ2VuNl9mb3JjZV93YWtlX3RpbWVy LAo+ICsJCQkgICAgKHVuc2lnbmVkIGxvbmcpZG9tYWluKTsKPiAgIAl9Cj4gICAKPiAgIAlzd2l0 Y2ggKElOVEVMX0lORk8oZGV2KS0+Z2VuKSB7CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK