From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Tyshchenko Subject: [RFC PATCH 29/31] xen/arm: Introduce CPUFreq Interface component Date: Thu, 9 Nov 2017 19:10:19 +0200 Message-ID: <1510247421-24094-30-git-send-email-olekstysh@gmail.com> References: <1510247421-24094-1-git-send-email-olekstysh@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eCqM7-0004vW-2s for xen-devel@lists.xenproject.org; Thu, 09 Nov 2017 17:11:07 +0000 Received: by mail-lf0-f68.google.com with SMTP id l23so8035241lfk.10 for ; Thu, 09 Nov 2017 09:11:05 -0800 (PST) In-Reply-To: <1510247421-24094-1-git-send-email-olekstysh@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Oleksandr Tyshchenko , Stefano Stabellini , Julien Grall List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0uY29t PgoKVGhpcyBwYXRjaCBhZGRzIGFuIGludGVyZmFjZSBjb21wb25lbnQgd2hpY2ggcGVyZm9ybXMg Zm9sbG93aW5nIHN0ZXBzOgoxLiBJbml0aWFsaXplIGV2ZXJ5dGhpbmcgbmVlZGVkIFNDUEkgYmFz ZWQgQ1BVRnJlcSBkcml2ZXIgdG8gYmUgZnVuY3Rpb25hbAogICAoU0NQSSBNZXNzYWdlIHByb3Rv Y29sLCBtYWlsYm94IHRvIGNvbW11bmljYXRlIHdpdGggU0NQLCBldGMpLgogICBBbHNvIHByZWxp bWluYXJ5IGNoZWNrIGlmIFNDUEkgRFZGUyBjbG9jayBub2RlcyBvZmZlcmVkIGJ5IFNDUCBhcmUK ICAgcHJlc2VudCBpbiBhIGRldmljZSB0cmVlLgoyLiBSZWdpc3RlciBTQ1BJIGJhc2VkIENQVUZy ZXEgZHJpdmVyLgozLiBQb3B1bGF0ZSBDUFVzLiBHZXQgRFZGUyBpbmZvIChPUFAgbGlzdCBhbmQg dGhlIGxhdGVuY3kgaW5mb3JtYXRpb24pCiAgIGZvciBhbGwgRFZGUyBjYXBhYmxlIENQVXMgdXNp bmcgU0NQSSBwcm90b2NvbCwgY29udmVydCB0aGVzZSBjYXBhYmlsaXRpZXMKICAgaW50byBQTSBk YXRhIHRoZSBDUFVGcmVxIGZyYW1ld29yayBleHBlY3RzIHRvIHNlZSBmb2xsb3dlZCBieQogICB1 cGxvYWRpbmcgaXQuCgpTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgVHlzaGNoZW5rbyA8b2xla3Nh bmRyX3R5c2hjaGVua29AZXBhbS5jb20+CkNDOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxs aW5pQGtlcm5lbC5vcmc+CkNDOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBsaW5hcm8ub3Jn PgotLS0KIHhlbi9hcmNoL2FybS9jcHVmcmVxL2NwdWZyZXFfaWYuYyB8IDUyMiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDUyMiBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gvYXJtL2NwdWZyZXEvY3B1ZnJlcV9p Zi5jCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2NwdWZyZXEvY3B1ZnJlcV9pZi5jIGIveGVu L2FyY2gvYXJtL2NwdWZyZXEvY3B1ZnJlcV9pZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjI0NTFkMDAKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC9hcm0vY3B1ZnJl cS9jcHVmcmVxX2lmLmMKQEAgLTAsMCArMSw1MjIgQEAKKy8qCisgKiB4ZW4vYXJjaC9hcm0vY3B1 ZnJlcS9jcHVmcmVxX2lmLmMKKyAqCisgKiBDUFVGcmVxIGludGVyZmFjZSBjb21wb25lbnQKKyAq CisgKiBPbGVrc2FuZHIgVHlzaGNoZW5rbyA8b2xla3NhbmRyX3R5c2hjaGVua29AZXBhbS5jb20+ CisgKiBDb3B5cmlnaHQgKGMpIDIwMTcgRVBBTSBTeXN0ZW1zLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyAqLworCisjaW5jbHVkZSA8eGVuL2RldmljZV90cmVlLmg+CisjaW5jbHVkZSA8eGVu L2Vyci5oPgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorI2luY2x1ZGUgPHhlbi9jcHVmcmVxLmg+ CisjaW5jbHVkZSA8eGVuL3Btc3RhdC5oPgorI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4K KworI2luY2x1ZGUgInNjcGlfcHJvdG9jb2wuaCIKKworLyoKKyAqIFRPRE86CisgKiAxLiBBZGQg X19pbml0IHRvIHJlcXVpcmVkIGZ1bmNzCisgKiAyLiBQdXQgZ2V0X2NwdV9kZXZpY2UoKSBpbnRv IGNvbW1vbiBwbGFjZQorICovCisKK3N0YXRpYyBzdHJ1Y3Qgc2NwaV9vcHMgKnNjcGlfb3BzOwor CitleHRlcm4gaW50IHNjcGlfY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIodm9pZCk7CisKKyNkZWZp bmUgZGV2X25hbWUoZGV2KSBkdF9ub2RlX2Z1bGxfbmFtZShkZXZfdG9fZHQoZGV2KSkKKworc3Ry dWN0IGRldmljZSAqZ2V0X2NwdV9kZXZpY2UodW5zaWduZWQgaW50IGNwdSkKK3sKKyAgICBpZiAo IGNwdSA8IG5yX2NwdV9pZHMgJiYgY3B1X3Bvc3NpYmxlKGNwdSkgKQorICAgICAgICByZXR1cm4g ZHRfdG9fZGV2KGNwdV9kdF9ub2Rlc1tjcHVdKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBO VUxMOworfQorCitzdGF0aWMgYm9vbCBpc19kdmZzX2NhcGFibGUodW5zaWduZWQgaW50IGNwdSkK K3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGR0X2RldmljZV9tYXRjaCBzY3BpX2R2ZnNfY2xv Y2tfbWF0Y2hbXSA9CisgICAgeworICAgICAgICBEVF9NQVRDSF9DT01QQVRJQkxFKCJhcm0sc2Nw aS1kdmZzLWNsb2NrcyIpLAorICAgICAgICB7IC8qIHNlbnRpbmVsICovIH0sCisgICAgfTsKKyAg ICBzdHJ1Y3QgZGV2aWNlICpjcHVfZGV2OworICAgIHN0cnVjdCBkdF9waGFuZGxlX2FyZ3MgY2xv Y2tfc3BlYzsKKyAgICBzdHJ1Y3Qgc2NwaV9kdmZzX2luZm8gKmluZm87CisgICAgdTMyIGRvbWFp bjsKKyAgICBpbnQgaSwgcmV0LCBjb3VudDsKKworICAgIGNwdV9kZXYgPSBnZXRfY3B1X2Rldmlj ZShjcHUpOworICAgIGlmICggIWNwdV9kZXYgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJjcHUl ZDogZmFpbGVkIHRvIGdldCBkZXZpY2VcbiIsIGNwdSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK KyAgICB9CisKKyAgICAvKiBGaXJzdCBvZiBhbGwgZmluZCBhIGNsb2NrIG5vZGUgdGhpcyBDUFUg aXMgYSBjb25zdW1lciBvZiAqLworICAgIHJldCA9IGR0X3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdz KGNwdV9kZXYtPm9mX25vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ImNsb2NrcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNjbG9jay1j ZWxscyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2xvY2tfc3BlYyk7CisgICAgaWYgKCByZXQg KQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJjcHUlZDogZmFpbGVkIHRvIGdldCBjbG9jayBub2Rl XG4iLCBjcHUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyogTWFrZSBz dXJlIGl0IGlzIGFuIGF2YWlsYWJsZSBEVkZTIGNsb2NrIG5vZGUgKi8KKyAgICBpZiAoICFkdF9t YXRjaF9ub2RlKHNjcGlfZHZmc19jbG9ja19tYXRjaCwgY2xvY2tfc3BlYy5ucCkgfHwKKyAgICAg ICAgICFkdF9kZXZpY2VfaXNfYXZhaWxhYmxlKGNsb2NrX3NwZWMubnApICkKKyAgICB7CisgICAg ICAgIHByaW50aygiY3B1JWQ6IGNsb2NrIG5vZGUgJyVzJyBpcyBlaXRoZXIgbm9uLURWRlMgb3Ig bm9uLWF2YWlsYWJsZVxuIiwKKyAgICAgICAgICAgICAgIGNwdSwgZGV2X25hbWUoJmNsb2NrX3Nw ZWMubnAtPmRldikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoKKyAg ICAgKiBBY3R1YWxseSB3ZSBhbHJlYWR5IGhhdmUgYSBwb3dlciBkb21haW4gaWQgdGhpcyBDUFUg YmVsb25ncyB0bywKKyAgICAgKiBpdCBpcyBhIHN0b3JlZCBpbiBhcmdzWzBdIENQVSBjbG9jayBz cGVjaWZpZXIsIHNvIHdlIGNvdWxkIGFzayBTQ1AKKyAgICAgKiB0byBwcm92aWRlIGl0cyBEVkZT IGluZm8uIEJ1dCB3ZSB3YW50IHRvIGRpZyBhIGxpdHRsZSBiaXQgZGVlcGVyCisgICAgICogdG8g bWFrZSBzdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBjb3JyZWN0LgorICAgICAqLworCisgICAgLyog Q2hlY2sgaG93IG1hbnkgY2xvY2sgaWRzIGEgRFZGUyBjbG9jayBub2RlIGhhcyAqLworICAgIHJl dCA9IGR0X3Byb3BlcnR5X2NvdW50X2VsZW1zX29mX3NpemUoY2xvY2tfc3BlYy5ucCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbG9jay1pbmRpY2VzIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1MzIpKTsKKyAg ICBpZiAoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJjcHUlZDogZmFpbGVkIHRv IGdldCBjbG9jay1pbmRpY2VzIGNvdW50IGluICclcydcbiIsCisgICAgICAgICAgICAgICBjcHUs IGRldl9uYW1lKCZjbG9ja19zcGVjLm5wLT5kZXYpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgIH0KKyAgICBjb3VudCA9IHJldDsKKworICAgIC8qIENoZWNrIGlmIGEgY2xvY2sgaWQgdGhl IENQVSBjbG9jayBzcGVjaWZpZXIgcG9pbnRzIHRvIGlzIHByZXNlbnQgKi8KKyAgICBmb3IgKCBp ID0gMDsgaSA8IGNvdW50OyBpKysgKQorICAgIHsKKyAgICAgICAgcmV0ID0gZHRfcHJvcGVydHlf cmVhZF91MzJfaW5kZXgoY2xvY2tfc3BlYy5ucCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImNsb2NrLWluZGljZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZG9tYWluKTsKKyAgICAgICAgaWYgKCByZXQgKQorICAgICAgICB7CisgICAgICAgICAg ICBwcmludGsoImNwdSVkOiBmYWlsZWQgdG8gZ2V0IGNsb2NrIGluZGV4IGluICclcydcbiIsCisg ICAgICAgICAgICAgICAgICAgY3B1LCBkZXZfbmFtZSgmY2xvY2tfc3BlYy5ucC0+ZGV2KSk7Cisg ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvKiBNYXRjaCBm b3VuZCAqLworICAgICAgICBpZiAoIGNsb2NrX3NwZWMuYXJnc1swXSA9PSBkb21haW4gKQorICAg ICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCBpID09IGNvdW50ICkKKyAgICB7Cisg ICAgICAgIHByaW50aygiY3B1JWQ6IGZhaWxlZCB0byBmaW5kIG1hdGNoaW5nIGNsa19pZCAocGQp ICVkXG4iLAorICAgICAgICAgICAgICAgY3B1LCBjbG9ja19zcGVjLmFyZ3NbMF0pOworICAgICAg ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiBhIFNDUCBp cyBhd2FyZSBvZiB0aGlzIHBvd2VyIGRvbWFpbi4gU0NQSSBNZXNzYWdlIHByb3RvY29sCisgICAg ICogZHJpdmVyIHdpbGwgcG9wdWxhdGUgcG93ZXIgZG9tYWluJ3MgRFZGUyBpbmZvIHRoZW4uCisg ICAgICovCisgICAgaW5mbyA9IHNjcGlfb3BzLT5kdmZzX2dldF9pbmZvKGRvbWFpbik7CisgICAg aWYgKCBJU19FUlIoaW5mbykgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJjcHUlZDogZmFpbGVk IHRvIGdldCBEVkZTIGluZm8gb2YgcGQldVxuIiwgY3B1LCBkb21haW4pOworICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgfQorCisgICAgcHJpbnRrKFhFTkxPR19ERUJVRyAiY3B1JWQ6IGlzIERW RlMgY2FwYWJsZSwgYmVsb25ncyB0byBwZCV1XG4iLAorICAgICAgICAgICBjcHUsIGRvbWFpbik7 CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBnZXRfc2hhcmluZ19jcHVzKHVu c2lnbmVkIGludCBjcHUsIGNwdW1hc2tfdCAqbWFzaykKK3sKKyAgICBzdHJ1Y3QgZGV2aWNlICpj cHVfZGV2ID0gZ2V0X2NwdV9kZXZpY2UoY3B1KSwgKnRjcHVfZGV2OworICAgIHVuc2lnbmVkIGlu dCB0Y3B1OworICAgIGludCBkb21haW4sIHRkb21haW47CisKKyAgICBCVUdfT04oIWNwdV9kZXYp OworCisgICAgZG9tYWluID0gc2NwaV9vcHMtPmRldmljZV9kb21haW5faWQoY3B1X2Rldik7Cisg ICAgaWYgKCBkb21haW4gPCAwICkKKyAgICAgICAgcmV0dXJuIGRvbWFpbjsKKworICAgIGNwdW1h c2tfY2xlYXIobWFzayk7CisgICAgY3B1bWFza19zZXRfY3B1KGNwdSwgbWFzayk7CisKKyAgICBm b3JfZWFjaF9vbmxpbmVfY3B1KCB0Y3B1ICkKKyAgICB7CisgICAgICAgIGlmICggdGNwdSA9PSBj cHUgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdGNwdV9kZXYgPSBnZXRfY3B1 X2RldmljZSh0Y3B1KTsKKyAgICAgICAgaWYgKCAhdGNwdV9kZXYgKQorICAgICAgICAgICAgY29u dGludWU7CisKKyAgICAgICAgdGRvbWFpbiA9IHNjcGlfb3BzLT5kZXZpY2VfZG9tYWluX2lkKHRj cHVfZGV2KTsKKyAgICAgICAgaWYgKCB0ZG9tYWluID09IGRvbWFpbiApCisgICAgICAgICAgICBj cHVtYXNrX3NldF9jcHUodGNwdSwgbWFzayk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZ2V0X3RyYW5zaXRpb25fbGF0ZW5jeShzdHJ1Y3QgZGV2aWNlICpjcHVfZGV2 KQoreworICAgIHJldHVybiBzY3BpX29wcy0+Z2V0X3RyYW5zaXRpb25fbGF0ZW5jeShjcHVfZGV2 KTsKK30KKworc3RhdGljIHN0cnVjdCBzY3BpX2R2ZnNfaW5mbyAqZ2V0X2R2ZnNfaW5mbyhzdHJ1 Y3QgZGV2aWNlICpjcHVfZGV2KQoreworICAgIGludCBkb21haW47CisKKyAgICBkb21haW4gPSBz Y3BpX29wcy0+ZGV2aWNlX2RvbWFpbl9pZChjcHVfZGV2KTsKKyAgICBpZiAoIGRvbWFpbiA8IDAg KQorICAgICAgICByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworICAgIHJldHVybiBzY3BpX29w cy0+ZHZmc19nZXRfaW5mbyhkb21haW4pOworfQorCitzdGF0aWMgaW50IGluaXRfY3B1ZnJlcV90 YWJsZSh1bnNpZ25lZCBpbnQgY3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpCit7CisgICAgc3RydWN0IGNwdWZy ZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlID0gTlVMTDsKKyAgICBzdHJ1Y3QgZGV2aWNl ICpjcHVfZGV2ID0gZ2V0X2NwdV9kZXZpY2UoY3B1KTsKKyAgICBzdHJ1Y3Qgc2NwaV9kdmZzX2lu Zm8gKmluZm87CisgICAgc3RydWN0IHNjcGlfb3BwICpvcHA7CisgICAgaW50IGk7CisKKyAgICBC VUdfT04oIWNwdV9kZXYpOworCisgICAgaW5mbyA9IGdldF9kdmZzX2luZm8oY3B1X2Rldik7Cisg ICAgaWYgKCBJU19FUlIoaW5mbykgKQorICAgICAgICByZXR1cm4gUFRSX0VSUihpbmZvKTsKKwor ICAgIGlmICggIWluZm8tPm9wcHMgKQorICAgICAgICByZXR1cm4gLUVJTzsKKworICAgIGZyZXFf dGFibGUgPSB4emFsbG9jX2FycmF5KHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSwgaW5m by0+Y291bnQgKyAxKTsKKyAgICBpZiAoICFmcmVxX3RhYmxlICkKKyAgICAgICAgcmV0dXJuIC1F Tk9NRU07CisKKyAgICBmb3IgKCBvcHAgPSBpbmZvLT5vcHBzLCBpID0gMDsgaSA8IGluZm8tPmNv dW50OyBpKyssIG9wcCsrICkKKyAgICB7CisgICAgICAgIGZyZXFfdGFibGVbaV0uaW5kZXggPSBp OworICAgICAgICAvKiBDb252ZXJ0IEh6IC0+IGtIeiAqLworICAgICAgICBmcmVxX3RhYmxlW2ld LmZyZXF1ZW5jeSA9IG9wcC0+ZnJlcSAvIDEwMDA7CisgICAgfQorCisgICAgZnJlcV90YWJsZVtp XS5pbmRleCA9IGk7CisgICAgZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxF X0VORDsKKworICAgICp0YWJsZSA9ICZmcmVxX3RhYmxlWzBdOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGZyZWVfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVu Y3lfdGFibGUgKip0YWJsZSkKK3sKKyAgICBpZiAoICF0YWJsZSApCisgICAgICAgIHJldHVybjsK KworICAgIHhmcmVlKCp0YWJsZSk7CisgICAgKnRhYmxlID0gTlVMTDsKK30KKworc3RhdGljIGlu dCB1cGxvYWRfY3B1ZnJlcV9kYXRhKGNwdW1hc2tfdCAqbWFzaywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlKQorewor ICAgIHN0cnVjdCB4ZW5fcHJvY2Vzc29yX3BlcmZvcm1hbmNlICpwZXJmOworICAgIHN0cnVjdCB4 ZW5fcHJvY2Vzc29yX3B4ICpzdGF0ZXM7CisgICAgdWludDMyX3QgcGxhdGZvcm1fbGltaXQgPSAw LCBzdGF0ZV9jb3VudCA9IDA7CisgICAgdW5zaWduZWQgaW50IG1heF9mcmVxID0gMCwgcHJldl9m cmVxID0gMCwgY3B1ID0gY3B1bWFza19maXJzdChtYXNrKTsKKyAgICBpbnQgaSwgbGF0ZW5jeSwg cmV0ID0gMDsKKworICAgIHBlcmYgPSB4emFsbG9jKHN0cnVjdCB4ZW5fcHJvY2Vzc29yX3BlcmZv cm1hbmNlKTsKKyAgICBpZiAoICFwZXJmICkKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAg ICAvKiBDaGVjayBmcmVxdWVuY3kgdGFibGUgYW5kIGZpbmQgbWF4IGZyZXF1ZW5jeSAqLworICAg IGZvciAoIGkgPSAwOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsg aSsrICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVl bmN5OworCisgICAgICAgIGlmICggZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQgKQorICAg ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCB0YWJsZVtpXS5pbmRleCAhPSBzdGF0 ZV9jb3VudCB8fCBmcmVxIDw9IHByZXZfZnJlcSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBy aW50aygiY3B1JWQ6IGZyZXF1ZW5jeSB0YWJsZSBmb3JtYXQgZXJyb3JcbiIsIGNwdSk7CisgICAg ICAgICAgICByZXQgPSAtRUlOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0K KworICAgICAgICBwcmV2X2ZyZXEgPSBmcmVxOworICAgICAgICBzdGF0ZV9jb3VudCsrOworICAg ICAgICBpZiAoIGZyZXEgPiBtYXhfZnJlcSApCisgICAgICAgICAgICBtYXhfZnJlcSA9IGZyZXE7 CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGUgZnJlcXVlbmN5IHRhYmxlIHdlIGhhdmUgaXMg anVzdCBhIHRlbXBvcmFyeSBwbGFjZSBmb3Igc3RvcmluZworICAgICAqIHByb3ZpZGVkIGJ5IFND UCBEVkZTIGluZm8uIENyZWF0ZSBwZXJmb3JtYW5jZSBzdGF0ZXMgYXJyYXkuCisgICAgICovCisg ICAgaWYgKCAhc3RhdGVfY291bnQgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJjcHUlZDogbm8g YXZhaWxhYmxlIHBlcmZvcm1hbmNlIHN0YXRlc1xuIiwgY3B1KTsKKyAgICAgICAgcmV0ID0gLUVJ TlZBTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgc3RhdGVzID0geHphbGxvY19h cnJheShzdHJ1Y3QgeGVuX3Byb2Nlc3Nvcl9weCwgc3RhdGVfY291bnQpOworICAgIGlmICggIXN0 YXRlcyApCisgICAgeworICAgICAgICByZXQgPSAtRU5PTUVNOworICAgICAgICBnb3RvIG91dDsK KyAgICB9CisKKyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShwZXJmLT5zdGF0ZXMsIHN0YXRlcyk7 CisgICAgcGVyZi0+c3RhdGVfY291bnQgPSBzdGF0ZV9jb3VudDsKKworICAgIGxhdGVuY3kgPSBn ZXRfdHJhbnNpdGlvbl9sYXRlbmN5KGdldF9jcHVfZGV2aWNlKGNwdSkpOworCisgICAgLyogUGVy Zm9ybWFuY2Ugc3RhdGVzIG11c3Qgc3RhcnQgZnJvbSBoaWdoZXIgdmFsdWVzICovCisgICAgZm9y ICggaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKysg KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7 CisgICAgICAgIHVuc2lnbmVkIGludCBpbmRleCA9IHN0YXRlX2NvdW50IC0gMSAtIHRhYmxlW2ld LmluZGV4OworCisgICAgICAgIGlmICggZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQgKQor ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCBmcmVxID09IG1heF9mcmVxICkK KyAgICAgICAgICAgIHBsYXRmb3JtX2xpbWl0ID0gaW5kZXg7CisKKyAgICAgICAgLyogQ29udmVy dCBrSHogLT4gTUh6ICovCisgICAgICAgIHN0YXRlc1tpbmRleF0uY29yZV9mcmVxdWVuY3kgPSBm cmVxIC8gMTAwMDsKKyAgICAgICAgLyogQ29udmVydCBucyAtPiB1cyAqLworICAgICAgICBzdGF0 ZXNbaW5kZXhdLnRyYW5zaXRpb25fbGF0ZW5jeSA9IERJVl9ST1VORF9VUChsYXRlbmN5LCAxMDAw KTsKKyAgICB9CisKKyAgICBwZXJmLT5mbGFncyA9IFhFTl9QWF9EQVRBOyAvKiBhbGwgaW5mbyBp biBhIG9uZS1zaG90ICovCisgICAgcGVyZi0+cGxhdGZvcm1fbGltaXQgPSBwbGF0Zm9ybV9saW1p dDsKKyAgICBwZXJmLT5zaGFyZWRfdHlwZSA9IENQVUZSRVFfU0hBUkVEX1RZUEVfQU5ZOworICAg IHBlcmYtPmRvbWFpbl9pbmZvLmRvbWFpbiA9IGNwdW1hc2tfZmlyc3QobWFzayk7CisgICAgcGVy Zi0+ZG9tYWluX2luZm8ubnVtX3Byb2Nlc3NvcnMgPSBjcHVtYXNrX3dlaWdodChtYXNrKTsKKwor ICAgIC8qIEl0ZXJhdGUgdGhyb3VnaCBhbGwgQ1BVcyB3aGljaCBhcmUgb24gdGhlIHNhbWUgYm9h dCAqLworICAgIGZvcl9lYWNoX2NwdSggY3B1LCBtYXNrICkKKyAgICB7CisgICAgICAgIHJldCA9 IHNldF9weF9wbWluZm8oY3B1LCBwZXJmKTsKKyAgICAgICAgaWYgKCByZXQgKQorICAgICAgICB7 CisgICAgICAgICAgICBwcmludGsoImNwdSVkOiBmYWlsZWQgdG8gc2V0IFB4IHN0YXRlcyAoJWQp XG4iLCBjcHUsIHJldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg IHByaW50ayhYRU5MT0dfREVCVUcgImNwdSVkOiBzZXQgUHggc3RhdGVzXG4iLCBjcHUpOworICAg IH0KKworICAgIHhmcmVlKHN0YXRlcyk7CitvdXQ6CisgICAgeGZyZWUocGVyZik7CisKKyAgICBy ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCBzY3BpX2NwdWZyZXFfcG9zdGluaXQo dm9pZCkKK3sKKyAgICBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmZyZXFfdGFibGUg PSBOVUxMOworICAgIGNwdW1hc2tfdCBwcm9jZXNzZWRfY3B1cywgc2hhcmVkX2NwdXM7CisgICAg dW5zaWduZWQgaW50IGNwdTsKKyAgICBpbnQgcmV0ID0gLUVOT0RFVjsKKworICAgIGNwdW1hc2tf Y2xlYXIoJnByb2Nlc3NlZF9jcHVzKTsKKworICAgIGZvcl9lYWNoX29ubGluZV9jcHUoIGNwdSAp CisgICAgeworICAgICAgICBpZiAoIGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmcHJvY2Vzc2VkX2Nw dXMpICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggIWlzX2R2ZnNfY2Fw YWJsZShjcHUpICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJldCA9IGdldF9z aGFyaW5nX2NwdXMoY3B1LCAmc2hhcmVkX2NwdXMpOworICAgICAgICBpZiAoIHJldCApCisgICAg ICAgIHsKKyAgICAgICAgICAgIHByaW50aygiY3B1JWQ6IGZhaWxlZCB0byBnZXQgc2hhcmluZyBj cHVtYXNrICglZClcbiIsIGNwdSwgcmV0KTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAg ICAgIH0KKworICAgICAgICBCVUdfT04oY3B1bWFza19lbXB0eSgmc2hhcmVkX2NwdXMpKTsKKyAg ICAgICAgY3B1bWFza19vcigmcHJvY2Vzc2VkX2NwdXMsICZwcm9jZXNzZWRfY3B1cywgJnNoYXJl ZF9jcHVzKTsKKworICAgICAgICAvKiBDcmVhdGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSB0YWJs ZSAqLworICAgICAgICByZXQgPSBpbml0X2NwdWZyZXFfdGFibGUoY3B1LCAmZnJlcV90YWJsZSk7 CisgICAgICAgIGlmICggcmV0ICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRrKCJjcHUl ZDogZmFpbGVkIHRvIGluaXRpYWxpemUgZnJlcXVlbmN5IHRhYmxlICglZClcbiIsCisgICAgICAg ICAgICAgICAgICAgY3B1LCByZXQpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAg fQorCisgICAgICAgIHJldCA9IHVwbG9hZF9jcHVmcmVxX2RhdGEoJnNoYXJlZF9jcHVzLCBmcmVx X3RhYmxlKTsKKyAgICAgICAgLyogRGVzdHJveSBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IHRhYmxl ICovCisgICAgICAgIGZyZWVfY3B1ZnJlcV90YWJsZSgmZnJlcV90YWJsZSk7CisgICAgICAgIGlm ICggcmV0ICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRrKCJjcHUlZDogZmFpbGVkIHRv IHVwbG9hZCBjcHVmcmVxIGRhdGEgKCVkKVxuIiwgY3B1LCByZXQpOworICAgICAgICAgICAgcmV0 dXJuIHJldDsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50ayhYRU5MT0dfREVCVUcgImNwdSVk OiB1cGxvYWRlZCBjcHVmcmVxIGRhdGFcbiIsIGNwdSk7CisgICAgfQorCisgICAgcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBfX2luaXQgc2NwaV9jcHVmcmVxX3ByZWluaXQodm9pZCkKK3sK KyAgICBzdHJ1Y3QgZHRfZGV2aWNlX25vZGUgKnNjcGksICpjbGssICpkdmZzX2NsazsKKyAgICBp bnQgcmV0OworCisgICAgLyogSW5pdGlhbGl6ZSBTQ1BJIE1lc3NhZ2UgcHJvdG9jb2wgKi8KKyAg ICByZXQgPSBzY3BpX2luaXQoKTsKKyAgICBpZiAoIHJldCApCisgICAgeworICAgICAgICBwcmlu dGsoImZhaWxlZCB0byBpbml0aWFsaXplIFNDUEkgKCVkKVxuIiwgcmV0KTsKKyAgICAgICAgcmV0 dXJuIHJldDsKKyAgICB9CisKKyAgICAvKiBTYW5pdHkgY2hlY2sgKi8KKyAgICBpZiAoICFnZXRf c2NwaV9vcHMoKSB8fCAhZ2V0X3NjcGlfZGV2KCkgKQorICAgICAgICByZXR1cm4gLUVOWElPOwor CisgICAgc2NwaSA9IGdldF9zY3BpX2RldigpLT5vZl9ub2RlOworICAgIHNjcGlfb3BzID0gZ2V0 X3NjcGlfb3BzKCk7CisKKyAgICByZXQgPSAtRU5PREVWOworCisgICAgLyoKKyAgICAgKiBDaGVj ayBmb3IgY2xvY2sgcmVsYXRlZCBub2RlcyBmb3Igbm93LiBCdXQgaXQgbWlnaHQgYWRkaXRpb25h bCBub2RlcywKKyAgICAgKiBsaWtlIHRoZXJtYWwgc2Vuc29yLCBldGMuCisgICAgICovCisgICAg ZHRfZm9yX2VhY2hfY2hpbGRfbm9kZSggc2NwaSwgY2xrICkKKyAgICB7CisgICAgICAgIC8qCisg ICAgICAgICAqIEZpcnN0IG9mIGFsbCB0aGVyZSBtdXN0IGJlIGEgY29udGFpbmVyIG5vZGUgd2hp Y2ggY29udGFpbnMgYWxsCisgICAgICAgICAqIGNsb2NrcyBwcm92aWRlZCBieSBTQ1AuCisgICAg ICAgICAqLworICAgICAgICBpZiAoICFkdF9kZXZpY2VfaXNfY29tcGF0aWJsZShjbGssICJhcm0s c2NwaS1jbG9ja3MiKSApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKgorICAg ICAgICAgKiBBcyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBEVkZTIGZlYXR1cmUgb25seSwgY2hlY2sg Zm9yIERWRlMgY2xvY2sKKyAgICAgICAgICogc3ViLW5vZGUuIEF0IHRoZSBjdXJyZW50IHN0YWdl IGNoZWNrIGZvciBpdCBwcmVzZW5jZSBvbmx5LgorICAgICAgICAgKiBXaXRob3V0IGl0IHRoZXJl IGlzIG5vIHBvaW50IHRvIHJlZ2lzdGVyIFNDUEkgYmFzZWQgQ1BVRnJlcS4gV2Ugd2lsbAorICAg ICAgICAgKiBwZXJmb3JtIGEgdGhvcm91Z2ggY2hlY2sgbGF0ZXIgd2hlbiBwb3B1bGF0aW5nIERW RlMgY2xvY2sgY29uc3VtZXJzLgorICAgICAgICAgKi8KKyAgICAgICAgZHRfZm9yX2VhY2hfY2hp bGRfbm9kZSggY2xrLCBkdmZzX2NsayApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggIWR0 X2RldmljZV9pc19jb21wYXRpYmxlKGR2ZnNfY2xrLCAiYXJtLHNjcGktZHZmcy1jbG9ja3MiKSAp CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHJldHVybiAwOworICAg ICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcHJpbnRrKCJmYWlsZWQgdG8g ZmluZCBTQ1BJIERWRlMgY2xvY2tzICglZClcbiIsIHJldCk7CisKKyAgICByZXR1cm4gcmV0Owor fQorCisvKiBUT0RPIEltcGxlbWVudCBtZSAqLworc3RhdGljIHZvaWQgc2NwaV9jcHVmcmVxX2Rl aW5pdCh2b2lkKQoreworCit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfZHJpdmVyX2lu aXQodm9pZCkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYgKCBjcHVmcmVxX2NvbnRyb2xsZXIg IT0gRlJFUUNUTF94ZW4gKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qCisgICAgICogSW5p dGlhbGl6ZSBldmVyeXRoaW5nIG5lZWRlZCBTQ1BJIGJhc2VkIENQVUZyZXEgZHJpdmVyIHRvIGJl IGZ1bmN0aW9uYWwKKyAgICAgKiAoU0NQSSBNZXNzYWdlIHByb3RvY29sLCBtYWlsYm94IHRvIGNv bW11bmljYXRlIHdpdGggU0NQLCBldGMpLgorICAgICAqIEFsc28gcHJlbGltaW5hcnkgY2hlY2sg aWYgU0NQSSBEVkZTIGNsb2NrIG5vZGVzIG9mZmVyZWQgYnkgU0NQIGFyZQorICAgICAqIHByZXNl bnQgaW4gYSBkZXZpY2UgdHJlZS4KKyAgICAgKi8KKyAgICByZXQgPSBzY3BpX2NwdWZyZXFfcHJl aW5pdCgpOworICAgIGlmICggcmV0ICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICAvKiBSZWdp c3RlciBTQ1BJIGJhc2VkIENQVUZyZXEgZHJpdmVyICovCisgICAgcmV0ID0gc2NwaV9jcHVmcmVx X3JlZ2lzdGVyX2RyaXZlcigpOworICAgIGlmICggcmV0ICkKKyAgICAgICAgZ290byBvdXQ7CisK KyAgICAvKgorICAgICAqIFBvcHVsYXRlIENQVXMuIEdldCBEVkZTIGluZm8gKE9QUCBsaXN0IGFu ZCB0aGUgbGF0ZW5jeSBpbmZvcm1hdGlvbikKKyAgICAgKiBmb3IgYWxsIERWRlMgY2FwYWJsZSBD UFVzIHVzaW5nIFNDUEkgcHJvdG9jb2wsIGNvbnZlcnQgdGhlc2UgY2FwYWJpbGl0aWVzCisgICAg ICogaW50byBQTSBkYXRhIHRoZSBDUFVGcmVxIGZyYW1ld29yayBleHBlY3RzIHRvIHNlZSBmb2xs b3dlZCBieQorICAgICAqIHVwbG9hZGluZyBpdC4KKyAgICAgKgorICAgICAqIEFjdHVhbGx5IGl0 IGlzIGFsbW9zdCB0aGUgc2FtZSBQTSBkYXRhIHdoaWNoIGh3ZG9tIHVwbG9hZHMgaW4gY2FzZSBv ZgorICAgICAqIHg4NiB2aWEgcGxhdGZvcm0gaHlwZXJjYWxsIGFmdGVyIHBhcnNpbmcgQUNQSSB0 YWJsZXMuIEluIG91ciBjYXNlIHdlCisgICAgICogZG9uJ3QgbmVlZCBod2RvbSB0byBiZSBpbnZv bHZlZCBpbiwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGV2ZXJ5dGhpbmcgaW4KKyAgICAgKiBoYW5k LiBNb3Jlb3ZlciwgdGhlIGh3ZG9tIGRvZXNuJ3QgZXZlbiBrbm93IGFueXRoaW5nIGFib3V0IHBo eXNpY2FsIENQVXMuCisgICAgICogTm90IGNvbXBsZXRlbHkgc3VyZSB0aGF0IGl0IGlzIHRoZSBi ZXN0IHBsYWNlIHRvIGRvIHNvLCBidXQgY2VydGFpbmx5CisgICAgICogaXQgbXVzdCBiZSBhZnRl ciBkcml2ZXIgcmVnaXN0cmF0aW9uLgorICAgICAqLworICAgIHJldCA9IHNjcGlfY3B1ZnJlcV9w b3N0aW5pdCgpOworCitvdXQ6CisgICAgaWYgKCByZXQgKQorICAgIHsKKyAgICAgICAgcHJpbnRr KCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBTQ1BJIGJhc2VkIENQVUZyZXEgKCVkKVxuIiwgcmV0KTsK KyAgICAgICAgc2NwaV9jcHVmcmVxX2RlaW5pdCgpOworICAgICAgICByZXR1cm4gcmV0OworICAg IH0KKworICAgIHByaW50aygiaW5pdGlhbGl6ZWQgU0NQSSBiYXNlZCBDUFVGcmVxXG4iKTsKKwor ICAgIHJldHVybiAwOworfQorX19pbml0Y2FsbChjcHVmcmVxX2RyaXZlcl9pbml0KTsKKworLyoK KyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIK KyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1v ZGU6IG5pbAorICogRW5kOgorICovCi0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=