From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brian Welty Subject: [RFC PATCH 1/5] cgroup: Add cgroup_subsys per-device registration framework Date: Wed, 1 May 2019 10:04:34 -0400 Message-ID: <20190501140438.9506-2-brian.welty@intel.com> References: <20190501140438.9506-1-brian.welty@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190501140438.9506-1-brian.welty@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: cgroups@vger.kernel.org, Tejun Heo , Li Zefan , Johannes Weiner , linux-mm@kvack.org, Michal Hocko , Vladimir Davydov , dri-devel@lists.freedesktop.org, David Airlie , Daniel Vetter , intel-gfx@lists.freedesktop.org, Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , =?UTF-8?q?Christian=20K=C3=B6nig?= , Alex Deucher , ChunMing Zhou , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= List-Id: intel-gfx@lists.freedesktop.org SW4gY29udGFpbmVyaXplZCBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZXJlIGlzIGRl c2lyZSB0byBoYXZlCmNvbnRyb2xzIGluIHBsYWNlIGZvciByZXNvdXJjZXMgdGhhdCBjYW4gYmUg Y29uc3VtZWQgYnkgdXNlcnMgb2YgYSBHUFUKZGV2aWNlLiAgRm9yIHRoaXMgcHVycG9zZSwgd2Ug ZXh0ZW5kIGNvbnRyb2wgZ3JvdXBzIHdpdGggYSBtZWNoYW5pc20KZm9yIGRldmljZSBkcml2ZXJz IHRvIHJlZ2lzdGVyIHdpdGggY2dyb3VwIHN1YnN5c3RlbXMuCkRldmljZSBkcml2ZXJzIChHUFUg b3Igb3RoZXIpIGFyZSB0aGVuIGFibGUgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIGNncm91cApjb250 cm9scywgaW5zdGVhZCBvZiBpbnZlbnRpbmcgc2ltaWxhciBvbmVzLgoKQSBuZXcgZnJhbWV3b3Jr IGlzIHByb3Bvc2VkIHRvIGFsbG93IGRldmljZXMgdG8gcmVnaXN0ZXIgd2l0aCBleGlzdGluZwpj Z3JvdXAgY29udHJvbGxlcnMsIHdoaWNoIGNyZWF0ZXMgcGVyLWRldmljZSBjZ3JvdXBfc3Vic3lz X3N0YXRlIHdpdGhpbgp0aGUgY2dyb3VwLiAgVGhpcyBnaXZlcyBkZXZpY2UgZHJpdmVycyB0aGVp ciBvd24gcHJpdmF0ZSBjZ3JvdXAgY29udHJvbHMKKHN1Y2ggYXMgbWVtb3J5IGxpbWl0cyBvciBv dGhlciBwYXJhbWV0ZXJzKSB0byBiZSBhcHBsaWVkIHRvIGRldmljZQpyZXNvdXJjZXMgaW5zdGVh ZCBvZiBob3N0IHN5c3RlbSByZXNvdXJjZXMuCgpJdCBpcyBleHBvc2VkIGluIGNncm91cCBmaWxl c3lzdGVtIGFzOgogIG1vdW50LzxjZ3JvdXBfbmFtZT4vPHN1YnN5c19uYW1lPi5kZXZpY2VzLzxk ZXZfbmFtZT4vCnN1Y2ggYXMgKGZvciBleGFtcGxlKToKICBtb3VudC88Y2dyb3VwX25hbWU+L21l bW9yeS5kZXZpY2VzLzxkZXZfbmFtZT4vbWVtb3J5Lm1heAogIG1vdW50LzxjZ3JvdXBfbmFtZT4v bWVtb3J5LmRldmljZXMvPGRldl9uYW1lPi9tZW1vcnkuY3VycmVudAogIG1vdW50LzxjZ3JvdXBf bmFtZT4vY3B1LmRldmljZXMvPGRldl9uYW1lPi9jcHUuc3RhdAoKVGhlIGNyZWF0aW9uIG9mIGFi b3ZlIGZpbGVzIGlzIGltcGxlbWVudGVkIGluIGNzc19wb3B1bGF0ZV9kaXIoKSBmb3IKY2dyb3Vw IHN1YnN5c3RlbXMgdGhhdCBoYXZlIGVuYWJsZWQgcGVyLWRldmljZSBzdXBwb3J0LgpBYm92ZSBm aWxlcyBhcmUgY3JlYXRlZCBlaXRoZXIgYXQgdGltZSBvZiBjZ3JvdXAgY3JlYXRpb24gKGZvciBr bm93bgpyZWdpc3RlcmVkIGRldmljZXMpIG9yIGF0IHRoZSB0aW1lIG9mIGRldmljZSBkcml2ZXIg cmVnaXN0cmF0aW9uIG9mIHRoZQpkZXZpY2UsIGR1cmluZyBjZ3JvdXBfcmVnaXN0ZXJfZGV2aWNl LiAgY2dyb3VwX2RldmljZV91bnJlZ2lzdGVyIHdpbGwKcmVtb3ZlIGZpbGVzIGZyb20gYWxsIGN1 cnJlbnQgY2dyb3Vwcy4KCkNjOiBjZ3JvdXBzQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtbW1A a3ZhY2sub3JnCkNjOiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCkNjOiBNYXR0IFJv cGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBCcmlhbiBXZWx0 eSA8YnJpYW4ud2VsdHlAaW50ZWwuY29tPgotLS0KIGluY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMu aCB8ICAyOCArKysrCiBpbmNsdWRlL2xpbnV4L2Nncm91cC5oICAgICAgfCAgIDMgKwoga2VybmVs L2Nncm91cC9jZ3JvdXAuYyAgICAgIHwgMjcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystLQogMyBmaWxlcyBjaGFuZ2VkLCAyODkgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oIGIvaW5jbHVkZS9s aW51eC9jZ3JvdXAtZGVmcy5oCmluZGV4IDFjNzA4MDNlOWY3Ny4uYWVhYWI0MjBlMzQ5IDEwMDY0 NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9j Z3JvdXAtZGVmcy5oCkBAIC0xNjIsNiArMTYyLDE3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0 YXRlIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVzdHJveV93b3JrOwogCXN0cnVjdCByY3Vfd29y ayBkZXN0cm95X3J3b3JrOwogCisJLyoKKwkgKiBQZXItZGV2aWNlIHN0YXRlIGZvciBkZXZpY2Vz IHJlZ2lzdGVyZWQgd2l0aCBvdXIgc3Vic3lzLgorCSAqIEBkZXZpY2VfY3NzX2lkciBzdG9yZXMg cG9pbnRlciB0byBwZXItZGV2aWNlIGNncm91cF9zdWJzeXNfc3RhdGUsCisJICogY3JlYXRlZCB3 aGVuIGRldmljZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNzcy4KKwkgKiBAZGV2aWNlX2tu IGlzIGZvciBjcmVhdGluZyAuZGV2aWNlcyBzdWItZGlyZWN0b3J5IHdpdGhpbiB0aGlzIGNncm91 cAorCSAqIG9yIGZvciB0aGUgcGVyLWRldmljZSBzdWItZGlyZWN0b3J5IChzdWJzeXMuZGV2aWNl cy88ZGV2X25hbWU+KS4KKwkgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IGlk ciBkZXZpY2VfY3NzX2lkcjsKKwlzdHJ1Y3Qga2VybmZzX25vZGUgKmRldmljZV9rbjsKKwogCS8q CiAJICogUEk6IHRoZSBwYXJlbnQgY3NzLglQbGFjZWQgaGVyZSBmb3IgY2FjaGUgcHJveGltaXR5 IHRvIGZvbGxvd2luZwogCSAqIGZpZWxkcyBvZiB0aGUgY29udGFpbmluZyBzdHJ1Y3R1cmUuCkBA IC01ODksNiArNjAwLDkgQEAgc3RydWN0IGNmdHlwZSB7CiAgKi8KIHN0cnVjdCBjZ3JvdXBfc3Vi c3lzIHsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqKCpjc3NfYWxsb2MpKHN0cnVjdCBj Z3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKTsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19z dGF0ZSAqKCpkZXZpY2VfY3NzX2FsbG9jKShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkJCQkJ c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNncm91cF9jc3MsCisJCQkJCQkJc3RydWN0IGNn cm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9kZXZpY2VfY3NzKTsKIAlpbnQgKCpjc3Nfb25saW5l KShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKTsKIAl2b2lkICgqY3NzX29mZmxpbmUp KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpOwogCXZvaWQgKCpjc3NfcmVsZWFzZWQp KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpOwpAQCAtNjM2LDYgKzY1MCwxMyBAQCBz dHJ1Y3QgY2dyb3VwX3N1YnN5cyB7CiAJICovCiAJYm9vbCB0aHJlYWRlZDoxOwogCisJLyoKKwkg KiBJZiAldHJ1ZSwgdGhlIGNvbnRyb2xsZXIgc3VwcG9ydHMgZGV2aWNlIGRyaXZlcnMgdG8gcmVn aXN0ZXIKKwkgKiB3aXRoIHRoaXMgY29udHJvbGxlciBmb3IgY2xvbmluZyB0aGUgY2dyb3VwIGZ1 bmN0aW9uYWxpdHkKKwkgKiBpbnRvIHBlci1kZXZpY2UgY2dyb3VwIHN0YXRlIHVuZGVyIDxjZ3Jv dXAtbmFtZT4uZGV2LzxkZXZfbmFtZT4vLgorCSAqLworCWJvb2wgYWxsb3dfZGV2aWNlczoxOwor CiAJLyoKIAkgKiBJZiAlZmFsc2UsIHRoaXMgc3Vic3lzdGVtIGlzIHByb3Blcmx5IGhpZXJhcmNo aWNhbCAtCiAJICogY29uZmlndXJhdGlvbiwgcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgcmVzdHJp Y3Rpb24gb24gYSBwYXJlbnQKQEAgLTY2NCw2ICs2ODUsMTMgQEAgc3RydWN0IGNncm91cF9zdWJz eXMgewogCS8qIGlkciBmb3IgY3NzLT5pZCAqLwogCXN0cnVjdCBpZHIgY3NzX2lkcjsKIAorCS8q CisJICogSURSIG9mIHJlZ2lzdGVyZWQgZGV2aWNlcywgYWxsb3dzIHN1YnN5c19zdGF0ZSB0byBo YXZlIHN0YXRlCisJICogZm9yIGVhY2ggZGV2aWNlLiBFeHBvc2VkIGFzIHBlci1kZXZpY2UgZW50 cmllcyBpbiBmaWxlc3lzdGVtLAorCSAqIHVuZGVyIDxzdWJzeXNfbmFtZT4uZGV2aWNlLzxkZXZf bmFtZT4vLgorCSAqLworCXN0cnVjdCBpZHIgZGV2aWNlX2lkcjsKKwogCS8qCiAJICogTGlzdCBv ZiBjZnR5cGVzLiAgRWFjaCBlbnRyeSBpcyB0aGUgZmlyc3QgZW50cnkgb2YgYW4gYXJyYXkKIAkg KiB0ZXJtaW5hdGVkIGJ5IHplcm8gbGVuZ3RoIG5hbWUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xp bnV4L2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAppbmRleCA4MWY1OGI0YTU0MTgu LjM1MzFiZjk0ODcwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9p bmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC0xMTYsNiArMTE2LDkgQEAgaW50IGNncm91cHN0YXRz X2J1aWxkKHN0cnVjdCBjZ3JvdXBzdGF0cyAqc3RhdHMsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7 CiBpbnQgcHJvY19jZ3JvdXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFt ZXNwYWNlICpucywKIAkJICAgICBzdHJ1Y3QgcGlkICpwaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAq dHNrKTsKIAoraW50IGNncm91cF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGNncm91cF9zdWJzeXMg KnNzLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICB1bnNpZ25lZCBsb25nICpkZXZfaWQpOwor dm9pZCBjZ3JvdXBfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCB1 bnNpZ25lZCBsb25nIGRldl9pZCk7CiB2b2lkIGNncm91cF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVj dCAqcCk7CiBleHRlcm4gaW50IGNncm91cF9jYW5fZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAp OwogZXh0ZXJuIHZvaWQgY2dyb3VwX2NhbmNlbF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7 CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC9jZ3Jv dXAuYwppbmRleCAzZjJiNGJkZTBmOWMuLjliMDM1ZTcyODk0MSAxMDA2NDQKLS0tIGEva2VybmVs L2Nncm91cC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwL2Nncm91cC5jCkBAIC01OTgsNiAr NTk4LDggQEAgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm9mX2NzcyhzdHJ1Y3Qga2VybmZz X29wZW5fZmlsZSAqb2YpCiAJc3RydWN0IGNncm91cCAqY2dycCA9IG9mLT5rbi0+cGFyZW50LT5w cml2OwogCXN0cnVjdCBjZnR5cGUgKmNmdCA9IG9mX2NmdChvZik7CiAKKwkvKiBGSVhNRSB0aGlz IG5lZWRzIHVwZGF0aW5nIHRvIGxvb2t1cCBkZXZpY2Utc3BlY2lmaWMgQ1NTICovCisKIAkvKgog CSAqIFRoaXMgaXMgb3BlbiBhbmQgdW5wcm90ZWN0ZWQgaW1wbGVtZW50YXRpb24gb2YgY2dyb3Vw X2NzcygpLgogCSAqIHNlcV9jc3MoKSBpcyBvbmx5IGNhbGxlZCBmcm9tIGEga2VybmZzIGZpbGUg b3BlcmF0aW9uIHdoaWNoIGhhcwpAQCAtMTU4MywxNCArMTU4NSwxNSBAQCBzdHJ1Y3QgY2dyb3Vw ICpjZ3JvdXBfa25fbG9ja19saXZlKHN0cnVjdCBrZXJuZnNfbm9kZSAqa24sIGJvb2wgZHJhaW5f b2ZmbGluZSkKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgY2dyb3VwX3JtX2ZpbGUo c3RydWN0IGNncm91cCAqY2dycCwgY29uc3Qgc3RydWN0IGNmdHlwZSAqY2Z0KQorc3RhdGljIHZv aWQgY2dyb3VwX3JtX2ZpbGUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgc3RydWN0 IGNncm91cCAqY2dycCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBjZnR5cGUgKmNmdCkKIHsKIAljaGFy IG5hbWVbQ0dST1VQX0ZJTEVfTkFNRV9NQVhdOworCXN0cnVjdCBrZXJuZnNfbm9kZSAqZGVzdF9r bjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmNncm91cF9tdXRleCk7CiAKIAlpZiAoY2Z0LT5m aWxlX29mZnNldCkgewotCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzID0gY2dyb3Vw X2NzcyhjZ3JwLCBjZnQtPnNzKTsKIAkJc3RydWN0IGNncm91cF9maWxlICpjZmlsZSA9ICh2b2lk ICopY3NzICsgY2Z0LT5maWxlX29mZnNldDsKIAogCQlzcGluX2xvY2tfaXJxKCZjZ3JvdXBfZmls ZV9rbl9sb2NrKTsKQEAgLTE2MDAsNiArMTYwMyw3IEBAIHN0YXRpYyB2b2lkIGNncm91cF9ybV9m aWxlKHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHN0cnVjdCBjZnR5cGUgKmNmdCkKIAkJZGVs X3RpbWVyX3N5bmMoJmNmaWxlLT5ub3RpZnlfdGltZXIpOwogCX0KIAorCWRlc3Rfa24gPSAoY3Nz LT5kZXZpY2UpID8gY3NzLT5kZXZpY2Vfa24gOiBjZ3JwLT5rbjsKIAlrZXJuZnNfcmVtb3ZlX2J5 X25hbWUoY2dycC0+a24sIGNncm91cF9maWxlX25hbWUoY2dycCwgY2Z0LCBuYW1lKSk7CiB9CiAK QEAgLTE2MzAsMTAgKzE2MzQsNDkgQEAgc3RhdGljIHZvaWQgY3NzX2NsZWFyX2RpcihzdHJ1Y3Qg Y2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCX0KIH0KIAorc3RhdGljIGludCBjZ3JvdXBfZGV2 aWNlX21rZGlyKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCit7CisJc3RydWN0IGNn cm91cF9zdWJzeXNfc3RhdGUgKmRldmljZV9jc3M7CisJc3RydWN0IGNncm91cCAqY2dycCA9IGNz cy0+Y2dyb3VwOworCWNoYXIgbmFtZVtDR1JPVVBfRklMRV9OQU1FX01BWF07CisJc3RydWN0IGtl cm5mc19ub2RlICprbjsKKwlpbnQgcmV0LCBkZXZfaWQ7CisKKwkvKiBjcmVhdGUgc3Vic3lzLmRl dmljZSBvbmx5IGlmIGVuYWJsZWQgaW4gc3Vic3lzIGFuZCBub24tcm9vdCBjZ3JvdXAgKi8KKwlp ZiAoIWNzcy0+c3MtPmFsbG93X2RldmljZXMgfHwgIWNncm91cF9wYXJlbnQoY2dycCkpCisJCXJl dHVybiAwOworCisJcmV0ID0gc3RybGNweShuYW1lLCBjc3MtPnNzLT5uYW1lLCBDR1JPVVBfRklM RV9OQU1FX01BWCk7CisJcmV0ICs9IHN0cmxjYXQobmFtZSwgIi5kZXZpY2UiLCBDR1JPVVBfRklM RV9OQU1FX01BWCk7CisJLyogdHJlYXQgYXMgbm9uLWVycm9yIGlmIHRydW5jYXRpb24gZHVlIHRv IHN1YnN5cyBuYW1lICovCisJaWYgKFdBUk5fT05fT05DRShyZXQgPj0gQ0dST1VQX0ZJTEVfTkFN RV9NQVgpKQorCQlyZXR1cm4gMDsKKworCWtuID0ga2VybmZzX2NyZWF0ZV9kaXIoY2dycC0+a24s IG5hbWUsIGNncnAtPmtuLT5tb2RlLCBjZ3JwKTsKKwlpZiAoSVNfRVJSKGtuKSkKKwkJcmV0dXJu IFBUUl9FUlIoa24pOworCWNzcy0+ZGV2aWNlX2tuID0ga247CisKKwkvKiBjcmVhdGUgc3ViZGly ZWN0b3J5IHBlciBlYWNoIHJlZ2lzdGVyZWQgZGV2aWNlICovCisJaWRyX2Zvcl9lYWNoX2VudHJ5 KCZjc3MtPmRldmljZV9jc3NfaWRyLCBkZXZpY2VfY3NzLCBkZXZfaWQpIHsKKwkJLyogRklYTUU6 IHByZWZpeCBkZXZfbmFtZSB3aXRoIGJ1c19uYW1lIGZvciB1bmlxdWVuZXNzPyAqLworCQlrbiA9 IGtlcm5mc19jcmVhdGVfZGlyKGNzcy0+ZGV2aWNlX2tuLAorCQkJCSAgICAgICBkZXZfbmFtZShk ZXZpY2VfY3NzLT5kZXZpY2UpLAorCQkJCSAgICAgICBjZ3JwLT5rbi0+bW9kZSwgY2dycCk7CisJ CWlmIChJU19FUlIoa24pKQorCQkJcmV0dXJuIFBUUl9FUlIoa24pOworCQkvKiBGSVhNRToga2Vy bmZzX2dldCBuZWVkZWQgaGVyZT8gKi8KKwkJZGV2aWNlX2Nzcy0+ZGV2aWNlX2tuID0ga247CisJ fQorCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogY3NzX3BvcHVsYXRlX2RpciAtIGNyZWF0ZSBz dWJzeXMgZmlsZXMgaW4gYSBjZ3JvdXAgZGlyZWN0b3J5CiAgKiBAY3NzOiB0YXJnZXQgY3NzCiAg KgorICogQ3JlYXRlcyBwZXItZGV2aWNlIGRpcmVjdG9yaWVzIGlmIGVuYWJsZWQgaW4gc3Vic3lz LgogICogT24gZmFpbHVyZSwgbm8gZmlsZSBpcyBhZGRlZC4KICAqLwogc3RhdGljIGludCBjc3Nf cG9wdWxhdGVfZGlyKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCkBAIC0xNjU1LDYg KzE2OTgsMTAgQEAgc3RhdGljIGludCBjc3NfcG9wdWxhdGVfZGlyKHN0cnVjdCBjZ3JvdXBfc3Vi c3lzX3N0YXRlICpjc3MpCiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAl9IGVsc2Ug eworCQlyZXQgPSBjZ3JvdXBfZGV2aWNlX21rZGlyKGNzcyk7CisJCWlmIChyZXQgPCAwKQorCQkJ cmV0dXJuIHJldDsKKwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNmdHMsICZjc3MtPnNzLT5jZnRz LCBub2RlKSB7CiAJCQlyZXQgPSBjZ3JvdXBfYWRkcm1fZmlsZXMoY3NzLCBjZ3JwLCBjZnRzLCB0 cnVlKTsKIAkJCWlmIChyZXQgPCAwKSB7CkBAIC0xNjczLDYgKzE3MjAsNyBAQCBzdGF0aWMgaW50 IGNzc19wb3B1bGF0ZV9kaXIoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAkJCWJy ZWFrOwogCQljZ3JvdXBfYWRkcm1fZmlsZXMoY3NzLCBjZ3JwLCBjZnRzLCBmYWxzZSk7CiAJfQor CS8qIEZJWE1FOiBwZXItZGV2aWNlIGZpbGVzIHdpbGwgYmUgcmVtb3ZlZCBieSBrZXJuZnNfZGVz dHJveV9yb290PyAqLwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM2NjUsMTQgKzM3MTMsMTUgQEAg c3RhdGljIGludCBjZ3JvdXBfYWRkX2ZpbGUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNz cywgc3RydWN0IGNncm91cCAqY2dycCwKIAkJCSAgIHN0cnVjdCBjZnR5cGUgKmNmdCkKIHsKIAlj aGFyIG5hbWVbQ0dST1VQX0ZJTEVfTkFNRV9NQVhdOwotCXN0cnVjdCBrZXJuZnNfbm9kZSAqa247 CisJc3RydWN0IGtlcm5mc19ub2RlICprbiwgKmRlc3Rfa247CiAJc3RydWN0IGxvY2tfY2xhc3Nf a2V5ICprZXkgPSBOVUxMOwogCWludCByZXQ7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19B TExPQwogCWtleSA9ICZjZnQtPmxvY2tkZXBfa2V5OwogI2VuZGlmCi0Ja24gPSBfX2tlcm5mc19j cmVhdGVfZmlsZShjZ3JwLT5rbiwgY2dyb3VwX2ZpbGVfbmFtZShjZ3JwLCBjZnQsIG5hbWUpLAor CWRlc3Rfa24gPSAoY3NzLT5kZXZpY2UpID8gY3NzLT5kZXZpY2Vfa24gOiBjZ3JwLT5rbjsKKwlr biA9IF9fa2VybmZzX2NyZWF0ZV9maWxlKGRlc3Rfa24sIGNncm91cF9maWxlX25hbWUoY2dycCwg Y2Z0LCBuYW1lKSwKIAkJCQkgIGNncm91cF9maWxlX21vZGUoY2Z0KSwKIAkJCQkgIEdMT0JBTF9S T09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELAogCQkJCSAgMCwgY2Z0LT5rZl9vcHMsIGNmdCwKQEAg LTM3MDksMTUgKzM3NTgsMTMgQEAgc3RhdGljIGludCBjZ3JvdXBfYWRkX2ZpbGUoc3RydWN0IGNn cm91cF9zdWJzeXNfc3RhdGUgKmNzcywgc3RydWN0IGNncm91cCAqY2dycCwKICAqIERlcGVuZGlu ZyBvbiBAaXNfYWRkLCBhZGQgb3IgcmVtb3ZlIGZpbGVzIGRlZmluZWQgYnkgQGNmdHMgb24gQGNn cnAuCiAgKiBGb3IgcmVtb3ZhbHMsIHRoaXMgZnVuY3Rpb24gbmV2ZXIgZmFpbHMuCiAgKi8KLXN0 YXRpYyBpbnQgY2dyb3VwX2FkZHJtX2ZpbGVzKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpj c3MsCi0JCQkgICAgICBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlIGNmdHNbXSwK LQkJCSAgICAgIGJvb2wgaXNfYWRkKQorc3RhdGljIGludCBfX2Nncm91cF9hZGRybV9maWxlcyhz dHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAorCQkJCXN0cnVjdCBjZ3JvdXAgKmNncnAs IHN0cnVjdCBjZnR5cGUgY2Z0c1tdLAorCQkJCWJvb2wgaXNfYWRkKQogewogCXN0cnVjdCBjZnR5 cGUgKmNmdCwgKmNmdF9lbmQgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JbG9ja2RlcF9hc3Nl cnRfaGVsZCgmY2dyb3VwX211dGV4KTsKLQogcmVzdGFydDoKIAlmb3IgKGNmdCA9IGNmdHM7IGNm dCAhPSBjZnRfZW5kICYmIGNmdC0+bmFtZVswXSAhPSAnXDAnOyBjZnQrKykgewogCQkvKiBkb2Vz IGNmdC0+ZmxhZ3MgdGVsbCB1cyB0byBza2lwIHRoaXMgZmlsZSBvbiBAY2dycD8gKi8KQEAgLTM3 NDEsMTIgKzM3ODgsNDMgQEAgc3RhdGljIGludCBjZ3JvdXBfYWRkcm1fZmlsZXMoc3RydWN0IGNn cm91cF9zdWJzeXNfc3RhdGUgKmNzcywKIAkJCQlnb3RvIHJlc3RhcnQ7CiAJCQl9CiAJCX0gZWxz ZSB7Ci0JCQljZ3JvdXBfcm1fZmlsZShjZ3JwLCBjZnQpOworCQkJY2dyb3VwX3JtX2ZpbGUoY3Nz LCBjZ3JwLCBjZnQpOwogCQl9CiAJfQogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgY2dy b3VwX2FkZHJtX2ZpbGVzKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCisJCQkgICAg ICBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlIGNmdHNbXSwKKwkJCSAgICAgIGJv b2wgaXNfYWRkKQoreworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpkZXZpY2VfY3NzLCAq ZGV2aWNlX2Nzc19lbmQgPSBOVUxMOworCWludCBkZXZfaWQsIHJldCwgZXJyID0gMDsKKworCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmNncm91cF9tdXRleCk7CityZXN0YXJ0OgorCXJldCA9IF9fY2dy b3VwX2FkZHJtX2ZpbGVzKGNzcywgY2dycCwgY2Z0cywgaXNfYWRkKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJLyogcmVwZWF0IGFkZHJtIGZvciBlYWNoIGRldmljZSAqLworCWlkcl9m b3JfZWFjaF9lbnRyeSgmY3NzLT5kZXZpY2VfY3NzX2lkciwgZGV2aWNlX2NzcywgZGV2X2lkKSB7 CisJCWlmIChkZXZpY2VfY3NzID09IGRldmljZV9jc3NfZW5kKQorCQkJYnJlYWs7CisJCXJldCA9 IF9fY2dyb3VwX2FkZHJtX2ZpbGVzKGRldmljZV9jc3MsIGNncnAsIGNmdHMsIGlzX2FkZCk7CisJ CWlmIChyZXQgJiYgIWlzX2FkZCkgeworCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIGlmIChyZXQp IHsKKwkJCWlzX2FkZCA9IGZhbHNlOworCQkJZGV2aWNlX2Nzc19lbmQgPSBkZXZpY2VfY3NzOwor CQkJZXJyID0gcmV0OworCQkJZ290byByZXN0YXJ0OworCQl9CisJfQorCisJcmV0dXJuIGVycjsK K30KKwogc3RhdGljIGludCBjZ3JvdXBfYXBwbHlfY2Z0eXBlcyhzdHJ1Y3QgY2Z0eXBlICpjZnRz LCBib29sIGlzX2FkZCkKIHsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBjZnRzWzBdLnNz OwpAQCAtNDcxMSw5ICs0Nzg5LDE0IEBAIHN0YXRpYyB2b2lkIGNzc19mcmVlX3J3b3JrX2ZuKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAogCWlmIChzcykgewogCQkvKiBjc3MgZnJlZSBwYXRo ICovCi0JCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnQgPSBjc3MtPnBhcmVudDsK LQkJaW50IGlkID0gY3NzLT5pZDsKKwkJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmRldmlj ZV9jc3MsICpwYXJlbnQgPSBjc3MtPnBhcmVudDsKKwkJaW50IGRldl9pZCwgaWQgPSBjc3MtPmlk OwogCisJCWlkcl9mb3JfZWFjaF9lbnRyeSgmY3NzLT5kZXZpY2VfY3NzX2lkciwgZGV2aWNlX2Nz cywgZGV2X2lkKSB7CisJCQljc3NfcHV0KGRldmljZV9jc3MtPnBhcmVudCk7CisJCQlzcy0+Y3Nz X2ZyZWUoZGV2aWNlX2Nzcyk7CisJCX0KKwkJaWRyX2Rlc3Ryb3koJmNzcy0+ZGV2aWNlX2Nzc19p ZHIpOwogCQlzcy0+Y3NzX2ZyZWUoY3NzKTsKIAkJY2dyb3VwX2lkcl9yZW1vdmUoJnNzLT5jc3Nf aWRyLCBpZCk7CiAJCWNncm91cF9wdXQoY2dycCk7CkBAIC00ODMzLDYgKzQ5MTYsNyBAQCBzdGF0 aWMgdm9pZCBpbml0X2FuZF9saW5rX2NzcyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3Nz LAogCUlOSVRfTElTVF9IRUFEKCZjc3MtPnJzdGF0X2Nzc19ub2RlKTsKIAljc3MtPnNlcmlhbF9u ciA9IGNzc19zZXJpYWxfbnJfbmV4dCsrOwogCWF0b21pY19zZXQoJmNzcy0+b25saW5lX2NudCwg MCk7CisJaWRyX2luaXQoJmNzcy0+ZGV2aWNlX2Nzc19pZHIpOwogCiAJaWYgKGNncm91cF9wYXJl bnQoY2dycCkpIHsKIAkJY3NzLT5wYXJlbnQgPSBjZ3JvdXBfY3NzKGNncm91cF9wYXJlbnQoY2dy cCksIHNzKTsKQEAgLTQ4ODUsNiArNDk2OSw3OSBAQCBzdGF0aWMgdm9pZCBvZmZsaW5lX2Nzcyhz dHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCXdha2VfdXBfYWxsKCZjc3MtPmNncm91 cC0+b2ZmbGluZV93YWl0cSk7CiB9CiAKKy8qCisgKiBBc3NvY2lhdGVzIGEgZGV2aWNlIHdpdGgg YSBjc3MuCisgKiBDcmVhdGUgYSBuZXcgZGV2aWNlLXNwZWNpZmljIGNzcyBhbmQgaW5zZXJ0IGlu dG8gQGNzcy0+ZGV2aWNlX2Nzc19pZHIuCisgKiBBY3F1aXJlcyBhIHJlZmVyZW5jZXMgb24gQGNz cywgd2hpY2ggaXMgcmVsZWFzZWQgd2hlbiB0aGUgZGV2aWNlIGlzCisgKiBkaXNzb2NpYXRlZCB3 aXRoIHRoaXMgY3NzLgorICovCitzdGF0aWMgaW50IGNncm91cF9hZGRfZGV2aWNlKHN0cnVjdCBj Z3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCisJCQkgICAgIHN0cnVjdCBkZXZpY2UgKmRldiwgaW50 IGRldl9pZCkKK3sKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBjc3MtPnNzOworCXN0cnVj dCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpkZXZfY3NzLCAqZGV2X3BhcmVudF9jc3M7CisJaW50IGVy cjsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmNncm91cF9tdXRleCk7CisKKwkvKiBkb24ndCBh ZGQgZGV2aWNlcyBhdCByb290IGNncm91cCBsZXZlbCAqLworCWlmICghY3NzLT5wYXJlbnQpCisJ CXJldHVybiAtRUlOVkFMOworCisJZGV2X3BhcmVudF9jc3MgPSBpZHJfZmluZCgmY3NzLT5wYXJl bnQtPmRldmljZV9jc3NfaWRyLCBkZXZfaWQpOworCWRldl9jc3MgPSBzcy0+ZGV2aWNlX2Nzc19h bGxvYyhkZXYsIGNzcywgZGV2X3BhcmVudF9jc3MpOworCWlmIChJU19FUlJfT1JfTlVMTChkZXZf Y3NzKSkgeworCQlpZiAoIWRldl9jc3MpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKElTX0VS UihkZXZfY3NzKSkKKwkJCXJldHVybiBQVFJfRVJSKGRldl9jc3MpOworCX0KKworCS8qIHN0b3Jl IHBlci1kZXZpY2UgY3NzIHBvaW50ZXIgaW4gdGhlIGNncm91cCdzIGNzcyAqLworCWVyciA9IGlk cl9hbGxvYygmY3NzLT5kZXZpY2VfY3NzX2lkciwgZGV2X2NzcywgZGV2X2lkLAorCQkJZGV2X2lk ICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVyciA8IDApIHsKKwkJc3MtPmNzc19mcmVlKGRldl9j c3MpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRldl9jc3MtPmRldmljZSA9IGRldjsKKwlkZXZf Y3NzLT5wYXJlbnQgPSBkZXZfcGFyZW50X2NzczsKKwkvKgorCSAqIHN1YnN5cyBwZXItZGV2aWNl IHN1cHBvcnQgaXMgYWxsb3dlZCB0byBhY2Nlc3MgY2dyb3VwIHN1YnN5c19zdGF0ZQorCSAqIHVz aW5nIGNncm91cC5zZWxmLiAgSW5jcmVtZW50IHJlZmVyZW5jZSBvbiBjc3Mgc28gaXQgcmVtYWlu cyB2YWxpZAorCSAqIGFzIGxvbmcgYXMgZGV2aWNlIGlzIGFzc29jaWF0ZWQgd2l0aCBpdC4KKwkg Ki8KKwlkZXZfY3NzLT5jZ3JvdXAgPSBjc3MtPmNncm91cDsKKwlkZXZfY3NzLT5zcyA9IGNzcy0+ c3M7CisJY3NzX2dldChjc3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGb3IgYSBuZXcg Y2dyb3VwIGNzcywgY3JlYXRlIGRldmljZS1zcGVjaWZpYyBjc3MgZm9yIGVhY2ggZGV2aWNlIHdo aWNoCisgKiB3aGljaCBoYXMgcmVnaXN0ZXJlZCBpdHNlbGYgd2l0aCB0aGUgc3Vic3lzLgorICov CitzdGF0aWMgaW50IGNncm91cF9hZGRfZGV2aWNlcyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0 ZSAqY3NzKQoreworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgZGV2X2lkLCBlcnIgPSAwOwor CisJLyogaWdub3JlIGFkZGluZyBkZXZpY2VzIGZvciByb290IGNncm91cHMgKi8KKwlpZiAoIWNz cy0+cGFyZW50KQorCQlyZXR1cm4gMDsKKworCS8qIGNyZWF0ZSBwZXItZGV2aWNlIGNzcyBmb3Ig ZWFjaCBhc3NvY2lhdGVkIGRldmljZSAqLworCWlkcl9mb3JfZWFjaF9lbnRyeSgmY3NzLT5zcy0+ ZGV2aWNlX2lkciwgZGV2LCBkZXZfaWQpIHsKKwkJZXJyID0gY2dyb3VwX2FkZF9kZXZpY2UoY3Nz LCBkZXYsIGRldl9pZCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJy OworfQorCiAvKioKICAqIGNzc19jcmVhdGUgLSBjcmVhdGUgYSBjZ3JvdXBfc3Vic3lzX3N0YXRl CiAgKiBAY2dycDogdGhlIGNncm91cCBuZXcgY3NzIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoCkBA IC00OTIxLDYgKzUwNzgsMTAgQEAgc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpj c3NfY3JlYXRlKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJCWdvdG8gZXJyX2ZyZWVfY3NzOwogCWNz cy0+aWQgPSBlcnI7CiAKKwllcnIgPSBjZ3JvdXBfYWRkX2RldmljZXMoY3NzKTsKKwlpZiAoZXJy KQorCQlnb3RvIGVycl9mcmVlX2NzczsKKwogCS8qIEBjc3MgaXMgcmVhZHkgdG8gYmUgYnJvdWdo dCBvbmxpbmUgbm93LCBtYWtlIGl0IHZpc2libGUgKi8KIAlsaXN0X2FkZF90YWlsX3JjdSgmY3Nz LT5zaWJsaW5nLCAmcGFyZW50X2Nzcy0+Y2hpbGRyZW4pOwogCWNncm91cF9pZHJfcmVwbGFjZSgm c3MtPmNzc19pZHIsIGNzcywgY3NzLT5pZCk7CkBAIC01MzM3LDYgKzU0OTgsNyBAQCBzdGF0aWMg dm9pZCBfX2luaXQgY2dyb3VwX2luaXRfc3Vic3lzKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywg Ym9vbCBlYXJseSkKIAltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCiAJaWRyX2luaXQoJnNz LT5jc3NfaWRyKTsKKwlpZHJfaW5pdCgmc3MtPmRldmljZV9pZHIpOwogCUlOSVRfTElTVF9IRUFE KCZzcy0+Y2Z0cyk7CiAKIAkvKiBDcmVhdGUgdGhlIHJvb3QgY2dyb3VwIHN0YXRlIGZvciB0aGlz IHN1YnN5c3RlbSAqLwpAQCAtNTYzNyw2ICs1Nzk5LDkwIEBAIGludCBwcm9jX2Nncm91cF9zaG93 KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLAogCXJldHVybiBy ZXR2YWw7CiB9CiAKK3ZvaWQgY2dyb3VwX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBjZ3JvdXBf c3Vic3lzICpzcywgdW5zaWduZWQgbG9uZyBkZXZfaWQpCit7CisJc3RydWN0IGNncm91cF9zdWJz eXNfc3RhdGUgKmNzcywgKmRldmljZV9jc3M7CisJaW50IGNzc19pZDsKKworCWlmICghc3MtPmFs bG93X2RldmljZXMpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmNncm91cF9tdXRleCk7CisJ aWRyX2Zvcl9lYWNoX2VudHJ5KCZzcy0+Y3NzX2lkciwgY3NzLCBjc3NfaWQpIHsKKwkJV0FSTl9P Tihjc3MtPmRldmljZSk7CisJCWlmICghY3NzLT5wYXJlbnQgfHwgY3NzLT5kZXZpY2UpCisJCQlj b250aW51ZTsKKwkJZGV2aWNlX2NzcyA9IGlkcl9yZW1vdmUoJmNzcy0+ZGV2aWNlX2Nzc19pZHIs IGRldl9pZCk7CisJCWlmIChkZXZpY2VfY3NzKSB7CisJCQkvKiBGSVhNRSBrZXJuZnNfZ2V0L3B1 dCBuZWVkZWQgdG8gbWFrZSBzYWZlPyAqLworCQkJaWYgKGRldmljZV9jc3MtPmRldmljZV9rbikK KwkJCQlrZXJuZnNfcmVtb3ZlKGRldmljZV9jc3MtPmRldmljZV9rbik7CisJCQljc3NfcHV0KGRl dmljZV9jc3MtPnBhcmVudCk7CisJCQlzcy0+Y3NzX2ZyZWUoZGV2aWNlX2Nzcyk7CisJCX0KKwl9 CisJaWRyX3JlbW92ZSgmc3MtPmRldmljZV9pZHIsIGRldl9pZCk7CisJbXV0ZXhfdW5sb2NrKCZj Z3JvdXBfbXV0ZXgpOworfQorCisvKioKKyAqIGNncm91cF9kZXZpY2VfcmVnaXN0ZXIgLSBhc3Nv Y2lhdGUgYSBzdHJ1Y3QgZGV2aWNlIHdpdGggQHNzCisgKiBAc3M6IHRoZSBzdWJzeXN0ZW0gb2Yg aW50ZXJlc3QKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugb2YgaW50ZXJlc3QKKyAqIEBkZXZfaWQ6IGlu ZGV4IGludG8gQHNzIGlkciByZXR1cm5lZAorICoKKyAqIEluc2VydCBAZGV2IGludG8gc2V0IG9m IGRldmljZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3Vic3lzdGVtLgorICogQXMgY2dy b3VwcyBhcmUgY3JlYXRlZCwgc3ViZGlyZWN0b3JpZXMgPHN1YnN5c19uYW1lPi48ZGV2aWNlPi88 ZGV2LW5hbWUvCisgKiB3aWxsIGJlIGNyZWF0ZWQgd2l0aGluIHRoZSBjZ3JvdXAncyBmaWxlc3lz dGVtLiAgRGV2aWNlIGRyaXZlcnMgY2FuIHRoZW4KKyAqIGhhdmUgdGhpcyBzdWJzeXN0ZW0ncyBj b250cm9scyBhcHBsaWVkIHRvIHBlci1kZXZpY2UgcmVzb3VyY2VzIGJ5IHVzZSBvZgorICogYSBw cml2YXRlIGNncm91cF9zdWJzeXNfc3RhdGUuCisgKi8KK2ludCBjZ3JvdXBfZGV2aWNlX3JlZ2lz dGVyKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAg dW5zaWduZWQgbG9uZyAqZGV2X2lkKQoreworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpj c3M7CisJaW50IGNzc19pZCwgaWQsIGVyciA9IDA7CisKKwlpZiAoIXNzLT5hbGxvd19kZXZpY2Vz KQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCW11dGV4X2xvY2soJmNncm91cF9tdXRleCk7CisKKwlp ZCA9IGlkcl9hbGxvY19jeWNsaWMoJnNzLT5kZXZpY2VfaWRyLCBkZXYsIDAsIDAsIEdGUF9LRVJO RUwpOworCWlmIChpZCA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCQly ZXR1cm4gaWQ7CisJfQorCisJaWRyX2Zvcl9lYWNoX2VudHJ5KCZzcy0+Y3NzX2lkciwgY3NzLCBj c3NfaWQpIHsKKwkJV0FSTl9PTihjc3MtPmRldmljZSk7CisJCWlmICghY3NzLT5wYXJlbnQgfHwg Y3NzLT5kZXZpY2UpCisJCQljb250aW51ZTsKKwkJZXJyID0gY2dyb3VwX2FkZF9kZXZpY2UoY3Nz LCBkZXYsIGlkKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCisJCWlmIChjc3NfdmlzaWJsZShj c3MpKSB7CisJCQkvKiBGSVhNRSAtIHNvbWV0aGluZyBtb3JlIGxpZ2h0d2VpZ2h0IGNhbiBiZSBk b25lPyAqLworCQkJY3NzX2NsZWFyX2Rpcihjc3MpOworCQkJLyogRklYTUUga2VybmZzX2dldC9w dXQgbmVlZGVkIHRvIG1ha2Ugc2FmZT8gKi8KKwkJCWtlcm5mc19yZW1vdmUoY3NzLT5kZXZpY2Vf a24pOworCQkJZXJyID0gY3NzX3BvcHVsYXRlX2Rpcihjc3MpOworCQkJaWYgKGVycikKKwkJCQkv KiBGSVhNRSBoYW5kbGUgZXJyb3IgY2FzZSAqLworCQkJCWVyciA9IDA7CisJCQllbHNlCisJCQkJ a2VybmZzX2FjdGl2YXRlKGNzcy0+Y2dyb3VwLT5rbik7CisJCX0KKwl9CisKKwlpZiAoIWVycikK KwkJKmRldl9pZCA9IGlkOworCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKKworCXJldHVy biBlcnI7Cit9CisKIC8qKgogICogY2dyb3VwX2ZvcmsgLSBpbml0aWFsaXplIGNncm91cCByZWxh dGVkIGZpZWxkcyBkdXJpbmcgY29weV9wcm9jZXNzKCkKICAqIEBjaGlsZDogcG9pbnRlciB0byB0 YXNrX3N0cnVjdCBvZiBmb3JraW5nIHBhcmVudCBwcm9jZXNzLgotLSAKMi4yMS4wCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=