From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arvid Brodin Subject: Re: [RFC v3 1/1] net/hsr: Add support for IEC 62439-3 High-availability Seamless Redundancy Date: Thu, 16 Aug 2012 19:17:49 +0000 Message-ID: <502D475C.9090208@xdin.com> References: <4FF38A5C.9000802@xdin.com> <1341361824.1993.16.camel@joe2Laptop> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Joe Perches , Stephen Hemminger , Alexey Kuznetsov , Javier Boticario , Bruno Ferreira To: "netdev@vger.kernel.org" Return-path: Received: from spam1.webland.se ([91.207.112.90]:57226 "EHLO spam1.webland.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932163Ab2HPTRv (ORCPT ); Thu, 16 Aug 2012 15:17:51 -0400 In-Reply-To: <1341361824.1993.16.camel@joe2Laptop> Content-Language: en-US Content-ID: Sender: netdev-owner@vger.kernel.org List-ID: ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9oc3IvaHNyX2dlbmwuYyBiL0Rv Y3VtZW50YXRpb24vbmV0d29ya2luZy9oc3IvaHNyX2dlbmwuYw0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAuLmNiMzg0ZDUNCi0tLSAvZGV2L251bGwNCisrKyBiL0RvY3VtZW50 YXRpb24vbmV0d29ya2luZy9oc3IvaHNyX2dlbmwuYw0KQEAgLTAsMCArMSwyMjEgQEANCisvKg0K KyAqIENvcHlyaWdodCAyMDExLTIwMTIgQXV0cm9uaWNhIEZpcmUgYW5kIFNlY3VyaXR5IEFTDQor ICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlDQorICogU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKQ0KKyAqIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogQXV0aG9yKHMpOg0K KyAqCTIwMTEtMjAxMiBBcnZpZCBCcm9kaW4sIGFydmlkLmJyb2RpbkB4ZGluLmNvbQ0KKyAqDQor ICogVXNlcnNwYWNlIGV4YW1wbGUgb2YgdXNpbmcgR2VuZXJpYyBOZXRsaW5rIHRvIGdldCBIU1IN CisgKiAoIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kiKSBsaW5rL25ldHdv cmsgc3RhdHVzLg0KKyAqDQorICogTmVlZHMgdXNlcnNwYWNlIGxpYm5sLTMuIEN1cnJlbnQgYXMg b2YgMjAxMi0wOC0wNy4NCisgKi8NCisNCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8 c3RkbGliLmg+DQorI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPg0KKyNpbmNsdWRlIDxuZXRs aW5rL3NvY2tldC5oPg0KKyNpbmNsdWRlIDxuZXRsaW5rL2F0dHIuaD4NCisjaW5jbHVkZSA8bmV0 bGluay9nZW5sL2dlbmwuaD4NCisjaW5jbHVkZSA8bmV0bGluay9nZW5sL2N0cmwuaD4NCisvKioq KiBpbnNlcnQgcGF0aCB0byBoc3JfbmV0bGluayBmcm9tIHlvdXIga2VybmVsIGJlbG93OiAqKioq Lw0KKyNpbmNsdWRlICI8cGF0aD4vbmV0L2hzci9oc3JfbmV0bGluay5oIg0KKw0KKw0KK3N0YXRp YyBzdHJ1Y3QgbmxhX3BvbGljeSBoc3JfZ2VubF9wb2xpY3lbSFNSX0FfTUFYICsgMV0gPSB7DQor CVtIU1JfQV9OT0RFX0FERFJdID0geyAudHlwZSA9IE5MQV9VTlNQRUMgfSwNCisJW0hTUl9BX0lG SU5ERVhdID0geyAudHlwZSA9IE5MQV9VMzIgfSwNCisJW0hTUl9BX0lGMUFHRV0gPSB7IC50eXBl ID0gTkxBX1UzMiB9LA0KKwlbSFNSX0FfSUYyQUdFXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sDQor fTsNCisNCisjZGVmaW5lIEVUSF9BTEVOCTYNCisNCit2b2lkIHByaW50X21hYyhjb25zdCB1bnNp Z25lZCBjaGFyICphZGRyKQ0KK3sNCisJaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBFVEhf QUxFTjsgaSsrKQ0KKwkJcHJpbnRmKCIlMDJ4ICIsIGFkZHJbaV0pOw0KK30NCisNCisNCitpbnQg cGFyc2VfZ2VubG1zZyhzdHJ1Y3QgbmxfbXNnICptc2csIHZvaWQgKmFyZykNCit7DQorCXN0cnVj dCBubGF0dHIgKmF0dHJzW0hTUl9BX01BWCArIDFdOw0KKwlpbnQgcmM7DQorCXN0cnVjdCBnZW5s bXNnaGRyICpoZHI7DQorCWludCBpOw0KKw0KKwlyYyA9IGdlbmxtc2dfcGFyc2Uobmxtc2dfaGRy KG1zZyksIDAsIGF0dHJzLCBIU1JfQV9NQVgsIGhzcl9nZW5sX3BvbGljeSk7DQorCWlmIChyYyA8 IDApIHsNCisJCXByaW50ZigiRXJyb3IgcGFyc2luZyBnZW5sbXNnOiAlZFxuIiwgcmMpOw0KKwkJ cmV0dXJuIHJjOw0KKwl9DQorDQorDQorCS8qDQorCSAqIEV4dHJhY3QgY29tbWFuZCBJRCBmcm9t ICJtZXNzYWdlIiAtPiAibmV0bGluayBoZWFkZXIiIC0+DQorCSAqICJnZW5lcmljIG5ldGxpbmsg aGVhZGVyIi4NCisJICoNCisJICogVGhlc2UgYXJlIHRoZSBjb21tYW5kIGVudW1zIHVzZWQgd2hl biBjcmVhdGluZyBhIGdlbmwgbXNnIGhlYWRlcg0KKwkgKiBpbiB0aGUga2VybmVsIHdpdGggZ2Vu bG1zZ19wdXQoKS4NCisJICovDQorCWhkciA9IGdlbmxtc2dfaGRyKG5sbXNnX2hkcihtc2cpKTsN CisNCisJc3dpdGNoIChoZHItPmNtZCkgew0KKwljYXNlIEhTUl9DX1JJTkdfRVJST1I6DQorCQlw cmludGYoIlJpbmcgZXJyb3I6IFxuIik7DQorCQlicmVhazsNCisJY2FzZSBIU1JfQ19OT0RFX0RP V046DQorCQlwcmludGYoIk5vZGUgZG93bjogXG4iKTsNCisJCWJyZWFrOw0KKwljYXNlIEhTUl9D X1NFVF9OT0RFX1NUQVRVUzoNCisJCXByaW50ZigiTm9kZSBzdGF0dXM6IFxuIik7DQorCQlicmVh azsNCisJZGVmYXVsdDoNCisJCXByaW50ZigiVW5rbm93biBnZW5sIG1lc3NhZ2UgKCVkKVxuIiwg aGRyLT5jbWQpOw0KKwl9DQorDQorDQorCS8qDQorCSAqIEV4dHJhY3QgdGhlIGF0dGFjaGVkIGRh dGEgKHRoZSAiYXR0cmlidXRlcyIpLg0KKwkgKi8NCisJZm9yIChpID0gMDsgaSA8IEhTUl9BX01B WCArIDE7IGkrKykNCisJCWlmIChhdHRyc1tpXSkgew0KKwkJCXN3aXRjaCAoYXR0cnNbaV0tPm5s YV90eXBlKSB7DQorCQkJY2FzZSBIU1JfQV9OT0RFX0FERFI6DQorCQkJCXByaW50ZigiICAgIG5v ZGUgYWRkcmVzcyAiKTsNCisJCQkJcHJpbnRfbWFjKG5sYV9kYXRhKGF0dHJzW2ldKSk7DQorCQkJ CXByaW50ZigiXG4iKTsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBIU1JfQV9JRklOREVYOg0KKwkJ CQlwcmludGYoIiAgICBpbnRlcmZhY2UgaW5kZXggJWRcbiIsDQorCQkJCQkJbmxhX2dldF91MzIo YXR0cnNbaV0pKTsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBIU1JfQV9JRjFBR0U6DQorCQkJCXBy aW50ZigiICAgIGxhc3QgZnJhbWUgb3ZlciBzbGF2ZSAjMSAlZCBtcyBhZ29cbiIsDQorCQkJCQkJ KGludCkgbmxhX2dldF91MzIoYXR0cnNbaV0pKTsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBIU1Jf QV9JRjJBR0U6DQorCQkJCXByaW50ZigiICAgIGxhc3QgZnJhbWUgb3ZlciBzbGF2ZSAjMiAlZCBt cyBhZ29cbiIsDQorCQkJCQkJKGludCkgbmxhX2dldF91MzIoYXR0cnNbaV0pKTsNCisJCQkJYnJl YWs7DQorCQkJZGVmYXVsdDoNCisJCQkJcHJpbnRmKCIgICAgdW5rbm93biBhdHRyaWJ1dGUgdHlw ZTogJWRcbiIsDQorCQkJCQkJYXR0cnNbaV0tPm5sYV90eXBlKTsNCisJCQl9DQorCQl9DQorDQor CXJldHVybiAwOw0KK30NCisNCisvKg0KKyAqIFNlbmQgYSAic2ltcGxlIiAoaGVhZGVyIG9ubHkp IEdlbmVyaWMgTmV0bGluayBtZXNzYWdlDQoraW50IHF1ZXJ5X2xpbmtfc3RhdHVzKGludCBmYW1p bHkpDQorew0KKwlyZXR1cm4gKGdlbmxfc2VuZF9zaW1wbGUobmxzaywgZmFtaWx5LCBIU1JfQ19H RVRfU1RBVFVTLCAxLCAwKSk7DQorfQ0KKyAqLw0KKw0KK2ludCBxdWVyeV9ub2RlX3N0YXR1cyhz dHJ1Y3Qgbmxfc29jayAqbmxzaywgaW50IGZhbWlseSwgaW50IGlmaW5kZXgsDQorCQkgICAgICBj b25zdCB1bnNpZ25lZCBjaGFyIG5vZGVfYWRkcltFVEhfQUxFTl0pDQorew0KKwlzdHJ1Y3Qgbmxf bXNnICptc2c7DQorCXZvaWQgKnVzZXJfaGRyOw0KKw0KKwltc2cgPSBubG1zZ19hbGxvYygpOw0K KwlpZiAoIW1zZykNCisJCXJldHVybiAtMTsNCisNCisJdXNlcl9oZHIgPSBnZW5sbXNnX3B1dCht c2csIE5MX0FVVE9fUE9SVCwgTkxfQVVUT19TRVEsIGZhbWlseSwNCisJCQkJCQkwLCAwLCBIU1Jf Q19HRVRfTk9ERV9TVEFUVVMsIDEpOw0KKwlpZiAoIXVzZXJfaGRyKQ0KKwkJZ290byBubGFfcHV0 X2ZhaWx1cmU7DQorDQorLyoNCisgKiBRdWVyeSBieSBpbnRlcmZhY2UgbmFtZSBjb3VsZCBiZSBp bXBsZW1lbnRlZCBpbiB0aGUga2VybmVsIGlmIG5lZWRlZDoNCisgKglOTEFfUFVUX1NUUklORyht c2csIEhTUl9BX0lGTkFNRSwgaWZuYW1lKTsNCisgKi8NCisJTkxBX1BVVF9VMzIobXNnLCBIU1Jf QV9JRklOREVYLCBpZmluZGV4KTsNCisJTkxBX1BVVChtc2csIEhTUl9BX05PREVfQUREUiwgRVRI X0FMRU4sIG5vZGVfYWRkcik7DQorDQorCXByaW50ZigiUXVlcnlpbmcgaWYgJWQgZm9yIHN0YXR1 cyBvZiBub2RlICIsIGlmaW5kZXgpOw0KKwlwcmludF9tYWMobm9kZV9hZGRyKTsNCisJcHJpbnRm KCJcbiIpOw0KKw0KKwlyZXR1cm4gbmxfc2VuZF9hdXRvKG5sc2ssIG1zZyk7DQorDQorbmxhX3B1 dF9mYWlsdXJlOg0KKwlubG1zZ19mcmVlKG1zZyk7DQorCXJldHVybiAtMTsNCit9DQorDQorDQor aW50IG1haW4oKQ0KK3sNCisJc3RydWN0IG5sX3NvY2sgKm5sc2s7DQorCWludCBoc3JfbWdyb3Vw Ow0KKwlpbnQgcmM7DQorDQorCW5sc2sgPSBubF9zb2NrZXRfYWxsb2MoKTsNCisJaWYgKCFubHNr KSB7DQorCQlwcmludGYoIm5sX3NvY2tldF9hbGxvYygpIGZhaWxlZFxuIik7DQorCQlyZXR1cm4g RVhJVF9GQUlMVVJFOw0KKwl9DQorCW5sX3NvY2tldF9kaXNhYmxlX3NlcV9jaGVjayhubHNrKTsN CisJbmxfc29ja2V0X21vZGlmeV9jYihubHNrLCBOTF9DQl9WQUxJRCwgTkxfQ0JfQ1VTVE9NLCBw YXJzZV9nZW5sbXNnLCBOVUxMKTsNCisJZ2VubF9jb25uZWN0KG5sc2spOw0KKw0KKwkvKg0KKwkg KiBTaWduIHVwIGZvciBIU1IgbWVzc2FnZXMNCisJICovDQorCWhzcl9tZ3JvdXAgPSBnZW5sX2N0 cmxfcmVzb2x2ZV9ncnAobmxzaywgIkhTUiIsICJoc3ItbmV0d29yayIpOw0KKwlpZiAoaHNyX21n cm91cCA8IDApIHsNCisJCXByaW50ZigiZ2VubF9jdHJsX3Jlc29sdmVfZ3JwKCkgZmFpbGVkOiAl ZFxuIiwgaHNyX21ncm91cCk7DQorCQlyYyA9IEVYSVRfRkFJTFVSRTsNCisJCWdvdG8gb3V0Ow0K Kwl9DQorDQorCXByaW50ZigiUmVnaXN0ZXJpbmcgZm9yIG11bHRpY2FzdCBncm91cCAlZFxuIiwg aHNyX21ncm91cCk7DQorCXJjID0gbmxfc29ja2V0X2FkZF9tZW1iZXJzaGlwcyhubHNrLCBoc3Jf bWdyb3VwLCAwKTsNCisJaWYgKHJjIDwgMCkgew0KKwkJcHJpbnRmKCJubF9zb2NrZXRfYWRkX21l bWJlcnNoaXBzKCkgZmFpbGVkOiAlZFxuIiwgcmMpOw0KKwkJZ290byBvdXQ7DQorCX0NCisNCisJ LyoNCisJICogU2VuZCBhIHF1ZXJ5IGFib3V0IHRoZSBzdGF0dXMgb2YgYW5vdGhlciBub2RlIG9u IHRoZSBIU1IgbmV0d29yazoNCisJICovDQorCWludCBoc3JfZmFtaWx5Ow0KKwkvKiBUaGUgaHNy IGlmIHdlIHNlbmQgdGhlIGVucXVpcnkgdG8gKGdldCBpdCB3aXRoIGUuZy4NCisJICogJ2NhdCAv c3lzL2NsYXNzL25ldC9oc3IwL2lmaW5kZXgnKTogKi8NCisJY29uc3QgaW50IGhzcl9pZmluZGV4 ID0gNDsNCisJLyogVGhlIG5vZGUgdG8gZW5xdWlyZSBhYm91dDogKi8NCisJY29uc3QgdW5zaWdu ZWQgY2hhciBub2RlW0VUSF9BTEVOXSA9IHsweDAwLCAweDI0LCAweDc0LCAweDAwLCAweDE3LCAw eEFEfTsNCisNCisJaHNyX2ZhbWlseSA9IGdlbmxfY3RybF9yZXNvbHZlKG5sc2ssICJIU1IiKTsN CisJaWYgKGhzcl9mYW1pbHkgPCAwKSB7DQorCQlwcmludGYoImdlbmxfY3RybF9yZXNvbHZlKCkg ZmFpbGVkOiAlZFxuIiwgaHNyX2ZhbWlseSk7DQorCQlnb3RvIHJlY2VpdmU7DQorCX0NCisJcmMg PSBxdWVyeV9ub2RlX3N0YXR1cyhubHNrLCBoc3JfZmFtaWx5LCBoc3JfaWZpbmRleCwgbm9kZSk7 DQorCXByaW50ZigicXVlcnlfbm9kZV9zdGF0dXMoKSByZXR1cm5lZCAlZFxuIiwgcmMpOw0KKw0K KwkvKg0KKwkgKiBSZWNlaXZlIG1lc3NhZ2VzDQorCSAqLw0KK3JlY2VpdmU6DQorCXdoaWxlICgx KQ0KKwkJbmxfcmVjdm1zZ3NfZGVmYXVsdChubHNrKTsNCisNCisJcmMgPSBFWElUX1NVQ0NFU1M7 DQorb3V0Og0KKwlubF9jbG9zZShubHNrKTsNCisJbmxfc29ja2V0X2ZyZWUobmxzayk7DQorCXJl dHVybiByYzsNCit9DQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvaW5j bHVkZS9saW51eC9pZl9ldGhlci5oDQppbmRleCA1NmQ5MDdhLi4wZDBlMmY5IDEwMDY0NA0KLS0t IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oDQorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVy LmgNCkBAIC04Myw2ICs4Myw3IEBADQogI2RlZmluZSBFVEhfUF9USVBDCTB4ODhDQQkJLyogVElQ QyAJCQkqLw0KICNkZWZpbmUgRVRIX1BfODAyMUFICTB4ODhFNyAgICAgICAgICAvKiA4MDIuMWFo IEJhY2tib25lIFNlcnZpY2UgVGFnICovDQogI2RlZmluZSBFVEhfUF8xNTg4CTB4ODhGNwkJLyog SUVFRSAxNTg4IFRpbWVzeW5jICovDQorI2RlZmluZSBFVEhfUF9IU1IJMHg4OEZCCQkvKiBJRUMg NjI0MzktMyBIU1IvUFJQCQkqLw0KICNkZWZpbmUgRVRIX1BfRkNPRQkweDg5MDYJCS8qIEZpYnJl IENoYW5uZWwgb3ZlciBFdGhlcm5ldCAgKi8NCiAjZGVmaW5lIEVUSF9QX1RETFMJMHg4OTBEICAg ICAgICAgIC8qIFRETFMgKi8NCiAjZGVmaW5lIEVUSF9QX0ZJUAkweDg5MTQJCS8qIEZDb0UgSW5p dGlhbGl6YXRpb24gUHJvdG9jb2wgKi8NCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2xp bmsuaCBiL2luY2x1ZGUvbGludXgvaWZfbGluay5oDQppbmRleCA0YjI0ZmY0Li4zZTNlZmI0IDEw MDY0NA0KLS0tIGEvaW5jbHVkZS9saW51eC9pZl9saW5rLmgNCisrKyBiL2luY2x1ZGUvbGludXgv aWZfbGluay5oDQpAQCAtMzkxLDQgKzM5MSwxNSBAQCBzdHJ1Y3QgaWZsYV9wb3J0X3ZzaSB7DQog CV9fdTggcGFkWzNdOw0KIH07DQoNCisvKiBIU1Igc2VjdGlvbiAqLw0KKw0KK2VudW0gew0KKwlJ RkxBX0hTUl9VTlNQRUMsDQorCUlGTEFfSFNSX1NMQVZFMSwNCisJSUZMQV9IU1JfU0xBVkUyLA0K KwlfX0lGTEFfSFNSX01BWCwNCit9Ow0KKw0KKyNkZWZpbmUgSUZMQV9IU1JfTUFYIChfX0lGTEFf SFNSX01BWCAtIDEpDQorDQogI2VuZGlmIC8qIF9MSU5VWF9JRl9MSU5LX0ggKi8NCmRpZmYgLS1n aXQgYS9uZXQvS2NvbmZpZyBiL25ldC9LY29uZmlnDQppbmRleCBlMDcyNzJkLi4yMjQ0NmQzIDEw MDY0NA0KLS0tIGEvbmV0L0tjb25maWcNCisrKyBiL25ldC9LY29uZmlnDQpAQCAtMjE2LDYgKzIx Niw3IEBAIHNvdXJjZSAibmV0L2RjYi9LY29uZmlnIg0KIHNvdXJjZSAibmV0L2Ruc19yZXNvbHZl ci9LY29uZmlnIg0KIHNvdXJjZSAibmV0L2JhdG1hbi1hZHYvS2NvbmZpZyINCiBzb3VyY2UgIm5l dC9vcGVudnN3aXRjaC9LY29uZmlnIg0KK3NvdXJjZSAibmV0L2hzci9LY29uZmlnIg0KDQogY29u ZmlnIFJQUw0KIAlib29sZWFuDQpkaWZmIC0tZ2l0IGEvbmV0L01ha2VmaWxlIGIvbmV0L01ha2Vm aWxlDQppbmRleCBhZDQzMmZhLi43ZDg3ODdmIDEwMDY0NA0KLS0tIGEvbmV0L01ha2VmaWxlDQor KysgYi9uZXQvTWFrZWZpbGUNCkBAIC03MCwzICs3MCw0IEBAIG9iai0kKENPTkZJR19DRVBIX0xJ QikJCSs9IGNlcGgvDQogb2JqLSQoQ09ORklHX0JBVE1BTl9BRFYpCSs9IGJhdG1hbi1hZHYvDQog b2JqLSQoQ09ORklHX05GQykJCSs9IG5mYy8NCiBvYmotJChDT05GSUdfT1BFTlZTV0lUQ0gpCSs9 IG9wZW52c3dpdGNoLw0KK29iai0kKENPTkZJR19IU1IpCQkrPSBoc3IvDQpkaWZmIC0tZ2l0IGEv bmV0L2hzci9LY29uZmlnIGIvbmV0L2hzci9LY29uZmlnDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMC4uYTllZDMwNA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbmV0L2hzci9LY29u ZmlnDQpAQCAtMCwwICsxLDMzIEBADQorIw0KKyMgSUVDIDYyNDM5LTMgSGlnaC1hdmFpbGFiaWxp dHkgU2VhbWxlc3MgUmVkdW5kYW5jeQ0KKyMNCisNCitjb25maWcgSFNSDQorCXRyaXN0YXRlICJI aWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IpIg0KKwktLS1oZWxwLS0t DQorCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxl IHRvIGFjdCBhcyBhDQorCSAgREFOSCAoIkRvdWJseSBhdHRhY2hlZCBub2RlIGltcGxlbWVudGlu ZyBIU1IiKS4gRm9yIHRoaXMgdG8gd29yaywNCisJICB5b3VyIExpbnV4IGJveCBuZWVkcyAoYXQg bGVhc3QpIHR3byBwaHlzaWNhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLA0KKwkgIGFuZCB5b3UgbmVl ZCB0byBlbnNsYXZlIHRoZXNlIHRvIGEgdmlydHVhbCBoc3IgaW50ZXJmYWNlIHVzaW5nIHRoZQ0K KwkgIGFwcHJvcHJpYXRlIHVzZXIgc3BhY2UgdG9vbCwgaS5lLjoNCisNCisJICAjIGlwIGxpbmsg YWRkIG5hbWUgaHNyMCB0eXBlIGhzciBkZXYxIGRldjINCisNCisJICBZb3VyIExpbnV4IGJveCBt dXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsNCisJICB0b2dldGhl ciB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLg0KKw0KKwkgIEFsbCBFdGhlcm5ldCBmcmFt ZXMgc2VudCBvdmVyIHRoZSBoc3IgZGV2aWNlIHdpbGwgYmUgc2VudCBpbiBib3RoDQorCSAgZGly ZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlIHBvcnRzKSwgZ2l2aW5nIGEgcmVk dW5kYW50LA0KKwkgIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuDQorDQorCSAgRWFjaCBIU1Ig bm9kZSBpbiB0aGUgcmluZyBhY3RzIGxpa2UgYSBicmlkZ2UgZm9yIEhTUiBmcmFtZXMsIGJ1dA0K KwkgIGZpbHRlcnMgZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIGZvcndhcmRlZCBlYXJsaWVyLg0KKw0K KwkgIFRoaXMgY29kZSBpcyBhICJiZXN0IGVmZm9ydCIgdG8gY29tcGx5IHdpdGggdGhlIEhTUiBz dGFuZGFyZCBhcw0KKwkgIGRlc2NyaWJlZCBpbiBJRUMgNjI0MzktMywgYnV0IG5vIGNvbXBsaWFu Y3kgdGVzdHMgaGF2ZSBiZWVuIG1hZGUuDQorCSAgWW91IG5lZWQgdG8gcGVyZm9ybSBhbnkgYW5k IGFsbCBuZWNlc3NhcnkgdGVzdHMgeW91cnNlbGYgYmVmb3JlDQorCSAgcmVseWluZyBvbiB0aGlz IGNvZGUgaW4gYSBzYWZldHkgY3JpdGljYWwgc3lzdGVtLiBJbiBwYXJ0aWN1bGFyLCB0aGUNCisJ ICBzdGFuZGFyZCBpcyB2ZXJ5IGRpZmZ1c2Ugb24gaG93IHRvIHVzZSB0aGUgUmluZyBJRCBmaWVs ZCBpbiB0aGUgSFNSDQorCSAgdGFnLCBhbmQgaXQncyBwcm9iYWJsZSB0aGF0IHRoaXMgY29kZSBk b2VzIG5vdCBkbyB0aGUgcmlnaHQgdGhpbmcuDQorDQorCSAgSWYgdW5zdXJlLCBzYXkgTi4NCmRp ZmYgLS1naXQgYS9uZXQvaHNyL01ha2VmaWxlIGIvbmV0L2hzci9NYWtlZmlsZQ0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmI2ODM1OWYNCi0tLSAvZGV2L251bGwNCisrKyBi L25ldC9oc3IvTWFrZWZpbGUNCkBAIC0wLDAgKzEsNyBAQA0KKyMNCisjIE1ha2VmaWxlIGZvciBI U1INCisjDQorDQorb2JqLSQoQ09ORklHX0hTUikJKz0gaHNyLm8NCisNCitoc3IteQkJCTo9IGhz cl9tYWluLm8gaHNyX2ZyYW1lcmVnLm8gaHNyX2RldmljZS5vIGhzcl9uZXRsaW5rLm8NCmRpZmYg LS1naXQgYS9uZXQvaHNyL2hzcl9kZXZpY2UuYyBiL25ldC9oc3IvaHNyX2RldmljZS5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uY2Q0MmZmMw0KLS0tIC9kZXYvbnVsbA0K KysrIGIvbmV0L2hzci9oc3JfZGV2aWNlLmMNCkBAIC0wLDAgKzEsNTA2IEBADQorLyoNCisgKiBD b3B5cmlnaHQgMjAxMS0yMDEyIEF1dHJvbmljYSBGaXJlIGFuZCBTZWN1cml0eSBBUw0KKyAqDQor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQNCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQ0KKyAqIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikNCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIEF1dGhvcihzKToNCisgKgky MDExLTIwMTIgQXJ2aWQgQnJvZGluLCBhcnZpZC5icm9kaW5AeGRpbi5jb20NCisgKg0KKyAqIFRo aXMgZmlsZSBjb250YWlucyBkZXZpY2UgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIHVzaW5nIGFuZCBk ZXN0cm95aW5nDQorICogdmlydHVhbCBIU1IgZGV2aWNlcy4NCisgKi8NCisNCisjaW5jbHVkZSA8 bGludXgvbmV0ZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPg0KKyNpbmNsdWRl IDxsaW51eC9ldGhlcmRldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4NCisjaW5j bHVkZSA8bGludXgvcnRuZXRsaW5rLmg+DQorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPg0K KyNpbmNsdWRlIDxsaW51eC9uZXRwb2xsLmg+DQorI2luY2x1ZGUgImhzcl9mcmFtZXJlZy5oIg0K KyNpbmNsdWRlICJoc3JfcHJpdmF0ZS5oIg0KKw0KKw0KK3N0YXRpYyBib29sIGlzX2FkbWluX3Vw KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQorew0KKwlyZXR1cm4gKGRldi0+ZmxhZ3MgJiBJRkZf VVApOw0KK30NCisNCitzdGF0aWMgYm9vbCBpc19vcGVyc3RhdGVfdXAoc3RydWN0IG5ldF9kZXZp Y2UgKmRldikNCit7DQorCXJldHVybiAoZGV2LT5vcGVyc3RhdGUgPT0gSUZfT1BFUl9VUCk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIF9faHNyX3NldF9vcGVyc3RhdGUoc3RydWN0IG5ldF9kZXZpY2Ug KmRldiwgaW50IHRyYW5zaXRpb24pDQorew0KKwlpZiAoZGV2LT5vcGVyc3RhdGUgIT0gdHJhbnNp dGlvbikgew0KKwkJd3JpdGVfbG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7DQorCQlkZXYtPm9wZXJz dGF0ZSA9IHRyYW5zaXRpb247DQorCQl3cml0ZV91bmxvY2tfYmgoJmRldl9iYXNlX2xvY2spOw0K KwkJbmV0ZGV2X3N0YXRlX2NoYW5nZShkZXYpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgaHNyX3NldF9v cGVyc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpz bGF2ZTEsDQorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlMikNCit7DQorCWlmICgh aXNfYWRtaW5fdXAoaHNyX2RldikpIHsNCisJCV9faHNyX3NldF9vcGVyc3RhdGUoaHNyX2Rldiwg SUZfT1BFUl9ET1dOKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlpZiAoaXNfb3BlcnN0YXRlX3Vw KHNsYXZlMSkgfHwgaXNfb3BlcnN0YXRlX3VwKHNsYXZlMikpDQorCQlfX2hzcl9zZXRfb3BlcnN0 YXRlKGhzcl9kZXYsIElGX09QRVJfVVApOw0KKwllbHNlDQorCQlfX2hzcl9zZXRfb3BlcnN0YXRl KGhzcl9kZXYsIElGX09QRVJfTE9XRVJMQVlFUkRPV04pOw0KK30NCisNCit2b2lkIGhzcl9zZXRf Y2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNs YXZlMSwNCisJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlMikNCit7DQorCWlmIChpc19v cGVyc3RhdGVfdXAoc2xhdmUxKSB8fCBpc19vcGVyc3RhdGVfdXAoc2xhdmUyKSkNCisJCW5ldGlm X2NhcnJpZXJfb24oaHNyX2Rldik7DQorCWVsc2UNCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGhzcl9k ZXYpOw0KK30NCisNCisNCit2b2lkIGhzcl9jaGVja19hbm5vdW5jZShzdHJ1Y3QgbmV0X2Rldmlj ZSAqaHNyX2RldiwgaW50IG9sZF9vcGVyc3RhdGUpDQorew0KKwlzdHJ1Y3QgaHNyX3ByaXYgKmhz cl9wcml2Ow0KKw0KKwloc3JfcHJpdiA9IG5ldGRldl9wcml2KGhzcl9kZXYpOw0KKw0KKwlpZiAo KGhzcl9kZXYtPm9wZXJzdGF0ZSA9PSBJRl9PUEVSX1VQKSAmJiAob2xkX29wZXJzdGF0ZSAhPSBJ Rl9PUEVSX1VQKSkgew0KKwkJLyogV2VudCB1cCAqLw0KKwkJaHNyX3ByaXYtPmFubm91bmNlX2Nv dW50ID0gMDsNCisJCWhzcl9wcml2LT5hbm5vdW5jZV90aW1lci5leHBpcmVzID0gamlmZmllcyAr DQorCQkJCW1zZWNzX3RvX2ppZmZpZXMoSFNSX0FOTk9VTkNFX0lOVEVSVkFMKTsNCisJCWFkZF90 aW1lcigmaHNyX3ByaXYtPmFubm91bmNlX3RpbWVyKTsNCisJfQ0KKw0KKwlpZiAoKGhzcl9kZXYt Pm9wZXJzdGF0ZSAhPSBJRl9PUEVSX1VQKSAmJiAob2xkX29wZXJzdGF0ZSA9PSBJRl9PUEVSX1VQ KSkNCisJCS8qIFdlbnQgZG93biAqLw0KKwkJZGVsX3RpbWVyKCZoc3JfcHJpdi0+YW5ub3VuY2Vf dGltZXIpOw0KK30NCisNCisNCisNCitzdGF0aWMgaW50IGhzcl9kZXZfb3BlbihzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdjsNCisNCisJaHNy X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOw0KKw0KKwlkZXZfb3Blbihoc3JfcHJpdi0+c2xhdmVf ZGF0YVswXS5kZXYpOw0KKwlkZXZfb3Blbihoc3JfcHJpdi0+c2xhdmVfZGF0YVsxXS5kZXYpOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBoc3JfZGV2X2Nsb3NlKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpDQorew0KKwkvLyBGSVhNRTogcmVzdG9yZSBzdGF0dXMgb2Ygc2xhdmVz Pw0KKwlyZXR1cm4gMDsNCit9DQorDQorDQorc3RhdGljIHZvaWQgaHNyX2ZpbGxfdGFnKHN0cnVj dCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyLCBzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2KQ0KK3sN CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsNCisNCisJLyoNCisJICogSUVDIDYyNDM5LTEsIHAg NDgsIHNheXMgdGhlIDQtYml0ICJwYXRoIiBmaWVsZCBjYW4gdGFrZSB2YWx1ZXMNCisJICogYmV0 d2VlbiAwMDAxLTEwMDEgKCJyaW5nIGlkZW50aWZpZXIiLCBmb3IgcmVndWxhciBIU1IgZnJhbWVz KSwNCisJICogb3IgMTExMSAoIkhTUiBtYW5hZ2VtZW50Iiwgc3VwZXJ2aXNpb24gZnJhbWVzKS4g VW5mb3J0dW5hdGVseSwgdGhlDQorCSAqIHNwZWMgd3JpdGVycyBmb3Jnb3QgdG8gZXhwbGFpbiB3 aGF0IGEgInJpbmcgaWRlbnRpZmllciIgaXMsIG9yDQorCSAqIGhvdyBpdCBpcyB1c2VkLiBTbyB3 ZSBqdXN0IHNldCB0aGlzIHRvIDAwMDEgZm9yIHJlZ3VsYXIgZnJhbWVzLA0KKwkgKiBhbmQgMTEx MSBmb3Igc3VwZXJ2aXNpb24gZnJhbWVzLg0KKwkgKi8NCisJc2V0X2hzcl90YWdfcGF0aCgmaHNy X2V0aGhkci0+aHNyX3RhZywgMHgxKTsNCisNCisJLyoNCisJICogSUVDIDYyNDM5LTEsIHAgMTI6 ICJUaGUgbGluayBzZXJ2aWNlIGRhdGEgdW5pdCBpbiBhbiBFdGhlcm5ldCBmcmFtZQ0KKwkgKiBp cyB0aGUgY29udGVudCBvZiB0aGUgZnJhbWUgbG9jYXRlZCBiZXR3ZWVuIHRoZSBMZW5ndGgvVHlw ZSBmaWVsZA0KKwkgKiBhbmQgdGhlIEZyYW1lIENoZWNrIFNlcXVlbmNlLiINCisJICoNCisJICog SUVDIDYyNDM5LTMsIHAgNDgsIHNwZWNpZmllcyB0aGUgIm9yaWdpbmFsIExQRFUiIHRvIGluY2x1 ZGUgdGhlDQorCSAqIG9yaWdpbmFsICJMVCIgZmllbGQgKHdoYXQgIkxUIiBtZWFucyBpcyBub3Qg ZXhwbGFpbmVkIGFueXdoZXJlIGFzDQorCSAqIGZhciBhcyBJIGNhbiBzZWUgLSBwZXJoYXBzICJM ZW5ndGgvVHlwZSI/KS4gU28gTFNEVV9zaXplIG1pZ2h0DQorCSAqIGVxdWFsIG9yaWdpbmFsIGxl bmd0aCArIDIuDQorCSAqICAgQWxzbywgdGhlIGZhY3QgdGhhdCB0aGlzIGZpZWxkIGlzIG5vdCB1 c2VkIGFueXdoZXJlIChtaWdodCBiZSB1c2VkDQorCSAqIGJ5IGEgUmVkQm94IGNvbm5lY3Rpbmcg SFNSIGFuZCBQUlAgbmV0cz8pIG1lYW5zIEkgY2Fubm90IHRlc3QgaXRzDQorCSAqIGNvcnJlY3Ru ZXNzLiBJbnN0ZWFkIG9mIGd1ZXNzaW5nLCBJIHNldCB0aGlzIHRvIDAgaGVyZSwgdG8gbWFrZSBh bnkNCisJICogcHJvYmxlbXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEFueW9uZSB1c2luZyB0aGlz IGRyaXZlciB3aXRoIFBSUC9IU1INCisJICogUmVkQm94ZXMgbWlnaHQgbmVlZCB0byBmaXggdGhp cy4uLg0KKwkgKi8NCisJc2V0X2hzcl90YWdfTFNEVV9zaXplKCZoc3JfZXRoaGRyLT5oc3JfdGFn LCAwKTsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhzcl9wcml2LT5zZXFucl9sb2NrLCBpcnFm bGFncyk7DQorCWhzcl9ldGhoZHItPmhzcl90YWcuc2VxdWVuY2VfbnIgPSBodG9ucyhoc3JfcHJp di0+c2VxdWVuY2VfbnIpOw0KKwloc3JfcHJpdi0+c2VxdWVuY2VfbnIrKzsNCisJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmaHNyX3ByaXYtPnNlcW5yX2xvY2ssIGlycWZsYWdzKTsNCisNCisJaHNy X2V0aGhkci0+aHNyX3RhZy5lbmNhcF9wcm90byA9IGhzcl9ldGhoZHItPmV0aGhkci5oX3Byb3Rv Ow0KKw0KKwloc3JfZXRoaGRyLT5ldGhoZHIuaF9wcm90byA9IGh0b25zKEVUSF9QX0hTUik7DQor fQ0KKw0KK3N0YXRpYyBpbnQgc2xhdmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LA0KKwkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYpDQor ew0KKwlza2Jfc2V0X2Rldihza2IsIGRldik7DQorCXNrYi0+cHJpb3JpdHkgPSAxOyAvLyBGSVhN RTogd2hhdCBkb2VzIHRoaXMgbWVhbj8NCisNCisJLy8gRklYTUU6IHdoYXQncyBuZXRwb2xsX3R4 X3J1bm5pbmc/DQorCWlmIChuZXRwb2xsX3R4X3J1bm5pbmcoaHNyX2RldikpDQorCQlyZXR1cm4g c2tiLT5kZXYtPm5ldGRldl9vcHMtPm5kb19zdGFydF94bWl0KHNrYiwgc2tiLT5kZXYpOw0KKw0K KwlyZXR1cm4gZGV2X3F1ZXVlX3htaXQoc2tiKTsNCit9DQorDQorDQorc3RhdGljIGludCBoc3Jf ZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCit7 DQorCXN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXY7DQorCXN0cnVjdCBoc3JfZXRoaGRyICpoc3Jf ZXRoaGRyOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsNCisJaW50IHJlczEsIHJlczI7DQorDQor CWhzcl9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsNCisJaHNyX2V0aGhkciA9IChzdHJ1Y3QgaHNy X2V0aGhkciAqKSBza2ItPmRhdGE7DQorDQorCWlmICgobnRvaHMoc2tiLT5wcm90b2NvbCkgIT0g RVRIX1BfSFNSKSB8fA0KKwkJCShudG9ocyhoc3JfZXRoaGRyLT5ldGhoZHIuaF9wcm90bykgIT0g RVRIX1BfSFNSKSkgew0KKw0KKwkJaHNyX2ZpbGxfdGFnKGhzcl9ldGhoZHIsIGhzcl9wcml2KTsN CisJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9IU1IpOw0KKwl9DQorDQorCXNrYjIgPSBz a2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsNCisNCisJcmVzMSA9IHNsYXZlX3htaXQoc2tiLCBo c3JfcHJpdi0+c2xhdmVfZGF0YVswXS5kZXYsIGRldik7DQorCXJlczIgPSBORVRfWE1JVF9EUk9Q Ow0KKwlpZiAoc2tiMikgew0KKwkJLyogQWRkcmVzcyBzdWJzdGl0dXRpb24gKElFQzYyNDM5LTMg cHAgMjYsIDUwKTogcmVwbGFjZSBtYWMNCisJCSAqIGFkZHJlc3Mgb2Ygb3V0Z29pbmcgZnJhbWUg d2l0aCB0aGF0IG9mIHRoZSBvdXRnb2luZyBzbGF2ZSdzLg0KKwkJICovDQorCQltZW1jcHkoaHNy X2V0aGhkci0+ZXRoaGRyLmhfc291cmNlLA0KKwkJCQkJaHNyX3ByaXYtPnNsYXZlX2RhdGFbMV0u ZGV2LT5kZXZfYWRkciwNCisJCQkJCUVUSF9BTEVOKTsNCisJCXJlczIgPSBzbGF2ZV94bWl0KHNr YjIsIGhzcl9wcml2LT5zbGF2ZV9kYXRhWzFdLmRldiwgZGV2KTsNCisJfQ0KKw0KKwlpZiAobGlr ZWx5KHJlczEgPT0gTkVUX1hNSVRfU1VDQ0VTUyB8fCByZXMxID09IE5FVF9YTUlUX0NOIHx8DQor CQkJcmVzMiA9PSBORVRfWE1JVF9TVUNDRVNTIHx8IHJlczIgPT0gTkVUX1hNSVRfQ04pKSB7DQor CQloc3JfcHJpdi0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7DQorCQloc3JfcHJpdi0+ZGV2LT5z dGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsNCisJfSBlbHNlDQorCQloc3JfcHJpdi0+ZGV2LT5z dGF0cy50eF9kcm9wcGVkKys7DQorDQorCXJldHVybiBORVRERVZfVFhfT0s7DQorfQ0KKw0KKw0K K3N0YXRpYyBpbnQgaHNyX2hlYWRlcl9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwNCisJCQkgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsIGNvbnN0IHZv aWQgKmRhZGRyLA0KKwkJCSAgICAgY29uc3Qgdm9pZCAqc2FkZHIsIHVuc2lnbmVkIGludCBsZW4p DQorew0KKwlpbnQgcmVzOw0KKw0KKwkvKiBNYWtlIHJvb20gZm9yIHRoZSBIU1IgdGFnIG5vdy4g V2Ugd2lsbCBmaWxsIGl0IGluIGxhdGVyIChpbg0KKwkgICBoc3JfZGV2X3htaXQpICovDQorCWlm IChza2JfaGVhZHJvb20oc2tiKSA8IEhTUl9UQUdMRU4gKyBFVEhfSExFTikNCisJCXJldHVybiAt RU5PQlVGUzsNCisJc2tiX3B1c2goc2tiLCBIU1JfVEFHTEVOKTsNCisJcmVzID0gZXRoX2hlYWRl cihza2IsIGRldiwgdHlwZSwgZGFkZHIsIHNhZGRyLCBsZW4gKyBIU1JfVEFHTEVOKTsNCisJaWYg KHJlcyA8PSAwKQ0KKwkJcmV0dXJuIHJlczsNCisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsN CisNCisJcmV0dXJuIHJlcyArIEhTUl9UQUdMRU47DQorfQ0KKw0KKw0KK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaGVhZGVyX29wcyBoc3JfaGVhZGVyX29wcyA9IHsNCisJLmNyZWF0ZQkgPSBoc3JfaGVh ZGVyX2NyZWF0ZSwNCisJLnBhcnNlCSA9IGV0aF9oZWFkZXJfcGFyc2UsDQorfTsNCisNCisNCitz dGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAq aHNyX2RldiwgdTggdHlwZSkNCit7DQorCXN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXY7DQorCXN0 cnVjdCBza19idWZmICpza2I7DQorCXN0cnVjdCBoc3Jfc3VwX3RhZyAqaHNyX3N0YWc7DQorCXN0 cnVjdCBoc3Jfc3VwX3BheWxvYWQgKmhzcl9zcDsNCisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsN CisNCisJc2tiID0gYWxsb2Nfc2tiKExMX0FMTE9DQVRFRF9TUEFDRShoc3JfZGV2KSArDQorCQkJ CXNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSwNCisJCQkJR0ZQX0FUT01JQyk7DQorCWlm IChza2IgPT0gTlVMTCkNCisJCXJldHVybjsNCisNCisJaHNyX3ByaXYgPSBuZXRkZXZfcHJpdiho c3JfZGV2KTsNCisNCisJc2tiX3Jlc2VydmUoc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShoc3JfZGV2 KSk7DQorDQorCXNrYi0+ZGV2ID0gaHNyX2RldjsNCisJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVU SF9QX0hTUik7DQorDQorCWlmIChkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItPmRldiwgRVRIX1Bf SFNSLCBoc3JfbXVsdGljYXN0X2FkZHIsDQorCQkJCQlza2ItPmRldi0+ZGV2X2FkZHIsIHNrYi0+ bGVuKSA8IDApDQorCQlnb3RvIG91dDsNCisNCisJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0 IGV0aGhkcikpOw0KKwloc3Jfc3RhZyA9IChzdHJ1Y3QgaHNyX3N1cF90YWcgKikgc2tiLT5kYXRh Ow0KKw0KKwlzZXRfaHNyX3N0YWdfcGF0aChoc3Jfc3RhZywgMHhmKTsNCisJc2V0X2hzcl9zdGFn X0hTUl9WZXIoaHNyX3N0YWcsIDApOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHNyX3ByaXYt PnNlcW5yX2xvY2ssIGlycWZsYWdzKTsNCisJaHNyX3N0YWctPnNlcXVlbmNlX25yID0gaHRvbnMo aHNyX3ByaXYtPnNlcXVlbmNlX25yKTsNCisJaHNyX3ByaXYtPnNlcXVlbmNlX25yKys7DQorCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmhzcl9wcml2LT5zZXFucl9sb2NrLCBpcnFmbGFncyk7DQor DQorCWhzcl9zdGFnLT5IU1JfVExWX1R5cGUgPSB0eXBlOw0KKwloc3Jfc3RhZy0+SFNSX1RMVl9M ZW5ndGggPSAxMjsNCisNCisJc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOw0K Kw0KKwkvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSAqLw0KKwloc3Jfc3AgPSAoc3RydWN0IGhzcl9z dXBfcGF5bG9hZCAqKSBza2JfcHV0KHNrYiwNCisJCQkJc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3Bh eWxvYWQpKTsNCisJbWVtY3B5KGhzcl9zcC0+TWFjQWRkcmVzc0EsIGhzcl9kZXYtPmRldl9hZGRy LCBFVEhfQUxFTik7DQorDQorCWRldl9xdWV1ZV94bWl0KHNrYik7DQorCXJldHVybjsNCisNCitv dXQ6DQorCWtmcmVlX3NrYihza2IpOw0KK30NCisNCisNCisvKg0KKyAqIEFubm91bmNlIChzdXBl cnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb24NCisgKi8NCitzdGF0aWMgdm9pZCBoc3JfYW5u b3VuY2UodW5zaWduZWQgbG9uZyBkYXRhKQ0KK3sNCisJc3RydWN0IGhzcl9wcml2ICpoc3JfcHJp djsNCisNCisJaHNyX3ByaXYgPSAoc3RydWN0IGhzcl9wcml2ICopIGRhdGE7DQorDQorCWlmICho c3JfcHJpdi0+YW5ub3VuY2VfY291bnQgPCAzKSB7DQorCQlzZW5kX2hzcl9zdXBlcnZpc2lvbl9m cmFtZShoc3JfcHJpdi0+ZGV2LCBIU1JfVExWX0FOTk9VTkNFKTsNCisJCWhzcl9wcml2LT5hbm5v dW5jZV9jb3VudCsrOw0KKwl9IGVsc2UNCisJCXNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKGhz cl9wcml2LT5kZXYsIEhTUl9UTFZfTElGRV9DSEVDSyk7DQorDQorCWlmIChoc3JfcHJpdi0+YW5u b3VuY2VfY291bnQgPCAzKQ0KKwkJaHNyX3ByaXYtPmFubm91bmNlX3RpbWVyLmV4cGlyZXMgPSBq aWZmaWVzICsNCisJCQkJbXNlY3NfdG9famlmZmllcyhIU1JfQU5OT1VOQ0VfSU5URVJWQUwpOw0K KwllbHNlDQorCQloc3JfcHJpdi0+YW5ub3VuY2VfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKw0K KwkJCQltc2Vjc190b19qaWZmaWVzKEhTUl9MSUZFX0NIRUNLX0lOVEVSVkFMKTsNCisNCisJaWYg KGlzX2FkbWluX3VwKGhzcl9wcml2LT5kZXYpKQ0KKwkJYWRkX3RpbWVyKCZoc3JfcHJpdi0+YW5u b3VuY2VfdGltZXIpOw0KK30NCisNCisNCisNCisNCitzdGF0aWMgdm9pZCByZXN0b3JlX3NsYXZl cyhzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2RldikNCit7DQorCXN0cnVjdCBoc3JfcHJpdiAqaHNy X3ByaXY7DQorCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXTsNCisJaW50IGk7DQorCWludCBy ZXM7DQorDQorCWhzcl9wcml2ID0gbmV0ZGV2X3ByaXYoaHNyX2Rldik7DQorCWZvciAoaSA9IDA7 IGkgPCAyOyBpKyspDQorCQlzbGF2ZVtpXSA9IGhzcl9wcml2LT5zbGF2ZV9kYXRhW2ldLmRldjsN CisNCisJcnRubF9sb2NrKCk7DQorDQorCS8qIFJlc3RvcmUgcHJvbWlzY3VpdHkgKi8NCisJZm9y IChpID0gMDsgaSA8IDI7IGkrKykgew0KKwkJaWYgKCFoc3JfcHJpdi0+c2xhdmVfZGF0YVtpXS5w cm9taXNjKQ0KKwkJCWNvbnRpbnVlOw0KKwkJcmVzID0gZGV2X3NldF9wcm9taXNjdWl0eShzbGF2 ZVtpXSwNCisJCQkJCS1oc3JfcHJpdi0+c2xhdmVfZGF0YVtpXS5wcm9taXNjKTsNCisJCWlmIChy ZXMpDQorCQkJbmV0ZGV2X2luZm8oaHNyX2RldiwgIkhTUjogQ2Fubm90IHJlc3RvcmUgc2xhdmUg Ig0KKwkJCQkJCSJwcm9taXNjdWl0eSAoJXMsICVkKVxuIiwNCisJCQkJCQlzbGF2ZVtpXS0+bmFt ZSwgcmVzKTsNCisJfQ0KKw0KKwlydG5sX3VubG9jaygpOw0KK30NCisNCitzdGF0aWMgdm9pZCBy ZWNsYWltX2hzcl9kZXYoc3RydWN0IHJjdV9oZWFkICpyaCkNCit7DQorCXN0cnVjdCBoc3JfcHJp diAqaHNyX3ByaXY7DQorDQorCWhzcl9wcml2ID0gY29udGFpbmVyX29mKHJoLCBzdHJ1Y3QgaHNy X3ByaXYsIHJjdV9oZWFkKTsNCisJZnJlZV9uZXRkZXYoaHNyX3ByaXYtPmRldik7DQorfQ0KKw0K Ky8qDQorICogQWNjb3JkaW5nIHRvIGNvbW1lbnRzIGluIHRoZSBkZWNsYXJhdGlvbiBvZiBzdHJ1 Y3QgbmV0X2RldmljZSwgdGhpcyBmdW5jdGlvbg0KKyAqIGlzICJDYWxsZWQgZnJvbSB1bnJlZ2lz dGVyLCBjYW4gYmUgdXNlZCB0byBjYWxsIGZyZWVfbmV0ZGV2Ii4gT2sgdGhlbi4uLg0KKyAqLw0K K3N0YXRpYyB2b2lkIGhzcl9kZXZfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2RldikN Cit7DQorCXN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXY7DQorDQorCWhzcl9wcml2ID0gbmV0ZGV2 X3ByaXYoaHNyX2Rldik7DQorDQorCWRlbF90aW1lcigmaHNyX3ByaXYtPmFubm91bmNlX3RpbWVy KTsNCisJdW5yZWdpc3Rlcl9oc3JfbWFzdGVyKGhzcl9wcml2KTsgICAgLyogY2FsbHMgbGlzdF9k ZWxfcmN1IG9uIGhzcl9wcml2ICovDQorCXJlc3RvcmVfc2xhdmVzKGhzcl9kZXYpOw0KKwljYWxs X3JjdSgmaHNyX3ByaXYtPnJjdV9oZWFkLCByZWNsYWltX2hzcl9kZXYpOyAgIC8qIHJlY2xhaW0g aHNyX3ByaXYgKi8NCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBo c3JfZGV2aWNlX29wcyA9IHsNCisJLm5kb19vcGVuID0gaHNyX2Rldl9vcGVuLA0KKwkubmRvX3N0 b3AgPSBoc3JfZGV2X2Nsb3NlLA0KKwkubmRvX3N0YXJ0X3htaXQgPSBoc3JfZGV2X3htaXQsDQor fTsNCisNCisNCit2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCit7 DQorCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOw0KKw0KKwlldGhlcl9zZXR1cChk ZXYpOw0KKwlkZXYtPmhlYWRlcl9vcHMJCSA9ICZoc3JfaGVhZGVyX29wczsNCisJZGV2LT5uZXRk ZXZfb3BzCQkgPSAmaHNyX2RldmljZV9vcHM7DQorCWRldi0+aGFyZF9oZWFkZXJfbGVuCSs9IEhT Ul9UQUdMRU47DQorCWRldi0+bXR1CQktPSBIU1JfVEFHTEVOOw0KKwlkZXYtPnR4X3F1ZXVlX2xl bgkgPSAwOw0KKw0KKwlkZXYtPmRlc3RydWN0b3IgPSBoc3JfZGV2X2Rlc3Ryb3k7DQorfQ0KKw0K Kw0KKy8qDQorICogSWYgZGV2IGlzIGEgSFNSIG1hc3RlciwgcmV0dXJuIDE7IG90aGVyd2lzZSwg cmV0dXJuIDAuDQorICovDQorYm9vbCBpc19oc3JfbWFzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYpDQorew0KKwlyZXR1cm4gKGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQgPT0gaHNy X2Rldl94bWl0KTsNCit9DQorDQorc3RhdGljIGludCBjaGVja19zbGF2ZV9vayhzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2KQ0KK3sNCisJLyogRG9uJ3QgYWxsb3cgSFNSIG9uIG5vbi1ldGhlcm5ldCBs aWtlIGRldmljZXMgKi8NCisJaWYgKChkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSB8fCAoZGV2 LT50eXBlICE9IEFSUEhSRF9FVEhFUikgfHwNCisJCQkJCQkoZGV2LT5hZGRyX2xlbiAhPSBFVEhf QUxFTikpIHsNCisJCW5ldGRldl9pbmZvKGRldiwgIkNhbm5vdCBlbnNsYXZlIGxvb3BiYWNrIG9y IG5vbi1ldGhlcm5ldCAiDQorCQkJCQkJCQkiZGV2aWNlXG4iKTsNCisJCXJldHVybiAtRUlOVkFM Ow0KKwl9DQorDQorCS8qIERvbid0IGFsbG93IGVuc2xhdmluZyBoc3IgZGV2aWNlcyAqLw0KKwlp ZiAoaXNfaHNyX21hc3RlcihkZXYpKSB7DQorCQluZXRkZXZfaW5mbyhkZXYsICJDYW5ub3QgY3Jl YXRlIHRyZWVzIG9mIGhzciBkZXZpY2VzLlxuIik7DQorCQlyZXR1cm4gLUVMT09QOw0KKwl9DQor DQorCS8qIEZJWE1FOiBXaGF0IGFib3V0IFZMQU4gZGV2aWNlcywgYm9uZGVkIGRldmljZXMsIGV0 Yz8gKi8NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVj dCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0pDQorew0K KwlzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2Ow0KKwlpbnQgaTsNCisJaW50IHJlczsNCisNCisJ aHNyX3ByaXYgPSBuZXRkZXZfcHJpdihoc3JfZGV2KTsNCisJaHNyX3ByaXYtPmRldiA9IGhzcl9k ZXY7DQorCUlOSVRfTElTVF9IRUFEKCZoc3JfcHJpdi0+bm9kZV9kYik7DQorCUlOSVRfTElTVF9I RUFEKCZoc3JfcHJpdi0+c2VsZl9ub2RlX2RiKTsNCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykN CisJCWhzcl9wcml2LT5zbGF2ZV9kYXRhW2ldLmRldiA9IHNsYXZlW2ldOw0KKw0KKwlzcGluX2xv Y2tfaW5pdCgmaHNyX3ByaXYtPnNlcW5yX2xvY2spOw0KKwloc3JfcHJpdi0+c2VxdWVuY2VfbnIg PSAwOw0KKw0KKwlpbml0X3RpbWVyKCZoc3JfcHJpdi0+YW5ub3VuY2VfdGltZXIpOw0KKwloc3Jf cHJpdi0+YW5ub3VuY2VfdGltZXIuZnVuY3Rpb24gPSBoc3JfYW5ub3VuY2U7DQorCWhzcl9wcml2 LT5hbm5vdW5jZV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGhzcl9wcml2Ow0KKw0KKw0K Ky8qDQorICogRklYTUU6IGRvIEkgbmVlZCB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZXNlPw0KKyAq DQorICogLSBoc3JfZGV2LT5mbGFncw0KKyAqIC0gaHNyX2Rldi0+cHJpdl9mbGFncw0KKyAqLw0K Kw0KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7DQorCQlyZXMgPSBjaGVja19zbGF2ZV9vayhz bGF2ZVtpXSk7DQorCQlpZiAocmVzKQ0KKwkJCXJldHVybiByZXM7DQorCX0NCisNCisJaHNyX2Rl di0+ZmVhdHVyZXMgPSBzbGF2ZVswXS0+ZmVhdHVyZXMgJiBzbGF2ZVsxXS0+ZmVhdHVyZXM7DQor CWhzcl9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsgLyogUHJldmVudCByZWN1cnNpdmUg dHggbG9ja2luZyAqLw0KKw0KKwkvKiBTYXZlL2luaXQgZGF0YSBuZWVkZWQgZm9yIHJlc3RvcmUg Ki8NCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgew0KKwkJaHNyX3ByaXYtPnNsYXZlX2RhdGFb aV0ud2FzX3VwID0gc2xhdmVbaV0tPmZsYWdzICYgSUZGX1VQOw0KKwkJaHNyX3ByaXYtPnNsYXZl X2RhdGFbaV0ucHJvbWlzYyA9IDA7DQorCX0NCisNCisJLyogU2V0IGhzcl9kZXYncyBNQUMgYWRk cmVzcyB0byB0aGF0IG9mIG1hY19zbGF2ZTEgKi8NCisJbWVtY3B5KGhzcl9kZXYtPmRldl9hZGRy LCBoc3JfcHJpdi0+c2xhdmVfZGF0YVswXS5kZXYtPmRldl9hZGRyLA0KKwkJCQkJCQkJRVRIX0FM RU4pOw0KKw0KKwkvKiBNVFUgKi8NCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykNCisJCWlmIChz bGF2ZVtpXS0+bXR1IDwgaHNyX2Rldi0+bXR1KQ0KKwkJCWhzcl9kZXYtPm10dSA9IHNsYXZlW2ld LT5tdHU7DQorDQorCS8qIE1ha2Ugc3VyZSB0aGUgMXN0IGNhbGwgdG8gbmV0aWZfY2Fycmllcl9v bigpIGdldHMgdGhyb3VnaCAqLw0KKwluZXRpZl9jYXJyaWVyX29mZihoc3JfZGV2KTsNCisNCisJ LyogUHJvbWlzY3VpdHkgKi8NCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgew0KKwkJcmVzID0g ZGV2X3NldF9wcm9taXNjdWl0eShzbGF2ZVtpXSwgMSk7DQorCQlpZiAocmVzKSB7DQorCQkJbmV0 ZGV2X2luZm8oaHNyX2RldiwgIkhTUjogQ2Fubm90IHNldCBzbGF2ZSAiDQorCQkJCQkJInByb21p c2N1aXR5ICglcywgJWQpXG4iLA0KKwkJCQkJCXNsYXZlW2ldLT5uYW1lLCByZXMpOw0KKwkJCWdv dG8gZmFpbDsNCisJCX0NCisJCS8qIFJlbWVtYmVyIHdoYXQgd2UgaGF2ZSBkb25lIHNvIHdlIGNh biByZXN0b3JlIGl0IGxhdGVyICovDQorCQloc3JfcHJpdi0+c2xhdmVfZGF0YVtpXS5wcm9taXNj ID0gMTsNCisJfQ0KKw0KKwkvKiBNYWtlIHN1cmUgd2UgcmVjb2duaXplIGZyYW1lcyBmcm9tIG91 cnNlbHZlcyBpbiBoc3JfcmN2KCkgKi8NCisJcmVzID0gaHNyX2NyZWF0ZV9zZWxmX25vZGUoJmhz cl9wcml2LT5zZWxmX25vZGVfZGIsDQorCQkJCQloc3JfZGV2LT5kZXZfYWRkciwNCisJCQkJCWhz cl9wcml2LT5zbGF2ZV9kYXRhWzFdLmRldi0+ZGV2X2FkZHIpOw0KKwlpZiAocmVzIDwgMCkNCisJ CWdvdG8gZmFpbDsNCisNCisJcmVzID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGhzcl9kZXYpOw0KKwlp ZiAocmVzKQ0KKwkJZ290byBmYWlsOw0KKw0KKwlyZWdpc3Rlcl9oc3JfbWFzdGVyKGhzcl9wcml2 KTsNCisNCisJcmV0dXJuIDA7DQorDQorZmFpbDoNCisJcmVzdG9yZV9zbGF2ZXMoaHNyX2Rldik7 DQorCXJldHVybiByZXM7DQorfQ0KZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5oIGIv bmV0L2hzci9oc3JfZGV2aWNlLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw Li45YTE0NzFiDQotLS0gL2Rldi9udWxsDQorKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuaA0KQEAg LTAsMCArMSwyNyBAQA0KKy8qDQorICogQ29weXJpZ2h0IDIwMTEtMjAxMiBBdXRyb25pY2EgRmly ZSBhbmQgU2VjdXJpdHkgQVMNCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQorICogdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUNCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pDQorICogYW55IGxhdGVyIHZlcnNpb24uDQor ICoNCisgKiBBdXRob3Iocyk6DQorICoJMjAxMS0yMDEyIEFydmlkIEJyb2RpbiwgYXJ2aWQuYnJv ZGluQHhkaW4uY29tDQorICovDQorDQorI2lmbmRlZiBfX0hTUl9ERVZJQ0VfSA0KKyNkZWZpbmUg X19IU1JfREVWSUNFX0gNCisNCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+DQorDQordm9p ZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KK2ludCBoc3JfZGV2X2Zp bmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xh dmVbMl0pOw0KK3ZvaWQgaHNyX3NldF9vcGVyc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9k ZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZTEsDQorCQkgICAgICAgc3RydWN0IG5ldF9kZXZp Y2UgKnNsYXZlMik7DQordm9pZCBoc3Jfc2V0X2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmhz cl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZTEsDQorCQkgICAgIHN0cnVjdCBuZXRfZGV2 aWNlICpzbGF2ZTIpOw0KK3ZvaWQgaHNyX2NoZWNrX2Fubm91bmNlKHN0cnVjdCBuZXRfZGV2aWNl ICpoc3JfZGV2LCBpbnQgb2xkX29wZXJzdGF0ZSk7DQorYm9vbCBpc19oc3JfbWFzdGVyKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpOw0KKw0KKyNlbmRpZiAvKiBfX0hTUl9ERVZJQ0VfSCAqLw0KZGlm ZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmMgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5j DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZGU0MDZmNg0KLS0tIC9kZXYv bnVsbA0KKysrIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuYw0KQEAgLTAsMCArMSwzMDMgQEANCisv Kg0KKyAqIENvcHlyaWdodCAyMDExLTIwMTIgQXV0cm9uaWNhIEZpcmUgYW5kIFNlY3VyaXR5IEFT DQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlDQorICogU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKQ0KKyAqIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogQXV0aG9yKHMp Og0KKyAqCTIwMTEtMjAxMiBBcnZpZCBCcm9kaW4sIGFydmlkLmJyb2RpbkB4ZGluLmNvbQ0KKyAq DQorICogVGhlIEhTUiBzcGVjIHNheXMgbmV2ZXIgdG8gZm9yd2FyZCB0aGUgc2FtZSBmcmFtZSB0 d2ljZSBvbiB0aGUgc2FtZQ0KKyAqIGludGVyZmFjZS4gQSBmcmFtZSBpcyBpZGVudGlmaWVkIGJ5 IGl0cyBzb3VyY2UgTUFDIGFkZHJlc3MgYW5kIGl0cyBIU1INCisgKiBzZXF1ZW5jZSBudW1iZXIu IFRoaXMgY29kZSBrZWVwcyB0cmFjayBvZiBzZW5kZXJzIGFuZCB0aGVpciBzZXF1ZW5jZSBudW1i ZXJzDQorICogdG8gYWxsb3cgZmlsdGVyaW5nIG9mIGR1cGxpY2F0ZSBmcmFtZXMuDQorICovDQor DQorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2 aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCisjaW5jbHVkZSA8bGludXgvcmN1bGlz dC5oPg0KKyNpbmNsdWRlICJoc3JfcHJpdmF0ZS5oIg0KKyNpbmNsdWRlICJoc3JfZnJhbWVyZWcu aCINCisjaW5jbHVkZSAiaHNyX25ldGxpbmsuaCINCisNCisNCisvKg0KKwlUT0RPOiB1c2UgaGFz aCBsaXN0cyBmb3IgbWFjIGFkZHJlc3NlcyAobGludXgvamhhc2guaCk/DQorKi8NCisNCitzdHJ1 Y3Qgbm9kZV9lbnRyeSB7DQorCXN0cnVjdCBsaXN0X2hlYWQgbWFjX2xpc3Q7DQorCXVuc2lnbmVk IGNoYXIJTWFjQWRkcmVzc0FbRVRIX0FMRU5dOw0KKwl1bnNpZ25lZCBjaGFyCU1hY0FkZHJlc3NC W0VUSF9BTEVOXTsNCisJdW5zaWduZWQgbG9uZwl0aW1lX2luW0hTUl9NQVhfU0xBVkVdOw0KKwl1 MTYJCXNlcV9vdXRbSFNSX01BWF9ERVZdOw0KKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7DQor fTsNCisNCisNCit1bnNpZ25lZCBjaGFyICpoc3JfZ2V0X25vZGVfYWRkcihzdHJ1Y3Qgbm9kZV9l bnRyeSAqbm9kZSkNCit7DQorCXJldHVybiBub2RlLT5NYWNBZGRyZXNzQTsNCit9DQorDQorDQor LyoNCisgKiBTZWFyY2ggZm9yIG1hYyBlbnRyeS4gQ2FsbGVyIG11c3QgaG9sZCByY3UgcmVhZCBs b2NrLg0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3Qgbm9kZV9lbnRyeSAqZmluZF9ub2RlX2J5X0FkZHJB KHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsDQorCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgYWRk cltFVEhfQUxFTl0pDQorew0KKwlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbm9kZTsNCisNCisJbGlzdF9m b3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgbm9kZV9kYiwgbWFjX2xpc3QpDQorCQlpZiAoIWNvbXBh cmVfZXRoZXJfYWRkcihub2RlLT5NYWNBZGRyZXNzQSwgYWRkcikpDQorCQkJcmV0dXJuIG5vZGU7 DQorDQorCXJldHVybiBOVUxMOw0KK30NCisNCisvKg0KKyAqIFNlYXJjaCBmb3IgbWFjIGVudHJ5 LiBDYWxsZXIgbXVzdCBob2xkIHJjdSByZWFkIGxvY2suDQorICovDQorc3RhdGljIHN0cnVjdCBu b2RlX2VudHJ5ICpmaW5kX25vZGVfYnlfQWRkckIoc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYiwN CisJCQkJCSAgICAgdW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXSkNCit7DQorCXN0cnVjdCBu b2RlX2VudHJ5ICpub2RlOw0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCBub2Rl X2RiLCBtYWNfbGlzdCkNCisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKG5vZGUtPk1hY0FkZHJl c3NCLCBhZGRyKSkNCisJCQlyZXR1cm4gbm9kZTsNCisNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0K Ky8qDQorICogU2VhcmNoIGZvciBtYWMgZW50cnkuIENhbGxlciBtdXN0IGhvbGQgcmN1IHJlYWQg bG9jay4NCisgKi8NCitzdHJ1Y3Qgbm9kZV9lbnRyeSAqaHNyX2ZpbmRfbm9kZShzdHJ1Y3QgbGlz dF9oZWFkICpub2RlX2RiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IG5vZGVf ZW50cnkgKm5vZGU7DQorCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsNCisNCisJaWYgKCFza2JfbWFj X2hlYWRlcl93YXNfc2V0KHNrYikpDQorCQlyZXR1cm4gTlVMTDsNCisNCisJZXRoaGRyID0gKHN0 cnVjdCBldGhoZHIgKikgc2tiX21hY19oZWFkZXIoc2tiKTsNCisNCisJbGlzdF9mb3JfZWFjaF9l bnRyeV9yY3Uobm9kZSwgbm9kZV9kYiwgbWFjX2xpc3QpIHsNCisJCWlmICghY29tcGFyZV9ldGhl cl9hZGRyKG5vZGUtPk1hY0FkZHJlc3NBLCBldGhoZHItPmhfc291cmNlKSkNCisJCQlyZXR1cm4g bm9kZTsNCisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKG5vZGUtPk1hY0FkZHJlc3NCLCBldGho ZHItPmhfc291cmNlKSkNCisJCQlyZXR1cm4gbm9kZTsNCisJfQ0KKw0KKwlyZXR1cm4gTlVMTDsN Cit9DQorDQorLyoNCisgKiBIZWxwZXIgZm9yIGRldmljZSBpbml0OyB0aGUgc2VsZl9ub2RlX2Ri IGlzIHVzZWQgaW4gaHNyX3JjdigpIHRvIHJlY29nbml6ZQ0KKyAqIGZyYW1lcyBmcm9tIHNlbGYg dGhhdCdzIGJlZW4gbG9vcGVkIG92ZXIgdGhlIEhTUiByaW5nLg0KKyAqLw0KK2ludCBoc3JfY3Jl YXRlX3NlbGZfbm9kZShzdHJ1Y3QgbGlzdF9oZWFkICpzZWxmX25vZGVfZGIsDQorCQkJIHVuc2ln bmVkIGNoYXIgYWRkcl9hW0VUSF9BTEVOXSwNCisJCQkgdW5zaWduZWQgY2hhciBhZGRyX2JbRVRI X0FMRU5dKQ0KK3sNCisJc3RydWN0IG5vZGVfZW50cnkgKm5vZGU7DQorDQorCW5vZGUgPSBrbWFs bG9jKHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOw0KKwlpZiAoIW5vZGUpDQorCQlyZXR1cm4g LUVOT01FTTsNCisNCisJbWVtY3B5KG5vZGUtPk1hY0FkZHJlc3NBLCBhZGRyX2EsIEVUSF9BTEVO KTsNCisJbWVtY3B5KG5vZGUtPk1hY0FkZHJlc3NCLCBhZGRyX2IsIEVUSF9BTEVOKTsNCisNCisJ bGlzdF9hZGRfdGFpbF9yY3UoJm5vZGUtPm1hY19saXN0LCBzZWxmX25vZGVfZGIpOw0KKwlyZXR1 cm4gMDsNCit9DQorDQoraW50IGhzcl9tZXJnZV9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyX3By aXYsIGVudW0gaHNyX2Rldl9pZHggZGV2X2lkeCwNCisJCSAgIHN0cnVjdCBza19idWZmICpza2Ip DQorew0KKwlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7DQorCXN0cnVjdCBoc3Jfc3VwX3BheWxvYWQg Kmhzcl9zcDsNCisJc3RydWN0IG5vZGVfZW50cnkgKm5vZGU7DQorCWludCBpOw0KKwlpbnQgZm91 bmQ7DQorDQorCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9tYWNfaGVhZGVyKHNrYik7 DQorCWhzcl9zcCA9IChzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkICopIHNrYi0+ZGF0YTsNCisNCisJ Zm91bmQgPSAxOw0KKwlyY3VfcmVhZF9sb2NrKCk7DQorCW5vZGUgPSBmaW5kX25vZGVfYnlfQWRk ckEoJmhzcl9wcml2LT5ub2RlX2RiLCBoc3Jfc3AtPk1hY0FkZHJlc3NBKTsNCisJaWYgKCFub2Rl KSB7DQorCQlyY3VfcmVhZF91bmxvY2soKTsNCisJCWZvdW5kID0gMDsNCisJCW5vZGUgPSBrbWFs bG9jKHNpemVvZigqbm9kZSksIEdGUF9BVE9NSUMpOw0KKwkJaWYgKCFub2RlKQ0KKwkJCXJldHVy biAtRU5PTUVNOw0KKw0KKwkJbWVtY3B5KG5vZGUtPk1hY0FkZHJlc3NBLCBoc3Jfc3AtPk1hY0Fk ZHJlc3NBLCBFVEhfQUxFTik7DQorCQltZW1jcHkobm9kZS0+TWFjQWRkcmVzc0IsIGV0aGhkci0+ aF9zb3VyY2UsIEVUSF9BTEVOKTsNCisNCisJCWZvciAoaSA9IDA7IGkgPCBIU1JfTUFYX1NMQVZF OyBpKyspDQorCQkJbm9kZS0+dGltZV9pbltpXSA9IDA7DQorCQlmb3IgKGkgPSAwOyBpIDwgSFNS X01BWF9ERVY7IGkrKykNCisJCQlub2RlLT5zZXFfb3V0W2ldID0gMDsNCisJfQ0KKw0KKwkvKiBN ZXJnZSBub2RlIGlmIGl0J3MgUElDU19TVUJTIGNhcGFibGUgKi8NCisJaWYgKGNvbXBhcmVfZXRo ZXJfYWRkcihoc3Jfc3AtPk1hY0FkZHJlc3NBLCBldGhoZHItPmhfc291cmNlKSkNCisJCW1lbWNw eShub2RlLT5NYWNBZGRyZXNzQiwgZXRoaGRyLT5oX3NvdXJjZSwgRVRIX0FMRU4pOw0KKw0KKwlu b2RlLT50aW1lX2luW2Rldl9pZHhdID0gamlmZmllczsNCisNCisJaWYgKGZvdW5kKQ0KKwkJcmN1 X3JlYWRfdW5sb2NrKCk7DQorCWVsc2UNCisJCWxpc3RfYWRkX3RhaWxfcmN1KCZub2RlLT5tYWNf bGlzdCwgJmhzcl9wcml2LT5ub2RlX2RiKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKw0KK3Zv aWQgaHNyX2FkZHJfc3Vic3Qoc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdiwgc3RydWN0IHNrX2J1 ZmYgKnNrYikNCit7DQorCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsNCisJc3RydWN0IG5vZGVfZW50 cnkgKm5vZGU7DQorDQorCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9tYWNfaGVhZGVy KHNrYik7DQorDQorCXJjdV9yZWFkX2xvY2soKTsNCisJbm9kZSA9IGZpbmRfbm9kZV9ieV9BZGRy QigmaHNyX3ByaXYtPm5vZGVfZGIsIGV0aGhkci0+aF9zb3VyY2UpOw0KKwlpZiAobm9kZSkNCisJ CW1lbWNweShldGhoZHItPmhfc291cmNlLCBub2RlLT5NYWNBZGRyZXNzQSwgRVRIX0FMRU4pOw0K KwlyY3VfcmVhZF91bmxvY2soKTsNCit9DQorDQorDQorDQorLyoNCisgKiBhYm92ZShhLCBiKSAt IHJldHVybiAxIGlmIGEgPiBiLCAwIG90aGVyd2lzZS4NCisgKi8NCitzdGF0aWMgYm9vbCBhYm92 ZSh1MTYgYSwgdTE2IGIpDQorew0KKwkvKiBSZW1vdmUgaW5jb25zaXN0ZW5jeSB3aGVyZSBhYm92 ZShhLCBiKSA9PSBiZWxvdyhhLCBiKSAqLw0KKwlpZiAoKGludCkgYiAtIGEgPT0gMzI3NjgpDQor CQlyZXR1cm4gMDsNCisNCisJcmV0dXJuICgoKHMxNikgKGIgLSBhKSkgPCAwKTsNCit9DQorI2Rl ZmluZSBiZWxvdyhhLCBiKQkJYWJvdmUoKGIpLCAoYSkpDQorI2RlZmluZSBhYm92ZV9vcl9lcShh LCBiKQkoIWJlbG93KChhKSwgKGIpKSkNCisjZGVmaW5lIGJlbG93X29yX2VxKGEsIGIpCSghYWJv dmUoKGEpLCAoYikpKQ0KKw0KKw0KK3ZvaWQgaHNyX3JlZ2lzdGVyX2ZyYW1lX2luKHN0cnVjdCBu b2RlX2VudHJ5ICpub2RlLCBlbnVtIGhzcl9kZXZfaWR4IGRldl9pZHgpDQorew0KKwlpZiAoKGRl dl9pZHggPCAwKSB8fCAoZGV2X2lkeCA+PSBIU1JfTUFYX0RFVikpIHsNCisJCVdBUk5fT04oMSk7 DQorCQlyZXR1cm47DQorCX0NCisJbm9kZS0+dGltZV9pbltkZXZfaWR4XSA9IGppZmZpZXM7DQor fQ0KKw0KKy8qDQorICogUGFyYW1ldGVyczoNCisgKgknc2tiJyBpcyBhIEhTUiBFdGhlcm5ldCBm cmFtZSAod2l0aCBhIEhTUiB0YWcgaW5zZXJ0ZWQpLCB3aXRoIGEgdmFsaWQNCisgKglldGhoZHIt Pmhfc291cmNlIGFkZHJlc3MgYW5kIHNrYi0+bWFjX2hlYWRlciBzZXQuDQorICoNCisgKiBSZXR1 cm46DQorICoJIDEgaWYgZnJhbWUgY2FuIGJlIHNob3duIHRvIGhhdmUgYmVlbiBzZW50IHJlY2Vu dGx5IG9uIHRoaXMgaW50ZXJmYWNlLA0KKyAqCSAwIG90aGVyd2lzZSwgb3INCisgKgkgbmVnYXRp dmUgZXJyb3IgY29kZSBvbiBlcnJvcg0KKyAqLw0KK2ludCBoc3JfcmVnaXN0ZXJfZnJhbWVfb3V0 KHN0cnVjdCBub2RlX2VudHJ5ICpub2RlLCBlbnVtIGhzcl9kZXZfaWR4IGRldl9pZHgsDQorCQkJ ICAgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRo aGRyOw0KKw0KKwlpZiAoKGRldl9pZHggPCAwKSB8fCAoZGV2X2lkeCA+PSBIU1JfTUFYX0RFVikp IHsNCisJCVdBUk5fT04oMSk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKwlpZiAoIXNrYl9t YWNfaGVhZGVyX3dhc19zZXQoc2tiKSkgew0KKwkJV0FSTl9PTigxKTsNCisJCXJldHVybiAtRUlO VkFMOw0KKwl9DQorCWhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKikgc2tiX21hY19o ZWFkZXIoc2tiKTsNCisNCisJaWYgKGJlbG93X29yX2VxKGhzcl9ldGhoZHItPmhzcl90YWcuc2Vx dWVuY2VfbnIsDQorCQkJCQkJCW5vZGUtPnNlcV9vdXRbZGV2X2lkeF0pKQ0KKwkJcmV0dXJuIDE7 DQorDQorCW5vZGUtPnNlcV9vdXRbZGV2X2lkeF0gPSBoc3JfZXRoaGRyLT5oc3JfdGFnLnNlcXVl bmNlX25yOw0KKwlyZXR1cm4gMDsNCit9DQorDQorDQorc3RhdGljIHZvaWQgbm9kZV9lbnRyeV9y ZWNsYWltKHN0cnVjdCByY3VfaGVhZCAqcmgpDQorew0KKwlrZnJlZShjb250YWluZXJfb2Yocmgs IHN0cnVjdCBub2RlX2VudHJ5LCByY3VfaGVhZCkpOw0KK30NCisNCisvKg0KKyAqIFJlbW92ZSBz dGFsZSBzZXF1ZW5jZV9uciByZWNvcmRzLiBDYWxsZWQgYnkgdGltZXIgZXZlcnkNCisgKiBIU1Jf TElGRV9DSEVDS19JTlRFUlZBTCAodHdvIHNlY29uZHMgb3Igc28pLiBUaGlzIGlzIGFsc28gdGhl IG9ubHkgZnVuY3Rpb24NCisgKiB0aGF0IHJlbW92ZXMgbWFjX2VudHJpZXM7IGl0IHNob3VsZG4n dCBuZWVkIHRvIGJlIHJjdV9yZWFkX2xvY2soKTplZC4NCisgKi8NCit2b2lkIGhzcl9wcnVuZV9u b2RlcyhzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiKQ0KK3sNCisJc3RydWN0IG5vZGVfZW50cnkg Km5vZGVfZW50cnksICpub2RlX2VudHJ5X25leHQ7DQorCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1w Ow0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZV9lbnRyeSwgbm9kZV9lbnRyeV9u ZXh0LCBub2RlX2RiLCBtYWNfbGlzdCkgew0KKw0KKwkJdGltZXN0YW1wID0gbWF4KG5vZGVfZW50 cnktPnRpbWVfaW5bSFNSX0RFVl9TTEFWRTFdLA0KKwkJCQlub2RlX2VudHJ5LT50aW1lX2luW0hT Ul9ERVZfU0xBVkUyXSk7DQorDQorCQkvKiBXYXJuIG9ubHkgYXMgbG9uZyBhcyB3ZSBnZXQgZnJh bWVzIGF0IGFsbCAqLw0KKwkJaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0aW1lc3RhbXAgKw0K KwkJCQkJbXNlY3NfdG9famlmZmllcygxLjUqTUFYX1NMQVZFX0RJRkYpKSkgew0KKw0KKwkJCS8q IENoZWNrIGZvciBvcGVuIHJpbmcgKi8NCisJCQlpZiAodGltZV9hZnRlcihub2RlX2VudHJ5LT50 aW1lX2luW0hTUl9ERVZfU0xBVkUyXSwNCisJCQkJCW5vZGVfZW50cnktPnRpbWVfaW5bSFNSX0RF Vl9TTEFWRTFdICsNCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoTUFYX1NMQVZFX0RJRkYpKSkNCisJ CQkJaHNyX25sX3JpbmdlcnJvcihub2RlX2VudHJ5LT5NYWNBZGRyZXNzQSwgSFNSX0RFVl9TTEFW RTEpOw0KKwkJCWVsc2UgaWYgKHRpbWVfYWZ0ZXIobm9kZV9lbnRyeS0+dGltZV9pbltIU1JfREVW X1NMQVZFMV0sDQorCQkJCQlub2RlX2VudHJ5LT50aW1lX2luW0hTUl9ERVZfU0xBVkUyXSArDQor CQkJCQltc2Vjc190b19qaWZmaWVzKE1BWF9TTEFWRV9ESUZGKSkpDQorCQkJCWhzcl9ubF9yaW5n ZXJyb3Iobm9kZV9lbnRyeS0+TWFjQWRkcmVzc0EsIEhTUl9ERVZfU0xBVkUyKTsNCisJCX0NCisN CisJCS8qIFBydW5lIG9sZCBlbnRyaWVzICovDQorCQlpZiAodGltZV9pc19iZWZvcmVfamlmZmll cyh0aW1lc3RhbXAgKw0KKwkJCQkJbXNlY3NfdG9famlmZmllcyhIU1JfTk9ERV9GT1JHRVRfVElN RSkpKSB7DQorCQkJaHNyX25sX25vZGVkb3duKG5vZGVfZW50cnktPk1hY0FkZHJlc3NBKTsNCisJ CQlsaXN0X2RlbF9yY3UoJm5vZGVfZW50cnktPm1hY19saXN0KTsNCisJCQljYWxsX3JjdSgmbm9k ZV9lbnRyeS0+cmN1X2hlYWQsIG5vZGVfZW50cnlfcmVjbGFpbSk7DQorCQl9DQorCX0NCit9DQor DQorDQordm9pZCBoc3JfZ2V0X25vZGVfdGltZXMoc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdiwg dW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXSwNCisJCQl1bnNpZ25lZCBsb25nICp0aW1lMSwg dW5zaWduZWQgbG9uZyAqdGltZTIpDQorew0KKwlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbm9kZTsNCisN CisJcmN1X3JlYWRfbG9jaygpOw0KKwlub2RlID0gZmluZF9ub2RlX2J5X0FkZHJBKCZoc3JfcHJp di0+bm9kZV9kYiwgYWRkcik7DQorCWlmICghbm9kZSkgew0KKwkJKnRpbWUxID0gMDsNCisJCSp0 aW1lMiA9IDA7DQorCX0gZWxzZSB7DQorCQkqdGltZTEgPSBub2RlLT50aW1lX2luW0hTUl9ERVZf U0xBVkUxXTsNCisJCSp0aW1lMiA9IG5vZGUtPnRpbWVfaW5bSFNSX0RFVl9TTEFWRTJdOw0KKwl9 DQorCXJjdV9yZWFkX3VubG9jaygpOw0KK30NCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFt ZXJlZy5oIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmlu ZGV4IDAwMDAwMDAuLjZlMjg0OTANCi0tLSAvZGV2L251bGwNCisrKyBiL25ldC9oc3IvaHNyX2Zy YW1lcmVnLmgNCkBAIC0wLDAgKzEsNTIgQEANCisvKg0KKyAqIENvcHlyaWdodCAyMDExLTIwMTIg QXV0cm9uaWNhIEZpcmUgYW5kIFNlY3VyaXR5IEFTDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdA0K KyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlDQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQ0KKyAqIGFueSBsYXRl ciB2ZXJzaW9uLg0KKyAqDQorICogQXV0aG9yKHMpOg0KKyAqCTIwMTEtMjAxMiBBcnZpZCBCcm9k aW4sIGFydmlkLmJyb2RpbkB4ZGluLmNvbQ0KKyAqLw0KKw0KKyNpZm5kZWYgX0hTUl9GUkFNRVJF R19IDQorI2RlZmluZSBfSFNSX0ZSQU1FUkVHX0gNCisNCisjaW5jbHVkZSAiaHNyX3ByaXZhdGUu aCINCisNCitlbnVtIGhzcl9kZXZfaWR4IHsNCisJSFNSX0RFVl9TTEFWRTEgPSAwLA0KKwlIU1Jf REVWX1NMQVZFMiwNCisJSFNSX0RFVl9NQVNURVIsDQorfTsNCisNCitzdHJ1Y3Qgbm9kZV9lbnRy eTsNCisNCisjZGVmaW5lIEhTUl9NQVhfU0xBVkUJKEhTUl9ERVZfU0xBVkUyICsgMSkNCisjZGVm aW5lIEhTUl9NQVhfREVWCShIU1JfREVWX01BU1RFUiArIDEpDQorDQorc3RydWN0IG5vZGVfZW50 cnkgKmhzcl9maW5kX25vZGUoc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYiwgc3RydWN0IHNrX2J1 ZmYgKnNrYik7DQorDQoraW50IGhzcl9tZXJnZV9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyX3By aXYsIGVudW0gaHNyX2Rldl9pZHggZGV2X2lkeCwNCisJCSAgIHN0cnVjdCBza19idWZmICpza2Ip Ow0KKw0KK3ZvaWQgaHNyX2FkZHJfc3Vic3Qoc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdiwgc3Ry dWN0IHNrX2J1ZmYgKnNrYik7DQorDQordm9pZCBoc3JfcmVnaXN0ZXJfZnJhbWVfaW4oc3RydWN0 IG5vZGVfZW50cnkgKm5vZGUsIGVudW0gaHNyX2Rldl9pZHgpOw0KKw0KK2ludCBoc3JfcmVnaXN0 ZXJfZnJhbWVfb3V0KHN0cnVjdCBub2RlX2VudHJ5ICpub2RlLCBlbnVtIGhzcl9kZXZfaWR4LA0K KwkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOw0KKw0KK3ZvaWQgaHNyX3BydW5lX25vZGVzKHN0 cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIpOw0KKw0KK3ZvaWQgaHNyX2dldF9ub2RlX3RpbWVzKHN0 cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXYsIHVuc2lnbmVkIGNoYXIgYWRkcltFVEhfQUxFTl0sDQor CQkJdW5zaWduZWQgbG9uZyAqdGltZTEsIHVuc2lnbmVkIGxvbmcgKnRpbWUyKTsNCisNCitpbnQg aHNyX2NyZWF0ZV9zZWxmX25vZGUoc3RydWN0IGxpc3RfaGVhZCAqc2VsZl9ub2RlX2RiLA0KKwkJ CSB1bnNpZ25lZCBjaGFyIGFkZHJfYVtFVEhfQUxFTl0sDQorCQkJIHVuc2lnbmVkIGNoYXIgYWRk cl9iW0VUSF9BTEVOXSk7DQorDQordW5zaWduZWQgY2hhciAqaHNyX2dldF9ub2RlX2FkZHIoc3Ry dWN0IG5vZGVfZW50cnkgKm5vZGUpOw0KKw0KKyNlbmRpZiAvKiBfSFNSX0ZSQU1FUkVHX0ggKi8N CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9tYWluLmMgYi9uZXQvaHNyL2hzcl9tYWluLmMNCm5l dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4zODk3NGYyDQotLS0gL2Rldi9udWxs DQorKysgYi9uZXQvaHNyL2hzcl9tYWluLmMNCkBAIC0wLDAgKzEsNDAyIEBADQorLyoNCisgKiBD b3B5cmlnaHQgMjAxMS0yMDEyIEF1dHJvbmljYSBGaXJlIGFuZCBTZWN1cml0eSBBUw0KKyAqDQor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQNCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQ0KKyAqIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikNCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIEF1dGhvcihzKToNCisgKgky MDExLTIwMTIgQXJ2aWQgQnJvZGluLCBhcnZpZC5icm9kaW5AeGRpbi5jb20NCisgKg0KKyAqIElu IGFkZGl0aW9uIHRvIHJvdXRpbmVzIGZvciByZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyBI U1Igc3VwcG9ydCwgdGhpcw0KKyAqIGZpbGUgYWxzbyBjb250YWlucyB0aGUgcmVjZWl2ZSByb3V0 aW5lIHRoYXQgaGFuZGxlcyBhbGwgaW5jb21pbmcgZnJhbWVzIHdpdGgNCisgKiBFdGhlcnR5cGUg KHByb3RvY29sKSBFVEhfUF9IU1IuDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L25ldGRldmlj ZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3RpbWVy Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+DQorI2luY2x1ZGUgImhzcl9wcml2 YXRlLmgiDQorI2luY2x1ZGUgImhzcl9kZXZpY2UuaCINCisjaW5jbHVkZSAiaHNyX25ldGxpbmsu aCINCisjaW5jbHVkZSAiaHNyX2ZyYW1lcmVnLmgiDQorDQorDQorLyogTXVsdGljYXN0IGFkZHJl c3MgZm9yIEhTUiBTdXBlcnZpc2lvbiBmcmFtZXMgKi8NCitjb25zdCB1OCBoc3JfbXVsdGljYXN0 X2FkZHJbRVRIX0FMRU5dID0gezB4MDEsIDB4MTUsIDB4NGUsIDB4MDAsIDB4MDEsIDB4MDB9Ow0K Kw0KKw0KKy8qIExpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgdmlydHVhbCBIU1IgZGV2aWNlcyAqLw0K K3N0YXRpYyBMSVNUX0hFQUQoaHNyX2xpc3QpOw0KKw0KK3ZvaWQgcmVnaXN0ZXJfaHNyX21hc3Rl cihzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2KQ0KK3sNCisJbGlzdF9hZGRfdGFpbF9yY3UoJmhz cl9wcml2LT5oc3JfbGlzdCwgJmhzcl9saXN0KTsNCit9DQorDQordm9pZCB1bnJlZ2lzdGVyX2hz cl9tYXN0ZXIoc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdikNCit7DQorCXN0cnVjdCBoc3JfcHJp diAqaHNyX3ByaXZfaXQ7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoaHNyX3ByaXZfaXQsICZo c3JfbGlzdCwgaHNyX2xpc3QpDQorCQlpZiAoaHNyX3ByaXZfaXQgPT0gaHNyX3ByaXYpIHsNCisJ CQlsaXN0X2RlbF9yY3UoJmhzcl9wcml2X2l0LT5oc3JfbGlzdCk7DQorCQkJcmV0dXJuOw0KKwkJ fQ0KK30NCisNCisNCisvKg0KKyAqIElmIGRldiBpcyBhIEhTUiBzbGF2ZSBkZXZpY2UsIHJldHVy biB0aGUgdmlydHVhbCBtYXN0ZXIgZGV2aWNlLiBSZXR1cm4gTlVMTA0KKyAqIG90aGVyd2lzZS4N CisgKi8NCitzdGF0aWMgc3RydWN0IGhzcl9wcml2ICpnZXRfaHNyX21hc3RlcihzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdjsNCisNCisJcmN1 X3JlYWRfbG9jaygpOw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoc3JfcHJpdiwgJmhzcl9s aXN0LCBoc3JfbGlzdCkNCisJCWlmICgoZGV2ID09IGhzcl9wcml2LT5zbGF2ZV9kYXRhWzBdLmRl dikgfHwNCisJCQkJKGRldiA9PSBoc3JfcHJpdi0+c2xhdmVfZGF0YVsxXS5kZXYpKSB7DQorCQkJ cmN1X3JlYWRfdW5sb2NrKCk7DQorCQkJcmV0dXJuIGhzcl9wcml2Ow0KKwkJfQ0KKw0KKwlyY3Vf cmVhZF91bmxvY2soKTsNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KKy8qDQorICogSWYgZGV2IGlz IGEgSFNSIHNsYXZlIGRldmljZSwgcmV0dXJuIHRoZSBvdGhlciBzbGF2ZSBkZXZpY2UuIFJldHVy biBOVUxMDQorICogb3RoZXJ3aXNlLg0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3QgaHNyX3NsYXZlX2Rh dGEgKmdldF9vdGhlcl9zbGF2ZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2LA0KKwkJCQkJICAg ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCit7DQorCWlmIChkZXYgPT0gaHNyX3ByaXYtPnNs YXZlX2RhdGFbMF0uZGV2KQ0KKwkJcmV0dXJuICZoc3JfcHJpdi0+c2xhdmVfZGF0YVsxXTsNCisJ aWYgKGRldiA9PSBoc3JfcHJpdi0+c2xhdmVfZGF0YVsxXS5kZXYpDQorCQlyZXR1cm4gJmhzcl9w cml2LT5zbGF2ZV9kYXRhWzBdOw0KKw0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQorDQorc3RhdGlj IGludCBoc3JfbmV0ZGV2X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25l ZCBsb25nIGV2ZW50LA0KKwkJCSAgICAgdm9pZCAqcHRyKQ0KK3sNCisNCisvKg0KKyAqIFNob3Vs ZCBkbzoNCisgKg0KKyAqIC0gZXJyb3IgbW9uaXRvcmluZyAoYnJva2VuIGxpbmspDQorICogLSBz bGF2ZSBtb25pdG9yaW5nIChkaXNhbGxvdyBkb3duLCByZWNvbmZpZ3VyaW5nID8pDQorDQorCXJl Z2lzdGVyX25ldGRldmljZV9ub3RpZmllciguLi4pOw0KKwlORVRERVZfR09JTkdfRE9XTg0KKwlO RVRERVZfQ0hBTkdFQUREUg0KKwlORVRERVZfQ0hBTkdFIChkZXYtPmZsYWdzKQ0KKwlORVRERVZf VU5SRUdJU1RFUg0KKyAqLw0KKw0KKwlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmUsICpvdGhlcl9z bGF2ZTsNCisJc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdjsNCisJc3RydWN0IGhzcl9zbGF2ZV9k YXRhICpvdGhlcl9kYXRhOw0KKwlpbnQgb2xkX29wZXJzdGF0ZTsNCisNCisJaHNyX3ByaXYgPSBn ZXRfaHNyX21hc3RlcihwdHIpOw0KKwlpZiAoaHNyX3ByaXYpIHsgLyogSXMgcHRyIGEgc2xhdmUg ZGV2aWNlPyAqLw0KKwkJc2xhdmUgPSBwdHI7DQorCQlvdGhlcl9kYXRhID0gZ2V0X290aGVyX3Ns YXZlKGhzcl9wcml2LCBzbGF2ZSk7DQorCQlvdGhlcl9zbGF2ZSA9IG90aGVyX2RhdGEtPmRldjsN CisJfSBlbHNlIHsNCisJCWlmICghaXNfaHNyX21hc3RlcihwdHIpKQ0KKwkJCXJldHVybiBOT1RJ RllfRE9ORTsNCisJCWhzcl9wcml2ID0gbmV0ZGV2X3ByaXYocHRyKTsNCisJCXNsYXZlID0gaHNy X3ByaXYtPnNsYXZlX2RhdGFbMF0uZGV2Ow0KKwkJb3RoZXJfc2xhdmUgPSBoc3JfcHJpdi0+c2xh dmVfZGF0YVsxXS5kZXY7DQorCX0NCisNCisJc3dpdGNoIChldmVudCkgew0KKwljYXNlIE5FVERF Vl9VUDoJCS8qIEFkbWluaXN0cmF0aXZlIHN0YXRlIERPV04gKi8NCisJY2FzZSBORVRERVZfRE9X TjoJLyogQWRtaW5pc3RyYXRpdmUgc3RhdGUgVVAgKi8NCisJY2FzZSBORVRERVZfQ0hBTkdFOgkv KiBMaW5rIChjYXJyaWVyKSBzdGF0ZSBjaGFuZ2VzICovDQorCQlvbGRfb3BlcnN0YXRlID0gaHNy X3ByaXYtPmRldi0+b3BlcnN0YXRlOw0KKwkJaHNyX3NldF9jYXJyaWVyKGhzcl9wcml2LT5kZXYs IHNsYXZlLCBvdGhlcl9zbGF2ZSk7DQorCQloc3Jfc2V0X29wZXJzdGF0ZShoc3JfcHJpdi0+ZGV2 LCBzbGF2ZSwgb3RoZXJfc2xhdmUpOw0KKwkJaHNyX2NoZWNrX2Fubm91bmNlKGhzcl9wcml2LT5k ZXYsIG9sZF9vcGVyc3RhdGUpOw0KKwl9DQorDQorCXJldHVybiBOT1RJRllfRE9ORTsNCit9DQor DQorDQorc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHBydW5lX3RpbWVyOw0KKw0KK3N0YXRpYyB2 b2lkIHBydW5lX25vZGVzX2FsbCh1bnNpZ25lZCBsb25nIGRhdGEpDQorew0KKwlzdHJ1Y3QgaHNy X3ByaXYgKmhzcl9wcml2Ow0KKw0KKwlyY3VfcmVhZF9sb2NrKCk7DQorCWxpc3RfZm9yX2VhY2hf ZW50cnlfcmN1KGhzcl9wcml2LCAmaHNyX2xpc3QsIGhzcl9saXN0KQ0KKwkJaHNyX3BydW5lX25v ZGVzKCZoc3JfcHJpdi0+bm9kZV9kYik7DQorCXJjdV9yZWFkX3VubG9jaygpOw0KKw0KKwlwcnVu ZV90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUFJVTkVfUEVSSU9E KTsNCisJYWRkX3RpbWVyKCZwcnVuZV90aW1lcik7DQorfQ0KKw0KKw0KK3N0YXRpYyBzdHJ1Y3Qg c2tfYnVmZiAqc3RyaXBfaHNyX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0 IGhzcl90YWcgKmhzcl90YWc7DQorCXN0cnVjdCBza19idWZmICpza2IyOw0KKw0KKwlza2IyID0g c2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7DQorCWlmICh1bmxpa2VseSghc2tiMikp DQorCQlnb3RvIGVycl9mcmVlOw0KKwlza2IgPSBza2IyOw0KKw0KKwlpZiAodW5saWtlbHkoIXBz a2JfbWF5X3B1bGwoc2tiLCBIU1JfVEFHTEVOKSkpDQorCQlnb3RvIGVycl9mcmVlOw0KKw0KKwlo c3JfdGFnID0gKHN0cnVjdCBoc3JfdGFnICopIHNrYi0+ZGF0YTsNCisJc2tiLT5wcm90b2NvbCA9 IGhzcl90YWctPmVuY2FwX3Byb3RvOw0KKwlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsg IC8vIEZJWE1FIGlzIHRoaXMgbmVlZGVkICYgY29ycmVjdD8NCisJc2tiX3B1bGxfcmNzdW0oc2ti LCBIU1JfVEFHTEVOKTsNCisNCisJcmV0dXJuIHNrYjsNCisNCitlcnJfZnJlZToNCisJa2ZyZWVf c2tiKHNrYik7DQorCXJldHVybiBOVUxMOw0KK30NCisNCisNCisvKg0KKyAqIFRoZSB1c2VzIEkg Y2FuIHNlZSBmb3IgdGhlc2UgSFNSIHN1cGVydmlzaW9uIGZyYW1lcyBhcmU6DQorICogMSkgVXNl IHRoZSBmcmFtZXMgdGhhdCBhcmUgc2VudCBhZnRlciBub2RlIGluaXRpYWxpemF0aW9uICgiSFNS X1RMVi5UeXBlID0NCisgKiAgICAyMiIpIHRvIHJlc2V0IGFueSBzZXF1ZW5jZV9uciBjb3VudGVy cyBiZWxvbmdpbmcgdG8gdGhhdCBub2RlLiBVc2VmdWwgaWYNCisgKiAgICB0aGUgb3RoZXIgbm9k ZSdzIGNvdW50ZXIgaGFzIGJlZW4gcmVzZXQgZm9yIHNvbWUgcmVhc29uLg0KKyAqICAgIC0tDQor ICogICAgT3Igbm90IC0gcmVzZXR0aW5nIHRoZSBjb3VudGVyIGFuZCBicmlkZ2luZyB0aGUgZnJh bWUgd291bGQgY3JlYXRlIGENCisgKiAgICBsb29wLCB1bmZvcnR1bmF0ZWx5Lg0KKyAqDQorICog MikgVXNlIHRoZSBMaWZlQ2hlY2sgZnJhbWVzIHRvIGRldGVjdCByaW5nIGJyZWFrcy4gSS5lLiBp ZiBubyBMaWZlQ2hlY2sNCisgKiAgICBmcmFtZSBpcyByZWNlaXZlZCBmcm9tIGEgcGFydGljdWxh ciBub2RlLCB3ZSBrbm93IHNvbWV0aGluZyBpcyB3cm9uZy4NCisgKiAgICBXZSBqdXN0IHJlZ2lz dGVyIHRoZXNlIChhcyB3aXRoIG5vcm1hbCBmcmFtZXMpIGFuZCB0aHJvdyB0aGVtIGF3YXkuDQor ICoNCisgKiAzKSBBbGxvdyBkaWZmZXJlbnQgTUFDIGFkZHJlc3NlcyBmb3IgdGhlIHR3byBzbGF2 ZSBpbnRlcmZhY2VzLCB1c2luZyB0aGUNCisgKiAgICBNYWNBZGRyZXNzQSBmaWVsZC4NCisgKi8N CitzdGF0aWMgYm9vbCBoYW5kbGVfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wcml2ICpo c3JfcHJpdiwNCisJCQkJICAgICBlbnVtIGhzcl9kZXZfaWR4IGRldl9pZHgsDQorCQkJCSAgICAg c3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBoc3Jfc3VwX3RhZyAqaHNyX3N0YWc7 DQorDQorCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX2Rlc3QsIGhzcl9t dWx0aWNhc3RfYWRkcikpDQorCQlyZXR1cm4gMDsNCisNCisJaHNyX3N0YWcgPSAoc3RydWN0IGhz cl9zdXBfdGFnICopIHNrYi0+ZGF0YTsNCisJaWYgKGdldF9oc3Jfc3RhZ19wYXRoKGhzcl9zdGFn KSAhPSAweDBmKQ0KKwkJcmV0dXJuIDA7DQorCWlmICgoaHNyX3N0YWctPkhTUl9UTFZfVHlwZSAh PSBIU1JfVExWX0FOTk9VTkNFKSAmJg0KKwkJCQkoaHNyX3N0YWctPkhTUl9UTFZfVHlwZSAhPSBI U1JfVExWX0xJRkVfQ0hFQ0spKQ0KKwkJcmV0dXJuIDA7DQorCWlmIChoc3Jfc3RhZy0+SFNSX1RM Vl9MZW5ndGggIT0gMTIpDQorCQlyZXR1cm4gMDsNCisNCisJc2tiX3B1bGwoc2tiLCBzaXplb2Yo c3RydWN0IGhzcl9zdXBfdGFnKSk7DQorCWhzcl9tZXJnZV9ub2RlKGhzcl9wcml2LCBkZXZfaWR4 LCBza2IpOw0KKw0KKwkvKiBQcmVwYXJlIGZvciBmb3J3YXJkaW5nICovDQorCXNrYl9wdXNoKHNr Yiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RhZykpOw0KKw0KKwlyZXR1cm4gMTsNCit9DQorDQor DQorLyoNCisgKiBJbXBsZW1lbnRhdGlvbiBzb21ld2hhdCBhY2NvcmRpbmcgdG8gSUVDLTYyNDM5 LTMsIHAuIDQzDQorICovDQorc3RhdGljIGludCBoc3JfcmN2KHN0cnVjdCBza19idWZmICpza2Is IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsDQorCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBz dHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpDQorew0KKwlzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9w cml2Ow0KKwlzdHJ1Y3QgaHNyX3NsYXZlX2RhdGEgKm90aGVyX3NsYXZlX2RhdGE7DQorCXN0cnVj dCBub2RlX2VudHJ5ICpub2RlOw0KKwlpbnQgZGVsaXZlcl90b19zZWxmOw0KKwlzdHJ1Y3Qgc2tf YnVmZiAqc2tiX2RlbGl2ZXI7DQorCWVudW0gaHNyX2Rldl9pZHggZGV2X2luX2lkeCwgZGV2X290 aGVyX2lkeDsNCisJaW50IHJldDsNCisNCisJaHNyX3ByaXYgPSBnZXRfaHNyX21hc3RlcihkZXYp Ow0KKw0KKwlpZiAoIWhzcl9wcml2KSB7DQorCQluZXRkZXZfaW5mbyhkZXYsICJIU1I6IEdvdCBI U1IgZnJhbWUgb24gbm9uLUhTUiBkZXZpY2U7ICINCisJCQkJCQkJImRyb3BwaW5nIGl0LlxuIik7 DQorCQlrZnJlZV9za2Ioc2tiKTsNCisJCXJldHVybiBORVRfUlhfRFJPUDsNCisJfQ0KKw0KKwlp ZiAoZGV2ID09IGhzcl9wcml2LT5zbGF2ZV9kYXRhWzBdLmRldikgew0KKwkJZGV2X2luX2lkeCA9 IEhTUl9ERVZfU0xBVkUxOw0KKwkJZGV2X290aGVyX2lkeCA9IEhTUl9ERVZfU0xBVkUyOw0KKwl9 IGVsc2Ugew0KKwkJZGV2X2luX2lkeCA9IEhTUl9ERVZfU0xBVkUyOw0KKwkJZGV2X290aGVyX2lk eCA9IEhTUl9ERVZfU0xBVkUxOw0KKwl9DQorDQorCW5vZGUgPSBoc3JfZmluZF9ub2RlKCZoc3Jf cHJpdi0+c2VsZl9ub2RlX2RiLCBza2IpOw0KKwlpZiAobm9kZSkgew0KKwkJLyogQWx3YXlzIGtp bGwgZnJhbWVzIHNlbnQgYnkgb3Vyc2VsdmVzICovDQorCQlrZnJlZV9za2Ioc2tiKTsNCisJCXJl dHVybiBORVRfUlhfU1VDQ0VTUzsNCisJfQ0KKw0KKwkvKiBSZWNlaXZlIHRoaXMgZnJhbWU/ICov DQorCWRlbGl2ZXJfdG9fc2VsZiA9IDA7DQorCWlmICgoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRf SE9TVCkgfHwNCisJCQkJKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkgfHwNCisJ CQkJKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX0JST0FEQ0FTVCkpDQorCQlkZWxpdmVyX3RvX3Nl bGYgPSAxOw0KKwllbHNlIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0+aF9k ZXN0LA0KKwkJCQkJCWhzcl9wcml2LT5kZXYtPmRldl9hZGRyKSkgew0KKwkJc2tiLT5wa3RfdHlw ZSA9IFBBQ0tFVF9IT1NUOw0KKwkJZGVsaXZlcl90b19zZWxmID0gMTsNCisJfQ0KKw0KKwlpZiAo aGFuZGxlX3N1cGVydmlzaW9uX2ZyYW1lKGhzcl9wcml2LCBkZXZfaW5faWR4LCBza2IpID09IDEp DQorCQlkZWxpdmVyX3RvX3NlbGYgPSAwOw0KKw0KKwlyY3VfcmVhZF9sb2NrKCk7IC8qIG5vZGVf ZGIgKi8NCisJbm9kZSA9IGhzcl9maW5kX25vZGUoJmhzcl9wcml2LT5ub2RlX2RiLCBza2IpOw0K KwlpZiAoIW5vZGUpIHsNCisJCS8qIFNvdXJjZSBub2RlIHVua25vd247IGRvbid0IGNyZWF0ZSBh IG5ldHdvcmsgbG9vcCAqLw0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7DQorCQluZXRkZXZfaW5mbyhk ZXYsICJIU1I6IEdvdCBIU1IgZnJhbWUgZnJvbSB1bmtub3duIG5vZGUgJXBNOiAiDQorCQkJCSAi ZHJvcHBpbmcgaXQuXG4iLA0KKwkJCQkgZXRoX2hkcihza2IpLT5oX3NvdXJjZSk7DQorCQlrZnJl ZV9za2Ioc2tiKTsNCisJCXJldHVybiBORVRfUlhfRFJPUDsNCisJfQ0KKw0KKwlpZiAoaHNyX3Jl Z2lzdGVyX2ZyYW1lX291dChub2RlLCBIU1JfREVWX01BU1RFUiwgc2tiKSA9PSAxKQ0KKwkJZGVs aXZlcl90b19zZWxmID0gMDsNCisNCisJaHNyX3JlZ2lzdGVyX2ZyYW1lX2luKG5vZGUsIGRldl9p bl9pZHgpOw0KKw0KKwkvKiBGb3J3YXJkIHRoaXMgZnJhbWU/ICovDQorCW90aGVyX3NsYXZlX2Rh dGEgPSBOVUxMOw0KKwlpZiAoc2tiLT5wa3RfdHlwZSAhPSBQQUNLRVRfSE9TVCkgew0KKwkJb3Ro ZXJfc2xhdmVfZGF0YSA9IGdldF9vdGhlcl9zbGF2ZShoc3JfcHJpdiwgZGV2KTsNCisJCWlmICho c3JfcmVnaXN0ZXJfZnJhbWVfb3V0KG5vZGUsIGRldl9vdGhlcl9pZHgsIHNrYikgPT0gMSkNCisJ CQlvdGhlcl9zbGF2ZV9kYXRhID0gTlVMTDsNCisJfQ0KKw0KKwlyY3VfcmVhZF91bmxvY2soKTsg Lyogbm9kZV9kYiAqLw0KKw0KKwlpZiAoIWRlbGl2ZXJfdG9fc2VsZiAmJiAhb3RoZXJfc2xhdmVf ZGF0YSkgew0KKwkJa2ZyZWVfc2tiKHNrYik7DQorCQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7DQor CX0NCisNCisJc2tiX2RlbGl2ZXIgPSBza2I7DQorCWlmIChkZWxpdmVyX3RvX3NlbGYgJiYgb3Ro ZXJfc2xhdmVfZGF0YSkgew0KKyNpZiAhZGVmaW5lZChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5B TElHTkVEX0FDQ0VTUykNCisJCS8qIFdlIGhhdmUgdG8gbWVtbW92ZSB0aGUgd2hvbGUgcGF5bG9h ZCBiZWxvdyAqLw0KKwkJc2tiX2RlbGl2ZXIgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOw0K KyNlbHNlDQorCQlza2JfZGVsaXZlciA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOw0KKyNl bmRpZg0KKwkJaWYgKCFza2JfZGVsaXZlcikgew0KKwkJCWRlbGl2ZXJfdG9fc2VsZiA9IDA7DQor CQkJaHNyX3ByaXYtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOw0KKwkJfQ0KKwl9DQorDQorCWlm IChkZWxpdmVyX3RvX3NlbGYpIHsNCisJCXNrYl9kZWxpdmVyID0gc3RyaXBfaHNyX3RhZyhza2Jf ZGVsaXZlcik7DQorCQlpZiAoIXNrYl9kZWxpdmVyKSB7DQorCQkJaHNyX3ByaXYtPmRldi0+c3Rh dHMucnhfZHJvcHBlZCsrOw0KKwkJCWdvdG8gZm9yd2FyZDsNCisJCX0NCisjaWYgIWRlZmluZWQo Q09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpDQorCQkvKg0KKwkJICogc2ti X2RlbGl2ZXIgc2hvdWxkIGJlIGxpbmVhciBoZXJlLCBhZnRlciB0aGUgY2FsbCB0bw0KKwkJICog c2tiX2NvcHkoKSBhYm92ZS4gV2UgbmVlZCB0byBtZW1tb3ZlIHRoZSB3aG9sZSBwYXlsb2FkIHRv DQorCQkgKiB3b3JrIGFyb3VuZCBhbGlnbm1lbnQgcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSA2LWJ5 dGUgSFNSIHRhZy4NCisJCSAqLw0KKwkJbWVtbW92ZShza2JfZGVsaXZlci0+ZGF0YSAtIEhTUl9U QUdMRU4sIHNrYl9kZWxpdmVyLT5kYXRhLA0KKwkJCQkJCQlza2JfZGVsaXZlci0+bGVuKTsNCisJ CXNrYl9kZWxpdmVyLT5kYXRhIC09IEhTUl9UQUdMRU47DQorCQlza2JfZGVsaXZlci0+dGFpbCAt PSBIU1JfVEFHTEVOOw0KKwkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYl9kZWxpdmVyKTsg Ly8gRklYTUUgaXMgdGhpcyBuZWVkZWQ/DQorI2VuZGlmDQorCQlza2JfZGVsaXZlci0+ZGV2ID0g aHNyX3ByaXYtPmRldjsNCisJCWhzcl9hZGRyX3N1YnN0KGhzcl9wcml2LCBza2JfZGVsaXZlcik7 DQorCQlyZXQgPSBuZXRpZl9yeChza2JfZGVsaXZlcik7DQorCQlpZiAocmV0ID09IE5FVF9SWF9E Uk9QKQ0KKwkJCWhzcl9wcml2LT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsNCisJCWVsc2Ugew0K KwkJCWhzcl9wcml2LT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsNCisJCQloc3JfcHJpdi0+ZGV2 LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsNCisJCX0NCisJfQ0KKw0KK2ZvcndhcmQ6DQor CWlmIChvdGhlcl9zbGF2ZV9kYXRhKSB7DQorCQlza2JfcHVzaChza2IsIEVUSF9ITEVOKTsNCisJ CXNrYi0+ZGV2ID0gb3RoZXJfc2xhdmVfZGF0YS0+ZGV2Ow0KKwkJZGV2X3F1ZXVlX3htaXQoc2ti KTsNCisJfQ0KKw0KKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7DQorfQ0KKw0KKw0KK3N0YXRpYyBz dHJ1Y3QgcGFja2V0X3R5cGUgaHNyX3B0IF9fcmVhZF9tb3N0bHkgPSB7DQorCS50eXBlID0gaHRv bnMoRVRIX1BfSFNSKSwNCisJLmZ1bmMgPSBoc3JfcmN2LA0KK307DQorDQorc3RhdGljIHN0cnVj dCBub3RpZmllcl9ibG9jayBoc3JfbmIgPSB7DQorCS5ub3RpZmllcl9jYWxsID0gaHNyX25ldGRl dl9ub3RpZnksCS8qIFNsYXZlIGV2ZW50IG5vdGlmaWNhdGlvbnMgKi8NCit9Ow0KKw0KKw0KK3N0 YXRpYyBpbnQgX19pbml0IGhzcl9pbml0KHZvaWQpDQorew0KKwlpbnQgcmVzOw0KKw0KKwlCVUdf T04oc2l6ZW9mKHN0cnVjdCBoc3JfdGFnKSAhPSBIU1JfVEFHTEVOKTsNCisNCisJZGV2X2FkZF9w YWNrKCZoc3JfcHQpOw0KKw0KKwlpbml0X3RpbWVyKCZwcnVuZV90aW1lcik7DQorCXBydW5lX3Rp bWVyLmZ1bmN0aW9uID0gcHJ1bmVfbm9kZXNfYWxsOw0KKwlwcnVuZV90aW1lci5kYXRhID0gMDsN CisJcHJ1bmVfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFBSVU5F X1BFUklPRCk7DQorCWFkZF90aW1lcigmcHJ1bmVfdGltZXIpOw0KKw0KKwlyZWdpc3Rlcl9uZXRk ZXZpY2Vfbm90aWZpZXIoJmhzcl9uYik7DQorDQorCXJlcyA9IGhzcl9uZXRsaW5rX2luaXQoKTsN CisNCisJcmV0dXJuIHJlczsNCit9DQorDQorc3RhdGljIHZvaWQgX19leGl0IGhzcl9leGl0KHZv aWQpDQorew0KKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaHNyX25iKTsNCisJZGVs X3RpbWVyKCZwcnVuZV90aW1lcik7DQorCWhzcl9uZXRsaW5rX2V4aXQoKTsNCisJZGV2X3JlbW92 ZV9wYWNrKCZoc3JfcHQpOw0KK30NCisNCittb2R1bGVfaW5pdChoc3JfaW5pdCk7DQorbW9kdWxl X2V4aXQoaHNyX2V4aXQpOw0KK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCmRpZmYgLS1naXQgYS9u ZXQvaHNyL2hzcl9uZXRsaW5rLmMgYi9uZXQvaHNyL2hzcl9uZXRsaW5rLmMNCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi40MGUzMWY0DQotLS0gL2Rldi9udWxsDQorKysgYi9u ZXQvaHNyL2hzcl9uZXRsaW5rLmMNCkBAIC0wLDAgKzEsMjkzIEBADQorLyoNCisgKiBDb3B5cmln aHQgMjAxMS0yMDEyIEF1dHJvbmljYSBGaXJlIGFuZCBTZWN1cml0eSBBUw0KKyAqDQorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQNCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQ0KKyAqIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikN CisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIEF1dGhvcihzKToNCisgKgkyMDExLTIw MTIgQXJ2aWQgQnJvZGluLCBhcnZpZC5icm9kaW5AeGRpbi5jb20NCisgKg0KKyAqIFJvdXRpbmVz IGZvciBoYW5kbGluZyBOZXRsaW5rIG1lc3NhZ2VzIGZvciBIU1IuDQorICovDQorDQorI2luY2x1 ZGUgImhzcl9uZXRsaW5rLmgiDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRl IDxuZXQvcnRuZXRsaW5rLmg+DQorI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4NCisjaW5jbHVk ZSAiaHNyX3ByaXZhdGUuaCINCisjaW5jbHVkZSAiaHNyX2RldmljZS5oIg0KKyNpbmNsdWRlICJo c3JfZnJhbWVyZWcuaCINCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHNyX3Bv bGljeVtJRkxBX0hTUl9NQVggKyAxXSA9IHsNCisJW0lGTEFfSFNSX1NMQVZFMV0JPSB7IC50eXBl ID0gTkxBX1UzMiB9LA0KKwlbSUZMQV9IU1JfU0xBVkUyXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0s DQorfTsNCisNCisNCisvKg0KKyAqIEhlcmUsIGl0IHNlZW1zIGEgbmV0ZGV2aWNlIGhhcyBhbHJl YWR5IGJlZW4gYWxsb2NhdGVkIGZvciB1cywgYW5kIHRoZQ0KKyAqIGhzcl9kZXZfc2V0dXAgcm91 dGluZSBoYXMgYmVlbiBleGVjdXRlZC4gTmljZSENCisgKi8NCitzdGF0aWMgaW50IGhzcl9uZXds aW5rKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsDQorCQkgICAg ICAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKQ0KK3sNCisJc3Ry dWN0IG5ldF9kZXZpY2UgKmxpbmtbMl07DQorDQorCWlmICghZGF0YVtJRkxBX0hTUl9TTEFWRTFd KSB7DQorCQluZXRkZXZfaW5mbyhkZXYsICJJRkxBX0hTUl9TTEFWRTEgbWlzc2luZyFcbiIpOw0K KwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisJbGlua1swXSA9IF9fZGV2X2dldF9ieV9pbmRleChz cmNfbmV0LCBubGFfZ2V0X3UzMihkYXRhW0lGTEFfSFNSX1NMQVZFMV0pKTsNCisJaWYgKCFkYXRh W0lGTEFfSFNSX1NMQVZFMl0pIHsNCisJCW5ldGRldl9pbmZvKGRldiwgIklGTEFfSFNSX1NMQVZF MiBtaXNzaW5nIVxuIik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKwlsaW5rWzFdID0gX19k ZXZfZ2V0X2J5X2luZGV4KHNyY19uZXQsIG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9IU1JfU0xBVkUy XSkpOw0KKw0KKwlpZiAoIWxpbmtbMF0gfHwgIWxpbmtbMV0pDQorCQlyZXR1cm4gLUVOT0RFVjsN CisJaWYgKGxpbmtbMF0gPT0gbGlua1sxXSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlyZXR1 cm4gaHNyX2Rldl9maW5hbGl6ZShkZXYsIGxpbmspOw0KK30NCisNCitzdGF0aWMgc3RydWN0IHJ0 bmxfbGlua19vcHMgaHNyX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7DQorCS5raW5kCQk9ICJo c3IiLA0KKwkubWF4dHlwZQk9IElGTEFfSFNSX01BWCwNCisJLnBvbGljeQkJPSBoc3JfcG9saWN5 LA0KKwkucHJpdl9zaXplCT0gc2l6ZW9mKHN0cnVjdCBoc3JfcHJpdiksDQorCS5zZXR1cAkJPSBo c3JfZGV2X3NldHVwLA0KKy8vCS52YWxpZGF0ZQk9IHZsYW5fdmFsaWRhdGUsDQorCS5uZXdsaW5r CT0gaHNyX25ld2xpbmssDQorLy8JLmNoYW5nZWxpbmsJPSB2bGFuX2NoYW5nZWxpbmssDQorLy8J LmRlbGxpbmsJPSBoc3JfZGVsbGluaywgIGRldi0+ZGVzdHJ1Y3RvcigpIGNhbGxlZCBhdXRvbWF0 aWNhbGx5Pw0KKy8vCS5nZXRfc2l6ZQk9IHZsYW5fZ2V0X3NpemUsDQorLy8JLmZpbGxfaW5mbwk9 IHZsYW5fZmlsbF9pbmZvLA0KK307DQorDQorDQorDQorLyogYXR0cmlidXRlIHBvbGljeSAqLw0K Ky8qIE5MQV9CSU5BUlkgbWlzc2luZyBpbiBsaWJubDsgdXNlIHVuc3BlYyBpbiB1c2Vyc3BhY2Ug aW5zdGVhZC4gKi8NCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHNyX2dlbmxfcG9s aWN5W0hTUl9BX01BWCArIDFdID0gew0KKwlbSFNSX0FfTk9ERV9BRERSXSA9IHsgLnR5cGUgPSBO TEFfQklOQVJZLCAubGVuID0gRVRIX0FMRU4gfSwNCisJW0hTUl9BX0lGSU5ERVhdID0geyAudHlw ZSA9IE5MQV9VMzIgfSwNCisJW0hTUl9BX0lGMUFHRV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LCAv KiAzMi1iaXQgaW50ICovDQorCVtIU1JfQV9JRjJBR0VdID0geyAudHlwZSA9IE5MQV9VMzIgfSwg LyogMzItYml0IGludCAqLw0KK307DQorDQorc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBoc3Jf Z2VubF9mYW1pbHkgPSB7DQorCS5pZCA9IEdFTkxfSURfR0VORVJBVEUsDQorCS5oZHJzaXplID0g MCwNCisJLm5hbWUgPSAiSFNSIiwNCisJLnZlcnNpb24gPSAxLA0KKwkubWF4YXR0ciA9IEhTUl9B X01BWCwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgaHNyX25l dHdvcmtfZ2VubF9tY2dycCA9IHsNCisJLm5hbWUgPSAiaHNyLW5ldHdvcmsiLA0KK307DQorDQor c3RhdGljIGludCBoc3JfZ2VubF9zZXEgPSAwOw0KKw0KKw0KKw0KK3N0YXRpYyBzdHJ1Y3Qgc2tf YnVmZiAqaHNyX2NyZWF0ZV9nZW5sX21zZyh2b2lkICoqcG1zZ19oZWFkLCB1bnNpZ25lZCBnZnAs DQorCQkJCQkgICBpbnQgY21kKQ0KK3sNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisNCisJc2ti ID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIGdmcCk7DQorCWlmICghc2tiKQ0KKwkJcmV0 dXJuIE5VTEw7DQorDQorCSpwbXNnX2hlYWQgPSBnZW5sbXNnX3B1dChza2IsIDAsIGhzcl9nZW5s X3NlcSsrLCAmaHNyX2dlbmxfZmFtaWx5LCAwLA0KKwkJCQkJCQkJCWNtZCk7DQorCWlmICghcG1z Z19oZWFkKSB7DQorCQlrZnJlZV9za2Ioc2tiKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQor CXJldHVybiBza2I7DQorfQ0KKw0KKw0KKy8qDQorICogVGhpcyBpcyBjYWxsZWQgaWYgZm9yIHNv bWUgbm9kZSB3aXRoIE1BQyBhZGRyZXNzIGFkZHIsIHdlIG9ubHkgZ2V0IGZyYW1lcw0KKyAqIG92 ZXIgb25lIG9mIHRoZSBzbGF2ZSBpbnRlcmZhY2VzLiBUaGlzIHdvdWxkIGluZGljYXRlIGFuIG9w ZW4gbmV0d29yayByaW5nDQorICogKGkuZS4gYSBsaW5rIGhhcyBmYWlsZWQgc29tZXdoZXJlKS4N CisgKi8NCit2b2lkIGhzcl9ubF9yaW5nZXJyb3IodW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVO XSwgaW50IGRldl9pZHgpDQorew0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKwl2b2lkICptc2df aGVhZDsNCisNCisJc2tiID0gaHNyX2NyZWF0ZV9nZW5sX21zZygmbXNnX2hlYWQsIEdGUF9BVE9N SUMsIEhTUl9DX1JJTkdfRVJST1IpOw0KKwlpZiAoIXNrYikNCisJCXJldHVybjsNCisNCisJTkxB X1BVVChza2IsIEhTUl9BX05PREVfQUREUiwgRVRIX0FMRU4sIGFkZHIpOw0KKwlOTEFfUFVUX1Uz Mihza2IsIEhTUl9BX0lGSU5ERVgsIGRldl9pZHgpOw0KKw0KKwlnZW5sbXNnX2VuZChza2IsIG1z Z19oZWFkKTsNCisJZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBoc3JfbmV0d29ya19nZW5sX21j Z3JwLmlkLCBHRlBfQVRPTUlDKTsNCisNCisJcmV0dXJuOw0KKw0KK25sYV9wdXRfZmFpbHVyZToN CisJa2ZyZWVfc2tiKHNrYik7DQorfQ0KKw0KKy8qDQorICogVGhpcyBpcyBjYWxsZWQgd2hlbiB3 ZSBoYXZlbid0IGhlYXJkIGZyb20gdGhlIG5vZGUgd2l0aCBNQUMgYWRkcmVzcyBhZGRyIGZvcg0K KyAqIHNvbWUgdGltZSAoanVzdCBiZWZvcmUgdGhlIG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBu b2RlIHRhYmxlL2xpc3QpLg0KKyAqLw0KK3ZvaWQgaHNyX25sX25vZGVkb3duKHVuc2lnbmVkIGNo YXIgYWRkcltFVEhfQUxFTl0pDQorew0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKwl2b2lkICpt c2dfaGVhZDsNCisNCisJc2tiID0gaHNyX2NyZWF0ZV9nZW5sX21zZygmbXNnX2hlYWQsIEdGUF9B VE9NSUMsIEhTUl9DX05PREVfRE9XTik7DQorCWlmICghc2tiKQ0KKwkJcmV0dXJuOw0KKw0KKwlO TEFfUFVUKHNrYiwgSFNSX0FfTk9ERV9BRERSLCBFVEhfQUxFTiwgYWRkcik7DQorDQorCWdlbmxt c2dfZW5kKHNrYiwgbXNnX2hlYWQpOw0KKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIGhzcl9u ZXR3b3JrX2dlbmxfbWNncnAuaWQsIEdGUF9BVE9NSUMpOw0KKw0KKwlyZXR1cm47DQorDQorbmxh X3B1dF9mYWlsdXJlOg0KKwlrZnJlZV9za2Ioc2tiKTsNCit9DQorDQorLyoNCisgKiBIU1JfQ19H RVRfTk9ERV9TVEFUVVMgbGV0cyB1c2Vyc3BhY2UgcXVlcnkgdGhlIGludGVybmFsIEhTUiBub2Rl IHRhYmxlDQorICogYWJvdXQgdGhlIHN0YXR1cyBvZiBhIHNwZWNpZmljIG5vZGUgaW4gdGhlIG5l dHdvcmssIGRlZmluZWQgYnkgaXRzIE1BQw0KKyAqIGFkZHJlc3MuDQorICoNCisgKiBJbnB1dDog aHNyIGlmaW5kZXgsIG5vZGUgbWFjIGFkZHJlc3MNCisgKiBPdXRwdXQ6IGhzciBpZmluZGV4LCBu b2RlIG1hYyBhZGRyZXNzIChjb3BpZWQgZnJvbSByZXF1ZXN0KSwNCisgKgkgICBhZ2Ugb2YgbGF0 ZXN0IGZyYW1lIGZyb20gbm9kZSBvdmVyIHNsYXZlIDEsIHNsYXZlIDIgW21zXQ0KKyAqLw0KK3N0 YXRpYyBpbnQgaHNyX2dldF9ub2RlX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBzdHJ1 Y3QgZ2VubF9pbmZvICppbmZvKQ0KK3sNCisJLyogRm9yIHJlY2VpdmluZyAqLw0KKwlzdHJ1Y3Qg bmxhdHRyICpuYTsNCisJY2hhciAqbm9kZV9hZGRyOw0KKwlzdHJ1Y3QgbmV0X2RldmljZSAqaHNy X2RldjsNCisNCisJLyogRm9yIHNlbmRpbmcgKi8NCisJc3RydWN0IHNrX2J1ZmYgKnNrYl9vdXQ7 DQorCXZvaWQgKm1zZ19oZWFkOw0KKwlzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2Ow0KKwl1bnNp Z25lZCBsb25nIHRpbWUxLCB0aW1lMjsNCisNCisJaWYgKCFpbmZvKQ0KKwkJZ290byBpbnZhbGlk Ow0KKw0KKwluYSA9IGluZm8tPmF0dHJzW0hTUl9BX0lGSU5ERVhdOw0KKwlpZiAoIW5hKQ0KKwkJ Z290byBpbnZhbGlkOw0KKwluYSA9IGluZm8tPmF0dHJzW0hTUl9BX05PREVfQUREUl07DQorCWlm ICghbmEpDQorCQlnb3RvIGludmFsaWQ7DQorDQorCWhzcl9kZXYgPSBfX2Rldl9nZXRfYnlfaW5k ZXgoZ2VubF9pbmZvX25ldChpbmZvKSwNCisJCQkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW0hT Ul9BX0lGSU5ERVhdKSk7DQorCWlmICghaHNyX2RldikNCisJCWdvdG8gaW52YWxpZDsNCisJaWYg KCFpc19oc3JfbWFzdGVyKGhzcl9kZXYpKQ0KKwkJZ290byBpbnZhbGlkOw0KKw0KKw0KKwkvKiBT ZW5kIHJlcGx5ICovDQorDQorCXNrYl9vdXQgPSBoc3JfY3JlYXRlX2dlbmxfbXNnKCZtc2dfaGVh ZCwgR0ZQX0FUT01JQywNCisJCQkJCQkJSFNSX0NfU0VUX05PREVfU1RBVFVTKTsNCisJaWYgKCFz a2Jfb3V0KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCU5MQV9QVVRfVTMyKHNrYl9vdXQsIEhT Ul9BX0lGSU5ERVgsIGhzcl9kZXYtPmlmaW5kZXgpOw0KKw0KKwlub2RlX2FkZHIgPSBubGFfZGF0 YShpbmZvLT5hdHRyc1tIU1JfQV9OT0RFX0FERFJdKTsNCisJTkxBX1BVVChza2Jfb3V0LCBIU1Jf QV9OT0RFX0FERFIsIEVUSF9BTEVOLCBub2RlX2FkZHIpOw0KKw0KKwloc3JfcHJpdiA9IG5ldGRl dl9wcml2KGhzcl9kZXYpOw0KKwloc3JfZ2V0X25vZGVfdGltZXMoaHNyX3ByaXYsIG5vZGVfYWRk ciwgJnRpbWUxLCAmdGltZTIpOw0KKw0KKwlOTEFfUFVUX1UzMihza2Jfb3V0LCBIU1JfQV9JRjFB R0UsIHRpbWUxID8NCisJCQkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHRpbWUxKSA6IC0x KTsNCisJTkxBX1BVVF9VMzIoc2tiX291dCwgSFNSX0FfSUYyQUdFLCB0aW1lMiA/DQorCQkJCQlq aWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSB0aW1lMikgOiAtMSk7DQorDQorCWdlbmxtc2dfZW5k KHNrYl9vdXQsIG1zZ19oZWFkKTsNCisJZ2VubG1zZ191bmljYXN0KGdlbmxfaW5mb19uZXQoaW5m byksIHNrYl9vdXQsIGluZm8tPnNuZF9waWQpOw0KKw0KKwlyZXR1cm4gMDsNCisNCitubGFfcHV0 X2ZhaWx1cmU6DQorCWtmcmVlX3NrYihza2Jfb3V0KTsNCisNCisJcmV0dXJuIC1FTk9NRU07DQor DQoraW52YWxpZDoNCisJcmV0dXJuIC1FSU5WQUw7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgZ2Vu bF9vcHMgaHNyX29wc19nZXRfbm9kZV9zdGF0dXMgPSB7DQorCS5jbWQgPSBIU1JfQ19HRVRfTk9E RV9TVEFUVVMsDQorCS5mbGFncyA9IDAsDQorCS5wb2xpY3kgPSBoc3JfZ2VubF9wb2xpY3ksDQor CS5kb2l0ID0gaHNyX2dldF9ub2RlX3N0YXR1cywNCisJLmR1bXBpdCA9IE5VTEwsDQorfTsNCisN CisNCitpbnQgX19pbml0IGhzcl9uZXRsaW5rX2luaXQodm9pZCkNCit7DQorCWludCByYzsNCisN CisJcmMgPSBydG5sX2xpbmtfcmVnaXN0ZXIoJmhzcl9saW5rX29wcyk7DQorCWlmIChyYykNCisJ CWdvdG8gZmFpbF9ydG5sX2xpbmtfcmVnaXN0ZXI7DQorDQorCXJjID0gZ2VubF9yZWdpc3Rlcl9m YW1pbHkoJmhzcl9nZW5sX2ZhbWlseSk7DQorCWlmIChyYykNCisJCWdvdG8gZmFpbF9nZW5sX3Jl Z2lzdGVyX2ZhbWlseTsNCisNCisJcmMgPSBnZW5sX3JlZ2lzdGVyX29wcygmaHNyX2dlbmxfZmFt aWx5LCAmaHNyX29wc19nZXRfbm9kZV9zdGF0dXMpOw0KKwlpZiAocmMpDQorCQlnb3RvIGZhaWxf Z2VubF9yZWdpc3Rlcl9vcHM7DQorDQorCXJjID0gZ2VubF9yZWdpc3Rlcl9tY19ncm91cCgmaHNy X2dlbmxfZmFtaWx5LCAmaHNyX25ldHdvcmtfZ2VubF9tY2dycCk7DQorCWlmIChyYykNCisJCWdv dG8gZmFpbF9nZW5sX3JlZ2lzdGVyX21jX2dyb3VwOw0KKw0KKwlyZXR1cm4gMDsNCisNCitmYWls X2dlbmxfcmVnaXN0ZXJfbWNfZ3JvdXA6DQorCWdlbmxfdW5yZWdpc3Rlcl9vcHMoJmhzcl9nZW5s X2ZhbWlseSwgJmhzcl9vcHNfZ2V0X25vZGVfc3RhdHVzKTsNCitmYWlsX2dlbmxfcmVnaXN0ZXJf b3BzOg0KKwlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZoc3JfZ2VubF9mYW1pbHkpOw0KK2ZhaWxf Z2VubF9yZWdpc3Rlcl9mYW1pbHk6DQorCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZoc3JfbGlua19v cHMpOw0KK2ZhaWxfcnRubF9saW5rX3JlZ2lzdGVyOg0KKw0KKwlyZXR1cm4gcmM7DQorfQ0KKw0K K3ZvaWQgX19leGl0IGhzcl9uZXRsaW5rX2V4aXQodm9pZCkNCit7DQorCWdlbmxfdW5yZWdpc3Rl cl9tY19ncm91cCgmaHNyX2dlbmxfZmFtaWx5LCAmaHNyX25ldHdvcmtfZ2VubF9tY2dycCk7DQor CWdlbmxfdW5yZWdpc3Rlcl9vcHMoJmhzcl9nZW5sX2ZhbWlseSwgJmhzcl9vcHNfZ2V0X25vZGVf c3RhdHVzKTsNCisJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmaHNyX2dlbmxfZmFtaWx5KTsNCisN CisJcnRubF9saW5rX3VucmVnaXN0ZXIoJmhzcl9saW5rX29wcyk7DQorfQ0KKw0KK01PRFVMRV9B TElBU19SVE5MX0xJTksoImhzciIpOw0KZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX25ldGxpbmsu aCBiL25ldC9oc3IvaHNyX25ldGxpbmsuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAw MDAwMDAuLjQyODJkOWYNCi0tLSAvZGV2L251bGwNCisrKyBiL25ldC9oc3IvaHNyX25ldGxpbmsu aA0KQEAgLTAsMCArMSw2NCBAQA0KKy8qDQorICogQ29weXJpZ2h0IDIwMTEtMjAxMiBBdXRyb25p Y2EgRmlyZSBhbmQgU2VjdXJpdHkgQVMNCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQorICogdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUNCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pDQorICogYW55IGxhdGVyIHZlcnNp b24uDQorICoNCisgKiBBdXRob3Iocyk6DQorICoJMjAxMS0yMDEyIEFydmlkIEJyb2RpbiwgYXJ2 aWQuYnJvZGluQHhkaW4uY29tDQorICovDQorDQorI2lmbmRlZiBfX0hTUl9ORVRMSU5LX0gNCisj ZGVmaW5lIF9fSFNSX05FVExJTktfSA0KKw0KKy8qIGF0dHJpYnV0ZXMgKi8NCitlbnVtIHsNCisJ SFNSX0FfVU5TUEVDLA0KKwlIU1JfQV9OT0RFX0FERFIsDQorCUhTUl9BX0lGSU5ERVgsDQorCUhT Ul9BX0lGMUFHRSwNCisJSFNSX0FfSUYyQUdFLA0KKwlfX0hTUl9BX01BWCwNCit9Ow0KKyNkZWZp bmUgSFNSX0FfTUFYIChfX0hTUl9BX01BWCAtIDEpDQorDQorDQorI2lmZGVmIF9fS0VSTkVMX18N CisNCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+DQorDQoraW50IF9faW5pdCBoc3JfbmV0bGlua19pbml0KHZvaWQpOw0KK3ZvaWQgX19leGl0 IGhzcl9uZXRsaW5rX2V4aXQodm9pZCk7DQorDQordm9pZCBoc3JfbmxfcmluZ2Vycm9yKHVuc2ln bmVkIGNoYXIgYWRkcltFVEhfQUxFTl0sIGludCBkZXZfaWR4KTsNCit2b2lkIGhzcl9ubF9ub2Rl ZG93bih1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dKTsNCit2b2lkIGhzcl9ubF9mcmFtZWRy b3AoaW50IGRyb3Bjb3VudCwgaW50IGRldl9pZHgpOw0KK3ZvaWQgaHNyX25sX2xpbmtkb3duKGlu dCBkZXZfaWR4KTsNCisNCisNCisvKg0KKyAqIEdlbmVyaWMgTmV0bGluayBIU1IgZmFtaWx5IGRl ZmluaXRpb24NCisgKi8NCisNCisNCisjZW5kaWYgLyogX19LRVJORUxfXyAqLw0KKw0KKw0KKw0K Ky8qIGNvbW1hbmRzICovDQorZW51bSB7DQorCUhTUl9DX1VOU1BFQywNCisJSFNSX0NfUklOR19F UlJPUiwNCisJSFNSX0NfTk9ERV9ET1dOLA0KKwlIU1JfQ19HRVRfTk9ERV9TVEFUVVMsDQorCUhT Ul9DX1NFVF9OT0RFX1NUQVRVUywNCisJX19IU1JfQ19NQVgsDQorfTsNCisjZGVmaW5lIEhTUl9D X01BWCAoX19IU1JfQ19NQVggLSAxKQ0KKw0KKw0KKw0KKyNlbmRpZiAvKiBfX0hTUl9ORVRMSU5L X0ggKi8NCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9wcml2YXRlLmggYi9uZXQvaHNyL2hzcl9w cml2YXRlLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi41MGM4Nzg0DQot LS0gL2Rldi9udWxsDQorKysgYi9uZXQvaHNyL2hzcl9wcml2YXRlLmgNCkBAIC0wLDAgKzEsMTYy IEBADQorLyoNCisgKiBDb3B5cmlnaHQgMjAxMS0yMDEyIEF1dHJvbmljYSBGaXJlIGFuZCBTZWN1 cml0eSBBUw0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQNCisgKiB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQ0K KyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikNCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIEF1 dGhvcihzKToNCisgKgkyMDExLTIwMTIgQXJ2aWQgQnJvZGluLCBhcnZpZC5icm9kaW5AeGRpbi5j b20NCisgKi8NCisNCisjaWZuZGVmIF9IU1JfUFJJVkFURV9IDQorI2RlZmluZSBfSFNSX1BSSVZB VEVfSA0KKw0KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgv bGlzdC5oPg0KKw0KKw0KKy8qDQorICogVGltZSBjb25zdGFudHMgYXMgc3BlY2lmaWVkIGluIHRo ZSBIU1Igc3BlY2lmaWNhdGlvbiAoSUVDLTYyNDM5LTMgMjAxMCkNCisgKiBUYWJsZSA4Lg0KKyAq IEFsbCB2YWx1ZXMgaW4gbWlsbGlzZWNvbmRzLg0KKyAqLw0KKyNkZWZpbmUgSFNSX0xJRkVfQ0hF Q0tfSU5URVJWQUwJCSAyMDAwIC8qIG1zICovDQorI2RlZmluZSBIU1JfTk9ERV9GT1JHRVRfVElN RQkJNjAwMDAgLyogbXMgKi8NCisjZGVmaW5lIEhTUl9BTk5PVU5DRV9JTlRFUlZBTAkJICAxMDAg LyogbXMgKi8NCisNCisvKg0KKyAqIEJ5IGhvdyBtdWNoIG1heSBzbGF2ZTEgYW5kIHNsYXZlMiB0 aW1lc3RhbXBzIG9mIGxhdGVzdCByZWNlaXZlZCBmcmFtZSBmcm9tDQorICogZWFjaCBub2RlIGRp ZmZlciBiZWZvcmUgd2Ugbm90aWZ5IG9mIGNvbW11bmljYXRpb24gcHJvYmxlbT8NCisgKi8NCisj ZGVmaW5lIE1BWF9TTEFWRV9ESUZGCQkJIDMwMDAgLyogbXMgKi8NCisNCisvKg0KKyAqIEhvdyBv ZnRlbiBzaGFsbCB3ZSBjaGVjayBmb3IgYnJva2VuIHJpbmcgYW5kIHJlbW92ZSBub2RlIGVudHJp ZXMgb2xkZXIgdGhhbg0KKyAqIEhTUl9OT0RFX0ZPUkdFVF9USU1FPw0KKyAqLw0KKyNkZWZpbmUg UFJVTkVfUEVSSU9ECQkJIDMwMDAgLyogbXMgKi8NCisNCisNCisjZGVmaW5lIEhTUl9UTFZfQU5O T1VOQ0UJCSAgIDIyDQorI2RlZmluZSBIU1JfVExWX0xJRkVfQ0hFQ0sJCSAgIDIzDQorDQorDQor LyoNCisgKiBIU1IgVGFnLg0KKyAqIEFzIGRlZmluZWQgaW4gSUVDLTYyNDM5LTM6MjAxMCwgdGhl IEhTUiB0YWcgaXMgcmVhbGx5IHsgZXRoZXJ0eXBlID0gMHg4OEZCLA0KKyAqIHBhdGgsIExTRFVf c2l6ZSwgc2VxdWVuY2UgTnIgfS4gQnV0IHdlIGxldCBldGhfaGVhZGVyKCkgY3JlYXRlIHsgaF9k ZXN0LA0KKyAqIGhfc291cmNlLCBoX3Byb3RvID0gMHg4OEZCIH0sIGFuZCBhZGQgeyBwYXRoLCBM U0RVX3NpemUsIHNlcXVlbmNlIE5yLA0KKyAqIGVuY2Fwc3VsYXRlZCBwcm90b2NvbCB9IGluc3Rl YWQuDQorICovDQorI2RlZmluZSBIU1JfVEFHTEVOCTYNCisNCisvKiBGaWVsZCBuYW1lcyBiZWxv dyBhcyBkZWZpbmVkIGluIHRoZSBJRUM6MjAxMCBzdGFuZGFyZCBmb3IgSFNSLiAqLw0KK3N0cnVj dCBoc3JfdGFnIHsNCisJX19iZTE2CQlwYXRoX2FuZF9MU0RVX3NpemU7DQorCV9fYmUxNgkJc2Vx dWVuY2VfbnI7DQorCV9fYmUxNgkJZW5jYXBfcHJvdG87DQorfSBfX3BhY2tlZDsNCisNCisvKg0K KyAqIFRoZSBoZWxwZXIgZnVuY3Rpb25zIGJlbG93IGFzc3VtZXMgdGhhdCAncGF0aCcgb2NjdXBp ZXMgdGhlIDQgbW9zdA0KKyAqIHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIDE2LWJpdCBmaWVsZCBz aGFyZWQgYnkgJ3BhdGgnIGFuZCAnTFNEVV9zaXplJyAob3INCisgKiBlcXVpdmFsZW50bHksIHRo ZSA0IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBIU1IgdGFnIGJ5dGUgMTQpLg0KKyAqDQorICog VGhpcyBpcyB1bmNsZWFyIGluIHRoZSBJRUMgc3BlY2lmaWNhdGlvbjsgaXRzIGRlZmluaXRpb24g b2YgTUFDIGFkZHJlc3Nlcw0KKyAqIGluZGljYXRlcyB0aGUgc3BlYyBpcyB3cml0dGVuIHdpdGgg dGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBmaXJzdCAodG8gdGhlDQorICogbGVmdCkuIFRoaXMs IGhvd2V2ZXIsIHdvdWxkIG1lYW4gdGhhdCB0aGUgTFNEVSBmaWVsZCB3b3VsZCBiZSBzcGxpdCBp biB0d28NCisgKiB3aXRoIHRoZSBwYXRoIGZpZWxkIGluLWJldHdlZW4sIHdoaWNoIHNlZW1zIHN0 cmFuZ2UuIEknbSBndWVzc2luZyB0aGUgTUFDDQorICogYWRkcmVzcyBkZWZpbml0aW9uIGlzIGlu IGVycm9yLg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgdTE2IGdldF9oc3JfdGFnX3BhdGgoc3RydWN0 IGhzcl90YWcgKmh0KQ0KK3sNCisJcmV0dXJuIG50b2hzKGh0LT5wYXRoX2FuZF9MU0RVX3NpemUp ID4+IDEyOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHUxNiBnZXRfaHNyX3RhZ19MU0RVX3NpemUo c3RydWN0IGhzcl90YWcgKmh0KQ0KK3sNCisJcmV0dXJuIG50b2hzKGh0LT5wYXRoX2FuZF9MU0RV X3NpemUpICYgMHgwRkZGOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hzcl90YWdf cGF0aChzdHJ1Y3QgaHNyX3RhZyAqaHQsIHUxNiBwYXRoKQ0KK3sNCisJaHQtPnBhdGhfYW5kX0xT RFVfc2l6ZSA9IGh0b25zKA0KKwkJCShudG9ocyhodC0+cGF0aF9hbmRfTFNEVV9zaXplKSAmIDB4 MEZGRikgfCAocGF0aCA8PCAxMikpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hz cl90YWdfTFNEVV9zaXplKHN0cnVjdCBoc3JfdGFnICpodCwgdTE2IExTRFVfc2l6ZSkNCit7DQor CWh0LT5wYXRoX2FuZF9MU0RVX3NpemUgPSBodG9ucygNCisJCQkobnRvaHMoaHQtPnBhdGhfYW5k X0xTRFVfc2l6ZSkgJiAweEYwMDApIHwNCisJCQkoTFNEVV9zaXplICYgMHgwRkZGKSk7DQorfQ0K Kw0KK3N0cnVjdCBoc3JfZXRoaGRyIHsNCisJc3RydWN0IGV0aGhkcglldGhoZHI7DQorCXN0cnVj dCBoc3JfdGFnCWhzcl90YWc7DQorfSBfX3BhY2tlZDsNCisNCisNCisvKg0KKyAqIEhTUiBTdXBl cnZpc2lvbiBGcmFtZSBkYXRhIHR5cGVzLg0KKyAqIEZpZWxkIG5hbWVzIGFzIGRlZmluZWQgaW4g dGhlIElFQzoyMDEwIHN0YW5kYXJkIGZvciBIU1IuDQorICovDQorc3RydWN0IGhzcl9zdXBfdGFn IHsNCisJX19iZTE2CQlwYXRoX2FuZF9IU1JfVmVyOw0KKwlfX2JlMTYJCXNlcXVlbmNlX25yOw0K KwlfX3U4CQlIU1JfVExWX1R5cGU7DQorCV9fdTgJCUhTUl9UTFZfTGVuZ3RoOw0KK30gX19wYWNr ZWQ7DQorDQorc3RydWN0IGhzcl9zdXBfcGF5bG9hZCB7DQorCXVuc2lnbmVkIGNoYXIJTWFjQWRk cmVzc0FbRVRIX0FMRU5dOw0KK30gX19wYWNrZWQ7DQorDQorc3RhdGljIGlubGluZSB1MTYgZ2V0 X2hzcl9zdGFnX3BhdGgoc3RydWN0IGhzcl9zdXBfdGFnICpoc3QpDQorew0KKwlyZXR1cm4gZ2V0 X2hzcl90YWdfcGF0aCgoc3RydWN0IGhzcl90YWcgKikgaHN0KTsNCit9DQorDQorc3RhdGljIGlu bGluZSB1MTYgZ2V0X2hzcl9zdGFnX0hTUl92ZXIoc3RydWN0IGhzcl9zdXBfdGFnICpoc3QpDQor ew0KKwlyZXR1cm4gZ2V0X2hzcl90YWdfTFNEVV9zaXplKChzdHJ1Y3QgaHNyX3RhZyAqKSBoc3Qp Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hzcl9zdGFnX3BhdGgoc3RydWN0IGhz cl9zdXBfdGFnICpoc3QsIHUxNiBwYXRoKQ0KK3sNCisJc2V0X2hzcl90YWdfcGF0aCgoc3RydWN0 IGhzcl90YWcgKikgaHN0LCBwYXRoKTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIHNldF9o c3Jfc3RhZ19IU1JfVmVyKHN0cnVjdCBoc3Jfc3VwX3RhZyAqaHN0LCB1MTYgSFNSX1ZlcikNCit7 DQorCXNldF9oc3JfdGFnX0xTRFVfc2l6ZSgoc3RydWN0IGhzcl90YWcgKikgaHN0LCBIU1JfVmVy KTsNCit9DQorDQorDQorc3RydWN0IGhzcl9zbGF2ZV9kYXRhIHsNCisJc3RydWN0IG5ldF9kZXZp Y2UJKmRldjsNCisJaW50IHByb21pc2M7DQorCWludCB3YXNfdXA7DQorfTsNCisNCitzdHJ1Y3Qg aHNyX3ByaXYgew0KKwlzdHJ1Y3QgbGlzdF9oZWFkCWhzcl9saXN0OwkvKiBMaXN0IG9mIGhzciBk ZXZpY2VzICovDQorCXN0cnVjdCByY3VfaGVhZAkJcmN1X2hlYWQ7DQorCXN0cnVjdCBuZXRfZGV2 aWNlCSpkZXY7DQorCXN0cnVjdCBoc3Jfc2xhdmVfZGF0YQlzbGF2ZV9kYXRhWzJdOw0KKwlzdHJ1 Y3QgbGlzdF9oZWFkCW5vZGVfZGI7CS8qIE90aGVyIEhTUiBub2RlcyAqLw0KKwlzdHJ1Y3QgbGlz dF9oZWFkCXNlbGZfbm9kZV9kYjsJLyogTUFDcyBvZiBzbGF2ZXMgKi8NCisJc3RydWN0IHRpbWVy X2xpc3QJYW5ub3VuY2VfdGltZXI7CS8qIFN1cGVydmlzaW9uIGZyYW1lIGRpc3BhdGNoICovDQor CWludCBhbm5vdW5jZV9jb3VudDsNCisJdTE2IHNlcXVlbmNlX25yOw0KKwlzcGlubG9ja190IHNl cW5yX2xvY2s7CQkJLyogbG9ja2luZyBmb3Igc2VxdWVuY2VfbnIgKi8NCit9Ow0KKw0KK2V4dGVy biBjb25zdCB1OCBoc3JfbXVsdGljYXN0X2FkZHJbRVRIX0FMRU5dOw0KKw0KK3ZvaWQgcmVnaXN0 ZXJfaHNyX21hc3RlcihzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2KTsNCit2b2lkIHVucmVnaXN0 ZXJfaHNyX21hc3RlcihzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2KTsNCisNCisjZW5kaWYgLyog IF9IU1JfUFJJVkFURV9IICovDQoNCg0KLS0gDQpBcnZpZCBCcm9kaW4gfCBDb25zdWx0YW50IChM aW51eCkNClhESU4gQUIgfCBKYW4gU3RlbmJlY2tzIFRvcmcgMTcgfCBTRS0xNjQgNDAgS2lzdGEg fCBTd2VkZW4gfCB4ZGluLmNvbQ==