From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arvid Brodin Subject: [RFC v2 1/2] net/hsr: Add support for IEC 62439-3 High-availability Seamless Redundancy Date: Wed, 4 Jul 2012 00:12:13 +0000 Message-ID: <4FF38A5C.9000802@xdin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Stephen Hemminger , Alexey Kuznetsov , Javier Boticario , Bruno Ferreira To: "netdev@vger.kernel.org" Return-path: Received: from spam1.webland.se ([91.207.112.90]:63620 "EHLO spam1.webland.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933144Ab2GDAMP (ORCPT ); Tue, 3 Jul 2012 20:12:15 -0400 Content-Language: en-US Content-ID: Sender: netdev-owner@vger.kernel.org List-ID: VGhlIGtlcm5lbCBwYXRjaC4NCg0KIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9oc3IvaHNyX2dl bmwuYyB8ICAyMTMgKysrKysrKysrKysrKw0KIGluY2x1ZGUvbGludXgvaWZfZXRoZXIuaCAgICAg ICAgICAgICAgICB8ICAgIDEgKw0KIGluY2x1ZGUvbGludXgvaWZfbGluay5oICAgICAgICAgICAg ICAgICB8ICAgMTEgKw0KIG5ldC9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDEgKw0KIG5ldC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEg Kw0KIG5ldC9oc3IvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODQgKysrKysN CiBuZXQvaHNyL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsNCiBuZXQv aHNyL2hzcl9kZXZpY2UuYyAgICAgICAgICAgICAgICAgICAgfCAgNTMxICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysNCiBuZXQvaHNyL2hzcl9kZXZpY2UuaCAgICAgICAgICAgICAgICAg ICAgfCAgIDI3ICsrDQogbmV0L2hzci9oc3JfZnJhbWVyZWcuYyAgICAgICAgICAgICAgICAgIHwg IDMyOCArKysrKysrKysrKysrKysrKysrDQogbmV0L2hzci9oc3JfZnJhbWVyZWcuaCAgICAgICAg ICAgICAgICAgIHwgICA1NCArKysrDQogbmV0L2hzci9oc3JfbWFpbi5jICAgICAgICAgICAgICAg ICAgICAgIHwgIDQxMSArKysrKysrKysrKysrKysrKysrKysrKysNCiBuZXQvaHNyL2hzcl9uZXRs aW5rLmMgICAgICAgICAgICAgICAgICAgfCAgMjkzICsrKysrKysrKysrKysrKysrDQogbmV0L2hz ci9oc3JfbmV0bGluay5oICAgICAgICAgICAgICAgICAgIHwgICA2NCArKysrDQogbmV0L2hzci9o c3JfcHJpdmF0ZS5oICAgICAgICAgICAgICAgICAgIHwgIDExNCArKysrKysrDQogMTUgZmlsZXMg Y2hhbmdlZCwgMjE0MCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2Rl IDEwMDY0NCBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaHNyL2hzcl9nZW5sLmMNCiBjcmVhdGUg bW9kZSAxMDA2NDQgbmV0L2hzci9LY29uZmlnDQogY3JlYXRlIG1vZGUgMTAwNjQ0IG5ldC9oc3Iv TWFrZWZpbGUNCiBjcmVhdGUgbW9kZSAxMDA2NDQgbmV0L2hzci9oc3JfZGV2aWNlLmMNCiBjcmVh dGUgbW9kZSAxMDA2NDQgbmV0L2hzci9oc3JfZGV2aWNlLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQg bmV0L2hzci9oc3JfZnJhbWVyZWcuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXQvaHNyL2hzcl9m cmFtZXJlZy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IG5ldC9oc3IvaHNyX21haW4uYw0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBuZXQvaHNyL2hzcl9uZXRsaW5rLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQg bmV0L2hzci9oc3JfbmV0bGluay5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IG5ldC9oc3IvaHNyX3By aXZhdGUuaA0KDQoNCg0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9oc3Iv aHNyX2dlbmwuYyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9oc3IvaHNyX2dlbmwuYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjEzMTkyNTgNCi0tLSAvZGV2L251bGwN CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9oc3IvaHNyX2dlbmwuYw0KQEAgLTAsMCAr MSwyMTMgQEANCisvKg0KKyAqIENvcHlyaWdodCAyMDExLTIwMTIgQXV0cm9uaWNhIEZpcmUgYW5k IFNlY3VyaXR5IEFTDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlDQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQ0KKyAqIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQor ICogQXV0aG9yKHMpOg0KKyAqCTIwMTEtMjAxMiBBcnZpZCBCcm9kaW4sIGFydmlkLmJyb2RpbkB4 ZGluLmNvbQ0KKyAqDQorICogVXNlcnNwYWNlIGV4YW1wbGUgb2YgdXNpbmcgR2VuZXJpYyBOZXRs aW5rICh0aHJvdWdoIGxpYm5sLTMpIHRvIGdldCBIU1INCisgKiAoIkhpZ2gtYXZhaWxhYmlsaXR5 IFNlYW1sZXNzIFJlZHVuZGFuY3kiKSBsaW5rL25ldHdvcmsgc3RhdHVzLg0KKyAqLw0KKw0KKyNp bmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8bmV0bGlu ay9uZXRsaW5rLmg+DQorI2luY2x1ZGUgPG5ldGxpbmsvc29ja2V0Lmg+DQorI2luY2x1ZGUgPG5l dGxpbmsvYXR0ci5oPg0KKyNpbmNsdWRlIDxuZXRsaW5rL2dlbmwvZ2VubC5oPg0KKyNpbmNsdWRl IDxuZXRsaW5rL2dlbmwvY3RybC5oPg0KKyNpbmNsdWRlICIuLi8uLi9saW51eC1uZXh0L25ldC9o c3IvaHNyX25ldGxpbmsuaCINCisNCisNCitzdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgaHNyX2dl bmxfcG9saWN5W0hTUl9BX01BWCArIDFdID0gew0KKwlbSFNSX0FfTk9ERV9BRERSXSA9IHsgLnR5 cGUgPSBOTEFfVU5TUEVDIH0sDQorCVtIU1JfQV9JRklOREVYXSA9IHsgLnR5cGUgPSBOTEFfVTMy IH0sDQorCVtIU1JfQV9JRjFBR0VdID0geyAudHlwZSA9IE5MQV9VMzIgfSwNCisJW0hTUl9BX0lG MkFHRV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LA0KK307DQorDQorI2RlZmluZSBFVEhfQUxFTgk2 DQorDQordm9pZCBwcmludF9tYWMoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikNCit7DQorCWlu dCBpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykNCisJCXByaW50ZigiJTAy eCAiLCBhZGRyW2ldKTsNCit9DQorDQorDQoraW50IHBhcnNlX2dlbmxtc2coc3RydWN0IG5sX21z ZyAqbXNnLCB2b2lkICphcmcpDQorew0KKwlzdHJ1Y3QgbmxhdHRyICphdHRyc1tIU1JfQV9NQVgg KyAxXTsNCisJaW50IHJjOw0KKwlzdHJ1Y3QgZ2VubG1zZ2hkciAqaGRyOw0KKwlpbnQgaTsNCisN CisJcmMgPSBnZW5sbXNnX3BhcnNlKG5sbXNnX2hkcihtc2cpLCAwLCBhdHRycywgSFNSX0FfTUFY LCBoc3JfZ2VubF9wb2xpY3kpOw0KKwlpZiAocmMgPCAwKSB7DQorCQlwcmludGYoIkVycm9yIHBh cnNpbmcgZ2VubG1zZzogJWRcbiIsIHJjKTsNCisJCXJldHVybiByYzsNCisJfQ0KKw0KKw0KKwkv Kg0KKwkgKiBFeHRyYWN0IGNvbW1hbmQgSUQgZnJvbSAibWVzc2FnZSIgLT4gIm5ldGxpbmsgaGVh ZGVyIiAtPg0KKwkgKiAiZ2VuZXJpYyBuZXRsaW5rIGhlYWRlciIuDQorCSAqDQorCSAqIFRoZXNl IGFyZSB0aGUgY29tbWFuZCBlbnVtcyB1c2VkIHdoZW4gY3JlYXRpbmcgYSBnZW5sIG1zZyBoZWFk ZXINCisJICogaW4gdGhlIGtlcm5lbCB3aXRoIGdlbmxtc2dfcHV0KCkuDQorCSAqLw0KKwloZHIg PSBnZW5sbXNnX2hkcihubG1zZ19oZHIobXNnKSk7DQorDQorCXN3aXRjaCAoaGRyLT5jbWQpIHsN CisJY2FzZSBIU1JfQ19SSU5HX0VSUk9SOg0KKwkJcHJpbnRmKCJSaW5nIGVycm9yOiBcbiIpOw0K KwkJYnJlYWs7DQorCWNhc2UgSFNSX0NfTk9ERV9ET1dOOg0KKwkJcHJpbnRmKCJOb2RlIGRvd246 IFxuIik7DQorCQlicmVhazsNCisJY2FzZSBIU1JfQ19TRVRfTk9ERV9TVEFUVVM6DQorCQlwcmlu dGYoIk5vZGUgc3RhdHVzOiBcbiIpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlwcmludGYo IlVua25vd24gZ2VubCBtZXNzYWdlICglZClcbiIsIGhkci0+Y21kKTsNCisJfQ0KKw0KKw0KKwkv Kg0KKwkgKiBFeHRyYWN0IHRoZSBhdHRhY2hlZCBkYXRhICh0aGUgImF0dHJpYnV0ZXMiKS4NCisJ ICovDQorCWZvciAoaSA9IDA7IGkgPCBIU1JfQV9NQVggKyAxOyBpKyspDQorCQlpZiAoYXR0cnNb aV0pIHsNCisJCQlzd2l0Y2ggKGF0dHJzW2ldLT5ubGFfdHlwZSkgew0KKwkJCWNhc2UgSFNSX0Ff Tk9ERV9BRERSOg0KKwkJCQlwcmludGYoIiAgICBub2RlIGFkZHJlc3MgIik7DQorCQkJCXByaW50 X21hYyhubGFfZGF0YShhdHRyc1tpXSkpOw0KKwkJCQlwcmludGYoIlxuIik7DQorCQkJCWJyZWFr Ow0KKwkJCWNhc2UgSFNSX0FfSUZJTkRFWDoNCisJCQkJcHJpbnRmKCIgICAgaW50ZXJmYWNlIGlu ZGV4ICVkXG4iLCBubGFfZ2V0X3UzMihhdHRyc1tpXSkpOw0KKwkJCQlicmVhazsNCisJCQljYXNl IEhTUl9BX0lGMUFHRToNCisJCQkJcHJpbnRmKCIgICAgbGFzdCBmcmFtZSBvdmVyIHNsYXZlICMx ICVkIG1zIGFnb1xuIiwgKGludCkgbmxhX2dldF91MzIoYXR0cnNbaV0pKTsNCisJCQkJYnJlYWs7 DQorCQkJY2FzZSBIU1JfQV9JRjJBR0U6DQorCQkJCXByaW50ZigiICAgIGxhc3QgZnJhbWUgb3Zl ciBzbGF2ZSAjMiAlZCBtcyBhZ29cbiIsIChpbnQpIG5sYV9nZXRfdTMyKGF0dHJzW2ldKSk7DQor CQkJCWJyZWFrOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXByaW50ZigiICAgIHVua25vd24gYXR0cmli dXRlIHR5cGU6ICVkXG4iLCBhdHRyc1tpXS0+bmxhX3R5cGUpOw0KKwkJCX0NCisJCX0NCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KKy8qDQorICogU2VuZCBhICJzaW1wbGUiIChoZWFkZXIgb25seSkg R2VuZXJpYyBOZXRsaW5rIG1lc3NhZ2UNCitpbnQgcXVlcnlfbGlua19zdGF0dXMoaW50IGZhbWls eSkNCit7DQorCXJldHVybiAoZ2VubF9zZW5kX3NpbXBsZShubHNrLCBmYW1pbHksIEhTUl9DX0dF VF9TVEFUVVMsIDEsIDApKTsNCit9DQorICovDQorDQoraW50IHF1ZXJ5X25vZGVfc3RhdHVzKHN0 cnVjdCBubF9zb2NrICpubHNrLCBpbnQgZmFtaWx5LCBpbnQgaWZpbmRleCwgY29uc3QgdW5zaWdu ZWQgY2hhcg0Kbm9kZV9hZGRyW0VUSF9BTEVOXSkNCit7DQorCXN0cnVjdCBubF9tc2cgKm1zZzsN CisJdm9pZCAqdXNlcl9oZHI7DQorDQorCW1zZyA9IG5sbXNnX2FsbG9jKCk7DQorCWlmICghbXNn KQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwl1c2VyX2hkciA9IGdlbmxtc2dfcHV0KG1zZywgTkxfQVVU T19QT1JULCBOTF9BVVRPX1NFUSwgZmFtaWx5LA0KKwkJCQkJCTAsIDAsIEhTUl9DX0dFVF9OT0RF X1NUQVRVUywgMSk7DQorCWlmICghdXNlcl9oZHIpDQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsN CisNCisvKg0KKyAqIFF1ZXJ5IGJ5IGludGVyZmFjZSBuYW1lIGNvdWxkIGJlIGltcGxlbWVudGVk IGluIHRoZSBrZXJuZWwgaWYgbmVlZGVkOg0KKyAgCU5MQV9QVVRfU1RSSU5HKG1zZywgSFNSX0Ff SUZOQU1FLCBpZm5hbWUpOw0KKyAqLw0KKwlOTEFfUFVUX1UzMihtc2csIEhTUl9BX0lGSU5ERVgs IGlmaW5kZXgpOw0KKwlOTEFfUFVUKG1zZywgSFNSX0FfTk9ERV9BRERSLCBFVEhfQUxFTiwgbm9k ZV9hZGRyKTsNCisNCisJcHJpbnRmKCJRdWVyeWluZyBpZiAlZCBmb3Igc3RhdHVzIG9mIG5vZGUg IiwgaWZpbmRleCk7DQorCXByaW50X21hYyhub2RlX2FkZHIpOw0KKwlwcmludGYoIlxuIik7DQor DQorCXJldHVybiAobmxfc2VuZF9hdXRvKG5sc2ssIG1zZykpOw0KKw0KK25sYV9wdXRfZmFpbHVy ZToNCisJbmxtc2dfZnJlZShtc2cpOw0KKwlyZXR1cm4gLTE7DQorfQ0KKw0KKw0KK2ludCBtYWlu KCkNCit7DQorCXN0cnVjdCBubF9zb2NrICpubHNrOw0KKwlpbnQgaHNyX21ncm91cDsNCisJaW50 IHJjOw0KKw0KKwlubHNrID0gbmxfc29ja2V0X2FsbG9jKCk7DQorCWlmICghbmxzaykgew0KKwkJ cHJpbnRmKCJubF9zb2NrZXRfYWxsb2MoKSBmYWlsZWRcbiIpOw0KKwkJcmV0dXJuIEVYSVRfRkFJ TFVSRTsNCisJfQ0KKwlubF9zb2NrZXRfZGlzYWJsZV9zZXFfY2hlY2sobmxzayk7DQorCW5sX3Nv Y2tldF9tb2RpZnlfY2IobmxzaywgTkxfQ0JfVkFMSUQsIE5MX0NCX0NVU1RPTSwgcGFyc2VfZ2Vu bG1zZywgTlVMTCk7DQorCWdlbmxfY29ubmVjdChubHNrKTsNCisNCisJLyoNCisJICogU2lnbiB1 cCBmb3IgSFNSIG1lc3NhZ2VzDQorCSAqLw0KKwloc3JfbWdyb3VwID0gZ2VubF9jdHJsX3Jlc29s dmVfZ3JwKG5sc2ssICJIU1IiLCAiaHNyLW5ldHdvcmsiKTsNCisJaWYgKGhzcl9tZ3JvdXAgPCAw KSB7DQorCQlwcmludGYoImdlbmxfY3RybF9yZXNvbHZlX2dycCgpIGZhaWxlZDogJWRcbiIsIGhz cl9tZ3JvdXApOw0KKwkJcmMgPSBFWElUX0ZBSUxVUkU7DQorCQlnb3RvIG91dDsNCisJfQ0KKw0K KwlwcmludGYoIlJlZ2lzdGVyaW5nIGZvciBtdWx0aWNhc3QgZ3JvdXAgJWRcbiIsIGhzcl9tZ3Jv dXApOw0KKwlyYyA9IG5sX3NvY2tldF9hZGRfbWVtYmVyc2hpcHMobmxzaywgaHNyX21ncm91cCwg MCk7DQorCWlmIChyYyA8IDApIHsNCisJCXByaW50Zigibmxfc29ja2V0X2FkZF9tZW1iZXJzaGlw cygpIGZhaWxlZDogJWRcbiIsIHJjKTsNCisJCWdvdG8gb3V0Ow0KKwl9DQorDQorCS8qDQorCSAq IFNlbmQgYSBxdWVyeSBhYm91dCB0aGUgc3RhdHVzIG9mIGFub3RoZXIgbm9kZSBvbiB0aGUgSFNS IG5ldHdvcms6DQorCSAqLw0KKwlpbnQgaHNyX2ZhbWlseTsNCisJLyogVGhlIGhzciBpZiB3ZSBz ZW5kIHRoZSBlbnF1aXJ5IHRvIChnZXQgaXQgd2l0aCBlLmcuDQorCSAqICdjYXQgL3N5cy9jbGFz cy9uZXQvaHNyMC9pZmluZGV4Jyk6ICovDQorCWNvbnN0IGludCBoc3JfaWZpbmRleCA9IDQ7DQor CS8qIFRoZSBub2RlIHRvIGVucXVpcmUgYWJvdXQ6ICovDQorCWNvbnN0IHVuc2lnbmVkIGNoYXIg bm9kZVtFVEhfQUxFTl0gPSB7MHgwMCwgMHgyNCwgMHg3NCwgMHgwMCwgMHgxNywgMHhBRH07DQor DQorCWhzcl9mYW1pbHkgPSBnZW5sX2N0cmxfcmVzb2x2ZShubHNrLCAiSFNSIik7DQorCWlmICho c3JfZmFtaWx5IDwgMCkgew0KKwkJcHJpbnRmKCJnZW5sX2N0cmxfcmVzb2x2ZSgpIGZhaWxlZDog JWRcbiIsIGhzcl9mYW1pbHkpOw0KKwkJZ290byByZWNlaXZlOw0KKwl9DQorCXJjID0gcXVlcnlf bm9kZV9zdGF0dXMobmxzaywgaHNyX2ZhbWlseSwgaHNyX2lmaW5kZXgsIG5vZGUpOw0KKwlwcmlu dGYoInF1ZXJ5X25vZGVfc3RhdHVzKCkgcmV0dXJuZWQgJWRcbiIsIHJjKTsNCisNCisJLyoNCisJ ICogUmVjZWl2ZSBtZXNzYWdlcw0KKwkgKi8NCityZWNlaXZlOg0KKwl3aGlsZSAoMSkNCisJCW5s X3JlY3Ztc2dzX2RlZmF1bHQobmxzayk7DQorDQorCXJjID0gRVhJVF9TVUNDRVNTOw0KK291dDoN CisJbmxfY2xvc2Uobmxzayk7DQorCW5sX3NvY2tldF9mcmVlKG5sc2spOw0KKwlyZXR1cm4gcmM7 DQorfQ0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaCBiL2luY2x1ZGUvbGlu dXgvaWZfZXRoZXIuaA0KaW5kZXggNTZkOTA3YS4uMGQwZTJmOSAxMDA2NDQNCi0tLSBhL2luY2x1 ZGUvbGludXgvaWZfZXRoZXIuaA0KKysrIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oDQpAQCAt ODMsNiArODMsNyBAQA0KICNkZWZpbmUgRVRIX1BfVElQQwkweDg4Q0EJCS8qIFRJUEMgCQkJKi8N CiAjZGVmaW5lIEVUSF9QXzgwMjFBSAkweDg4RTcgICAgICAgICAgLyogODAyLjFhaCBCYWNrYm9u ZSBTZXJ2aWNlIFRhZyAqLw0KICNkZWZpbmUgRVRIX1BfMTU4OAkweDg4RjcJCS8qIElFRUUgMTU4 OCBUaW1lc3luYyAqLw0KKyNkZWZpbmUgRVRIX1BfSFNSCTB4ODhGQgkJLyogSUVDIDYyNDM5LTMg SFNSL1BSUAkJKi8NCiAjZGVmaW5lIEVUSF9QX0ZDT0UJMHg4OTA2CQkvKiBGaWJyZSBDaGFubmVs IG92ZXIgRXRoZXJuZXQgICovDQogI2RlZmluZSBFVEhfUF9URExTCTB4ODkwRCAgICAgICAgICAv KiBURExTICovDQogI2RlZmluZSBFVEhfUF9GSVAJMHg4OTE0CQkvKiBGQ29FIEluaXRpYWxpemF0 aW9uIFByb3RvY29sICovDQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9saW5rLmggYi9p bmNsdWRlL2xpbnV4L2lmX2xpbmsuaA0KaW5kZXggNGIyNGZmNC4uM2UzZWZiNCAxMDA2NDQNCi0t LSBhL2luY2x1ZGUvbGludXgvaWZfbGluay5oDQorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2xpbmsu aA0KQEAgLTM5MSw0ICszOTEsMTUgQEAgc3RydWN0IGlmbGFfcG9ydF92c2kgew0KIAlfX3U4IHBh ZFszXTsNCiB9Ow0KDQorLyogSFNSIHNlY3Rpb24gKi8NCisNCitlbnVtIHsNCisJSUZMQV9IU1Jf VU5TUEVDLA0KKwlJRkxBX0hTUl9TTEFWRTEsDQorCUlGTEFfSFNSX1NMQVZFMiwNCisJX19JRkxB X0hTUl9NQVgsDQorfTsNCisNCisjZGVmaW5lIElGTEFfSFNSX01BWCAoX19JRkxBX0hTUl9NQVgg LSAxKQ0KKw0KICNlbmRpZiAvKiBfTElOVVhfSUZfTElOS19IICovDQpkaWZmIC0tZ2l0IGEvbmV0 L0tjb25maWcgYi9uZXQvS2NvbmZpZw0KaW5kZXggZTA3MjcyZC4uMjI0NDZkMyAxMDA2NDQNCi0t LSBhL25ldC9LY29uZmlnDQorKysgYi9uZXQvS2NvbmZpZw0KQEAgLTIxNiw2ICsyMTYsNyBAQCBz b3VyY2UgIm5ldC9kY2IvS2NvbmZpZyINCiBzb3VyY2UgIm5ldC9kbnNfcmVzb2x2ZXIvS2NvbmZp ZyINCiBzb3VyY2UgIm5ldC9iYXRtYW4tYWR2L0tjb25maWciDQogc291cmNlICJuZXQvb3BlbnZz d2l0Y2gvS2NvbmZpZyINCitzb3VyY2UgIm5ldC9oc3IvS2NvbmZpZyINCg0KIGNvbmZpZyBSUFMN CiAJYm9vbGVhbg0KZGlmZiAtLWdpdCBhL25ldC9NYWtlZmlsZSBiL25ldC9NYWtlZmlsZQ0KaW5k ZXggYWQ0MzJmYS4uN2Q4Nzg3ZiAxMDA2NDQNCi0tLSBhL25ldC9NYWtlZmlsZQ0KKysrIGIvbmV0 L01ha2VmaWxlDQpAQCAtNzAsMyArNzAsNCBAQCBvYmotJChDT05GSUdfQ0VQSF9MSUIpCQkrPSBj ZXBoLw0KIG9iai0kKENPTkZJR19CQVRNQU5fQURWKQkrPSBiYXRtYW4tYWR2Lw0KIG9iai0kKENP TkZJR19ORkMpCQkrPSBuZmMvDQogb2JqLSQoQ09ORklHX09QRU5WU1dJVENIKQkrPSBvcGVudnN3 aXRjaC8NCitvYmotJChDT05GSUdfSFNSKQkJKz0gaHNyLw0KZGlmZiAtLWdpdCBhL25ldC9oc3Iv S2NvbmZpZyBiL25ldC9oc3IvS2NvbmZpZw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAw MDAwMDAuLjg5NWFmZGENCi0tLSAvZGV2L251bGwNCisrKyBiL25ldC9oc3IvS2NvbmZpZw0KQEAg LTAsMCArMSw4NCBAQA0KKyMNCisjIElFQyA2MjQzOS0zIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1s ZXNzIFJlZHVuZGFuY3kNCisjDQorDQorY29uZmlnIEhTUg0KKwl0cmlzdGF0ZSAiSGlnaC1hdmFp bGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSKSINCisJLS0taGVscC0tLQ0KKwkgIElm IHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3Qg YXMgYQ0KKwkgIERBTkggKCJEb3VibHkgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgSFNSIiku IEZvciB0aGlzIHRvIHdvcmssDQorCSAgeW91ciBMaW51eCBib3ggbmVlZHMgKGF0IGxlYXN0KSB0 d28gcGh5c2ljYWwgRXRoZXJuZXQgaW50ZXJmYWNlcywNCisJICBhbmQgeW91IG5lZWQgdG8gZW5z bGF2ZSB0aGVzZSB0byBhIHZpcnR1YWwgaHNyIGludGVyZmFjZSB1c2luZyB0aGUNCisJICBhcHBy b3ByaWF0ZSB1c2VyIHNwYWNlIHRvb2wsIGkuZS46DQorDQorCSAgIyBpcCBsaW5rIGFkZCBuYW1l IGhzcjAgdHlwZSBoc3IgZGV2MSBkZXYyDQorDQorCSAgWW91ciBMaW51eCBib3ggbXVzdCBiZSBj b25uZWN0ZWQgYXMgYSBub2RlIGluIGEgcmluZyBuZXR3b3JrDQorCSAgdG9nZXRoZXIgd2l0aCBv dGhlciBIU1IgY2FwYWJsZSBub2Rlcy4NCisNCisJICBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQg b3ZlciB0aGUgaHNyIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aA0KKwkgIGRpcmVjdGlvbnMg b24gdGhlIHJpbmcgKG92ZXIgYm90aCBzbGF2ZSBwb3J0cyksIGdpdmluZyBhIHJlZHVuZGFudCwN CisJICBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLg0KKw0KKwkgIEVhY2ggSFNSIG5vZGUgaW4g dGhlIHJpbmcgYWN0cyBsaWtlIGEgYnJpZGdlIGZvciBIU1IgZnJhbWVzLCBidXQNCisJICBmaWx0 ZXJzIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiBmb3J3YXJkZWQgZWFybGllci4NCisNCisJICBUaGlz IGNvZGUgaXMgYSAiYmVzdCBlZmZvcnQiIHRvIGNvbXBseSB3aXRoIHRoZSBIU1Igc3RhbmRhcmQg YXMNCisJICBkZXNjcmliZWQgaW4gSUVDIDYyNDM5LTMsIGJ1dCBubyBjb21wbGlhbmN5IHRlc3Rz IGhhdmUgYmVlbiBtYWRlLg0KKwkgIFlvdSBuZWVkIHRvIHBlcmZvcm0gYW55IGFuZCBhbGwgbmVj ZXNzYXJ5IHRlc3RzIHlvdXJzZWxmIGJlZm9yZQ0KKwkgIHJlbHlpbmcgb24gdGhpcyBjb2RlIGlu IGEgc2FmZXR5IGNyaXRpY2FsIHN5c3RlbS4gSW4gcGFydGljdWxhciwgdGhlDQorCSAgc3RhbmRh cmQgaXMgdmVyeSBkaWZmdXNlIG9uIGhvdyB0byB1c2UgdGhlIFJpbmcgSUQgZmllbGQgaW4gdGhl IEhTUg0KKwkgIHRhZywgYW5kIGl0J3MgcHJvYmFibGUgdGhhdCB0aGlzIGNvZGUgZG9lcyBub3Qg ZG8gdGhlIHJpZ2h0IHRoaW5nLg0KKw0KKwkgIElmIHVuc3VyZSwgc2F5IE4uDQorDQoraWYgSEFW RV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUw0KKw0KK2NvbmZpZyBOT05TVEFOREFSRF9IU1IN CisJYm9vbCAiSFNSOiBVc2UgZWZmaWNpZW50IHRhZyAoYnJlYWtzIEhTUiBzdGFuZGFyZCwgcmVh ZCBoZWxwISkiDQorCWRlcGVuZHMgb24gSFNSDQorCS0tLWhlbHAtLS0NCisJICBUaGUgSFNSIHN0 YW5kYXJkIHNwZWNpZmllcyBhIDYtYnl0ZSBIU1IgdGFnIHRvIGJlIGluc2VydGVkIGludG8gdGhl DQorCSAgdHJhbnNtaXR0ZWQgbmV0d29yayBmcmFtZXMuIFRoaXMgYnJlYWtzIHRoZSAzMi1iaXQg YWxpZ25tZW50IHRoYXQgdGhlDQorCSAgTGludXggbmV0d29yayBzdGFjayByZWxpZXMgb24sIGFu ZCB3b3VsZCBjYXVzZSBrZXJuZWwgcGFuaWNzIG9uDQorCSAgY2VydGFpbiBhcmNoaXRlY3R1cmVz LiBUbyBhdm9pZCB0aGlzLCB0aGUgd2hvbGUgZnJhbWUgcGF5bG9hZCBpcw0KKwkgIG1lbW1vdmVk IDIgYnl0ZXMgb24gcmVjZXB0aW9uIG9uIHRoZXNlIGFyY2hpdGVjdHVyZXMgLSB3aGljaCBpcyB2 ZXJ5DQorCSAgaW5lZmZpY2llbnQhDQorDQorCSAgSWYgeW91IHNlbGVjdCBZIGhlcmUsIDIgYnl0 ZXMgb2YgcGFkZGluZyBpcyBpbnNlcnRlZCBpbnRvIHRoZSBIU1IgdGFnLA0KKwkgIHdoaWNoIG1h a2VzIGl0IHBvc3NpYmxlIHRvIHNraXAgdGhlIG1lbW1vdmUuIFRoaXMgaG93ZXZlciBicmVha3MN CisJICBjb21wYXRpYmlsaXR5IHdpdGggY29tcGxpYW50IEhTUiBkZXZpY2VzLiBJLmUuLCBlaXRo ZXIgYWxsIG9yIG5vbmUgb2YNCisJICB0aGUgZGV2aWNlcyBpbiB5b3VyIEhTUiByaW5nIG5lZWRz IHRvIGhhdmUgdGhpcyBvcHRpb24gc2V0Lg0KKw0KKwkgIFlvdXIgYXJjaGl0ZWN0dXJlIGhhcyBI QVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTLCBzbyB5b3UgZG8gbm90DQorCSAgbmVlZCB0 aGlzIHVubGVzcyB5b3UgaGF2ZSBvdGhlciBub2RlcyBpbiB5b3VyIHJpbmcgd2hpY2ggaGF2ZSB0 aGlzDQorCSAgb3B0aW9uIHNldC4NCisNCisJICBJZiB1bnN1cmUsIHNheSBOLg0KKw0KK2VuZGlm ICMgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUw0KK2lmICFIQVZFX0VGRklDSUVOVF9V TkFMSUdORURfQUNDRVNTDQorDQorY29uZmlnIE5PTlNUQU5EQVJEX0hTUg0KKwlib29sICJIU1I6 IFVzZSBlZmZpY2llbnQgdGFnIChicmVha3MgSFNSIHN0YW5kYXJkLCByZWFkIGhlbHAhKSINCisJ ZGVwZW5kcyBvbiBIU1INCisJLS0taGVscC0tLQ0KKwkgIFRoZSBIU1Igc3RhbmRhcmQgc3BlY2lm aWVzIGEgNi1ieXRlIEhTUiB0YWcgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUNCisJICB0cmFuc21p dHRlZCBuZXR3b3JrIGZyYW1lcy4gVGhpcyBicmVha3MgdGhlIDMyLWJpdCBhbGlnbm1lbnQgdGhh dCB0aGUNCisJICBMaW51eCBuZXR3b3JrIHN0YWNrIHJlbGllcyBvbiwgYW5kIHdvdWxkIGNhdXNl IGtlcm5lbCBwYW5pY3Mgb24NCisJICBjZXJ0YWluIGFyY2hpdGVjdHVyZXMuIFRvIGF2b2lkIHRo aXMsIHRoZSB3aG9sZSBmcmFtZSBwYXlsb2FkIGlzDQorCSAgbWVtbW92ZWQgMiBieXRlcyBvbiBy ZWNlcHRpb24gb24gdGhlc2UgYXJjaGl0ZWN0dXJlcyAtIHdoaWNoIGlzIHZlcnkNCisJICBpbmVm ZmljaWVudCENCisNCisJICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgMiBieXRlcyBvZiBwYWRkaW5n IGlzIGluc2VydGVkIGludG8gdGhlIEhTUiB0YWcsDQorCSAgd2hpY2ggbWFrZXMgaXQgcG9zc2li bGUgdG8gc2tpcCB0aGUgbWVtbW92ZS4gVGhpcyBob3dldmVyIGJyZWFrcw0KKwkgIGNvbXBhdGli aWxpdHkgd2l0aCBjb21wbGlhbnQgSFNSIGRldmljZXMuIEkuZS4sIGVpdGhlciBhbGwgb3Igbm9u ZSBvZg0KKwkgIHRoZSBkZXZpY2VzIGluIHlvdXIgSFNSIHJpbmcgbmVlZHMgdG8gaGF2ZSB0aGlz IG9wdGlvbiBzZXQuDQorDQorCSAgWW91ciBhcmNoaXRlY3R1cmUgZG9lcyBub3QgaGF2ZSBIQVZF X0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTLCBzbw0KKwkgIHlvdSBzaG91bGQgc2VyaW91c2x5 IGNvbnNpZGVyIHNheWluZyBZIGhlcmUgaWYgcGVyZm9ybWFuY2UgaXMgYXQgYWxsDQorCSAgaW1w b3J0YW50IHRvIHlvdS4NCisNCisJICBJZiB1bnN1cmUsIHNheSBOLg0KKw0KK2VuZGlmICMgIUhB VkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MNCmRpZmYgLS1naXQgYS9uZXQvaHNyL01ha2Vm aWxlIGIvbmV0L2hzci9NYWtlZmlsZQ0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAw MDAuLmI2ODM1OWYNCi0tLSAvZGV2L251bGwNCisrKyBiL25ldC9oc3IvTWFrZWZpbGUNCkBAIC0w LDAgKzEsNyBAQA0KKyMNCisjIE1ha2VmaWxlIGZvciBIU1INCisjDQorDQorb2JqLSQoQ09ORklH X0hTUikJKz0gaHNyLm8NCisNCitoc3IteQkJCTo9IGhzcl9tYWluLm8gaHNyX2ZyYW1lcmVnLm8g aHNyX2RldmljZS5vIGhzcl9uZXRsaW5rLm8NCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9kZXZp Y2UuYyBiL25ldC9oc3IvaHNyX2RldmljZS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMC4uZTk1YzAwNg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbmV0L2hzci9oc3JfZGV2aWNl LmMNCkBAIC0wLDAgKzEsNTMxIEBADQorLyoNCisgKiBDb3B5cmlnaHQgMjAxMS0yMDEyIEF1dHJv bmljYSBGaXJlIGFuZCBTZWN1cml0eSBBUw0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQNCisgKiB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZQ0KKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikNCisgKiBhbnkgbGF0ZXIgdmVy c2lvbi4NCisgKg0KKyAqIEF1dGhvcihzKToNCisgKgkyMDExLTIwMTIgQXJ2aWQgQnJvZGluLCBh cnZpZC5icm9kaW5AeGRpbi5jb20NCisgKg0KKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZXZpY2Ug bWV0aG9kcyBmb3IgY3JlYXRpbmcsIHVzaW5nIGFuZCBkZXN0cm95aW5nDQorICogdmlydHVhbCBI U1IgZGV2aWNlcy4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L3NrYnVmZi5oPg0KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPg0K KyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4NCisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+ DQorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPg0KKyNpbmNsdWRlIDxsaW51eC9uZXRwb2xs Lmg+DQorI2luY2x1ZGUgImhzcl9mcmFtZXJlZy5oIg0KKyNpbmNsdWRlICJoc3JfcHJpdmF0ZS5o Ig0KKw0KKw0KK3N0YXRpYyBpbnQgaXNfYWRtaW5fdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikN Cit7DQorCXJldHVybiAoZGV2LT5mbGFncyAmIElGRl9VUCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXNfb3BlcnN0YXRlX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQorew0KKwlyZXR1cm4gKGRl di0+b3BlcnN0YXRlID09IElGX09QRVJfVVApOw0KK30NCisNCitzdGF0aWMgdm9pZCBfX2hzcl9z ZXRfb3BlcnN0YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0cmFuc2l0aW9uKQ0KK3sN CisJaWYgKGRldi0+b3BlcnN0YXRlICE9IHRyYW5zaXRpb24pIHsNCisvKg0KKwkJc3dpdGNoICh0 cmFuc2l0aW9uKSB7DQorCQljYXNlIElGX09QRVJfVVA6DQorCQkJcHJpbnRrKEtFUk5fSU5GTyAi JXM6IG5ldyBvcGVyc3RhdGUgaXMgSUZfT1BFUl9VUFxuIiwgZGV2LT5uYW1lKTsNCisJCQlicmVh azsNCisJCWRlZmF1bHQ6DQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5ldyBvcGVyc3RhdGUg aXMgIUlGX09QRVJfVVAgKCVkKVxuIiwgZGV2LT5uYW1lLCB0cmFuc2l0aW9uKTsNCisJCX0NCisq Lw0KKwkJd3JpdGVfbG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7DQorCQlkZXYtPm9wZXJzdGF0ZSA9 IHRyYW5zaXRpb247DQorCQl3cml0ZV91bmxvY2tfYmgoJmRldl9iYXNlX2xvY2spOw0KKwkJbmV0 ZGV2X3N0YXRlX2NoYW5nZShkZXYpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgaHNyX3NldF9vcGVyc3Rh dGUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZTEs DQorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlMikNCit7DQorCWlmICghaXNfYWRtaW5f dXAoaHNyX2RldikpIHsNCisJCV9faHNyX3NldF9vcGVyc3RhdGUoaHNyX2RldiwgSUZfT1BFUl9E T1dOKTsNCisJCXJldHVybjsNCisJfQ0KKy8qDQorCXByaW50ayhLRVJOX0lORk8gIlNsYXZlMS8y IG9wZXJzdGF0ZTogJWQvJWRcbiIsDQorCQkJCQlzbGF2ZTEtPm9wZXJzdGF0ZSwgc2xhdmUyLT5v cGVyc3RhdGUpOw0KKyovDQorCWlmIChpc19vcGVyc3RhdGVfdXAoc2xhdmUxKSB8fCBpc19vcGVy c3RhdGVfdXAoc2xhdmUyKSkNCisJCV9faHNyX3NldF9vcGVyc3RhdGUoaHNyX2RldiwgSUZfT1BF Ul9VUCk7DQorCWVsc2UNCisJCV9faHNyX3NldF9vcGVyc3RhdGUoaHNyX2RldiwgSUZfT1BFUl9M T1dFUkxBWUVSRE9XTik7DQorfQ0KKw0KK3ZvaWQgaHNyX3NldF9jYXJyaWVyKHN0cnVjdCBuZXRf ZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmUxLA0KKwkJCQkJCXN0cnVj dCBuZXRfZGV2aWNlICpzbGF2ZTIpDQorew0KKwlpZiAoaXNfb3BlcnN0YXRlX3VwKHNsYXZlMSkg fHwgaXNfb3BlcnN0YXRlX3VwKHNsYXZlMikpDQorCQluZXRpZl9jYXJyaWVyX29uKGhzcl9kZXYp Ow0KKwllbHNlDQorCQluZXRpZl9jYXJyaWVyX29mZihoc3JfZGV2KTsNCit9DQorDQorDQordm9p ZCBoc3JfY2hlY2tfYW5ub3VuY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIGludCBvbGRf b3BlcnN0YXRlKQ0KK3sNCisJc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdjsNCisNCisJaHNyX3By aXYgPSBuZXRkZXZfcHJpdihoc3JfZGV2KTsNCisNCisJaWYgKChoc3JfZGV2LT5vcGVyc3RhdGUg PT0gSUZfT1BFUl9VUCkgJiYgKG9sZF9vcGVyc3RhdGUgIT0gSUZfT1BFUl9VUCkpIHsNCisJCS8q IFdlbnQgdXAgKi8NCisJCWhzcl9wcml2LT5hbm5vdW5jZV9jb3VudCA9IDA7DQorCQloc3JfcHJp di0+YW5ub3VuY2VfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKw0KKwkJCQltc2Vjc190b19qaWZm aWVzKEhTUl9BTk5PVU5DRV9JTlRFUlZBTCk7DQorCQlhZGRfdGltZXIoJmhzcl9wcml2LT5hbm5v dW5jZV90aW1lcik7DQorCX0NCisNCisJaWYgKChoc3JfZGV2LT5vcGVyc3RhdGUgIT0gSUZfT1BF Ul9VUCkgJiYgKG9sZF9vcGVyc3RhdGUgPT0gSUZfT1BFUl9VUCkpDQorCQkvKiBXZW50IGRvd24g Ki8NCisJCWRlbF90aW1lcigmaHNyX3ByaXYtPmFubm91bmNlX3RpbWVyKTsNCit9DQorDQorDQor DQorc3RhdGljIGludCBoc3JfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCit7DQor CXN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXY7DQorDQorCWhzcl9wcml2ID0gbmV0ZGV2X3ByaXYo ZGV2KTsNCisNCisJZGV2X29wZW4oaHNyX3ByaXYtPnNsYXZlX2RhdGFbMF0uZGV2KTsNCisJZGV2 X29wZW4oaHNyX3ByaXYtPnNsYXZlX2RhdGFbMV0uZGV2KTsNCisNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgaHNyX2Rldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KK3sN CisJLy8gRklYTUU6IHJlc2V0IHN0YXR1cyBvZiBzbGF2ZXMNCisJcmV0dXJuIDA7DQorfQ0KKw0K Kw0KK3N0YXRpYyB2b2lkIGhzcl9maWxsX3RhZyhzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhk ciwgc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdikNCit7DQorCXUxNiBwYXRoOw0KKwl1MTYgTFNE VV9zaXplOw0KKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOw0KKw0KKwkvKg0KKwkgKiBJRUMgNjI0 MzktMSwgcCA0OCwgc2F5cyB0aGUgNC1iaXQgInBhdGgiIGZpZWxkIGNhbiB0YWtlIHZhbHVlcw0K KwkgKiBiZXR3ZWVuIDAwMDEtMTAwMSAoInJpbmcgaWRlbnRpZmllciIsIGZvciByZWd1bGFyIEhT UiBmcmFtZXMpLA0KKwkgKiBvciAxMTExICgiSFNSIG1hbmFnZW1lbnQiLCBzdXBlcnZpc2lvbiBm cmFtZXMpLiBVbmZvcnR1bmF0ZWx5LCB0aGUNCisJICogc3BlYyB3cml0ZXJzIGZvcmdvdCB0byBl eHBsYWluIHdoYXQgYSAicmluZyBpZGVudGlmaWVyIiBpcywgb3INCisJICogaG93IGl0IGlzIHVz ZWQuIFNvIHdlIGp1c3Qgc2V0IHRoaXMgdG8gMDAwMSBmb3IgcmVndWxhciBmcmFtZXMsDQorCSAq IGFuZCAxMTExIGZvciBzdXBlcnZpc2lvbiBmcmFtZXMuDQorCSAqLw0KKwlwYXRoID0gMHgxOw0K Kw0KKwkvKg0KKwkgKiBJRUMgNjI0MzktMSwgcCAxMjogIlRoZSBsaW5rIHNlcnZpY2UgZGF0YSB1 bml0IGluIGFuIEV0aGVybmV0IGZyYW1lDQorCSAqIGlzIHRoZSBjb250ZW50IG9mIHRoZSBmcmFt ZSBsb2NhdGVkIGJldHdlZW4gdGhlIExlbmd0aC9UeXBlIGZpZWxkDQorCSAqIGFuZCB0aGUgRnJh bWUgQ2hlY2sgU2VxdWVuY2UuIg0KKwkgKg0KKwkgKiBJRUMgNjI0MzktMywgcCA0OCwgc3BlY2lm aWVzIHRoZSAib3JpZ2luYWwgTFBEVSIgdG8gaW5jbHVkZSB0aGUNCisJICogb3JpZ2luYWwgIkxU IiBmaWVsZCAod2hhdCAiTFQiIG1lYW5zIGlzIG5vdCBleHBsYWluZWQgYW55d2hlcmUgYXMNCisJ ICogZmFyIGFzIEkgY2FuIHNlZSAtIHBlcmhhcHMgIkxlbmd0aC9UeXBlIj8pLiBTbyBMU0RVX3Np emUgbWlnaHQNCisJICogZXF1YWwgb3JpZ2luYWwgbGVuZ3RoICsgMi4NCisJICogICBBbHNvLCB0 aGUgZmFjdCB0aGF0IHRoaXMgZmllbGQgaXMgbm90IHVzZWQgYW55d2hlcmUgKG1pZ2h0IGJlIHVz ZWQNCisJICogYnkgYSBSZWRCb3ggY29ubmVjdGluZyBIU1IgYW5kIFBSUCBuZXRzPykgbWVhbnMg SSBjYW5ub3QgdGVzdCBpdHMNCisJICogY29ycmVjdG5lc3MuIEluc3RlYWQgb2YgZ3Vlc3Npbmcs IEkgc2V0IHRoaXMgdG8gMCBoZXJlLCB0byBtYWtlIGFueQ0KKwkgKiBwcm9ibGVtcyBpbW1lZGlh dGVseSBhcHBhcmVudC4gQW55b25lIHVzaW5nIHRoaXMgZHJpdmVyIHdpdGggUFJQL0hTUg0KKwkg KiBSZWRCb3hlcyBtaWdodCBuZWVkIHRvIGZpeCB0aGlzLi4uDQorCSAqLw0KKwlMU0RVX3NpemUg PSAwOw0KKwloc3JfZXRoaGRyLT5oc3JfdGFnLnBhdGhfYW5kX0xTRFVfc2l6ZSA9DQorCQkJCQlo dG9ucygodTE2KSAocGF0aCA8PCAxMikgfCBMU0RVX3NpemUpOw0KKw0KKwlzcGluX2xvY2tfaXJx c2F2ZSgmaHNyX3ByaXYtPnNlcWxvY2ssIGlycWZsYWdzKTsNCisJaHNyX2V0aGhkci0+aHNyX3Rh Zy5zZXF1ZW5jZV9uciA9IGh0b25zKGhzcl9wcml2LT5zZXF1ZW5jZV9ucik7DQorCWhzcl9wcml2 LT5zZXF1ZW5jZV9ucisrOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoc3JfcHJpdi0+c2Vx bG9jaywgaXJxZmxhZ3MpOw0KKw0KKwloc3JfZXRoaGRyLT5oc3JfdGFnLmVuY2FwX3Byb3RvID0g aHNyX2V0aGhkci0+ZXRoaGRyLmhfcHJvdG87DQorDQorCWhzcl9ldGhoZHItPmV0aGhkci5oX3By b3RvID0gaHRvbnMoRVRIX1BfSFNSKTsNCit9DQorDQorc3RhdGljIGludCBzbGF2ZV94bWl0KHN0 cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsDQorCQkJCQkJc3RydWN0 IG5ldF9kZXZpY2UgKmhzcl9kZXYpDQorew0KKwlza2Jfc2V0X2Rldihza2IsIGRldik7DQorCXNr Yi0+cHJpb3JpdHkgPSAxOyAvLyBGSVhNRTogd2hhdCBkb2VzIHRoaXMgbWVhbj8NCisNCisJLy8g RklYTUU6IHdoYXQncyBuZXRwb2xsX3R4X3J1bm5pbmc/DQorCWlmIChuZXRwb2xsX3R4X3J1bm5p bmcoaHNyX2RldikpDQorCQlyZXR1cm4gc2tiLT5kZXYtPm5ldGRldl9vcHMtPm5kb19zdGFydF94 bWl0KHNrYiwgc2tiLT5kZXYpOw0KKw0KKwlyZXR1cm4gZGV2X3F1ZXVlX3htaXQoc2tiKTsNCit9 DQorDQorDQorc3RhdGljIGludCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXY7DQor CXN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsN CisJaW50IHJlczEsIHJlczI7DQorDQorCWhzcl9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsNCisJ aHNyX2V0aGhkciA9IChzdHJ1Y3QgaHNyX2V0aGhkciAqKSBza2ItPmRhdGE7DQorDQorCWlmICgo bnRvaHMoc2tiLT5wcm90b2NvbCkgIT0gRVRIX1BfSFNSKSB8fA0KKwkJCShudG9ocyhoc3JfZXRo aGRyLT5ldGhoZHIuaF9wcm90bykgIT0gRVRIX1BfSFNSKSkgew0KKw0KKwkJaHNyX2ZpbGxfdGFn KGhzcl9ldGhoZHIsIGhzcl9wcml2KTsNCisJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9I U1IpOw0KKwl9DQorDQorCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsNCisNCisJ cmVzMSA9IE5FVF9YTUlUX0RST1A7DQorCXJlczIgPSBORVRfWE1JVF9EUk9QOw0KKwlyZXMxID0g c2xhdmVfeG1pdChza2IsIGhzcl9wcml2LT5zbGF2ZV9kYXRhWzBdLmRldiwgZGV2KTsNCisJaWYg KHNrYjIpIHsNCisJCS8qIEFkZHJlc3Mgc3Vic3RpdHV0aW9uIChJRUM2MjQzOS0zIHBwIDI2LCA1 MCk6IHJlcGxhY2UgbWFjDQorCQkgKiBhZGRyZXNzIG9mIG91dGdvaW5nIGZyYW1lIHdpdGggdGhh dCBvZiB0aGUgb3V0Z29pbmcgc2xhdmUncy4NCisJCSAqLw0KKwkJbWVtY3B5KGhzcl9ldGhoZHIt PmV0aGhkci5oX3NvdXJjZSwNCisJCQkJCWhzcl9wcml2LT5zbGF2ZV9kYXRhWzFdLmRldi0+ZGV2 X2FkZHIsDQorCQkJCQlFVEhfQUxFTik7DQorCQlyZXMyID0gc2xhdmVfeG1pdChza2IyLCBoc3Jf cHJpdi0+c2xhdmVfZGF0YVsxXS5kZXYsIGRldik7DQorCX0NCisNCisJaWYgKGxpa2VseShyZXMx ID09IE5FVF9YTUlUX1NVQ0NFU1MgfHwgcmVzMSA9PSBORVRfWE1JVF9DTiB8fA0KKwkJCXJlczIg PT0gTkVUX1hNSVRfU1VDQ0VTUyB8fCByZXMyID09IE5FVF9YTUlUX0NOKSkgew0KKwkJaHNyX3By aXYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOw0KKwkJaHNyX3ByaXYtPmRldi0+c3RhdHMudHhf Ynl0ZXMgKz0gc2tiLT5sZW47DQorCX0gZWxzZQ0KKwkJaHNyX3ByaXYtPmRldi0+c3RhdHMudHhf ZHJvcHBlZCsrOw0KKw0KKwlyZXR1cm4gTkVUREVWX1RYX09LOw0KK30NCisNCisNCitzdGF0aWMg aW50IGhzcl9oZWFkZXJfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsDQorCQkJCQl1bnNpZ25lZCBzaG9ydCB0eXBlLA0KKwkJCQkJY29uc3Qgdm9pZCAq ZGFkZHIsIGNvbnN0IHZvaWQgKnNhZGRyLA0KKwkJCQkJdW5zaWduZWQgaW50IGxlbikNCit7DQor CWludCByZXM7DQorDQorCS8qIE1ha2Ugcm9vbSBmb3IgdGhlIEhTUiB0YWcgbm93LiBXZSB3aWxs IGZpbGwgaXQgaW4gbGF0ZXIgKGluDQorCSAgIGhzcl9kZXZfeG1pdCkgKi8NCisJc2tiX3B1c2go c2tiLCBIU1JfVEFHTEVOKTsNCisJcmVzID0gZXRoX2hlYWRlcihza2IsIGRldiwgdHlwZSwgZGFk ZHIsIHNhZGRyLCBsZW4gKyBIU1JfVEFHTEVOKTsNCisJaWYgKHJlcyA8PSAwKQ0KKwkJcmV0dXJu IHJlczsNCisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsNCisNCisJcmV0dXJuIHJlcyArIEhT Ul9UQUdMRU47DQorfQ0KKw0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBoc3Jf aGVhZGVyX29wcyA9IHsNCisJLmNyZWF0ZQkgPSBoc3JfaGVhZGVyX2NyZWF0ZSwNCisJLnBhcnNl CSA9IGV0aF9oZWFkZXJfcGFyc2UsDQorfTsNCisNCisNCitzdGF0aWMgdm9pZCBzZW5kX2hzcl9z dXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2RldiwgdTggdHlwZSkNCit7 DQorCXN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXY7DQorCXN0cnVjdCBza19idWZmICpza2I7DQor CXN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyOw0KKwl1bnNpZ25lZCBjaGFyICptYWM7DQor CXUxNiBwYXRoLCBIU1JfVmVyLCBIU1JfVExWX0xlbmd0aDsNCisJdW5zaWduZWQgbG9uZyBpcnFm bGFnczsNCisNCisJc2tiID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArDQorCQkJ CXNpemVvZihzdHJ1Y3QgaHNyX3N1cGVydmlzaW9uX3RhZykgKw0KKwkJCQlMTF9SRVNFUlZFRF9T UEFDRShoc3JfZGV2KSArDQorCQkJCWhzcl9kZXYtPm5lZWRlZF90YWlscm9vbSwgR0ZQX0FUT01J Qyk7DQorCWlmIChza2IgPT0gTlVMTCkNCisJCXJldHVybjsNCisNCisJaHNyX3ByaXYgPSBuZXRk ZXZfcHJpdihoc3JfZGV2KTsNCisNCisJc2tiX3Jlc2VydmUoc2tiLCBMTF9SRVNFUlZFRF9TUEFD RShoc3JfZGV2KSk7DQorCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOw0KKw0KKwkvKiBQ YXlsb2FkOiBNYWNBZGRyZXNzQSAqLw0KKwltYWMgPSAodW5zaWduZWQgY2hhciAqKSBza2JfcHV0 KHNrYiwgRVRIX0FMRU4pOw0KKwltZW1jcHkobWFjLCBoc3JfZGV2LT5kZXZfYWRkciwgRVRIX0FM RU4pOw0KKw0KKwlza2ItPmRldiA9IGhzcl9kZXY7DQorCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhF VEhfUF9IU1IpOw0KKw0KKwlpZiAoZGV2X2hhcmRfaGVhZGVyKHNrYiwgc2tiLT5kZXYsIEVUSF9Q X0hTUiwgaHNyX211bHRpY2FzdF9hZGRyLA0KKwkJCQkJc2tiLT5kZXYtPmRldl9hZGRyLCBza2It PmxlbikgPCAwKQ0KKwkJZ290byBvdXQ7DQorDQorCWhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9l dGhoZHIgKikgc2tiLT5kYXRhOw0KKw0KKwlwYXRoID0gMHgwZjsNCisJSFNSX1ZlciA9IDA7DQor CWhzcl9ldGhoZHItPmhzcl90YWcucGF0aF9hbmRfTFNEVV9zaXplID0gaHRvbnMocGF0aCA8PCAx MiB8IEhTUl9WZXIpOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHNyX3ByaXYtPnNlcWxvY2ss IGlycWZsYWdzKTsNCisJaHNyX2V0aGhkci0+aHNyX3RhZy5zZXF1ZW5jZV9uciA9IGh0b25zKGhz cl9wcml2LT5zZXF1ZW5jZV9ucik7DQorCWhzcl9wcml2LT5zZXF1ZW5jZV9ucisrOw0KKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZoc3JfcHJpdi0+c2VxbG9jaywgaXJxZmxhZ3MpOw0KKw0KKwlI U1JfVExWX0xlbmd0aCA9IDEyOw0KKwloc3JfZXRoaGRyLT5oc3JfdGFnLmVuY2FwX3Byb3RvID0g aHRvbnModHlwZSA8PCA4IHwgSFNSX1RMVl9MZW5ndGgpOw0KKw0KKwlkZXZfcXVldWVfeG1pdChz a2IpOw0KKwlyZXR1cm47DQorDQorb3V0Og0KKwlrZnJlZV9za2Ioc2tiKTsNCit9DQorDQorDQor LyoNCisgKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uDQorICov DQorc3RhdGljIHZvaWQgaHNyX2Fubm91bmNlKHVuc2lnbmVkIGxvbmcgZGF0YSkNCit7DQorCXN0 cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXY7DQorDQorCWhzcl9wcml2ID0gKHN0cnVjdCBoc3JfcHJp diAqKSBkYXRhOw0KKw0KKwlpZiAoaHNyX3ByaXYtPmFubm91bmNlX2NvdW50IDwgMykgew0KKwkJ c2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoaHNyX3ByaXYtPmRldiwgSFNSX1RMVl9BTk5PVU5D RSk7DQorCQloc3JfcHJpdi0+YW5ub3VuY2VfY291bnQrKzsNCisJfSBlbHNlDQorCQlzZW5kX2hz cl9zdXBlcnZpc2lvbl9mcmFtZShoc3JfcHJpdi0+ZGV2LCBIU1JfVExWX0xJRkVfQ0hFQ0spOw0K Kw0KKwlpZiAoaHNyX3ByaXYtPmFubm91bmNlX2NvdW50IDwgMykNCisJCWhzcl9wcml2LT5hbm5v dW5jZV90aW1lci5leHBpcmVzID0gamlmZmllcyArDQorCQkJCW1zZWNzX3RvX2ppZmZpZXMoSFNS X0FOTk9VTkNFX0lOVEVSVkFMKTsNCisJZWxzZQ0KKwkJaHNyX3ByaXYtPmFubm91bmNlX3RpbWVy LmV4cGlyZXMgPSBqaWZmaWVzICsNCisJCQkJbXNlY3NfdG9famlmZmllcyhIU1JfTElGRV9DSEVD S19JTlRFUlZBTCk7DQorDQorCWlmIChpc19hZG1pbl91cChoc3JfcHJpdi0+ZGV2KSkNCisJCWFk ZF90aW1lcigmaHNyX3ByaXYtPmFubm91bmNlX3RpbWVyKTsNCit9DQorDQorDQorDQorDQorc3Rh dGljIHZvaWQgcmVzdG9yZV9zbGF2ZXMoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYpDQorew0K KwlzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2Ow0KKwlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVb Ml07DQorCWludCBpOw0KKwlpbnQgcmVzOw0KKw0KKwloc3JfcHJpdiA9IG5ldGRldl9wcml2KGhz cl9kZXYpOw0KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQ0KKwkJc2xhdmVbaV0gPSBoc3JfcHJp di0+c2xhdmVfZGF0YVtpXS5kZXY7DQorDQorCXJ0bmxfbG9jaygpOw0KKw0KKwkvKiBSZXN0b3Jl IHByb21pc2N1aXR5ICovDQorCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsNCisJCWlmICghaHNy X3ByaXYtPnNsYXZlX2RhdGFbaV0ucHJvbWlzYykNCisJCQljb250aW51ZTsNCisJCXJlcyA9IGRl dl9zZXRfcHJvbWlzY3VpdHkoc2xhdmVbaV0sDQorCQkJCQktaHNyX3ByaXYtPnNsYXZlX2RhdGFb aV0ucHJvbWlzYyk7DQorCQlpZiAocmVzKQ0KKwkJCXByX2luZm8oIkhTUjogQ2Fubm90IHJlc3Rv cmUgcHJvbWlzY3VpdHkgKCVzLCAlZClcbiIsDQorCQkJCQkJCXNsYXZlW2ldLT5uYW1lLA0KKwkJ CQkJCQlyZXMpOw0KKwl9DQorDQorCS8qIFJlc3RvcmUgdXAgc3RhdGUgKi8NCisvKg0KKwlmb3Ig KGkgPSAwOyBpIDwgMjsgaSsrKQ0KKwkJaWYgKGhzcl9wcml2LT5zbGF2ZV9kYXRhW2ldLndhc191 cCkNCisJCQlkZXZfb3BlbihzbGF2ZVtpXSk7DQorCQllbHNlDQorCQkJZGV2X2Nsb3NlKHNsYXZl W2ldKTsNCisqLw0KKwlydG5sX3VubG9jaygpOw0KK30NCisNCitzdGF0aWMgdm9pZCByZWNsYWlt X2hzcl9kZXYoc3RydWN0IHJjdV9oZWFkICpyaCkNCit7DQorCXN0cnVjdCBoc3JfcHJpdiAqaHNy X3ByaXY7DQorDQorCWhzcl9wcml2ID0gY29udGFpbmVyX29mKHJoLCBzdHJ1Y3QgaHNyX3ByaXYs IHJjdV9oZWFkKTsNCisJZnJlZV9uZXRkZXYoaHNyX3ByaXYtPmRldik7DQorfQ0KKw0KKy8qDQor ICogQWNjb3JkaW5nIHRvIGNvbW1lbnRzIGluIHRoZSBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QgbmV0 X2RldmljZSwgdGhpcyBmdW5jdGlvbg0KKyAqIGlzICJDYWxsZWQgZnJvbSB1bnJlZ2lzdGVyLCBj YW4gYmUgdXNlZCB0byBjYWxsIGZyZWVfbmV0ZGV2Ii4gT2sgdGhlbi4uLg0KKyAqLw0KK3N0YXRp YyB2b2lkIGhzcl9kZXZfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2RldikNCit7DQor CXN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXY7DQorDQorCWhzcl9wcml2ID0gbmV0ZGV2X3ByaXYo aHNyX2Rldik7DQorDQorCWRlbF90aW1lcigmaHNyX3ByaXYtPmFubm91bmNlX3RpbWVyKTsNCisJ dW5yZWdpc3Rlcl9oc3JfbWFzdGVyKGhzcl9wcml2KTsgICAgLyogY2FsbHMgbGlzdF9kZWxfcmN1 IG9uIGhzcl9wcml2ICovDQorCXJlc3RvcmVfc2xhdmVzKGhzcl9kZXYpOw0KKwljYWxsX3JjdSgm aHNyX3ByaXYtPnJjdV9oZWFkLCByZWNsYWltX2hzcl9kZXYpOyAgIC8qIHJlY2xhaW0gaHNyX3By aXYgKi8NCit9DQorDQorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoc3JfZGV2aWNlX29w cyA9IHsNCisJLm5kb19vcGVuID0gaHNyX2Rldl9vcGVuLA0KKwkubmRvX3N0b3AgPSBoc3JfZGV2 X2Nsb3NlLA0KKwkubmRvX3N0YXJ0X3htaXQgPSBoc3JfZGV2X3htaXQsDQorfTsNCisNCisNCit2 b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCit7DQorCXJhbmRvbV9l dGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOw0KKw0KKwlldGhlcl9zZXR1cChkZXYpOw0KKwlkZXYt PmhlYWRlcl9vcHMJCSA9ICZoc3JfaGVhZGVyX29wczsNCisJZGV2LT5uZXRkZXZfb3BzCQkgPSAm aHNyX2RldmljZV9vcHM7DQorCWRldi0+aGFyZF9oZWFkZXJfbGVuCSs9IEhTUl9UQUdMRU47DQor CWRldi0+bXR1CQktPSBIU1JfVEFHTEVOOw0KKwlkZXYtPnR4X3F1ZXVlX2xlbgkgPSAwOw0KKw0K KwlkZXYtPmRlc3RydWN0b3IgPSBoc3JfZGV2X2Rlc3Ryb3k7DQorfQ0KKw0KKw0KKy8qDQorICog SWYgZGV2IGlzIGEgSFNSIG1hc3RlciwgcmV0dXJuIDE7IG90aGVyd2lzZSwgcmV0dXJuIDAuDQor ICovDQoraW50IGlzX2hzcl9tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCit7DQorCXJl dHVybiAoZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RhcnRfeG1pdCA9PSBoc3JfZGV2X3htaXQpOw0K K30NCisNCitzdGF0aWMgaW50IGNoZWNrX3NsYXZlX29rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYp DQorew0KKwkvKiBEb24ndCBhbGxvdyBIU1Igb24gbm9uLWV0aGVybmV0IGxpa2UgZGV2aWNlcyAq Lw0KKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spIHx8IChkZXYtPnR5cGUgIT0gQVJQ SFJEX0VUSEVSKSB8fA0KKwkJCQkJCShkZXYtPmFkZHJfbGVuICE9IEVUSF9BTEVOKSkgew0KKwkJ cHJfaW5mbygiJXM6IENhbm5vdCBlbnNsYXZlIGxvb3BiYWNrIG9yIG5vbi1ldGhlcm5ldCBkZXZp Y2VcbiIsDQorCQkJCQkJCQlkZXYtPm5hbWUpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisN CisJLyogRG9uJ3QgYWxsb3cgZW5zbGF2aW5nIGhzciBkZXZpY2VzICovDQorCWlmIChpc19oc3Jf bWFzdGVyKGRldikpIHsNCisJCXByX2luZm8oIiVzOiBEb24ndCB0cnkgdG8gY3JlYXRlIHRyZWVz IG9mIGhzciBkZXZpY2VzIVxuIiwNCisJCQkJCQkJCWRldi0+bmFtZSk7DQorCQlyZXR1cm4gLUVM T09QOw0KKwl9DQorDQorCS8qIEZJWE1FOiBXaGF0IGFib3V0IFZMQU4gZGV2aWNlcywgYm9uZGVk IGRldmljZXMsIGV0Yz8gKi8NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBoc3JfZGV2X2Zp bmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xh dmVbMl0pDQorew0KKwlzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2Ow0KKwlpbnQgaTsNCisJaW50 IHJlczsNCisNCisJaHNyX3ByaXYgPSBuZXRkZXZfcHJpdihoc3JfZGV2KTsNCisJaHNyX3ByaXYt PmRldiA9IGhzcl9kZXY7DQorCUlOSVRfTElTVF9IRUFEKCZoc3JfcHJpdi0+bm9kZV9kYik7DQor CUlOSVRfTElTVF9IRUFEKCZoc3JfcHJpdi0+c2VsZl9ub2RlX2RiKTsNCisJZm9yIChpID0gMDsg aSA8IDI7IGkrKykNCisJCWhzcl9wcml2LT5zbGF2ZV9kYXRhW2ldLmRldiA9IHNsYXZlW2ldOw0K Kw0KKwlzcGluX2xvY2tfaW5pdCgmaHNyX3ByaXYtPnNlcWxvY2spOw0KKwloc3JfcHJpdi0+c2Vx dWVuY2VfbnIgPSAwOw0KKw0KKwlpbml0X3RpbWVyKCZoc3JfcHJpdi0+YW5ub3VuY2VfdGltZXIp Ow0KKwloc3JfcHJpdi0+YW5ub3VuY2VfdGltZXIuZnVuY3Rpb24gPSBoc3JfYW5ub3VuY2U7DQor CWhzcl9wcml2LT5hbm5vdW5jZV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGhzcl9wcml2 Ow0KKw0KKw0KKy8qDQorICogRklYTUU6IGRvIEkgbmVlZCB0byBzZXQgdGhlIHZhbHVlIG9mIHRo ZXNlPw0KKyAqDQorICogLSBoc3JfZGV2LT5mbGFncw0KKyAqIC0gaHNyX2Rldi0+cHJpdl9mbGFn cw0KKyAqLw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7DQorCQlyZXMgPSBjaGVja19z bGF2ZV9vayhzbGF2ZVtpXSk7DQorCQlpZiAocmVzKQ0KKwkJCXJldHVybiByZXM7DQorCX0NCisN CisJaHNyX2Rldi0+ZmVhdHVyZXMgPSBzbGF2ZVswXS0+ZmVhdHVyZXMgJiBzbGF2ZVsxXS0+ZmVh dHVyZXM7DQorCWhzcl9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsgLyogUHJldmVudCBy ZWN1cnNpdmUgdHggbG9ja2luZyAqLw0KKw0KKwkvKiBTYXZlL2luaXQgZGF0YSBuZWVkZWQgZm9y IHJlc3RvcmUgKi8NCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgew0KKwkJaHNyX3ByaXYtPnNs YXZlX2RhdGFbaV0ud2FzX3VwID0gc2xhdmVbaV0tPmZsYWdzICYgSUZGX1VQOw0KKwkJaHNyX3By aXYtPnNsYXZlX2RhdGFbaV0ucHJvbWlzYyA9IDA7DQorCX0NCisNCisJLyogU2V0IGhzcl9kZXYn cyBNQUMgYWRkcmVzcyB0byB0aGF0IG9mIG1hY19zbGF2ZTEgKi8NCisJbWVtY3B5KGhzcl9kZXYt PmRldl9hZGRyLCBoc3JfcHJpdi0+c2xhdmVfZGF0YVswXS5kZXYtPmRldl9hZGRyLA0KKwkJCQkJ CQloc3JfZGV2LT5hZGRyX2xlbik7DQorDQorCS8qIE1UVSAqLw0KKwlmb3IgKGkgPSAwOyBpIDwg MjsgaSsrKQ0KKwkJaWYgKHNsYXZlW2ldLT5tdHUgPCBoc3JfZGV2LT5tdHUpDQorCQkJaHNyX2Rl di0+bXR1ID0gc2xhdmVbaV0tPm10dTsNCisNCisJLyogTWFrZSBzdXJlIHRoZSAxc3QgY2FsbCB0 byBuZXRpZl9jYXJyaWVyX29uKCkgZ2V0cyB0aHJvdWdoICovDQorCW5ldGlmX2NhcnJpZXJfb2Zm KGhzcl9kZXYpOw0KKw0KKwkvKiBQcm9taXNjdWl0eSAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgMjsg aSsrKSB7DQorCQlyZXMgPSBkZXZfc2V0X3Byb21pc2N1aXR5KHNsYXZlW2ldLCAxKTsNCisJCWlm IChyZXMpIHsNCisJCQlwcl9pbmZvKCJIU1I6IENhbm5vdCBzZXQgcHJvbWlzY3VvdXMgbW9kZSAo JXMsICVkKVxuIiwNCisJCQkJCQkJCXNsYXZlW2ldLT5uYW1lLA0KKwkJCQkJCQkJcmVzKTsNCisJ CQlnb3RvIGZhaWw7DQorCQl9DQorCQkvKiBSZW1lbWJlciB3aGF0IHdlIGhhdmUgZG9uZSBzbyB3 ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciAqLw0KKwkJaHNyX3ByaXYtPnNsYXZlX2RhdGFbaV0ucHJv bWlzYyA9IDE7DQorCX0NCisNCisJLyogTWFrZSBzdXJlIHdlIHJlY29nbml6ZSBmcmFtZXMgZnJv bSBvdXJzZWx2ZXMgaW4gaHNyX3JjdigpICovDQorCXJlcyA9IGZyYW1lcmVmX2NyZWF0ZV9zZWxm X25vZGUoJmhzcl9wcml2LT5zZWxmX25vZGVfZGIsDQorCQkJCQloc3JfZGV2LT5kZXZfYWRkciwN CisJCQkJCWhzcl9wcml2LT5zbGF2ZV9kYXRhWzFdLmRldi0+ZGV2X2FkZHIpOw0KKwlpZiAocmVz IDwgMCkNCisJCWdvdG8gZmFpbDsNCisNCisJcmVzID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGhzcl9k ZXYpOw0KKwlpZiAocmVzKQ0KKwkJZ290byBmYWlsOw0KKw0KKwlyZWdpc3Rlcl9oc3JfbWFzdGVy KGhzcl9wcml2KTsNCisNCisJcmV0dXJuIDA7DQorDQorZmFpbDoNCisJcmVzdG9yZV9zbGF2ZXMo aHNyX2Rldik7DQorCXJldHVybiByZXM7DQorfQ0KZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2Rl dmljZS5oIGIvbmV0L2hzci9oc3JfZGV2aWNlLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwLi5hNzU5NmEyDQotLS0gL2Rldi9udWxsDQorKysgYi9uZXQvaHNyL2hzcl9kZXZp Y2UuaA0KQEAgLTAsMCArMSwyNyBAQA0KKy8qDQorICogQ29weXJpZ2h0IDIwMTEtMjAxMiBBdXRy b25pY2EgRmlyZSBhbmQgU2VjdXJpdHkgQVMNCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQorICog dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUNCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pDQorICogYW55IGxhdGVyIHZl cnNpb24uDQorICoNCisgKiBBdXRob3Iocyk6DQorICoJMjAxMS0yMDEyIEFydmlkIEJyb2Rpbiwg YXJ2aWQuYnJvZGluQHhkaW4uY29tDQorICovDQorDQorI2lmbmRlZiBfX0hTUl9ERVZJQ0VfSA0K KyNkZWZpbmUgX19IU1JfREVWSUNFX0gNCisNCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+ DQorDQordm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KK2ludCBo c3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2Rl dmljZSAqc2xhdmVbMl0pOw0KK3ZvaWQgaHNyX3NldF9vcGVyc3RhdGUoc3RydWN0IG5ldF9kZXZp Y2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZTEsDQorCQkJCQkJc3RydWN0IG5l dF9kZXZpY2UgKnNsYXZlMik7DQordm9pZCBoc3Jfc2V0X2NhcnJpZXIoc3RydWN0IG5ldF9kZXZp Y2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZTEsDQorCQkJCQkJc3RydWN0IG5l dF9kZXZpY2UgKnNsYXZlMik7DQordm9pZCBoc3JfY2hlY2tfYW5ub3VuY2Uoc3RydWN0IG5ldF9k ZXZpY2UgKmhzcl9kZXYsIGludCBvbGRfb3BlcnN0YXRlKTsNCitpbnQgaXNfaHNyX21hc3Rlcihz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCisNCisjZW5kaWYgLyogX19IU1JfREVWSUNFX0ggKi8N CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jIGIvbmV0L2hzci9oc3JfZnJhbWVy ZWcuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmY5MmJjOWYNCi0tLSAv ZGV2L251bGwNCisrKyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmMNCkBAIC0wLDAgKzEsMzI4IEBA DQorLyoNCisgKiBDb3B5cmlnaHQgMjAxMS0yMDEyIEF1dHJvbmljYSBGaXJlIGFuZCBTZWN1cml0 eSBBUw0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQNCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQ0KKyAq IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikNCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIEF1dGhv cihzKToNCisgKgkyMDExLTIwMTIgQXJ2aWQgQnJvZGluLCBhcnZpZC5icm9kaW5AeGRpbi5jb20N CisgKg0KKyAqIFRoZSBIU1Igc3BlYyBzYXlzIG5ldmVyIHRvIGZvcndhcmQgdGhlIHNhbWUgZnJh bWUgdHdpY2Ugb24gdGhlIHNhbWUNCisgKiBpbnRlcmZhY2UuIEEgZnJhbWUgaXMgaWRlbnRpZmll ZCBieSBpdHMgc291cmNlIE1BQyBhZGRyZXNzIGFuZCBpdHMgSFNSDQorICogc2VxdWVuY2UgbnVt YmVyLiBUaGlzIGNvZGUga2VlcHMgdHJhY2sgb2Ygc2VuZGVycyBhbmQgdGhlaXIgc2VxdWVuY2Ug bnVtYmVycw0KKyAqIHRvIGFsbG93IGZpbHRlcmluZyBvZiBkdXBsaWNhdGUgZnJhbWVzLg0KKyAq Lw0KKw0KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPg0KKyNpbmNsdWRlIDxsaW51eC9ldGhl cmRldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Jj dWxpc3QuaD4NCisjaW5jbHVkZSAiaHNyX3ByaXZhdGUuaCINCisjaW5jbHVkZSAiaHNyX2ZyYW1l cmVnLmgiDQorI2luY2x1ZGUgImhzcl9uZXRsaW5rLmgiDQorDQorDQorLyoNCisJVE9ETzogdXNl IGhhc2ggbGlzdHMgZm9yIG1hYyBhZGRyZXNzZXMgKGxpbnV4L2poYXNoLmgpPw0KKyovDQorDQor c3RydWN0IG5vZGVfZW50cnkgew0KKwlzdHJ1Y3QgbGlzdF9oZWFkIG1hY19saXN0Ow0KKwl1bnNp Z25lZCBjaGFyCU1hY0FkZHJlc3NBW0VUSF9BTEVOXTsNCisJdW5zaWduZWQgY2hhcglNYWNBZGRy ZXNzQltFVEhfQUxFTl07DQorCXVuc2lnbmVkIGxvbmcJdGltZV9pbltIU1JfTUFYX1NMQVZFXTsN CisJdTE2CQlzZXFfb3V0W0hTUl9NQVhfREVWXTsNCisJc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFk Ow0KK307DQorDQorDQordW5zaWduZWQgY2hhciAqbm9kZV9nZXRfYWRkcihzdHJ1Y3Qgbm9kZV9l bnRyeSAqbm9kZSkNCit7DQorCXJldHVybiBub2RlLT5NYWNBZGRyZXNzQTsNCit9DQorDQorDQor LyoNCisgKiBTZWFyY2ggZm9yIG1hYyBlbnRyeS4gQ2FsbGVyIG11c3QgaG9sZCByY3UgcmVhZCBs b2NrLg0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3Qgbm9kZV9lbnRyeSAqZmluZF9ub2RlX2J5X0FkZHJB KHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsDQorCQkJCQkJdW5zaWduZWQgY2hhciBhZGRyW0VU SF9BTEVOXSkNCit7DQorCXN0cnVjdCBub2RlX2VudHJ5ICpub2RlOw0KKw0KKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3JjdShub2RlLCBub2RlX2RiLCBtYWNfbGlzdCkNCisJCWlmICghY29tcGFyZV9l dGhlcl9hZGRyKG5vZGUtPk1hY0FkZHJlc3NBLCBhZGRyKSkNCisJCQlyZXR1cm4gbm9kZTsNCisN CisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KKy8qDQorICogU2VhcmNoIGZvciBtYWMgZW50cnkuIENh bGxlciBtdXN0IGhvbGQgcmN1IHJlYWQgbG9jay4NCisgKi8NCitzdGF0aWMgc3RydWN0IG5vZGVf ZW50cnkgKmZpbmRfbm9kZV9ieV9BZGRyQihzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLA0KKwkJ CQkJCXVuc2lnbmVkIGNoYXIgYWRkcltFVEhfQUxFTl0pDQorew0KKwlzdHJ1Y3Qgbm9kZV9lbnRy eSAqbm9kZTsNCisNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgbm9kZV9kYiwgbWFj X2xpc3QpDQorCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihub2RlLT5NYWNBZGRyZXNzQiwgYWRk cikpDQorCQkJcmV0dXJuIG5vZGU7DQorDQorCXJldHVybiBOVUxMOw0KK30NCisNCisvKg0KKyAq IFNlYXJjaCBmb3IgbWFjIGVudHJ5LiBDYWxsZXIgbXVzdCBob2xkIHJjdSByZWFkIGxvY2suDQor ICovDQorc3RydWN0IG5vZGVfZW50cnkgKmZyYW1lcmVnX2ZpbmRfbm9kZShzdHJ1Y3QgbGlzdF9o ZWFkICpub2RlX2RiLA0KKwkJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0 IG5vZGVfZW50cnkgKm5vZGU7DQorCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsNCisNCisJaWYgKCFz a2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpDQorCQlyZXR1cm4gTlVMTDsNCisNCisJZXRoaGRy ID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX21hY19oZWFkZXIoc2tiKTsNCisNCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9yY3Uobm9kZSwgbm9kZV9kYiwgbWFjX2xpc3QpIHsNCisJCWlmICghY29tcGFy ZV9ldGhlcl9hZGRyKG5vZGUtPk1hY0FkZHJlc3NBLCBldGhoZHItPmhfc291cmNlKSkNCisJCQly ZXR1cm4gbm9kZTsNCisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKG5vZGUtPk1hY0FkZHJlc3NC LCBldGhoZHItPmhfc291cmNlKSkNCisJCQlyZXR1cm4gbm9kZTsNCisJfQ0KKw0KKwlyZXR1cm4g TlVMTDsNCit9DQorDQorLyoNCisgKiBIZWxwZXIgZm9yIGRldmljZSBpbml0OyB0aGUgc2VsZl9u b2RlX2RiIGlzIHVzZWQgaW4gaHNyX3JjdigpIHRvIHJlY29nbml6ZQ0KKyAqIGZyYW1lcyBmcm9t IHNlbGYgdGhhdCdzIGJlZW4gbG9vcGVkIG92ZXIgdGhlIEhTUiByaW5nLg0KKyAqLw0KK2ludCBm cmFtZXJlZl9jcmVhdGVfc2VsZl9ub2RlKHN0cnVjdCBsaXN0X2hlYWQgKnNlbGZfbm9kZV9kYiwN CisJCQkJCQl1bnNpZ25lZCBjaGFyIGFkZHJfYVtFVEhfQUxFTl0sDQorCQkJCQkJdW5zaWduZWQg Y2hhciBhZGRyX2JbRVRIX0FMRU5dKQ0KK3sNCisJc3RydWN0IG5vZGVfZW50cnkgKm5vZGU7DQor DQorCW5vZGUgPSBrbWFsbG9jKHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOw0KKwlpZiAoIW5v ZGUpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJbWVtY3B5KG5vZGUtPk1hY0FkZHJlc3NBLCBh ZGRyX2EsIEVUSF9BTEVOKTsNCisJbWVtY3B5KG5vZGUtPk1hY0FkZHJlc3NCLCBhZGRyX2IsIEVU SF9BTEVOKTsNCisNCisJbGlzdF9hZGRfdGFpbF9yY3UoJm5vZGUtPm1hY19saXN0LCBzZWxmX25v ZGVfZGIpOw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IGZyYW1lcmVnX21lcmdlX25vZGUoc3Ry dWN0IGhzcl9wcml2ICpoc3JfcHJpdiwgZW51bSBoc3JfZGV2X2lkeCBkZXZfaWR4LA0KKwkJCQkJ CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IGV0aGhkciAqZXRoaGRyOw0KKwlz dHJ1Y3QgaHNyX3N1cGVydmlzaW9uX3RhZyAqaHNyX3N0YWc7DQorCXN0cnVjdCBub2RlX2VudHJ5 ICpub2RlOw0KKwlpbnQgaTsNCisJaW50IGZvdW5kOw0KKw0KKwlldGhoZHIgPSAoc3RydWN0IGV0 aGhkciAqKSBza2JfbWFjX2hlYWRlcihza2IpOw0KKwloc3Jfc3RhZyA9IChzdHJ1Y3QgaHNyX3N1 cGVydmlzaW9uX3RhZyAqKQ0KKwkJCQkoJigoc3RydWN0IGhzcl9ldGhoZHIgKikgZXRoaGRyKS0+ aHNyX3RhZyk7DQorDQorCWZvdW5kID0gMTsNCisJcmN1X3JlYWRfbG9jaygpOw0KKwlub2RlID0g ZmluZF9ub2RlX2J5X0FkZHJBKCZoc3JfcHJpdi0+bm9kZV9kYiwgaHNyX3N0YWctPk1hY0FkZHJl c3NBKTsNCisJaWYgKCFub2RlKSB7DQorCQlyY3VfcmVhZF91bmxvY2soKTsNCisJCWZvdW5kID0g MDsNCisJCW5vZGUgPSBrbWFsbG9jKHNpemVvZigqbm9kZSksIEdGUF9BVE9NSUMpOw0KKwkJaWYg KCFub2RlKQ0KKwkJCXJldHVybiAtRU5PTUVNOw0KKw0KKwkJbWVtY3B5KG5vZGUtPk1hY0FkZHJl c3NBLCBoc3Jfc3RhZy0+TWFjQWRkcmVzc0EsIEVUSF9BTEVOKTsNCisJCW1lbWNweShub2RlLT5N YWNBZGRyZXNzQiwgZXRoaGRyLT5oX3NvdXJjZSwgRVRIX0FMRU4pOw0KKw0KKwkJZm9yIChpID0g MDsgaSA8IEhTUl9NQVhfU0xBVkU7IGkrKykNCisJCQlub2RlLT50aW1lX2luW2ldID0gMDsNCisJ CWZvciAoaSA9IDA7IGkgPCBIU1JfTUFYX0RFVjsgaSsrKQ0KKwkJCW5vZGUtPnNlcV9vdXRbaV0g PSAwOw0KKy8qDQorCQlwcmludGsoS0VSTl9JTkZPICJIU1I6IEFkZGVkIG5vZGUgJXBNIC8gJXBN XG4iLA0KKwkJCQkJCQlub2RlLT5NYWNBZGRyZXNzQSwNCisJCQkJCQkJbm9kZS0+TWFjQWRkcmVz c0IpOw0KKyovDQorCX0NCisNCisJLyogTWVyZ2Ugbm9kZSBpZiBpdCdzIFBJQ1NfU1VCUyBjYXBh YmxlICovDQorCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoaHNyX3N0YWctPk1hY0FkZHJlc3NBLCBl dGhoZHItPmhfc291cmNlKSkgew0KKwkJbWVtY3B5KG5vZGUtPk1hY0FkZHJlc3NCLCBldGhoZHIt Pmhfc291cmNlLCBFVEhfQUxFTik7DQorLyoNCisJCXByaW50ayhLRVJOX0lORk8gIkhTUjogTWVy Z2VkIG5vZGUgJXBNIC8gJXBNXG4iLA0KKwkJCQkJCQlub2RlLT5NYWNBZGRyZXNzQSwNCisJCQkJ CQkJbm9kZS0+TWFjQWRkcmVzc0IpOw0KKyovDQorCX0NCisNCisJbm9kZS0+dGltZV9pbltkZXZf aWR4XSA9IGppZmZpZXM7DQorDQorCWlmIChmb3VuZCkNCisJCXJjdV9yZWFkX3VubG9jaygpOw0K KwllbHNlDQorCQlsaXN0X2FkZF90YWlsX3JjdSgmbm9kZS0+bWFjX2xpc3QsICZoc3JfcHJpdi0+ bm9kZV9kYik7DQorDQorCXJldHVybiAwOw0KK30NCisNCisNCit2b2lkIGhzcl9hZGRyX3N1YnN0 KHN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXYsIHN0cnVjdCBza19idWZmICpza2IpDQorew0KKwlz dHJ1Y3QgZXRoaGRyICpldGhoZHI7DQorCXN0cnVjdCBub2RlX2VudHJ5ICpub2RlOw0KKw0KKwll dGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKSBza2JfbWFjX2hlYWRlcihza2IpOw0KKwlyY3VfcmVh ZF9sb2NrKCk7DQorCW5vZGUgPSBmaW5kX25vZGVfYnlfQWRkckIoJmhzcl9wcml2LT5ub2RlX2Ri LCBldGhoZHItPmhfc291cmNlKTsNCisJaWYgKG5vZGUpIHsNCisvKg0KKwkJcHJpbnRrKEtFUk5f SU5GTyAiSFNSOiBTdWJzdGl0dXRpbmcgJXBNIC0+ICVwTVxuIiwNCisJCQkJCQkJZXRoaGRyLT5o X3NvdXJjZSwNCisJCQkJCQkJbm9kZS0+TWFjQWRkcmVzc0EpOw0KKyovDQorCQltZW1jcHkoZXRo aGRyLT5oX3NvdXJjZSwgbm9kZS0+TWFjQWRkcmVzc0EsIEVUSF9BTEVOKTsNCisJfSAvKmVsc2UN CisJCXByaW50ayhLRVJOX0lORk8gIkhTUjogTm90IHN1YnN0aXR1dGluZyBhZGRyICVwTVxuIiwN CisJCQkJCQkJZXRoaGRyLT5oX3NvdXJjZSk7DQorKi8NCisJcmN1X3JlYWRfdW5sb2NrKCk7DQor fQ0KKw0KKw0KKw0KKy8qDQorICogYWJvdmUoYSwgYikgLSByZXR1cm4gMSBpZiBhID4gYiwgMCBv dGhlcndpc2UuDQorICogVXNlcyBDIDE2LWJpdCB1bnNpZ25lZCBhcml0aG1ldGljLCB3aXRoIGRp ZmZlcmVuY2VzID4gKDEgPDwgMTUpIGludGVycHJldGVkDQorICogYXMgbmVnYXRpdmUuDQorICov DQorI2RlZmluZQlNQVhfUkFOR0VfRElGRgkoMSA8PCAxNSkNCitzdGF0aWMgaW50IGFib3ZlKHUx NiBhLCB1MTYgYikNCit7DQorCWlmICgodTE2KSAoYSAtIGIpID09ICh1MTYpIChiIC0gYSkpDQor CQlyZXR1cm4gKGEgPiBiKTsNCisJcmV0dXJuICgoKHUxNikgKGEgLSBiKSA+ICh1MTYpIDApICYm DQorCQkoKHUxNikgKGEgLSBiKSA8PSAodTE2KSBNQVhfUkFOR0VfRElGRikpOw0KK30NCisjZGVm aW5lIGJlbG93KGEsIGIpCQlhYm92ZSgoYiksIChhKSkNCisjZGVmaW5lIGFib3ZlX29yX2VxdWFs KGEsIGIpCSghYmVsb3coKGEpLCAoYikpKQ0KKyNkZWZpbmUgYmVsb3dfb3JfZXF1YWwoYSwgYikJ KCFhYm92ZSgoYSksIChiKSkpDQorDQorDQordm9pZCBmcmFtZXJlZ19mcmFtZV9pbihzdHJ1Y3Qg bm9kZV9lbnRyeSAqbm9kZSwgZW51bSBoc3JfZGV2X2lkeCBkZXZfaWR4KQ0KK3sNCisJaWYgKChk ZXZfaWR4IDwgMCkgfHwgKGRldl9pZHggPj0gSFNSX01BWF9ERVYpKSB7DQorCQlXQVJOX09OKDEp Ow0KKwkJcmV0dXJuOw0KKwl9DQorLy8JcHJpbnRrKEtFUk5fSU5GTyAibm9kZSAlcE07IGRldl9p ZHggJWRcbiIsIG5vZGUtPk1hY0FkZHJlc3NBLCBkZXZfaWR4KTsNCisJbm9kZS0+dGltZV9pbltk ZXZfaWR4XSA9IGppZmZpZXM7DQorfQ0KKw0KKy8qDQorICogUGFyYW1ldGVyczoNCisgKgknc2ti JyBpcyBhIEhTUiBFdGhlcm5ldCBmcmFtZSAod2l0aCBhIEhTUiB0YWcgaW5zZXJ0ZWQpLCB3aXRo IGEgdmFsaWQNCisgKglldGhoZHItPmhfc291cmNlIGFkZHJlc3MgYW5kIHNrYi0+bWFjX2hlYWRl ciBzZXQuDQorICoNCisgKiBSZXR1cm46DQorICoJIDEgaWYgZnJhbWUgY2FuIGJlIHNob3duIHRv IGhhdmUgYmVlbiBzZW50IHJlY2VudGx5IG9uIHRoaXMgaW50ZXJmYWNlLA0KKyAqCSAwIG90aGVy d2lzZSwgb3INCisgKgkgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBlcnJvcg0KKyAqLw0KK2ludCBm cmFtZXJlZ19mcmFtZV9vdXQoc3RydWN0IG5vZGVfZW50cnkgKm5vZGUsIGVudW0gaHNyX2Rldl9p ZHggZGV2X2lkeCwNCisJCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBo c3JfZXRoaGRyICpoc3JfZXRoaGRyOw0KKw0KKwlpZiAoKGRldl9pZHggPCAwKSB8fCAoZGV2X2lk eCA+PSBIU1JfTUFYX0RFVikpIHsNCisJCVdBUk5fT04oMSk7DQorCQlyZXR1cm4gLUVJTlZBTDsN CisJfQ0KKwlpZiAoIXNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSkgew0KKwkJcHJpbnRrKEtF Uk5fSU5GTyAiJXM6JWQ6IE1BQyBoZWFkZXIgbm90IHNldFxuIiwgX19mdW5jX18sIF9fTElORV9f KTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorCWhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9l dGhoZHIgKikgc2tiX21hY19oZWFkZXIoc2tiKTsNCisNCisJaWYgKGJlbG93X29yX2VxdWFsKGhz cl9ldGhoZHItPmhzcl90YWcuc2VxdWVuY2VfbnIsDQorCQkJCQkJCW5vZGUtPnNlcV9vdXRbZGV2 X2lkeF0pKQ0KKwkJcmV0dXJuIDE7DQorDQorCW5vZGUtPnNlcV9vdXRbZGV2X2lkeF0gPSBoc3Jf ZXRoaGRyLT5oc3JfdGFnLnNlcXVlbmNlX25yOw0KKwlyZXR1cm4gMDsNCit9DQorDQorDQorc3Rh dGljIHZvaWQgbm9kZV9lbnRyeV9yZWNsYWltKHN0cnVjdCByY3VfaGVhZCAqcmgpDQorew0KKwlr ZnJlZShjb250YWluZXJfb2YocmgsIHN0cnVjdCBub2RlX2VudHJ5LCByY3VfaGVhZCkpOw0KK30N CisNCisvKg0KKyAqIFJlbW92ZSBzdGFsZSBzZXF1ZW5jZV9uciByZWNvcmRzLiBDYWxsZWQgYnkg dGltZXIgZXZlcnkNCisgKiBIU1JfTElGRV9DSEVDS19JTlRFUlZBTCAodHdvIHNlY29uZHMgb3Ig c28pLiBUaGlzIGlzIGFsc28gdGhlIG9ubHkgZnVuY3Rpb24NCisgKiB0aGF0IHJlbW92ZXMgbWFj X2VudHJpZXM7IGl0IHNob3VsZG4ndCBuZWVkIHRvIGJlIHJjdV9yZWFkX2xvY2soKTplZC4NCisg Ki8NCit2b2lkIGZyYW1lcmVnX3BydW5lX25vZGVzKHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIp DQorew0KKwlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbm9kZV9lbnRyeSwgKm5vZGVfZW50cnlfbmV4dDsN CisJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2Fm ZShub2RlX2VudHJ5LCBub2RlX2VudHJ5X25leHQsIG5vZGVfZGIsIG1hY19saXN0KSB7DQorDQor CQl0aW1lc3RhbXAgPSBtYXgobm9kZV9lbnRyeS0+dGltZV9pbltIU1JfREVWX1NMQVZFMV0sDQor CQkJCW5vZGVfZW50cnktPnRpbWVfaW5bSFNSX0RFVl9TTEFWRTJdKTsNCisNCisJCS8qIFdhcm4g b25seSBhcyBsb25nIGFzIHdlIGdldCBmcmFtZXMgYXQgYWxsICovDQorCQlpZiAodGltZV9pc19h ZnRlcl9qaWZmaWVzKHRpbWVzdGFtcCArDQorCQkJCQltc2Vjc190b19qaWZmaWVzKDEuNSpNQVhf U0xBVkVfRElGRikpKSB7DQorDQorCQkJLyogQ2hlY2sgZm9yIG9wZW4gcmluZyAqLw0KKwkJCWlm ICh0aW1lX2FmdGVyKG5vZGVfZW50cnktPnRpbWVfaW5bSFNSX0RFVl9TTEFWRTJdLA0KKwkJCQkJ bm9kZV9lbnRyeS0+dGltZV9pbltIU1JfREVWX1NMQVZFMV0gKw0KKwkJCQkJbXNlY3NfdG9famlm ZmllcyhNQVhfU0xBVkVfRElGRikpKQ0KKwkJCQloc3JfbmxfcmluZ2Vycm9yKG5vZGVfZW50cnkt Pk1hY0FkZHJlc3NBLCBIU1JfREVWX1NMQVZFMSk7DQorCQkJZWxzZSBpZiAodGltZV9hZnRlcihu b2RlX2VudHJ5LT50aW1lX2luW0hTUl9ERVZfU0xBVkUxXSwNCisJCQkJCW5vZGVfZW50cnktPnRp bWVfaW5bSFNSX0RFVl9TTEFWRTJdICsNCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoTUFYX1NMQVZF X0RJRkYpKSkNCisJCQkJaHNyX25sX3JpbmdlcnJvcihub2RlX2VudHJ5LT5NYWNBZGRyZXNzQSwg SFNSX0RFVl9TTEFWRTIpOw0KKwkJfQ0KKw0KKwkJLyogUHJ1bmUgb2xkIGVudHJpZXMgKi8NCisJ CWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHRpbWVzdGFtcCArDQorCQkJCQltc2Vjc190b19q aWZmaWVzKEhTUl9OT0RFX0ZPUkdFVF9USU1FKSkpIHsNCisJCQloc3Jfbmxfbm9kZWRvd24obm9k ZV9lbnRyeS0+TWFjQWRkcmVzc0EpOw0KKwkJCWxpc3RfZGVsX3JjdSgmbm9kZV9lbnRyeS0+bWFj X2xpc3QpOw0KKwkJCWNhbGxfcmN1KCZub2RlX2VudHJ5LT5yY3VfaGVhZCwgbm9kZV9lbnRyeV9y ZWNsYWltKTsNCisJCX0NCisJfQ0KK30NCisNCisNCit2b2lkIGZyYW1lcmVnX2dldF9ub2RlX3Rp bWVzKHN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXYsDQorCQkJCXVuc2lnbmVkIGNoYXIgYWRkcltF VEhfQUxFTl0sDQorCQkJCXVuc2lnbmVkIGxvbmcgKnRpbWUxLCB1bnNpZ25lZCBsb25nICp0aW1l MikNCit7DQorCXN0cnVjdCBub2RlX2VudHJ5ICpub2RlOw0KKw0KKwlyY3VfcmVhZF9sb2NrKCk7 DQorCW5vZGUgPSBmaW5kX25vZGVfYnlfQWRkckEoJmhzcl9wcml2LT5ub2RlX2RiLCBhZGRyKTsN CisJaWYgKCFub2RlKSB7DQorCQkqdGltZTEgPSAwOw0KKwkJKnRpbWUyID0gMDsNCisJfSBlbHNl IHsNCisJCSp0aW1lMSA9IG5vZGUtPnRpbWVfaW5bSFNSX0RFVl9TTEFWRTFdOw0KKwkJKnRpbWUy ID0gbm9kZS0+dGltZV9pbltIU1JfREVWX1NMQVZFMl07DQorCX0NCisJcmN1X3JlYWRfdW5sb2Nr KCk7DQorfQ0KZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmggYi9uZXQvaHNyL2hz cl9mcmFtZXJlZy5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNzYxN2I4 Mw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuaA0KQEAgLTAsMCAr MSw1NCBAQA0KKy8qDQorICogQ29weXJpZ2h0IDIwMTEtMjAxMiBBdXRyb25pY2EgRmlyZSBhbmQg U2VjdXJpdHkgQVMNCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQorICogdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUNCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pDQorICogYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisg KiBBdXRob3Iocyk6DQorICoJMjAxMS0yMDEyIEFydmlkIEJyb2RpbiwgYXJ2aWQuYnJvZGluQHhk aW4uY29tDQorICovDQorDQorI2lmbmRlZiBfSFNSX0ZSQU1FUkVHX0gNCisjZGVmaW5lIF9IU1Jf RlJBTUVSRUdfSA0KKw0KKyNpbmNsdWRlICJoc3JfcHJpdmF0ZS5oIg0KKw0KK2VudW0gaHNyX2Rl dl9pZHggew0KKwlIU1JfREVWX1NMQVZFMSA9IDAsDQorCUhTUl9ERVZfU0xBVkUyLA0KKwlIU1Jf REVWX01BU1RFUiwNCit9Ow0KKw0KK3N0cnVjdCBub2RlX2VudHJ5Ow0KKw0KKyNkZWZpbmUgSFNS X01BWF9TTEFWRQkoSFNSX0RFVl9TTEFWRTIgKyAxKQ0KKyNkZWZpbmUgSFNSX01BWF9ERVYJKEhT Ul9ERVZfTUFTVEVSICsgMSkNCisvKg0KK2ludCBmcmFtZXJlZ19hZGRfbm9kZShzdHJ1Y3QgaHNy X3ByaXYgKmhzcl9wcml2LCB1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dLA0KKwkJCQllbnVt IGhzcl9kZXZfaWR4IGRldl9pZHgsIHVuc2lnbmVkIGxvbmcgdGltZSwNCisJCQkJdTE2IHNlcXVl bmNlX25yKTsNCisqLw0KK3N0cnVjdCBub2RlX2VudHJ5ICpmcmFtZXJlZ19maW5kX25vZGUoc3Ry dWN0IGxpc3RfaGVhZCAqbm9kZV9kYiwNCisJCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7DQor aW50IGZyYW1lcmVnX21lcmdlX25vZGUoc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdiwgZW51bSBo c3JfZGV2X2lkeCBkZXZfaWR4LA0KKwkJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsNCit2b2lk IGhzcl9hZGRyX3N1YnN0KHN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXYsIHN0cnVjdCBza19idWZm ICpza2IpOw0KKw0KK3ZvaWQgZnJhbWVyZWdfZnJhbWVfaW4oc3RydWN0IG5vZGVfZW50cnkgKm5v ZGUsIGVudW0gaHNyX2Rldl9pZHgpOw0KKw0KK2ludCBmcmFtZXJlZ19mcmFtZV9vdXQoc3RydWN0 IG5vZGVfZW50cnkgKm5vZGUsIGVudW0gaHNyX2Rldl9pZHgsDQorCQkJCQkJCXN0cnVjdCBza19i dWZmICpza2IpOw0KK3ZvaWQgZnJhbWVyZWdfcHJ1bmVfbm9kZXMoc3RydWN0IGxpc3RfaGVhZCAq bm9kZV9kYik7DQorDQordm9pZCBmcmFtZXJlZ19nZXRfbm9kZV90aW1lcyhzdHJ1Y3QgaHNyX3By aXYgKmhzcl9wcml2LA0KKwkJCQl1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dLA0KKwkJCQl1 bnNpZ25lZCBsb25nICp0aW1lMSwgdW5zaWduZWQgbG9uZyAqdGltZTIpOw0KK2ludCBmcmFtZXJl Zl9jcmVhdGVfc2VsZl9ub2RlKHN0cnVjdCBsaXN0X2hlYWQgKnNlbGZfbm9kZV9kYiwNCisJCQkJ CQl1bnNpZ25lZCBjaGFyIGFkZHJfYVtFVEhfQUxFTl0sDQorCQkJCQkJdW5zaWduZWQgY2hhciBh ZGRyX2JbRVRIX0FMRU5dKTsNCisNCit1bnNpZ25lZCBjaGFyICpub2RlX2dldF9hZGRyKHN0cnVj dCBub2RlX2VudHJ5ICpub2RlKTsNCisNCisjZW5kaWYgLyogX0hTUl9GUkFNRVJFR19IICovDQpk aWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbWFpbi5jIGIvbmV0L2hzci9oc3JfbWFpbi5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZjE3ZjIyMg0KLS0tIC9kZXYvbnVsbA0K KysrIGIvbmV0L2hzci9oc3JfbWFpbi5jDQpAQCAtMCwwICsxLDQxMSBAQA0KKy8qDQorICogQ29w eXJpZ2h0IDIwMTEtMjAxMiBBdXRyb25pY2EgRmlyZSBhbmQgU2VjdXJpdHkgQVMNCisgKg0KKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0DQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUNCisgKiBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pDQorICogYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBBdXRob3Iocyk6DQorICoJMjAx MS0yMDEyIEFydmlkIEJyb2RpbiwgYXJ2aWQuYnJvZGluQHhkaW4uY29tDQorICoNCisgKiBJbiBh ZGRpdGlvbiB0byByb3V0aW5lcyBmb3IgcmVnaXN0ZXJpbmcgYW5kIHVucmVnaXN0ZXJpbmcgSFNS IHN1cHBvcnQsIHRoaXMNCisgKiBmaWxlIGFsc28gY29udGFpbnMgdGhlIHJlY2VpdmUgcm91dGlu ZSB0aGF0IGhhbmRsZXMgYWxsIGluY29taW5nIGZyYW1lcyB3aXRoDQorICogRXRoZXJ0eXBlIChw cm90b2NvbCkgRVRIX1BfSFNSLg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2Uu aD4NCisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC90aW1lci5o Pg0KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPg0KKyNpbmNsdWRlICJoc3JfcHJpdmF0 ZS5oIg0KKyNpbmNsdWRlICJoc3JfZGV2aWNlLmgiDQorI2luY2x1ZGUgImhzcl9uZXRsaW5rLmgi DQorI2luY2x1ZGUgImhzcl9mcmFtZXJlZy5oIg0KKw0KKw0KKy8qIE11bHRpY2FzdCBhZGRyZXNz IGZvciBIU1IgU3VwZXJ2aXNpb24gZnJhbWVzICovDQorY29uc3QgdTggaHNyX211bHRpY2FzdF9h ZGRyW0VUSF9BTEVOXSA9IHsweDAxLCAweDE1LCAweDRlLCAweDAwLCAweDAxLCAweDAwfTsNCisN CisNCisvKiBMaXN0IG9mIGFsbCByZWdpc3RlcmVkIHZpcnR1YWwgSFNSIGRldmljZXMgKi8NCitz dGF0aWMgTElTVF9IRUFEKGhzcl9saXN0KTsNCisNCit2b2lkIHJlZ2lzdGVyX2hzcl9tYXN0ZXIo c3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdikNCit7DQorCWxpc3RfYWRkX3RhaWxfcmN1KCZoc3Jf cHJpdi0+aHNyX2xpc3QsICZoc3JfbGlzdCk7DQorfQ0KKw0KK3ZvaWQgdW5yZWdpc3Rlcl9oc3Jf bWFzdGVyKHN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXYpDQorew0KKwlzdHJ1Y3QgaHNyX3ByaXYg Kmhzcl9wcml2X2l0Ow0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhzcl9wcml2X2l0LCAmaHNy X2xpc3QsIGhzcl9saXN0KQ0KKwkJaWYgKGhzcl9wcml2X2l0ID09IGhzcl9wcml2KSB7DQorCQkJ bGlzdF9kZWxfcmN1KCZoc3JfcHJpdl9pdC0+aHNyX2xpc3QpOw0KKwkJCXJldHVybjsNCisJCX0N Cit9DQorDQorDQorLyoNCisgKiBJZiBkZXYgaXMgYSBIU1Igc2xhdmUgZGV2aWNlLCByZXR1cm4g dGhlIHZpcnR1YWwgbWFzdGVyIGRldmljZS4gUmV0dXJuIE5VTEwNCisgKiBvdGhlcndpc2UuDQor ICovDQorc3RhdGljIHN0cnVjdCBoc3JfcHJpdiAqZ2V0X2hzcl9tYXN0ZXIoc3RydWN0IG5ldF9k ZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXY7DQorDQorCXJjdV9y ZWFkX2xvY2soKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaHNyX3ByaXYsICZoc3JfbGlz dCwgaHNyX2xpc3QpDQorCQlpZiAoKGRldiA9PSBoc3JfcHJpdi0+c2xhdmVfZGF0YVswXS5kZXYp IHx8DQorCQkJCShkZXYgPT0gaHNyX3ByaXYtPnNsYXZlX2RhdGFbMV0uZGV2KSkgew0KKwkJCXJj dV9yZWFkX3VubG9jaygpOw0KKwkJCXJldHVybiBoc3JfcHJpdjsNCisJCX0NCisNCisJcmN1X3Jl YWRfdW5sb2NrKCk7DQorCXJldHVybiBOVUxMOw0KK30NCisNCisvKg0KKyAqIElmIGRldiBpcyBh IEhTUiBzbGF2ZSBkZXZpY2UsIHJldHVybiB0aGUgb3RoZXIgc2xhdmUgZGV2aWNlLiBSZXR1cm4g TlVMTA0KKyAqIG90aGVyd2lzZS4NCisgKi8NCitzdGF0aWMgc3RydWN0IGhzcl9zbGF2ZV9kYXRh ICpnZXRfb3RoZXJfc2xhdmUoc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdiwNCisJCQkJCQkJc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikNCit7DQorCWlmIChkZXYgPT0gaHNyX3ByaXYtPnNsYXZlX2Rh dGFbMF0uZGV2KQ0KKwkJcmV0dXJuICZoc3JfcHJpdi0+c2xhdmVfZGF0YVsxXTsNCisJaWYgKGRl diA9PSBoc3JfcHJpdi0+c2xhdmVfZGF0YVsxXS5kZXYpDQorCQlyZXR1cm4gJmhzcl9wcml2LT5z bGF2ZV9kYXRhWzBdOw0KKw0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQorDQorc3RhdGljIGludCBo c3JfbmV0ZGV2X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25n IGV2ZW50LA0KKwkJCQkJCQkJdm9pZCAqcHRyKQ0KK3sNCisNCisvKg0KKyAqIFNob3VsZCBkbzoN CisgKg0KKyAqIC0gZXJyb3IgbW9uaXRvcmluZyAoYnJva2VuIGxpbmspDQorICogLSBzbGF2ZSBt b25pdG9yaW5nIChkaXNhbGxvdyBkb3duLCByZWNvbmZpZ3VyaW5nID8pDQorDQorCXJlZ2lzdGVy X25ldGRldmljZV9ub3RpZmllciguLi4pOw0KKwlORVRERVZfR09JTkdfRE9XTg0KKwlORVRERVZf Q0hBTkdFQUREUg0KKwlORVRERVZfQ0hBTkdFIChkZXYtPmZsYWdzKQ0KKwlORVRERVZfVU5SRUdJ U1RFUg0KKyAqLw0KKw0KKwlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmUsICpvdGhlcl9zbGF2ZTsN CisJc3RydWN0IGhzcl9wcml2ICpoc3JfcHJpdjsNCisJc3RydWN0IGhzcl9zbGF2ZV9kYXRhICpv dGhlcl9kYXRhOw0KKwlpbnQgb2xkX29wZXJzdGF0ZTsNCisNCisJaHNyX3ByaXYgPSBnZXRfaHNy X21hc3RlcihwdHIpOw0KKwlpZiAoaHNyX3ByaXYpIHsgLyogSXMgcHRyIGEgc2xhdmUgZGV2aWNl PyAqLw0KKwkJc2xhdmUgPSBwdHI7DQorCQlvdGhlcl9kYXRhID0gZ2V0X290aGVyX3NsYXZlKGhz cl9wcml2LCBzbGF2ZSk7DQorCQlvdGhlcl9zbGF2ZSA9IG90aGVyX2RhdGEtPmRldjsNCisJfSBl bHNlIHsNCisJCWlmICghaXNfaHNyX21hc3RlcihwdHIpKQ0KKwkJCXJldHVybiBOT1RJRllfRE9O RTsNCisJCWhzcl9wcml2ID0gbmV0ZGV2X3ByaXYocHRyKTsNCisJCXNsYXZlID0gaHNyX3ByaXYt PnNsYXZlX2RhdGFbMF0uZGV2Ow0KKwkJb3RoZXJfc2xhdmUgPSBoc3JfcHJpdi0+c2xhdmVfZGF0 YVsxXS5kZXY7DQorCX0NCisNCisJc3dpdGNoIChldmVudCkgew0KKwljYXNlIE5FVERFVl9VUDoJ CS8qIEFkbWluaXN0cmF0aXZlIHN0YXRlIERPV04gKi8NCisvL3ByaW50ayhLRVJOX0lORk8gIkdv dCAlcyBldmVudCBORVRERVZfVVBcbiIsICgoc3RydWN0IG5ldF9kZXZpY2UgKikgcHRyKS0+bmFt ZSk7DQorCQlnb3RvIG5ldGRldl9jaGFuZ2U7DQorCWNhc2UgTkVUREVWX0RPV046CS8qIEFkbWlu aXN0cmF0aXZlIHN0YXRlIFVQICovDQorLy9wcmludGsoS0VSTl9JTkZPICJHb3QgJXMgZXZlbnQg TkVUREVWX0RPV05cbiIsICgoc3RydWN0IG5ldF9kZXZpY2UgKikgcHRyKS0+bmFtZSk7DQorCQln b3RvIG5ldGRldl9jaGFuZ2U7DQorCWNhc2UgTkVUREVWX0NIQU5HRToJLyogTGluayAoY2Fycmll cikgc3RhdGUgY2hhbmdlcyAqLw0KKy8vcHJpbnRrKEtFUk5fSU5GTyAiR290ICVzIGV2ZW50IE5F VERFVl9DSEFOR0VcbiIsICgoc3RydWN0IG5ldF9kZXZpY2UgKikgcHRyKS0+bmFtZSk7DQorbmV0 ZGV2X2NoYW5nZToNCisJCW9sZF9vcGVyc3RhdGUgPSBoc3JfcHJpdi0+ZGV2LT5vcGVyc3RhdGU7 DQorCQloc3Jfc2V0X2NhcnJpZXIoaHNyX3ByaXYtPmRldiwgc2xhdmUsIG90aGVyX3NsYXZlKTsN CisJCWhzcl9zZXRfb3BlcnN0YXRlKGhzcl9wcml2LT5kZXYsIHNsYXZlLCBvdGhlcl9zbGF2ZSk7 DQorCQloc3JfY2hlY2tfYW5ub3VuY2UoaHNyX3ByaXYtPmRldiwgb2xkX29wZXJzdGF0ZSk7DQor CX0NCisNCisJcmV0dXJuIE5PVElGWV9ET05FOw0KK30NCisNCisNCitzdGF0aWMgc3RydWN0IHRp bWVyX2xpc3QgcHJ1bmVfdGltZXI7DQorDQorc3RhdGljIHZvaWQgaHNyX3BydW5lX25vZGVzKHVu c2lnbmVkIGxvbmcgZGF0YSkNCit7DQorCXN0cnVjdCBoc3JfcHJpdiAqaHNyX3ByaXY7DQorDQor CXJjdV9yZWFkX2xvY2soKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaHNyX3ByaXYsICZo c3JfbGlzdCwgaHNyX2xpc3QpDQorCQlmcmFtZXJlZ19wcnVuZV9ub2RlcygmaHNyX3ByaXYtPm5v ZGVfZGIpOw0KKwlyY3VfcmVhZF91bmxvY2soKTsNCisNCisJcHJ1bmVfdGltZXIuZXhwaXJlcyA9 IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFBSVU5FX1BFUklPRCk7DQorCWFkZF90aW1lcigm cHJ1bmVfdGltZXIpOw0KK30NCisNCisNCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN0cmlwX2hz cl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBoc3JfdGFnICpoc3JfdGFn Ow0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsNCisNCisJc2tiMiA9IHNrYl9zaGFyZV9jaGVjayhz a2IsIEdGUF9BVE9NSUMpOw0KKwlpZiAodW5saWtlbHkoIXNrYjIpKQ0KKwkJZ290byBlcnJfZnJl ZTsNCisJc2tiID0gc2tiMjsNCisNCisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwg SFNSX1RBR0xFTikpKQ0KKwkJZ290byBlcnJfZnJlZTsNCisNCisJaHNyX3RhZyA9IChzdHJ1Y3Qg aHNyX3RhZyAqKSBza2ItPmRhdGE7DQorCXNrYi0+cHJvdG9jb2wgPSBoc3JfdGFnLT5lbmNhcF9w cm90bzsNCisJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7ICAvLyBIdWg/Pz8NCisJc2ti X3B1bGxfcmNzdW0oc2tiLCBIU1JfVEFHTEVOKTsNCisNCisJcmV0dXJuIHNrYjsNCisNCitlcnJf ZnJlZToNCisJa2ZyZWVfc2tiKHNrYik7DQorCXJldHVybiBOVUxMOw0KK30NCisNCisNCisvKg0K KyAqIFRoZSB1c2VzIEkgY2FuIHNlZSBmb3IgdGhlc2UgSFNSIHN1cGVydmlzaW9uIGZyYW1lcyBh cmU6DQorICogMSkgVXNlIHRoZSBmcmFtZXMgdGhhdCBhcmUgc2VudCBhZnRlciBub2RlIGluaXRp YWxpemF0aW9uICgiSFNSX1RMVi5UeXBlID0NCisgKiAgICAyMiIpIHRvIHJlc2V0IGFueSBzZXF1 ZW5jZV9uciBjb3VudGVycyBiZWxvbmdpbmcgdG8gdGhhdCBub2RlLiBVc2VmdWwgaWYNCisgKiAg ICB0aGUgb3RoZXIgbm9kZSdzIGNvdW50ZXIgaGFzIGJlZW4gcmVzZXQgZm9yIHNvbWUgcmVhc29u Lg0KKyAqICAgIC0tDQorICogICAgT3Igbm90IC0gcmVzZXR0aW5nIHRoZSBjb3VudGVyIGFuZCBi cmlkZ2luZyB0aGUgZnJhbWUgd291bGQgY3JlYXRlIGENCisgKiAgICBsb29wLCB1bmZvcnR1bmF0 ZWx5Lg0KKyAqDQorICogMikgVXNlIHRoZSBMaWZlQ2hlY2sgZnJhbWVzIHRvIGRldGVjdCByaW5n IGJyZWFrcy4gSS5lLiBpZiBubyBMaWZlQ2hlY2sNCisgKiAgICBmcmFtZSBpcyByZWNlaXZlZCBm cm9tIGEgcGFydGljdWxhciBub2RlLCB3ZSBrbm93IHNvbWV0aGluZyBpcyB3cm9uZy4NCisgKiAg ICBXZSBqdXN0IHJlZ2lzdGVyIHRoZXNlIChhcyB3aXRoIG5vcm1hbCBmcmFtZXMpIGFuZCB0aHJv dyB0aGVtIGF3YXkuDQorICoNCisgKiAzKSBUaGVzZSBjb3VsZCBhbHNvIGJlIHVzZWQgdG8gYWxs b3cgZGlmZmVyZW50IE1BQyBhZGRyZXNzZXMgZm9yIHRoZSB0d28NCisgKiAgICBzbGF2ZSBpbnRl cmZhY2VzLiBUaGlzIGlzIG1lbnRpb25lZCBpbiB0aGUgc3RhbmRhcmQgYnV0IG5vdCBleHBsYWlu ZWQuDQorICovDQorc3RhdGljIGludCBoYW5kbGVfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhz cl9wcml2ICpoc3JfcHJpdiwNCisJCQkJZW51bSBoc3JfZGV2X2lkeCBkZXZfaWR4LCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IGhzcl9zdXBlcnZpc2lvbl90YWcgKmhzcl9zdGFn Ow0KKw0KKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0+aF9kZXN0LCBoc3Jf bXVsdGljYXN0X2FkZHIpKQ0KKwkJcmV0dXJuIDA7DQorDQorCWhzcl9zdGFnID0gKHN0cnVjdCBo c3Jfc3VwZXJ2aXNpb25fdGFnICopIHNrYi0+ZGF0YTsNCisJaWYgKG50b2hzKGhzcl9zdGFnLT5w YXRoX2FuZF9IU1JfdmVyKSA+PiAxMiAhPSAweDBmKQ0KKwkJcmV0dXJuIDA7DQorCWlmICgoaHNy X3N0YWctPkhTUl9UTFZfVHlwZSAhPSBIU1JfVExWX0FOTk9VTkNFKSAmJg0KKwkJCQkoaHNyX3N0 YWctPkhTUl9UTFZfVHlwZSAhPSBIU1JfVExWX0xJRkVfQ0hFQ0spKQ0KKwkJcmV0dXJuIDA7DQor CWlmIChoc3Jfc3RhZy0+SFNSX1RMVl9MZW5ndGggIT0gMTIpDQorCQlyZXR1cm4gMDsNCisvKg0K KwlpZiAoaHNyX3N0YWctPkhTUl9UTFZfVHlwZSA9PSBIU1JfVExWX0FOTk9VTkNFKQ0KKwkJcHJp bnRrKEtFUk5fSU5GTyAiSFNSOiBHb3QgQW5ub3VuY2UgZnJhbWUgZnJvbSAlMDJ4XG4iLA0KKwkJ CQkJZXRoX2hkcihza2IpLT5oX3NvdXJjZVtFVEhfQUxFTi0xXSk7DQorKi8NCisJZnJhbWVyZWdf bWVyZ2Vfbm9kZShoc3JfcHJpdiwgZGV2X2lkeCwgc2tiKTsNCisNCisJcmV0dXJuIDE7DQorfQ0K Kw0KKw0KKy8qDQorICogSW1wbGVtZW50YXRpb24gc29tZXdoYXQgYWNjb3JkaW5nIHRvIElFQy02 MjQzOS0zLCBwLiA0Mw0KKyAqLw0KK3N0YXRpYyBpbnQgaHNyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAq c2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LA0KKwkJCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHQs IHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikNCit7DQorCXN0cnVjdCBoc3JfcHJpdiAqaHNy X3ByaXY7DQorCXN0cnVjdCBoc3Jfc2xhdmVfZGF0YSAqb3RoZXJfc2xhdmVfZGF0YTsNCisJc3Ry dWN0IG5vZGVfZW50cnkgKm5vZGU7DQorCWludCBkZWxpdmVyX3RvX3NlbGY7DQorCXN0cnVjdCBz a19idWZmICpza2JfZGVsaXZlcjsNCisJZW51bSBoc3JfZGV2X2lkeCBkZXZfaW5faWR4LCBkZXZf b3RoZXJfaWR4Ow0KKwlpbnQgcmV0Ow0KKw0KKwloc3JfcHJpdiA9IGdldF9oc3JfbWFzdGVyKGRl dik7DQorDQorCWlmICghaHNyX3ByaXYpIHsNCisJCXByaW50ayhLRVJOX0lORk8gIkhTUjogR290 IEhTUiBmcmFtZSBvbiBub24tSFNSIGRldmljZTsgIg0KKwkJCQkJCQkiZHJvcHBpbmcgaXQuXG4i KTsNCisJCWtmcmVlX3NrYihza2IpOw0KKwkJcmV0dXJuIE5FVF9SWF9EUk9QOw0KKwl9DQorDQor CWlmIChkZXYgPT0gaHNyX3ByaXYtPnNsYXZlX2RhdGFbMF0uZGV2KSB7DQorCQlkZXZfaW5faWR4 ID0gSFNSX0RFVl9TTEFWRTE7DQorCQlkZXZfb3RoZXJfaWR4ID0gSFNSX0RFVl9TTEFWRTI7DQor CX0gZWxzZSB7DQorCQlkZXZfaW5faWR4ID0gSFNSX0RFVl9TTEFWRTI7DQorCQlkZXZfb3RoZXJf aWR4ID0gSFNSX0RFVl9TTEFWRTE7DQorCX0NCisNCisJbm9kZSA9IGZyYW1lcmVnX2ZpbmRfbm9k ZSgmaHNyX3ByaXYtPnNlbGZfbm9kZV9kYiwgc2tiKTsNCisJaWYgKG5vZGUpIHsNCisJCS8qIEFs d2F5cyBraWxsIGZyYW1lcyBzZW50IGJ5IG91cnNlbHZlcyAqLw0KKwkJa2ZyZWVfc2tiKHNrYik7 DQorCQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7DQorCX0NCisNCisJLyogUmVjZWl2ZSB0aGlzIGZy YW1lPyAqLw0KKwlkZWxpdmVyX3RvX3NlbGYgPSAwOw0KKwlpZiAoKHNrYi0+cGt0X3R5cGUgPT0g UEFDS0VUX0hPU1QpIHx8DQorCQkJCShza2ItPnBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1Qp IHx8DQorCQkJCShza2ItPnBrdF90eXBlID09IFBBQ0tFVF9CUk9BRENBU1QpKQ0KKwkJZGVsaXZl cl90b19zZWxmID0gMTsNCisJZWxzZSBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihldGhfaGRyKHNr YiktPmhfZGVzdCwNCisJCQkJCQloc3JfcHJpdi0+ZGV2LT5kZXZfYWRkcikpIHsNCisJCXNrYi0+ cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsNCisJCWRlbGl2ZXJfdG9fc2VsZiA9IDE7DQorCX0NCisN CisJaWYgKGhhbmRsZV9zdXBlcnZpc2lvbl9mcmFtZShoc3JfcHJpdiwgZGV2X2luX2lkeCwgc2ti KSA9PSAxKQ0KKwkJZGVsaXZlcl90b19zZWxmID0gMDsNCisNCisJcmN1X3JlYWRfbG9jaygpOyAv KiBub2RlX2RiICovDQorCW5vZGUgPSBmcmFtZXJlZ19maW5kX25vZGUoJmhzcl9wcml2LT5ub2Rl X2RiLCBza2IpOw0KKwlpZiAoIW5vZGUpIHsNCisJCS8qIFNvdXJjZSBub2RlIHVua25vd247IGRv bid0IGNyZWF0ZSBhIG5ldHdvcmsgbG9vcCAqLw0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7DQorCQlw cmludGsoS0VSTl9JTkZPICJIU1I6IEdvdCBIU1IgZnJhbWUgZnJvbSB1bmtub3duIG5vZGUgJXBN ICINCisJCQkJICJvbiBkZXYgJXM6IGRyb3BwaW5nIGl0LlxuIiwNCisJCQkJIGV0aF9oZHIoc2ti KS0+aF9zb3VyY2UsIGRldi0+bmFtZSk7DQorCQlrZnJlZV9za2Ioc2tiKTsNCisJCXJldHVybiBO RVRfUlhfRFJPUDsNCisJfQ0KKw0KKwlpZiAoZnJhbWVyZWdfZnJhbWVfb3V0KG5vZGUsIEhTUl9E RVZfTUFTVEVSLCBza2IpID09IDEpDQorCQlkZWxpdmVyX3RvX3NlbGYgPSAwOw0KKw0KKwlmcmFt ZXJlZ19mcmFtZV9pbihub2RlLCBkZXZfaW5faWR4KTsNCisNCisJLyogRm9yd2FyZCB0aGlzIGZy YW1lPyAqLw0KKwlvdGhlcl9zbGF2ZV9kYXRhID0gTlVMTDsNCisJaWYgKHNrYi0+cGt0X3R5cGUg IT0gUEFDS0VUX0hPU1QpIHsNCisJCW90aGVyX3NsYXZlX2RhdGEgPSBnZXRfb3RoZXJfc2xhdmUo aHNyX3ByaXYsIGRldik7DQorCQlpZiAoZnJhbWVyZWdfZnJhbWVfb3V0KG5vZGUsIGRldl9vdGhl cl9pZHgsIHNrYikgPT0gMSkNCisJCQlvdGhlcl9zbGF2ZV9kYXRhID0gTlVMTDsNCisJfQ0KKw0K KwlyY3VfcmVhZF91bmxvY2soKTsgLyogbm9kZV9kYiAqLw0KKw0KKwlpZiAoIWRlbGl2ZXJfdG9f c2VsZiAmJiAhb3RoZXJfc2xhdmVfZGF0YSkgew0KKwkJa2ZyZWVfc2tiKHNrYik7DQorCQlyZXR1 cm4gTkVUX1JYX1NVQ0NFU1M7DQorCX0NCisNCisJc2tiX2RlbGl2ZXIgPSBza2I7DQorCWlmIChk ZWxpdmVyX3RvX3NlbGYgJiYgb3RoZXJfc2xhdmVfZGF0YSkgew0KKyNpZiAhZGVmaW5lZChDT05G SUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykgJiYgXA0KKwkJCQkJCSFkZWZpbmVk KENPTkZJR19OT05TVEFOREFSRF9IU1IpDQorCQkvKiBXZSBoYXZlIHRvIG1lbW1vdmUgdGhlIHdo b2xlIHBheWxvYWQgYmVsb3cgKi8NCisJCXNrYl9kZWxpdmVyID0gc2tiX2NvcHkoc2tiLCBHRlBf QVRPTUlDKTsNCisjZWxzZQ0KKwkJc2tiX2RlbGl2ZXIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRP TUlDKTsNCisjZW5kaWYNCisJCWlmICghc2tiX2RlbGl2ZXIpIHsNCisJCQlkZWxpdmVyX3RvX3Nl bGYgPSAwOw0KKwkJCWhzcl9wcml2LT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsNCisJCX0NCisJ fQ0KKw0KKwlpZiAoZGVsaXZlcl90b19zZWxmKSB7DQorCQlza2JfZGVsaXZlciA9IHN0cmlwX2hz cl90YWcoc2tiX2RlbGl2ZXIpOw0KKwkJaWYgKCFza2JfZGVsaXZlcikgew0KKwkJCWhzcl9wcml2 LT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsNCisJCQlnb3RvIGZvcndhcmQ7DQorCQl9DQorI2lm ICFkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSAmJiBcDQor CQkJCQkJIWRlZmluZWQoQ09ORklHX05PTlNUQU5EQVJEX0hTUikNCisJCS8qDQorCQkgKiBza2Jf ZGVsaXZlciBzaG91bGQgYmUgbGluZWFyIGhlcmUsIGFmdGVyIHRoZSBjYWxsIHRvDQorCQkgKiBz a2JfY29weSgpIGluIHRoZSBibG9jayBhYm92ZS4gV2UgbmVlZCB0byBtZW1tb3ZlIHRoZQ0KKwkJ ICogd2hvbGUgcGF5bG9hZCB0byB3b3JrIGFyb3VuZCBhbGlnbm1lbnQgcHJvYmxlbXMgY2F1c2Vk IGJ5DQorCQkgKiB0aGUgNi1ieXRlIEhTUiB0YWcuDQorCQkgKi8NCisJCW1lbW1vdmUoc2tiX2Rl bGl2ZXItPmRhdGEgLSBIU1JfVEFHTEVOLCBza2JfZGVsaXZlci0+ZGF0YSwNCisJCQkJCQkJc2ti X2RlbGl2ZXItPmxlbik7DQorCQlza2JfZGVsaXZlci0+ZGF0YSAtPSBIU1JfVEFHTEVOOw0KKwkJ c2tiX2RlbGl2ZXItPnRhaWwgLT0gSFNSX1RBR0xFTjsNCisJCXNrYl9yZXNldF9uZXR3b3JrX2hl YWRlcihza2JfZGVsaXZlcik7IC8vIEZJWE1FIC0gc2hvdWxkIHByYmwgYmUgbWFjX2hlYWRlcigp Pw0KKyNlbmRpZg0KKwkJc2tiX2RlbGl2ZXItPmRldiA9IGhzcl9wcml2LT5kZXY7DQorCQloc3Jf YWRkcl9zdWJzdChoc3JfcHJpdiwgc2tiX2RlbGl2ZXIpOw0KKwkJcmV0ID0gbmV0aWZfcngoc2ti X2RlbGl2ZXIpOw0KKwkJaWYgKHJldCA9PSBORVRfUlhfRFJPUCkNCisJCQloc3JfcHJpdi0+ZGV2 LT5zdGF0cy5yeF9kcm9wcGVkKys7DQorCQllbHNlIHsNCisJCQloc3JfcHJpdi0+ZGV2LT5zdGF0 cy5yeF9wYWNrZXRzKys7DQorCQkJaHNyX3ByaXYtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2ti LT5sZW47DQorCQl9DQorCX0NCisNCitmb3J3YXJkOg0KKwlpZiAob3RoZXJfc2xhdmVfZGF0YSkg ew0KKwkJc2tiX3B1c2goc2tiLCBFVEhfSExFTik7DQorCQlza2ItPmRldiA9IG90aGVyX3NsYXZl X2RhdGEtPmRldjsNCisJCWRldl9xdWV1ZV94bWl0KHNrYik7DQorCX0NCisNCisJcmV0dXJuIE5F VF9SWF9TVUNDRVNTOw0KK30NCisNCisNCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGhzcl9w dCBfX3JlYWRfbW9zdGx5ID0gew0KKwkudHlwZSA9IGh0b25zKEVUSF9QX0hTUiksDQorCS5mdW5j ID0gaHNyX3JjdiwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaHNyX25i ID0gew0KKwkubm90aWZpZXJfY2FsbCA9IGhzcl9uZXRkZXZfbm90aWZ5LAkvKiBTbGF2ZSBldmVu dCBub3RpZmljYXRpb25zICovDQorfTsNCisNCisNCitzdGF0aWMgaW50IF9faW5pdCBoc3JfaW5p dCh2b2lkKQ0KK3sNCisJaW50IHJlczsNCisNCisJQlVHX09OKHNpemVvZihzdHJ1Y3QgaHNyX3Rh ZykgIT0gSFNSX1RBR0xFTik7DQorCUJVR19PTihzaXplb2Yoc3RydWN0IGhzcl9ldGhoZHIpICE9 IEVUSF9ITEVOICsgSFNSX1RBR0xFTik7DQorDQorCWRldl9hZGRfcGFjaygmaHNyX3B0KTsNCisN CisJaW5pdF90aW1lcigmcHJ1bmVfdGltZXIpOw0KKwlwcnVuZV90aW1lci5mdW5jdGlvbiA9IGhz cl9wcnVuZV9ub2RlczsNCisJcHJ1bmVfdGltZXIuZGF0YSA9IDA7DQorCXBydW5lX3RpbWVyLmV4 cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhQUlVORV9QRVJJT0QpOw0KKwlhZGRf dGltZXIoJnBydW5lX3RpbWVyKTsNCisNCisJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZo c3JfbmIpOw0KKw0KKwlyZXMgPSBoc3JfbmV0bGlua19pbml0KCk7DQorDQorCXJldHVybiByZXM7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9fZXhpdCBoc3JfZXhpdCh2b2lkKQ0KK3sNCisJdW5yZWdp c3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmhzcl9uYik7DQorCWRlbF90aW1lcigmcHJ1bmVfdGlt ZXIpOw0KKwloc3JfbmV0bGlua19leGl0KCk7DQorCWRldl9yZW1vdmVfcGFjaygmaHNyX3B0KTsN Cit9DQorDQorbW9kdWxlX2luaXQoaHNyX2luaXQpOw0KK21vZHVsZV9leGl0KGhzcl9leGl0KTsN CitNT0RVTEVfTElDRU5TRSgiR1BMIik7DQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbmV0bGlu ay5jIGIvbmV0L2hzci9oc3JfbmV0bGluay5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMC4uZmVlOTEwYQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbmV0L2hzci9oc3JfbmV0bGlu ay5jDQpAQCAtMCwwICsxLDI5MyBAQA0KKy8qDQorICogQ29weXJpZ2h0IDIwMTEtMjAxMiBBdXRy b25pY2EgRmlyZSBhbmQgU2VjdXJpdHkgQVMNCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQorICog dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUNCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pDQorICogYW55IGxhdGVyIHZl cnNpb24uDQorICoNCisgKiBBdXRob3Iocyk6DQorICoJMjAxMS0yMDEyIEFydmlkIEJyb2Rpbiwg YXJ2aWQuYnJvZGluQHhkaW4uY29tDQorICoNCisgKiBSb3V0aW5lcyBmb3IgaGFuZGxpbmcgTmV0 bGluayBtZXNzYWdlcyBmb3IgSFNSLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJoc3JfbmV0bGluay5o Ig0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bmV0L3J0bmV0bGluay5o Pg0KKyNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+DQorI2luY2x1ZGUgImhzcl9wcml2YXRlLmgi DQorI2luY2x1ZGUgImhzcl9kZXZpY2UuaCINCisjaW5jbHVkZSAiaHNyX2ZyYW1lcmVnLmgiDQor DQorc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGhzcl9wb2xpY3lbSUZMQV9IU1JfTUFY ICsgMV0gPSB7DQorCVtJRkxBX0hTUl9TTEFWRTFdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwNCisJ W0lGTEFfSFNSX1NMQVZFMl0JPSB7IC50eXBlID0gTkxBX1UzMiB9LA0KK307DQorDQorDQorLyoN CisgKiBIZXJlLCBpdCBzZWVtcyBhIG5ldGRldmljZSBoYXMgYWxyZWFkeSBiZWVuIGFsbG9jYXRl ZCBmb3IgdXMsIGFuZCB0aGUNCisgKiBoc3JfZGV2X3NldHVwIHJvdXRpbmUgaGFzIGJlZW4gZXhl Y3V0ZWQuIE5pY2UhDQorICovDQorc3RhdGljIGludCBoc3JfbmV3bGluayhzdHJ1Y3QgbmV0ICpz cmNfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LA0KKwkJCQlzdHJ1Y3QgbmxhdHRyICp0Yltd LCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pDQorew0KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbGlua1sy XTsNCisNCisJaWYgKCFkYXRhW0lGTEFfSFNSX1NMQVZFMV0pIHsNCisJCXByaW50ayhLRVJOX0lO Rk8gIklGTEFfSFNSX1NMQVZFMSBtaXNzaW5nIVxuIik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJ fQ0KKwlsaW5rWzBdID0gX19kZXZfZ2V0X2J5X2luZGV4KHNyY19uZXQsIG5sYV9nZXRfdTMyKGRh dGFbSUZMQV9IU1JfU0xBVkUxXSkpOw0KKwlpZiAoIWRhdGFbSUZMQV9IU1JfU0xBVkUyXSkgew0K KwkJcHJpbnRrKEtFUk5fSU5GTyAiSUZMQV9IU1JfU0xBVkUyIG1pc3NpbmchXG4iKTsNCisJCXJl dHVybiAtRUlOVkFMOw0KKwl9DQorCWxpbmtbMV0gPSBfX2Rldl9nZXRfYnlfaW5kZXgoc3JjX25l dCwgbmxhX2dldF91MzIoZGF0YVtJRkxBX0hTUl9TTEFWRTJdKSk7DQorDQorCWlmICghbGlua1sw XSB8fCAhbGlua1sxXSkNCisJCXJldHVybiAtRU5PREVWOw0KKwlpZiAobGlua1swXSA9PSBsaW5r WzFdKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCXJldHVybiBoc3JfZGV2X2ZpbmFsaXplKGRl diwgbGluayk7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBoc3JfbGlua19v cHMgX19yZWFkX21vc3RseSA9IHsNCisJLmtpbmQJCT0gImhzciIsDQorCS5tYXh0eXBlCT0gSUZM QV9IU1JfTUFYLA0KKwkucG9saWN5CQk9IGhzcl9wb2xpY3ksDQorCS5wcml2X3NpemUJPSBzaXpl b2Yoc3RydWN0IGhzcl9wcml2KSwNCisJLnNldHVwCQk9IGhzcl9kZXZfc2V0dXAsDQorLy8JLnZh bGlkYXRlCT0gdmxhbl92YWxpZGF0ZSwNCisJLm5ld2xpbmsJPSBoc3JfbmV3bGluaywNCisvLwku Y2hhbmdlbGluawk9IHZsYW5fY2hhbmdlbGluaywNCisvLwkuZGVsbGluawk9IGhzcl9kZWxsaW5r LCAgZGV2LT5kZXN0cnVjdG9yKCkgY2FsbGVkIGF1dG9tYXRpY2FsbHk/DQorLy8JLmdldF9zaXpl CT0gdmxhbl9nZXRfc2l6ZSwNCisvLwkuZmlsbF9pbmZvCT0gdmxhbl9maWxsX2luZm8sDQorfTsN CisNCisNCisNCisvKiBhdHRyaWJ1dGUgcG9saWN5ICovDQorLyogTkxBX0JJTkFSWSBtaXNzaW5n IGluIGxpYm5sOyB1c2UgdW5zcGVjIGluIHVzZXJzcGFjZSBpbnN0ZWFkLiAqLw0KK3N0YXRpYyBz dHJ1Y3QgbmxhX3BvbGljeSBoc3JfZ2VubF9wb2xpY3lbSFNSX0FfTUFYICsgMV0gPSB7DQorCVtI U1JfQV9OT0RFX0FERFJdID0geyAudHlwZSA9IE5MQV9CSU5BUlksIC5sZW4gPSBFVEhfQUxFTiB9 LA0KKwlbSFNSX0FfSUZJTkRFWF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LA0KKwlbSFNSX0FfSUYx QUdFXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sIC8qIDMyLWJpdCBpbnQgKi8NCisJW0hTUl9BX0lG MkFHRV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LCAvKiAzMi1iaXQgaW50ICovDQorfTsNCisNCitz dGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGhzcl9nZW5sX2ZhbWlseSA9IHsNCisJLmlkID0gR0VO TF9JRF9HRU5FUkFURSwNCisJLmhkcnNpemUgPSAwLA0KKwkubmFtZSA9ICJIU1IiLA0KKwkudmVy c2lvbiA9IDEsDQorCS5tYXhhdHRyID0gSFNSX0FfTUFYLA0KK307DQorDQorc3RhdGljIHN0cnVj dCBnZW5sX211bHRpY2FzdF9ncm91cCBoc3JfbmV0d29ya19nZW5sX21jZ3JwID0gew0KKwkubmFt ZSA9ICJoc3ItbmV0d29yayIsDQorfTsNCisNCitzdGF0aWMgaW50IGhzcl9nZW5sX3NlcSA9IDA7 DQorDQorDQorDQorc3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfZ2VubF9tc2codm9pZCAqKnBt c2dfaGVhZCwgdW5zaWduZWQgZ2ZwLCBpbnQgY21kKQ0KK3sNCisJc3RydWN0IHNrX2J1ZmYgKnNr YjsNCisNCisvLwlwcmludGsoIlNlbmRpbmcgSFNSX0NfWyVkXVxuIiwgY21kKTsNCisNCisJc2ti ID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIGdmcCk7DQorCWlmICghc2tiKQ0KKwkJcmV0 dXJuIE5VTEw7DQorDQorCSpwbXNnX2hlYWQgPSBnZW5sbXNnX3B1dChza2IsIDAsIGhzcl9nZW5s X3NlcSsrLCAmaHNyX2dlbmxfZmFtaWx5LCAwLCBjbWQpOw0KKwlpZiAoIXBtc2dfaGVhZCkgew0K KwkJa2ZyZWVfc2tiKHNrYik7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwlyZXR1cm4gc2ti Ow0KK30NCisNCisNCisvKg0KKyAqIFRoaXMgaXMgY2FsbGVkIGlmIGZvciBzb21lIG5vZGUgd2l0 aCBNQUMgYWRkcmVzcyBhZGRyLCB3ZSBvbmx5IGdldCBmcmFtZXMNCisgKiBvdmVyIG9uZSBvZiB0 aGUgc2xhdmUgaW50ZXJmYWNlcy4gVGhpcyB3b3VsZCBpbmRpY2F0ZSBhbiBvcGVuIG5ldHdvcmsg cmluZw0KKyAqIChpLmUuIGEgbGluayBoYXMgZmFpbGVkIHNvbWV3aGVyZSkuDQorICovDQordm9p ZCBoc3JfbmxfcmluZ2Vycm9yKHVuc2lnbmVkIGNoYXIgYWRkcltFVEhfQUxFTl0sIGludCBkZXZf aWR4KQ0KK3sNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisJdm9pZCAqbXNnX2hlYWQ7DQorDQor CXNrYiA9IGhzcl9jcmVhdGVfZ2VubF9tc2coJm1zZ19oZWFkLCBHRlBfQVRPTUlDLCBIU1JfQ19S SU5HX0VSUk9SKTsNCisJaWYgKCFza2IpDQorCQlyZXR1cm47DQorDQorCU5MQV9QVVQoc2tiLCBI U1JfQV9OT0RFX0FERFIsIEVUSF9BTEVOLCBhZGRyKTsNCisJTkxBX1BVVF9VMzIoc2tiLCBIU1Jf QV9JRklOREVYLCBkZXZfaWR4KTsNCisNCisJZ2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7DQor CWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgaHNyX25ldHdvcmtfZ2VubF9tY2dycC5pZCwgR0ZQ X0FUT01JQyk7DQorDQorCXJldHVybjsNCisNCitubGFfcHV0X2ZhaWx1cmU6DQorCWtmcmVlX3Nr Yihza2IpOw0KK30NCisNCisvKg0KKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgaGF2ZW4ndCBo ZWFyZCBmcm9tIHRoZSBub2RlIHdpdGggTUFDIGFkZHJlc3MgYWRkciBmb3INCisgKiBzb21lIHRp bWUgKGJlZm9yZSB0aGUgbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlIG5vZGUgdGFibGUvbGlzdCku DQorICovDQordm9pZCBoc3Jfbmxfbm9kZWRvd24odW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVO XSkNCit7DQorCXN0cnVjdCBza19idWZmICpza2I7DQorCXZvaWQgKm1zZ19oZWFkOw0KKw0KKwlz a2IgPSBoc3JfY3JlYXRlX2dlbmxfbXNnKCZtc2dfaGVhZCwgR0ZQX0FUT01JQywgSFNSX0NfTk9E RV9ET1dOKTsNCisJaWYgKCFza2IpDQorCQlyZXR1cm47DQorDQorCU5MQV9QVVQoc2tiLCBIU1Jf QV9OT0RFX0FERFIsIEVUSF9BTEVOLCBhZGRyKTsNCisNCisJZ2VubG1zZ19lbmQoc2tiLCBtc2df aGVhZCk7DQorCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgaHNyX25ldHdvcmtfZ2VubF9tY2dy cC5pZCwgR0ZQX0FUT01JQyk7DQorDQorCXJldHVybjsNCisNCitubGFfcHV0X2ZhaWx1cmU6DQor CWtmcmVlX3NrYihza2IpOw0KK30NCisNCisvKg0KKyAqIEhTUl9DX0dFVF9OT0RFX1NUQVRVUyBs ZXRzIHVzZXJzcGFjZSBxdWVyeSB0aGUgaW50ZXJuYWwgSFNSIG5vZGUgdGFibGUNCisgKiBhYm91 dCB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgbm9kZSBpbiB0aGUgbmV0d29yaywgZGVmaW5lZCBi eSBpdHMgTUFDDQorICogYWRkcmVzcy4NCisgKg0KKyAqIElucHV0OiBoc3IgaWZpbmRleCwgbm9k ZSBtYWMgYWRkcmVzcw0KKyAqIE91dHB1dDogaHNyIGlmaW5kZXgsIG5vZGUgbWFjIGFkZHJlc3Mg KGNvcGllZCBmcm9tIHJlcXVlc3QpLA0KKyAqIAkgICBhZ2Ugb2YgbGF0ZXN0IGZyYW1lIGZyb20g bm9kZSBvdmVyIHNsYXZlIDEsIHNsYXZlIDIgW21zXQ0KKyAqLw0KK3N0YXRpYyBpbnQgaHNyX2dl dF9ub2RlX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBzdHJ1Y3QgZ2VubF9pbmZvICpp bmZvKQ0KK3sNCisJLyogRm9yIHJlY2VpdmluZyAqLw0KKwlzdHJ1Y3QgbmxhdHRyICpuYTsNCisJ Y2hhciAqbm9kZV9hZGRyOw0KKwlzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2RldjsNCisNCisJLyog Rm9yIHNlbmRpbmcgKi8NCisJc3RydWN0IHNrX2J1ZmYgKnNrYl9vdXQ7DQorCXZvaWQgKm1zZ19o ZWFkOw0KKwlzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2Ow0KKwl1bnNpZ25lZCBsb25nIHRpbWUx LCB0aW1lMjsNCisNCisJaWYgKCFpbmZvKQ0KKwkJZ290byBpbnZhbGlkOw0KKw0KKwluYSA9IGlu Zm8tPmF0dHJzW0hTUl9BX0lGSU5ERVhdOw0KKwlpZiAoIW5hKQ0KKwkJZ290byBpbnZhbGlkOw0K KwluYSA9IGluZm8tPmF0dHJzW0hTUl9BX05PREVfQUREUl07DQorCWlmICghbmEpDQorCQlnb3Rv IGludmFsaWQ7DQorDQorCWhzcl9kZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25l dChpbmZvKSwNCisJCQkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW0hTUl9BX0lGSU5ERVhdKSk7 DQorCWlmICghaHNyX2RldikNCisJCWdvdG8gaW52YWxpZDsNCisJaWYgKCFpc19oc3JfbWFzdGVy KGhzcl9kZXYpKQ0KKwkJZ290byBpbnZhbGlkOw0KKw0KKw0KKwkvKiBTZW5kIHJlcGx5ICovDQor DQorCXNrYl9vdXQgPSBoc3JfY3JlYXRlX2dlbmxfbXNnKCZtc2dfaGVhZCwgR0ZQX0FUT01JQywN CisJCQkJCQkJSFNSX0NfU0VUX05PREVfU1RBVFVTKTsNCisJaWYgKCFza2Jfb3V0KQ0KKwkJcmV0 dXJuIC1FTk9NRU07DQorDQorCU5MQV9QVVRfVTMyKHNrYl9vdXQsIEhTUl9BX0lGSU5ERVgsIGhz cl9kZXYtPmlmaW5kZXgpOw0KKw0KKwlub2RlX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tI U1JfQV9OT0RFX0FERFJdKTsNCisJTkxBX1BVVChza2Jfb3V0LCBIU1JfQV9OT0RFX0FERFIsIEVU SF9BTEVOLCBub2RlX2FkZHIpOw0KKw0KKwloc3JfcHJpdiA9IG5ldGRldl9wcml2KGhzcl9kZXYp Ow0KKwlmcmFtZXJlZ19nZXRfbm9kZV90aW1lcyhoc3JfcHJpdiwgbm9kZV9hZGRyLCAmdGltZTEs ICZ0aW1lMik7DQorDQorCU5MQV9QVVRfVTMyKHNrYl9vdXQsIEhTUl9BX0lGMUFHRSwgdGltZTEg Pw0KKwkJCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gdGltZTEpIDogLTEpOw0KKwlOTEFf UFVUX1UzMihza2Jfb3V0LCBIU1JfQV9JRjJBR0UsIHRpbWUyID8NCisJCQkJCWppZmZpZXNfdG9f bXNlY3MoamlmZmllcyAtIHRpbWUyKSA6IC0xKTsNCisNCisJZ2VubG1zZ19lbmQoc2tiX291dCwg bXNnX2hlYWQpOw0KKwlnZW5sbXNnX3VuaWNhc3QoZ2VubF9pbmZvX25ldChpbmZvKSwgc2tiX291 dCwgaW5mby0+c25kX3BpZCk7DQorDQorCXJldHVybiAwOw0KKw0KK25sYV9wdXRfZmFpbHVyZToN CisJa2ZyZWVfc2tiKHNrYl9vdXQpOw0KKw0KKwlyZXR1cm4gLUVOT01FTTsNCisNCitpbnZhbGlk Og0KKwlyZXR1cm4gLUVJTlZBTDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBnZW5sX29wcyBoc3Jf b3BzX2dldF9ub2RlX3N0YXR1cyA9IHsNCisJLmNtZCA9IEhTUl9DX0dFVF9OT0RFX1NUQVRVUywN CisJLmZsYWdzID0gMCwNCisJLnBvbGljeSA9IGhzcl9nZW5sX3BvbGljeSwNCisJLmRvaXQgPSBo c3JfZ2V0X25vZGVfc3RhdHVzLA0KKwkuZHVtcGl0ID0gTlVMTCwNCit9Ow0KKw0KKw0KK2ludCBf X2luaXQgaHNyX25ldGxpbmtfaW5pdCh2b2lkKQ0KK3sNCisJaW50IHJjOw0KKw0KKwlyYyA9IHJ0 bmxfbGlua19yZWdpc3RlcigmaHNyX2xpbmtfb3BzKTsNCisJaWYgKHJjKQ0KKwkJZ290byBmYWls X3J0bmxfbGlua19yZWdpc3RlcjsNCisNCisJcmMgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmaHNy X2dlbmxfZmFtaWx5KTsNCisJaWYgKHJjKQ0KKwkJZ290byBmYWlsX2dlbmxfcmVnaXN0ZXJfZmFt aWx5Ow0KKw0KKwlyYyA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZoc3JfZ2VubF9mYW1pbHksICZoc3Jf b3BzX2dldF9ub2RlX3N0YXR1cyk7DQorCWlmIChyYykNCisJCWdvdG8gZmFpbF9nZW5sX3JlZ2lz dGVyX29wczsNCisNCisJcmMgPSBnZW5sX3JlZ2lzdGVyX21jX2dyb3VwKCZoc3JfZ2VubF9mYW1p bHksICZoc3JfbmV0d29ya19nZW5sX21jZ3JwKTsNCisJaWYgKHJjKQ0KKwkJZ290byBmYWlsX2dl bmxfcmVnaXN0ZXJfbWNfZ3JvdXA7DQorDQorCXJldHVybiAwOw0KKw0KK2ZhaWxfZ2VubF9yZWdp c3Rlcl9tY19ncm91cDoNCisJZ2VubF91bnJlZ2lzdGVyX29wcygmaHNyX2dlbmxfZmFtaWx5LCAm aHNyX29wc19nZXRfbm9kZV9zdGF0dXMpOw0KK2ZhaWxfZ2VubF9yZWdpc3Rlcl9vcHM6DQorCWdl bmxfdW5yZWdpc3Rlcl9mYW1pbHkoJmhzcl9nZW5sX2ZhbWlseSk7DQorZmFpbF9nZW5sX3JlZ2lz dGVyX2ZhbWlseToNCisJcnRubF9saW5rX3VucmVnaXN0ZXIoJmhzcl9saW5rX29wcyk7DQorZmFp bF9ydG5sX2xpbmtfcmVnaXN0ZXI6DQorDQorCXJldHVybiByYzsNCit9DQorDQordm9pZCBfX2V4 aXQgaHNyX25ldGxpbmtfZXhpdCh2b2lkKQ0KK3sNCisJZ2VubF91bnJlZ2lzdGVyX21jX2dyb3Vw KCZoc3JfZ2VubF9mYW1pbHksICZoc3JfbmV0d29ya19nZW5sX21jZ3JwKTsNCisJZ2VubF91bnJl Z2lzdGVyX29wcygmaHNyX2dlbmxfZmFtaWx5LCAmaHNyX29wc19nZXRfbm9kZV9zdGF0dXMpOw0K KwlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZoc3JfZ2VubF9mYW1pbHkpOw0KKw0KKwlydG5sX2xp bmtfdW5yZWdpc3RlcigmaHNyX2xpbmtfb3BzKTsNCit9DQorDQorTU9EVUxFX0FMSUFTX1JUTkxf TElOSygiaHNyIik7DQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbmV0bGluay5oIGIvbmV0L2hz ci9oc3JfbmV0bGluay5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNDI4 MmQ5Zg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbmV0L2hzci9oc3JfbmV0bGluay5oDQpAQCAtMCww ICsxLDY0IEBADQorLyoNCisgKiBDb3B5cmlnaHQgMjAxMS0yMDEyIEF1dHJvbmljYSBGaXJlIGFu ZCBTZWN1cml0eSBBUw0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQNCisgKiB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZQ0KKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikNCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0K KyAqIEF1dGhvcihzKToNCisgKgkyMDExLTIwMTIgQXJ2aWQgQnJvZGluLCBhcnZpZC5icm9kaW5A eGRpbi5jb20NCisgKi8NCisNCisjaWZuZGVmIF9fSFNSX05FVExJTktfSA0KKyNkZWZpbmUgX19I U1JfTkVUTElOS19IDQorDQorLyogYXR0cmlidXRlcyAqLw0KK2VudW0gew0KKwlIU1JfQV9VTlNQ RUMsDQorCUhTUl9BX05PREVfQUREUiwNCisJSFNSX0FfSUZJTkRFWCwNCisJSFNSX0FfSUYxQUdF LA0KKwlIU1JfQV9JRjJBR0UsDQorCV9fSFNSX0FfTUFYLA0KK307DQorI2RlZmluZSBIU1JfQV9N QVggKF9fSFNSX0FfTUFYIC0gMSkNCisNCisNCisjaWZkZWYgX19LRVJORUxfXw0KKw0KKyNpbmNs dWRlIDxsaW51eC9pZl9ldGhlci5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisNCitp bnQgX19pbml0IGhzcl9uZXRsaW5rX2luaXQodm9pZCk7DQordm9pZCBfX2V4aXQgaHNyX25ldGxp bmtfZXhpdCh2b2lkKTsNCisNCit2b2lkIGhzcl9ubF9yaW5nZXJyb3IodW5zaWduZWQgY2hhciBh ZGRyW0VUSF9BTEVOXSwgaW50IGRldl9pZHgpOw0KK3ZvaWQgaHNyX25sX25vZGVkb3duKHVuc2ln bmVkIGNoYXIgYWRkcltFVEhfQUxFTl0pOw0KK3ZvaWQgaHNyX25sX2ZyYW1lZHJvcChpbnQgZHJv cGNvdW50LCBpbnQgZGV2X2lkeCk7DQordm9pZCBoc3JfbmxfbGlua2Rvd24oaW50IGRldl9pZHgp Ow0KKw0KKw0KKy8qDQorICogR2VuZXJpYyBOZXRsaW5rIEhTUiBmYW1pbHkgZGVmaW5pdGlvbg0K KyAqLw0KKw0KKw0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovDQorDQorDQorDQorLyogY29tbWFu ZHMgKi8NCitlbnVtIHsNCisJSFNSX0NfVU5TUEVDLA0KKwlIU1JfQ19SSU5HX0VSUk9SLA0KKwlI U1JfQ19OT0RFX0RPV04sDQorCUhTUl9DX0dFVF9OT0RFX1NUQVRVUywNCisJSFNSX0NfU0VUX05P REVfU1RBVFVTLA0KKwlfX0hTUl9DX01BWCwNCit9Ow0KKyNkZWZpbmUgSFNSX0NfTUFYIChfX0hT Ul9DX01BWCAtIDEpDQorDQorDQorDQorI2VuZGlmIC8qIF9fSFNSX05FVExJTktfSCAqLw0KZGlm ZiAtLWdpdCBhL25ldC9oc3IvaHNyX3ByaXZhdGUuaCBiL25ldC9oc3IvaHNyX3ByaXZhdGUuaA0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjE1MjI5MDcNCi0tLSAvZGV2L251 bGwNCisrKyBiL25ldC9oc3IvaHNyX3ByaXZhdGUuaA0KQEAgLTAsMCArMSwxMTQgQEANCisvKg0K KyAqIENvcHlyaWdodCAyMDExLTIwMTIgQXV0cm9uaWNhIEZpcmUgYW5kIFNlY3VyaXR5IEFTDQor ICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlDQorICogU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKQ0KKyAqIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogQXV0aG9yKHMpOg0K KyAqCTIwMTEtMjAxMiBBcnZpZCBCcm9kaW4sIGFydmlkLmJyb2RpbkB4ZGluLmNvbQ0KKyAqLw0K Kw0KKyNpZm5kZWYgX0hTUl9QUklWQVRFX0gNCisjZGVmaW5lIF9IU1JfUFJJVkFURV9IDQorDQor I2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+DQor DQorDQorLyoNCisgKiBUaW1lIGNvbnN0YW50cyBhcyBzcGVjaWZpZWQgaW4gdGhlIEhTUiBzcGVj aWZpY2F0aW9uIChJRUMtNjI0MzktMykgVGFibGUgOC4NCisgKiBBbGwgdmFsdWVzIGluIG1pbGxp c2Vjb25kcy4NCisgKi8NCisjZGVmaW5lIEhTUl9MSUZFX0NIRUNLX0lOVEVSVkFMCQkgMjAwMCAv KiBtcyAqLw0KKyNkZWZpbmUgSFNSX05PREVfRk9SR0VUX1RJTUUJCTYwMDAwIC8qIG1zICovDQor I2RlZmluZSBIU1JfQU5OT1VOQ0VfSU5URVJWQUwJCSAgMTAwIC8qIG1zICovDQorDQorLyoNCisg KiBCeSBob3cgbXVjaCBtYXkgc2xhdmUxIGFuZCBzbGF2ZTIgdGltZXN0YW1wcyBvZiBsYXRlc3Qg cmVjZWl2ZWQgZnJhbWUgZnJvbQ0KKyAqIGVhY2ggbm9kZSBkaWZmZXIgYmVmb3JlIHdlIG5vdGlm eSBvZiBjb21tdW5pY2F0aW9uIHByb2JsZW0/DQorICovDQorI2RlZmluZSBNQVhfU0xBVkVfRElG RgkJCSAzMDAwIC8qIG1zICovDQorDQorLyoNCisgKiBIb3cgb2Z0ZW4gc2hhbGwgd2UgY2hlY2sg Zm9yIGJyb2tlbiByaW5nIGFuZCByZW1vdmUgbm9kZSBlbnRyaWVzIG9sZGVyIHRoYW4NCisgKiBI U1JfTk9ERV9GT1JHRVRfVElNRT8NCisgKi8NCisjZGVmaW5lIFBSVU5FX1BFUklPRAkJCSAzMDAw IC8qIG1zICovDQorDQorDQorI2RlZmluZSBIU1JfVExWX0FOTk9VTkNFCQkgICAyMg0KKyNkZWZp bmUgSFNSX1RMVl9MSUZFX0NIRUNLCQkgICAyMw0KKw0KKw0KKy8qDQorICogSFNSIFRhZy4NCisg KiBBcyBkZWZpbmVkIGluIElFQy02MjQzOS0zLCB0aGUgSFNSIHRhZyBpcyByZWFsbHkgeyBldGhl cnR5cGUgPSAweDg4RkIsIHBhdGgsDQorICogTFNEVV9zaXplLCBzZXF1ZW5jZSBOciB9LiBCdXQg d2UgbGV0IGV0aF9oZWFkZXIoKSBjcmVhdGUgeyBoX2Rlc3QsIGhfc291cmNlLA0KKyAqIGhfcHJv dG8gPSAweDg4RkIgfSwgYW5kIGFkZCB7IHBhdGgsIExTRFVfc2l6ZSwgc2VxdWVuY2UgTnIsIGVu Y2Fwc3VsYXRlZA0KKyAqIHByb3RvY29sIH0gaW5zdGVhZC4NCisgKi8NCisjaWZkZWYgQ09ORklH X05PTlNUQU5EQVJEX0hTUg0KKyNkZWZpbmUgSFNSX1RBR0xFTgk4DQorI2Vsc2UNCisjZGVmaW5l IEhTUl9UQUdMRU4JNg0KKyNlbmRpZg0KK3N0cnVjdCBoc3JfdGFnIHsNCisvKg0KKwlUaGlzIGlz IG5pY2UgYnV0IEknbSBub3Qgc3VyZSBpdCBpcyAicG9ydGFibHkgY29tcGF0aWJsZSIgd2l0aA0K KwllbmRpYW5uZXNzIHN3YXBzOg0KKwlfX2JlMTYJCXBhdGg6NDsNCisJX19iZTE2CQlMU0RVX3Np emU6MTI7DQorKi8NCisJX19iZTE2CQlwYXRoX2FuZF9MU0RVX3NpemU7DQorCV9fYmUxNgkJc2Vx dWVuY2VfbnI7DQorCV9fYmUxNgkJZW5jYXBfcHJvdG87DQorI2lmZGVmIENPTkZJR19OT05TVEFO REFSRF9IU1INCisJX19iZTE2CQlwYWRkaW5nOw0KKyNlbmRpZg0KK30gX19wYWNrZWQ7DQorDQor c3RydWN0IGhzcl9ldGhoZHIgew0KKwlzdHJ1Y3QgZXRoaGRyCWV0aGhkcjsNCisJc3RydWN0IGhz cl90YWcJaHNyX3RhZzsNCit9IF9fcGFja2VkOw0KKw0KKw0KK3N0cnVjdCBoc3Jfc3VwZXJ2aXNp b25fdGFnIHsNCisJX19iZTE2CQlwYXRoX2FuZF9IU1JfdmVyOw0KKwlfX2JlMTYJCXNlcXVlbmNl X25yOw0KKwlfX3U4CQlIU1JfVExWX1R5cGU7DQorCV9fdTgJCUhTUl9UTFZfTGVuZ3RoOw0KKyNp ZmRlZiBDT05GSUdfTk9OU1RBTkRBUkRfSFNSDQorCV9fYmUxNgkJcGFkZGluZzsNCisjZW5kaWYN CisJdW5zaWduZWQgY2hhcglNYWNBZGRyZXNzQVtFVEhfQUxFTl07DQorfSBfX3BhY2tlZDsNCisN CisNCitzdHJ1Y3QgaHNyX3NsYXZlX2RhdGEgew0KKwlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2Ow0K KwlpbnQgcHJvbWlzYzsNCisJaW50IHdhc191cDsNCit9Ow0KKw0KK3N0cnVjdCBoc3JfcHJpdiB7 DQorCXN0cnVjdCBsaXN0X2hlYWQJaHNyX2xpc3Q7CS8qIExpc3Qgb2YgaHNyIGRldmljZXMgKi8N CisJc3RydWN0IHJjdV9oZWFkCQlyY3VfaGVhZDsNCisJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsN CisJc3RydWN0IGhzcl9zbGF2ZV9kYXRhCXNsYXZlX2RhdGFbMl07DQorCXN0cnVjdCBsaXN0X2hl YWQJbm9kZV9kYjsJLyogT3RoZXIgSFNSIG5vZGVzICovDQorCXN0cnVjdCBsaXN0X2hlYWQJc2Vs Zl9ub2RlX2RiOwkvKiBNQUNzIG9mIHNsYXZlcyAqLw0KKwlzdHJ1Y3QgdGltZXJfbGlzdAlhbm5v dW5jZV90aW1lcjsJLyogU3VwZXJ2aXNpb24gZnJhbWUgZGlzcGF0Y2ggKi8NCisJaW50IGFubm91 bmNlX2NvdW50Ow0KKwl1MTYgc2VxdWVuY2VfbnI7DQorCXNwaW5sb2NrX3Qgc2VxbG9jazsNCit9 Ow0KKw0KK2V4dGVybiBjb25zdCB1OCBoc3JfbXVsdGljYXN0X2FkZHJbRVRIX0FMRU5dOw0KKw0K K3ZvaWQgcmVnaXN0ZXJfaHNyX21hc3RlcihzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2KTsNCit2 b2lkIHVucmVnaXN0ZXJfaHNyX21hc3RlcihzdHJ1Y3QgaHNyX3ByaXYgKmhzcl9wcml2KTsNCisN CisjZW5kaWYgLyogIF9IU1JfUFJJVkFURV9IICovDQoNCg0KLS0gDQpBcnZpZCBCcm9kaW4gfCBD b25zdWx0YW50IChMaW51eCkNClhESU4gQUIgfCBKYW4gU3RlbmJlY2tzIFRvcmcgMTcgfCBTRS0x NjQgNDAgS2lzdGEgfCBTd2VkZW4gfCB4ZGluLmNvbQ==