From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: [PATCH v4 04/11] drm/i915: Add support for asynchronous display power disabling Date: Mon, 13 May 2019 22:25:33 +0300 Message-ID: <20190513192533.12586-1-imre.deak@intel.com> References: <20190509173446.31095-5-imre.deak@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id EB7CD891E1 for ; Mon, 13 May 2019 19:25:58 +0000 (UTC) In-Reply-To: <20190509173446.31095-5-imre.deak@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org QnkgZGlzYWJsaW5nIGEgcG93ZXIgZG9tYWluIGFzeW5jaHJvbm91c2x5IHdlIGNhbiByZXN0cmlj dCBob2xkaW5nIGEKcmVmZXJlbmNlIG9uIHRoYXQgcG93ZXIgZG9tYWluIHRvIHRoZSBhY3R1YWwg Y29kZSBzZXF1ZW5jZSB0aGF0CnJlcXVpcmVzIHRoZSBwb3dlciB0byBiZSBvbiBmb3IgdGhlIEhX IGFjY2VzcyBpdCdzIGRvaW5nLCBieSBhbHNvCmF2b2lkaW5nIHVubmVlZGVkIG9uLW9mZi1vbiB0 b2dnbGluZ3Mgb2YgdGhlIHBvd2VyIGRvbWFpbiAoc2luY2UgdGhlCmRpc2FibGluZyBoYXBwZW5z IHdpdGggYSBkZWxheSkuCgpPbmUgYmVuZWZpdCBpcyBwb3RlbnRpYWwgcG93ZXIgc2F2aW5nIGR1 ZSB0byB0aGUgZm9sbG93aW5nIHR3byByZWFzb25zOgoxLiBUaGUgZmFjdCB0aGF0IHdlIHdpbGwg bm93IGJlIGhvbGRpbmcgdGhlIHJlZmVyZW5jZSBvbmx5IGZvciB0aGUKICAgbmVjZXNzYXJ5IGR1 cmF0aW9uIGJ5IHRoZSBlbmQgb2YgdGhlIHBhdGNoc2V0LiBXaGlsZSBzaW1wbHkgbm90CiAgIGRl bGF5aW5nIHRoZSBkaXNhYmxpbmcgaGFzIHRoZSBzYW1lIGJlbmVmaXQsIGl0IGhhcyB0aGUgcHJv YmxlbSB0aGF0CiAgIGZyZXF1ZW50IG9uLW9mZi1vbiBwb3dlciBzd2l0Y2hpbmcgaGFzIGl0cyBv d24gcG93ZXIgY29zdCAoc2VlIHRoZSAyLgogICBwb2ludCBiZWxvdykgYW5kIHRoZSBkZWJ1ZyB0 cmFjZSBmb3IgcG93ZXIgd2VsbCBvbi9vZmYgZXZlbnRzIHdpbGwKICAgY2F1c2UgYSBsb3Qgb2Yg ZG1lc2cgc3BhbSAoc2VlIGRldGFpbHMgYWJvdXQgdGhpcyBmdXJ0aGVyIGJlbG93KS4KMi4gQXZv aWRpbmcgdGhlIHBvd2VyIGNvc3Qgb2YgZnJldXFlbnQgb24tb2ZmLW9uIHBvd2VyIHN3aXRjaGlu Zy4gVGhpcwogICByZXF1aXJlcyB1cyB0byBmaW5kIHRoZSBvcHRpbWFsIGRpc2FibGluZyBkZWxh eSBiYXNlZCBvbiB0aGUgbWVhc3VyZWQKICAgcG93ZXIgY29zdCBvZiBvbi0+b2ZmIGFuZCBvZmYt Pm9uIHN3aXRjaGluZyBvZiBlYWNoIHBvd2VyIHdlbGwgdnMuCiAgIHRoZSBwb3dlciBvZiBrZWVw aW5nIHRoZSBnaXZlbiBwb3dlciB3ZWxsIG9uLgoKICAgSW4gdGhpcyBwYXRjaHNldCBJJ20gbm90 IHByb3ZpZGluZyB0aGlzIG9wdGltYWwgZGVsYXkgZm9yIHR3bwogICByZWFzb25zOgogICBhKSBJ IGRvbid0IGhhdmUgdGhlIG1lYW5zIHlldCB0byBwZXJmb3JtIHRoZSBtZWFzdXJlbWVudCAod2l0 aCBoaWdoCiAgICAgIGVub3VnaCBzaWduYWwtdG8tbm9pc2UgcmF0aW8sIG9yIHdpdGggdGhlIGhl bHAgb2YgYW4gZW5lcmd5CiAgICAgIGNvdW50ZXIgdGhhdCB0YWtlcyBzd2l0Y2hpbmcgaW50byBh Y2NvdW50KS4gSSdtIGN1cnJlbnRseSBsb29raW5nCiAgICAgIGZvciBhIHdheSB0byBtZWFzdXJl IHRoaXMuCgogICBiKSBCZWZvcmUgcmVkdWNpbmcgdGhlIGRpc2FibGluZyBkZWxheSB3ZSBuZWVk IGFuIGFsdGVybmF0aXZlIHdheSBmb3IKICAgICAgZGVidWcgdHJhY2luZyBwb3dlcndlbGwgb24v b2ZmIGV2ZW50cy4gU2ltcGx5IGF2b2lkaW5nL3Rocm90dGxpbmcKICAgICAgdGhlIGRlYnVnIG1l c3NhZ2VzIGlzIG5vdCBhIHNvbHV0aW9uLCBzZWUgZnVydGhlciBiZWxvdy4KCiAgIE5vdGUgdGhh dCBldmVuIGluIHRoZSBjYXNlIHdoZXJlIHdlIGNhbid0IG1lYXN1cmUgYW55IGNvbnNpZGVyYWJs ZQogICBwb3dlciBjb3N0IG9mIGZyZXF1ZW50IG9uLW9mZiBzd2l0Y2hpbmcgb2YgcG93ZXJ3ZWxs cywgaXQgc3RpbGwgd291bGQKICAgbWFrZSBzZW5zZSB0byBkbyB0aGUgZGlzYWJsaW5nIGFzeW5j aHJvbm91c2x5ICh3aXRoIDAgZGVsYXkpIHRvIGF2b2lkCiAgIGJsb2NraW5nIG9uIHRoZSBkaXNh YmxpbmcuIE9uIFZMViBJIG1lYXN1cmVkIHRoaXMgZGlzYWJsaW5nIHRpbWUKICAgb3ZlcmhlYWQg dG8gYmUgMW1zIG9uIGF2ZXJhZ2Ugd2l0aCBhIHdvcnN0IGNhc2Ugb2YgNG1zLgoKSW4gdGhlIGNh c2Ugb2YgdGhlIEFVWCBwb3dlciBkb21haW5zIG9uIElDTCB3ZSB3b3VsZCBhbHNvIG5lZWQgdG8g a2VlcAp0aGUgc2VxdWVuY2Ugd2hlcmUgd2UgaG9sZCB0aGUgcG93ZXIgcmVmZXJlbmNlIHNob3J0 LCB0aGUgd2F5IGl0IHdvdWxkCmJlIGJ5IHRoZSBlbmQgb2YgdGhpcyBwYXRjaHNldCB3aGVyZSB3 ZSBob2xkIGl0IG9ubHkgZm9yIHRoZSBhY3R1YWwgQVVYCnRyYW5zZmVyLiBBbnl0aGluZyBlbHNl IHdvdWxkIG1ha2UgdGhlIGxvY2tpbmcgd2UgbmVlZCBmb3IgSUNMIFR5cGVDCnBvcnRzICh3aGVu ZXZlciB3ZSBob2xkIGEgcmVmZXJlbmNlIG9uIGFueSBBVVggcG93ZXIgZG9tYWluKSByYXRoZXIK cHJvYmxlbWF0aWMsIGFkZGluZyBmb3IgaW5zdGFuY2UgdW5uZWNlc3NhcnkgbG9ja2RlcCBkZXBl bmRlbmNpZXMgdG8KdGhlIHJlcXVpcmVkIFR5cGVDIHBvcnQgbG9jay4KCkkgY2hvc2UgdGhlIGRp c2FibGluZyBkZWxheSB0byBiZSAxMDBtc2VjIGZvciBub3cgdG8gYXZvaWQgdGhlIHVubmVlZGVk CnRvZ2dsaW5nIChhbmQgc28gbm90IHRvIGludHJvZHVjZSBkbWVzZyBzcGFtbWluZykgaW4gdGhl IERQIE1TVCBzaWRlYmFuZApzaWduYWxpbmcgY29kZS4gV2UgY291bGQgb3B0aW1pemUgdGhpcyBk ZWxheSBsYXRlciwgb25jZSB3ZSBoYXZlIHRoZQptZWFucyB0byBtZWFzdXJlIHRoZSBzd2l0Y2hp bmcgcG93ZXIgY29zdCAoc2VlIGFib3ZlKS4KCk5vdGUgdGhhdCBzaW1wbHkgcmVtb3ZpbmcvdGhy b3R0bGluZyB0aGUgZGVidWcgdHJhY2luZyBmb3IgcG93ZXIgd2VsbApvbi9vZmYgZXZlbnRzIGlz IG5vdCBhIHNvbHV0aW9uLiBXZSBuZWVkIHRvIGtub3cgdGhlIGV4YWN0IHNwb3RzIG9mCnRoZXNl IGV2ZW50cyBhbmQgY2Fubm90IHJlbHkgb25seSBvbiBpbmNvcnJlY3QgcmVnaXN0ZXIgYWNjZXNz ZXMgY2F1Z2h0CihkdWUgdG8gbm90IGhvbGRpbmcgYSB3YWtlcmVmIGF0IHRoZSB0aW1lIG9mIGFj Y2VzcykuIEluY29ycmVjdApwb3dlcndlbGwgZW5hYmxpbmcvZGlzYWJsaW5nIGNvdWxkIGxlYWQg dG8gb3RoZXIgcHJvYmxlbXMsIGZvciBpbnN0YW5jZQp3ZSBuZWVkIHRvIGtlZXAgY2VydGFpbiBw b3dlcndlbGxzIGVuYWJsZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBtb2Rlc2V0cwphbmQgQVVYIHRy YW5zZmVycy4KCnYyOgotIENsYXJpZnkgdGhlIGNvbW1pdCBsb2cgcGFydHMgYWJvdXQgcG93ZXIg Y29zdCBtZWFzdXJlbWVudCBhbmQgdGhlCiAgcHJvYmxlbSBvZiBzaW1wbHkgcmVtb3ZpbmcvdGhy b3R0bGluZyBkZWJ1ZyB0cmFjaW5nLiAoQ2hyaXMpCi0gT3B0aW1pemUgb3V0IGxvY2FsIHdha2Vy ZWYgdmFycyBhdCBpbnRlbF9ydW50aW1lX3BtX3B1dF9yYXcoKSBhbmQKICBpbnRlbF9kaXNwbGF5 X3Bvd2VyX3B1dF9hc3luYygpIGNhbGwgc2l0ZXMgaWYKICBDT05GSUdfRFJNX0k5MTVfREVCVUdf UlVOVElNRV9QTT1uLiAoQ2hyaXMpCi0gUmViYXNlZCBvbiB2MiBvZiB0aGUgd2FrZXJlZiB3L28g cG93ZXItb24gZ3VhcmFudGVlIHBhdGNoLgotIEFkZCBtaXNzaW5nIGRvY2Jvb2sgaGVhZGVycy4K djM6Ci0gQ2hlY2twYXRjaCBzcGVsbGluZy9taXNzaW5nLWVtcHR5LWxpbmUgZml4Lgp2NDoKLSBG aXggdW5pbnRlbmRlZCBsb2NhbCB3YWtlcmVmIHZhciBvcHRpbWl6YXRpb24gd2hlbiB1c2luZwog IGNhbGwtYXJndW1lbnRzIHdpdGggc2lkZS1lZmZlY3RzLCBieSB1c2luZyBpbmxpbmUgZnVuY3Mg aW5zdGVhZCBvZgogIG1hY3Jvcy4gSW4gdGhpcyBwYXRjaCBpbiBwYXJ0aWN1bGFyIHRoaXMgd2ls bCBmaXggdGhlCiAgaW50ZWxfZGlzcGxheV9wb3dlcl9ncmFiX2FzeW5jX3B1dF9yZWYoKS0+aW50 ZWxfcnVudGltZV9wbV9wdXRfcmF3KCkKICBjYWxsKS4KCiAgTm8gc2l6ZSBjaGFuZ2UgaW4gcHJh Y3RpY2UgKHdvdWxkIGJlIHRoZSBzYW1lIGRpc3JlZ2FyZGluZyB0aGUKICBjb3JyZXNwb25kaW5n IGNoYW5nZSBpbiBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dyYWJfYXN5bmNfcHV0X3JlZigpKToKICAk IHNpemUgaTkxNS1tYWNyby5rbwogICAgIHRleHQJICAgZGF0YQkgICAgYnNzCSAgICBkZWMJICAg IGhleAlmaWxlbmFtZQogIDI0NTUxOTAJIDEwNTg5MAkgIDEwMjcyCTI1NzEzNTIJIDI3M2M1OAlp OTE1LW1hY3JvLmtvCiAgJCBzaXplIGk5MTUtaW5saW5lLmtvCiAgICAgdGV4dAkgICBkYXRhCSAg ICBic3MJICAgIGRlYwkgICAgaGV4CWZpbGVuYW1lCiAgMjQ1NTE5NQkgMTA1ODkwCSAgMTAyNzIJ MjU3MTM1NwkgMjczYzVkCWk5MTUtaW5saW5lLmtvCgogIEt1ZG9zIHRvIFN0YW4gZm9yIHJlcG9y dGluZyB0aGUgcmF3LXdha2VyZWYgV0FSTnMgdGhpcyBpc3N1ZSBjYXVzZWQuIEhpcwogIGNvbmZp ZyBoYXMgQ09ORklHX0RSTV9JOTE1X0RFQlVHX1JVTlRJTUVfUE09biwgd2hpY2ggSSBkaWRuJ3Qg cmV0ZXN0CiAgYWZ0ZXIgdjEsIGFuZCB3ZSBhcmUgYWxzbyBub3QgdGVzdGluZyB0aGlzIGNvbmZp ZyBpbiBDSS4KCiAgTm93IHRlc3RlZCBib3RoIHdpdGggQ09ORklHX0RSTV9JOTE1X0RFQlVHX1JV TlRJTUVfUE09eS9uIG9uIElDTCwKICBjb25uZWN0aW5nIGJvdGggQ2hhbWVsaXVtIGFuZCByZWd1 bGFyIERQLCBIRE1JIHNpbmtzLgoKQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29u LmNvLnVrPgpDYzogVmlsbGUgU3lyamFsYSA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ CkNjOiBTdGFuaXNsYXYgTGlzb3Zza2l5IDxzdGFuaXNsYXYubGlzb3Zza2l5QGludGVsLmNvbT4K U2lnbmVkLW9mZi1ieTogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgpSZXZpZXdlZC1i eTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ICh2MykKLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgIDUgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jIHwgMzY2ICsrKysrKysrKysrKysrKysrKysrKysr LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5oIHwgIDMzICsrLQogMyBm aWxlcyBjaGFuZ2VkLCAzOTQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKaW5kZXggZDAyNTc4MDg3MzRjLi41ODAxZjU0MDc1ODkgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaApAQCAtODM0LDYgKzgzNCwxMSBAQCBzdHJ1Y3QgaTkxNV9wb3dlcl9k b21haW5zIHsKIAogCXN0cnVjdCBtdXRleCBsb2NrOwogCWludCBkb21haW5fdXNlX2NvdW50W1BP V0VSX0RPTUFJTl9OVU1dOworCisJc3RydWN0IGRlbGF5ZWRfd29yayBhc3luY19wdXRfd29yazsK KwlpbnRlbF93YWtlcmVmX3QgYXN5bmNfcHV0X3dha2VyZWY7CisJdTY0IGFzeW5jX3B1dF9kb21h aW5zWzJdOworCiAJc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbHM7CiB9OwogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmMKaW5kZXggMmNmNDk0M2RmMmU3Li5h NDE4ODVjNTRmZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRp bWVfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmMKQEAg LTYwLDYgKzYwLDIyIEBACiAgKiBwcmVzZW50IGZvciBhIGdpdmVuIHBsYXRmb3JtLgogICovCiAK K3N0YXRpYyBpbnRlbF93YWtlcmVmX3QgaW50ZWxfcnVudGltZV9wbV9nZXRfcmF3KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KTsKK3N0YXRpYyB2b2lkCitfX2ludGVsX3J1bnRpbWVfcG1f cHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBpbnRlbF93YWtlcmVmX3Qgd3JlZiwK KwkJICAgICAgIGJvb2wgd2FrZWxvY2spOworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5 MTVfREVCVUdfUlVOVElNRV9QTSkKK3N0YXRpYyB2b2lkCitpbnRlbF9ydW50aW1lX3BtX3B1dF9y YXcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGludGVsX3dha2VyZWZfdCB3cmVmKTsK KyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcnVudGltZV9wbV9wdXRfcmF3KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LAorCQkJCQkgICAgaW50ZWxfd2FrZXJlZl90IHdyZWYp Cit7CisJX19pbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCAtMSwgZmFsc2UpOworfQorI2VuZGlm CisKICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9ERUJVR19SVU5USU1FX1BNKQogCiAj aW5jbHVkZSA8bGludXgvc29ydC5oPgpAQCAtMTkwMyw2ICsxOTE5LDEyNSBAQCBzdGF0aWMgdm9p ZCBjaHZfcGlwZV9wb3dlcl93ZWxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAogCWNodl9zZXRfcGlwZV9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCBm YWxzZSk7CiB9CiAKK3N0YXRpYyB1NjQgX19hc3luY19wdXRfZG9tYWluc19tYXNrKHN0cnVjdCBp OTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMpCit7CisJcmV0dXJuIHBvd2VyX2RvbWFp bnMtPmFzeW5jX3B1dF9kb21haW5zWzBdIHwKKwkgICAgICAgcG93ZXJfZG9tYWlucy0+YXN5bmNf cHV0X2RvbWFpbnNbMV07Cit9CisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9ERUJV R19SVU5USU1FX1BNKQorCitzdGF0aWMgYm9vbAorYXNzZXJ0X2FzeW5jX3B1dF9kb21haW5fbWFz a3NfZGlzam9pbnQoc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9tYWlucykKK3sK KwlyZXR1cm4gIVdBUk5fT04ocG93ZXJfZG9tYWlucy0+YXN5bmNfcHV0X2RvbWFpbnNbMF0gJgor CQkJcG93ZXJfZG9tYWlucy0+YXN5bmNfcHV0X2RvbWFpbnNbMV0pOworfQorCitzdGF0aWMgYm9v bAorX19hc3luY19wdXRfZG9tYWluc19zdGF0ZV9vayhzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5z ICpwb3dlcl9kb21haW5zKQoreworCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9t YWluOworCWJvb2wgZXJyID0gZmFsc2U7CisKKwllcnIgfD0gIWFzc2VydF9hc3luY19wdXRfZG9t YWluX21hc2tzX2Rpc2pvaW50KHBvd2VyX2RvbWFpbnMpOworCWVyciB8PSBXQVJOX09OKCEhcG93 ZXJfZG9tYWlucy0+YXN5bmNfcHV0X3dha2VyZWYgIT0KKwkJICAgICAgICEhX19hc3luY19wdXRf ZG9tYWluc19tYXNrKHBvd2VyX2RvbWFpbnMpKTsKKworCWZvcl9lYWNoX3Bvd2VyX2RvbWFpbihk b21haW4sIF9fYXN5bmNfcHV0X2RvbWFpbnNfbWFzayhwb3dlcl9kb21haW5zKSkKKwkJZXJyIHw9 IFdBUk5fT04ocG93ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9jb3VudFtkb21haW5dICE9IDEpOwor CisJcmV0dXJuICFlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Bvd2VyX2RvbWFpbnMoc3Ry dWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9tYWlucywKKwkJCQljb25zdCBjaGFyICpw cmVmaXgsIHU2NCBtYXNrKQoreworCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9t YWluOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMgKCVsdSk6XG4iLCBwcmVmaXgsIGh3ZWlnaHQ2 NChtYXNrKSk7CisJZm9yX2VhY2hfcG93ZXJfZG9tYWluKGRvbWFpbiwgbWFzaykKKwkJRFJNX0RF QlVHX0RSSVZFUigiJXMgdXNlX2NvdW50ICVkXG4iLAorCQkJCSBpbnRlbF9kaXNwbGF5X3Bvd2Vy X2RvbWFpbl9zdHIoZG9tYWluKSwKKwkJCQkgcG93ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9jb3Vu dFtkb21haW5dKTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X2FzeW5jX3B1dF9kb21haW5zX3N0 YXRlKHN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMpCit7CisJRFJNX0RF QlVHX0RSSVZFUigiYXN5bmNfcHV0X3dha2VyZWYgJXVcbiIsCisJCQkgcG93ZXJfZG9tYWlucy0+ YXN5bmNfcHV0X3dha2VyZWYpOworCisJcHJpbnRfcG93ZXJfZG9tYWlucyhwb3dlcl9kb21haW5z LCAiYXN5bmNfcHV0X2RvbWFpbnNbMF0iLAorCQkJICAgIHBvd2VyX2RvbWFpbnMtPmFzeW5jX3B1 dF9kb21haW5zWzBdKTsKKwlwcmludF9wb3dlcl9kb21haW5zKHBvd2VyX2RvbWFpbnMsICJhc3lu Y19wdXRfZG9tYWluc1sxXSIsCisJCQkgICAgcG93ZXJfZG9tYWlucy0+YXN5bmNfcHV0X2RvbWFp bnNbMV0pOworfQorCitzdGF0aWMgdm9pZAordmVyaWZ5X2FzeW5jX3B1dF9kb21haW5zX3N0YXRl KHN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMpCit7CisJaWYgKCFfX2Fz eW5jX3B1dF9kb21haW5zX3N0YXRlX29rKHBvd2VyX2RvbWFpbnMpKQorCQlwcmludF9hc3luY19w dXRfZG9tYWluc19zdGF0ZShwb3dlcl9kb21haW5zKTsKK30KKworI2Vsc2UKKworc3RhdGljIHZv aWQKK2Fzc2VydF9hc3luY19wdXRfZG9tYWluX21hc2tzX2Rpc2pvaW50KHN0cnVjdCBpOTE1X3Bv d2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMpCit7Cit9CisKK3N0YXRpYyB2b2lkCit2ZXJpZnlf YXN5bmNfcHV0X2RvbWFpbnNfc3RhdGUoc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJf ZG9tYWlucykKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19EUk1fSTkxNV9ERUJVR19SVU5USU1F X1BNICovCisKK3N0YXRpYyB1NjQgYXN5bmNfcHV0X2RvbWFpbnNfbWFzayhzdHJ1Y3QgaTkxNV9w b3dlcl9kb21haW5zICpwb3dlcl9kb21haW5zKQoreworCWFzc2VydF9hc3luY19wdXRfZG9tYWlu X21hc2tzX2Rpc2pvaW50KHBvd2VyX2RvbWFpbnMpOworCisJcmV0dXJuIF9fYXN5bmNfcHV0X2Rv bWFpbnNfbWFzayhwb3dlcl9kb21haW5zKTsKK30KKworc3RhdGljIHZvaWQKK2FzeW5jX3B1dF9k b21haW5zX2NsZWFyX2RvbWFpbihzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21h aW5zLAorCQkJICAgICAgIGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluKQor eworCWFzc2VydF9hc3luY19wdXRfZG9tYWluX21hc2tzX2Rpc2pvaW50KHBvd2VyX2RvbWFpbnMp OworCisJcG93ZXJfZG9tYWlucy0+YXN5bmNfcHV0X2RvbWFpbnNbMF0gJj0gfkJJVF9VTEwoZG9t YWluKTsKKwlwb3dlcl9kb21haW5zLT5hc3luY19wdXRfZG9tYWluc1sxXSAmPSB+QklUX1VMTChk b21haW4pOworfQorCitzdGF0aWMgYm9vbAoraW50ZWxfZGlzcGxheV9wb3dlcl9ncmFiX2FzeW5j X3B1dF9yZWYoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgICAgICBl bnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbikKK3sKKwlzdHJ1Y3QgaTkxNV9w b3dlcl9kb21haW5zICpwb3dlcl9kb21haW5zID0gJmRldl9wcml2LT5wb3dlcl9kb21haW5zOwor CWJvb2wgcmV0ID0gZmFsc2U7CisKKwlpZiAoIShhc3luY19wdXRfZG9tYWluc19tYXNrKHBvd2Vy X2RvbWFpbnMpICYgQklUX1VMTChkb21haW4pKSkKKwkJZ290byBvdXRfdmVyaWZ5OworCisJYXN5 bmNfcHV0X2RvbWFpbnNfY2xlYXJfZG9tYWluKHBvd2VyX2RvbWFpbnMsIGRvbWFpbik7CisKKwly ZXQgPSB0cnVlOworCisJaWYgKGFzeW5jX3B1dF9kb21haW5zX21hc2socG93ZXJfZG9tYWlucykp CisJCWdvdG8gb3V0X3ZlcmlmeTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnBvd2VyX2RvbWFp bnMtPmFzeW5jX3B1dF93b3JrKTsKKwlpbnRlbF9ydW50aW1lX3BtX3B1dF9yYXcoZGV2X3ByaXYs CisJCQkJIGZldGNoX2FuZF96ZXJvKCZwb3dlcl9kb21haW5zLT5hc3luY19wdXRfd2FrZXJlZikp Oworb3V0X3ZlcmlmeToKKwl2ZXJpZnlfYXN5bmNfcHV0X2RvbWFpbnNfc3RhdGUocG93ZXJfZG9t YWlucyk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZAogX19pbnRlbF9kaXNwbGF5 X3Bvd2VyX2dldF9kb21haW4oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJ CSBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbikKQEAgLTE5MTAsNiArMjA0 NSw5IEBAIF9faW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKIAlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21h aW5zID0gJmRldl9wcml2LT5wb3dlcl9kb21haW5zOwogCXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwg KnBvd2VyX3dlbGw7CiAKKwlpZiAoaW50ZWxfZGlzcGxheV9wb3dlcl9ncmFiX2FzeW5jX3B1dF9y ZWYoZGV2X3ByaXYsIGRvbWFpbikpCisJCXJldHVybjsKKwogCWZvcl9lYWNoX3Bvd2VyX2RvbWFp bl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCBCSVRfVUxMKGRvbWFpbikpCiAJCWludGVsX3Bv d2VyX3dlbGxfZ2V0KGRldl9wcml2LCBwb3dlcl93ZWxsKTsKIApAQCAtMTkzNSw5ICsyMDczLDcg QEAgaW50ZWxfd2FrZXJlZl90IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZiA9IGludGVsX3J1 bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKIAogCW11dGV4X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxv Y2spOwotCiAJX19pbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9kb21haW4oZGV2X3ByaXYsIGRvbWFp bik7Ci0KIAltdXRleF91bmxvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwogCiAJcmV0dXJuIHdh a2VyZWY7CkBAIC0xOTg2LDI0ICsyMTIyLDM2IEBAIGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lm X2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXJldHVybiB3YWtl cmVmOwogfQogCi1zdGF0aWMgdm9pZCBfX2ludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgICAgICBlbnVtIGludGVsX2Rpc3BsYXlf cG93ZXJfZG9tYWluIGRvbWFpbikKK3N0YXRpYyB2b2lkCitfX2ludGVsX2Rpc3BsYXlfcG93ZXJf cHV0X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJIGVudW0g aW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluKQogewogCXN0cnVjdCBpOTE1X3Bvd2Vy X2RvbWFpbnMgKnBvd2VyX2RvbWFpbnM7CiAJc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJf d2VsbDsKKwljb25zdCBjaGFyICpuYW1lID0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW5fc3Ry KGRvbWFpbik7CiAKIAlwb3dlcl9kb21haW5zID0gJmRldl9wcml2LT5wb3dlcl9kb21haW5zOwog Ci0JbXV0ZXhfbG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7Ci0KIAlXQVJOKCFwb3dlcl9kb21h aW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFpbl0sCiAJICAgICAiVXNlIGNvdW50IG9uIGRvbWFp biAlcyBpcyBhbHJlYWR5IHplcm9cbiIsCi0JICAgICBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFp bl9zdHIoZG9tYWluKSk7CisJICAgICBuYW1lKTsKKwlXQVJOKGFzeW5jX3B1dF9kb21haW5zX21h c2socG93ZXJfZG9tYWlucykgJiBCSVRfVUxMKGRvbWFpbiksCisJICAgICAiQXN5bmMgZGlzYWJs aW5nIG9mIGRvbWFpbiAlcyBpcyBwZW5kaW5nXG4iLAorCSAgICAgbmFtZSk7CisKIAlwb3dlcl9k b21haW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFpbl0tLTsKIAogCWZvcl9lYWNoX3Bvd2VyX2Rv bWFpbl93ZWxsX3JldmVyc2UoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIEJJVF9VTEwoZG9tYWluKSkK IAkJaW50ZWxfcG93ZXJfd2VsbF9wdXQoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOworfQogCitzdGF0 aWMgdm9pZCBfX2ludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKKwkJCQkgICAgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRv bWFpbikKK3sKKwlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5zID0gJmRl dl9wcml2LT5wb3dlcl9kb21haW5zOworCisJbXV0ZXhfbG9jaygmcG93ZXJfZG9tYWlucy0+bG9j ayk7CisJX19pbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dF9kb21haW4oZGV2X3ByaXYsIGRvbWFpbik7 CiAJbXV0ZXhfdW5sb2NrKCZwb3dlcl9kb21haW5zLT5sb2NrKTsKIH0KIApAQCAtMjAyNyw2ICsy MTc1LDE4OCBAQCB2b2lkIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0X3VuY2hlY2tlZChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJaW50ZWxfcnVudGltZV9wbV9wdXRfdW5jaGVj a2VkKGRldl9wcml2KTsKIH0KIAorc3RhdGljIHZvaWQKK3F1ZXVlX2FzeW5jX3B1dF9kb21haW5z X3dvcmsoc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9tYWlucywKKwkJCSAgICAg aW50ZWxfd2FrZXJlZl90IHdha2VyZWYpCit7CisJV0FSTl9PTihwb3dlcl9kb21haW5zLT5hc3lu Y19wdXRfd2FrZXJlZik7CisJcG93ZXJfZG9tYWlucy0+YXN5bmNfcHV0X3dha2VyZWYgPSB3YWtl cmVmOworCVdBUk5fT04oIXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fdW5ib3VuZF93cSwKKwkJ CQkgICAgJnBvd2VyX2RvbWFpbnMtPmFzeW5jX3B1dF93b3JrLAorCQkJCSAgICBtc2Vjc190b19q aWZmaWVzKDEwMCkpKTsKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VfYXN5bmNfcHV0X2RvbWFp bnMoc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9tYWlucywgdTY0IG1hc2spCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJY29udGFpbmVyX29mKHBv d2VyX2RvbWFpbnMsIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlLAorCQkJICAgICBwb3dlcl9kb21h aW5zKTsKKwllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbjsKKwlpbnRlbF93 YWtlcmVmX3Qgd2FrZXJlZjsKKworCS8qCisJICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYWxyZWFk eSByYXcgd2FrZXJlZiwgdXBncmFkZSB0aGF0IHRvIGEgcHJvcGVyCisJICogd2FrZXJlZiB0byBt YWtlIHRoZSBzdGF0ZSBjaGVja2VyIGhhcHB5IGFib3V0IHRoZSBIVyBhY2Nlc3MgZHVyaW5nCisJ ICogcG93ZXIgd2VsbCBkaXNhYmxpbmcuCisJICovCisJYXNzZXJ0X3JwbV9yYXdfd2FrZXJlZl9o ZWxkKGRldl9wcml2KTsKKwl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYp OworCisJZm9yX2VhY2hfcG93ZXJfZG9tYWluKGRvbWFpbiwgbWFzaykgeworCQkvKiBDbGVhciBi ZWZvcmUgcHV0LCBzbyBwdXQncyBzYW5pdHkgY2hlY2sgaXMgaGFwcHkuICovCisJCWFzeW5jX3B1 dF9kb21haW5zX2NsZWFyX2RvbWFpbihwb3dlcl9kb21haW5zLCBkb21haW4pOworCQlfX2ludGVs X2Rpc3BsYXlfcG93ZXJfcHV0X2RvbWFpbihkZXZfcHJpdiwgZG9tYWluKTsKKwl9CisKKwlpbnRl bF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cit9CisKK3N0YXRpYyB2b2lkCitp bnRlbF9kaXNwbGF5X3Bvd2VyX3B1dF9hc3luY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y aykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQljb250YWluZXJf b2Yod29yaywgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsCisJCQkgICAgIHBvd2VyX2RvbWFpbnMu YXN5bmNfcHV0X3dvcmsud29yayk7CisJc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJf ZG9tYWlucyA9ICZkZXZfcHJpdi0+cG93ZXJfZG9tYWluczsKKwlpbnRlbF93YWtlcmVmX3QgbmV3 X3dvcmtfd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0X3JhdyhkZXZfcHJpdik7CisJaW50 ZWxfd2FrZXJlZl90IG9sZF93b3JrX3dha2VyZWYgPSAwOworCisJbXV0ZXhfbG9jaygmcG93ZXJf ZG9tYWlucy0+bG9jayk7CisKKwkvKgorCSAqIEJhaWwgb3V0IGlmIGFsbCB0aGUgZG9tYWluIHJl ZnMgcGVuZGluZyB0byBiZSByZWxlYXNlZCB3ZXJlIGdyYWJiZWQKKwkgKiBieSBzdWJzZXF1ZW50 IGdldHMgb3IgYSBmbHVzaF93b3JrLgorCSAqLworCW9sZF93b3JrX3dha2VyZWYgPSBmZXRjaF9h bmRfemVybygmcG93ZXJfZG9tYWlucy0+YXN5bmNfcHV0X3dha2VyZWYpOworCWlmICghb2xkX3dv cmtfd2FrZXJlZikKKwkJZ290byBvdXRfdmVyaWZ5OworCisJcmVsZWFzZV9hc3luY19wdXRfZG9t YWlucyhwb3dlcl9kb21haW5zLAorCQkJCSAgcG93ZXJfZG9tYWlucy0+YXN5bmNfcHV0X2RvbWFp bnNbMF0pOworCisJLyogUmVxdWV1ZSB0aGUgd29yayBpZiBtb3JlIGRvbWFpbnMgd2VyZSBhc3lu YyBwdXQgbWVhbndoaWxlLiAqLworCWlmIChwb3dlcl9kb21haW5zLT5hc3luY19wdXRfZG9tYWlu c1sxXSkgeworCQlwb3dlcl9kb21haW5zLT5hc3luY19wdXRfZG9tYWluc1swXSA9CisJCQlmZXRj aF9hbmRfemVybygmcG93ZXJfZG9tYWlucy0+YXN5bmNfcHV0X2RvbWFpbnNbMV0pOworCQlxdWV1 ZV9hc3luY19wdXRfZG9tYWluc193b3JrKHBvd2VyX2RvbWFpbnMsCisJCQkJCSAgICAgZmV0Y2hf YW5kX3plcm8oJm5ld193b3JrX3dha2VyZWYpKTsKKwl9CisKK291dF92ZXJpZnk6CisJdmVyaWZ5 X2FzeW5jX3B1dF9kb21haW5zX3N0YXRlKHBvd2VyX2RvbWFpbnMpOworCisJbXV0ZXhfdW5sb2Nr KCZwb3dlcl9kb21haW5zLT5sb2NrKTsKKworCWlmIChvbGRfd29ya193YWtlcmVmKQorCQlpbnRl bF9ydW50aW1lX3BtX3B1dF9yYXcoZGV2X3ByaXYsIG9sZF93b3JrX3dha2VyZWYpOworCWlmIChu ZXdfd29ya193YWtlcmVmKQorCQlpbnRlbF9ydW50aW1lX3BtX3B1dF9yYXcoZGV2X3ByaXYsIG5l d193b3JrX3dha2VyZWYpOworfQorCisvKioKKyAqIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0X2Fz eW5jIC0gcmVsZWFzZSBhIHBvd2VyIGRvbWFpbiByZWZlcmVuY2UgYXN5bmNocm9ub3VzbHkKKyAq IEBpOTE1OiBpOTE1IGRldmljZSBpbnN0YW5jZQorICogQGRvbWFpbjogcG93ZXIgZG9tYWluIHRv IHJlZmVyZW5jZQorICogQHdha2VyZWY6IHdha2VyZWYgYWNxdWlyZWQgZm9yIHRoZSByZWZlcmVu Y2UgdGhhdCBpcyBiZWluZyByZWxlYXNlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZHJvcHMgdGhl IHBvd2VyIGRvbWFpbiByZWZlcmVuY2Ugb2J0YWluZWQgYnkKKyAqIGludGVsX2Rpc3BsYXlfcG93 ZXJfZ2V0KigpIGFuZCBzY2hlZHVsZXMgYSB3b3JrIHRvIHBvd2VyIGRvd24gdGhlCisgKiBjb3Jy ZXNwb25kaW5nIGhhcmR3YXJlIGJsb2NrIGlmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLgor ICovCit2b2lkIF9faW50ZWxfZGlzcGxheV9wb3dlcl9wdXRfYXN5bmMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCisJCQkJICAgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWlu IGRvbWFpbiwKKwkJCQkgICAgIGludGVsX3dha2VyZWZfdCB3YWtlcmVmKQoreworCXN0cnVjdCBp OTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMgPSAmaTkxNS0+cG93ZXJfZG9tYWluczsK KwlpbnRlbF93YWtlcmVmX3Qgd29ya193YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXRfcmF3 KGk5MTUpOworCisJbXV0ZXhfbG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7CisKKwlpZiAocG93 ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9jb3VudFtkb21haW5dID4gMSkgeworCQlfX2ludGVsX2Rp c3BsYXlfcG93ZXJfcHV0X2RvbWFpbihpOTE1LCBkb21haW4pOworCisJCWdvdG8gb3V0X3Zlcmlm eTsKKwl9CisKKwlXQVJOX09OKHBvd2VyX2RvbWFpbnMtPmRvbWFpbl91c2VfY291bnRbZG9tYWlu XSAhPSAxKTsKKworCS8qIExldCBhIHBlbmRpbmcgd29yayByZXF1ZXVlIGl0c2VsZiBvciBxdWV1 ZSBhIG5ldyBvbmUuICovCisJaWYgKHBvd2VyX2RvbWFpbnMtPmFzeW5jX3B1dF93YWtlcmVmKSB7 CisJCXBvd2VyX2RvbWFpbnMtPmFzeW5jX3B1dF9kb21haW5zWzFdIHw9IEJJVF9VTEwoZG9tYWlu KTsKKwl9IGVsc2UgeworCQlwb3dlcl9kb21haW5zLT5hc3luY19wdXRfZG9tYWluc1swXSB8PSBC SVRfVUxMKGRvbWFpbik7CisJCXF1ZXVlX2FzeW5jX3B1dF9kb21haW5zX3dvcmsocG93ZXJfZG9t YWlucywKKwkJCQkJICAgICBmZXRjaF9hbmRfemVybygmd29ya193YWtlcmVmKSk7CisJfQorCitv dXRfdmVyaWZ5OgorCXZlcmlmeV9hc3luY19wdXRfZG9tYWluc19zdGF0ZShwb3dlcl9kb21haW5z KTsKKworCW11dGV4X3VubG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7CisKKwlpZiAod29ya193 YWtlcmVmKQorCQlpbnRlbF9ydW50aW1lX3BtX3B1dF9yYXcoaTkxNSwgd29ya193YWtlcmVmKTsK KworCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOworfQorCisvKioKKyAqIGlu dGVsX2Rpc3BsYXlfcG93ZXJfZmx1c2hfd29yayAtIGZsdXNoZXMgdGhlIGFzeW5jIGRpc3BsYXkg cG93ZXIgZGlzYWJsaW5nIHdvcmsKKyAqIEBpOTE1OiBpOTE1IGRldmljZSBpbnN0YW5jZQorICoK KyAqIEZsdXNoZXMgYW55IHBlbmRpbmcgd29yayB0aGF0IHdhcyBzY2hlZHVsZWQgYnkgYSBwcmVj ZWRpbmcKKyAqIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0X2FzeW5jKCkgY2FsbCwgY29tcGxldGlu ZyB0aGUgZGlzYWJsaW5nIG9mIHRoZQorICogY29ycmVzcG9uZGluZyBwb3dlciBkb21haW5zLgor ICoKKyAqIE5vdGUgdGhhdCB0aGUgd29yayBoYW5kbGVyIGZ1bmN0aW9uIG1heSBzdGlsbCBiZSBy dW5uaW5nIGFmdGVyIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnM7IHRvIGVuc3VyZSB0aGF0IHRo ZSB3b3JrIGhhbmRsZXIgaXNuJ3QgcnVubmluZyB1c2UKKyAqIGludGVsX2Rpc3BsYXlfcG93ZXJf Zmx1c2hfd29ya19zeW5jKCkgaW5zdGVhZC4KKyAqLwordm9pZCBpbnRlbF9kaXNwbGF5X3Bvd2Vy X2ZsdXNoX3dvcmsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJc3RydWN0IGk5 MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9tYWlucyA9ICZpOTE1LT5wb3dlcl9kb21haW5zOwor CWludGVsX3dha2VyZWZfdCB3b3JrX3dha2VyZWY7CisKKwltdXRleF9sb2NrKCZwb3dlcl9kb21h aW5zLT5sb2NrKTsKKworCXdvcmtfd2FrZXJlZiA9IGZldGNoX2FuZF96ZXJvKCZwb3dlcl9kb21h aW5zLT5hc3luY19wdXRfd2FrZXJlZik7CisJaWYgKCF3b3JrX3dha2VyZWYpCisJCWdvdG8gb3V0 X3ZlcmlmeTsKKworCXJlbGVhc2VfYXN5bmNfcHV0X2RvbWFpbnMocG93ZXJfZG9tYWlucywKKwkJ CQkgIGFzeW5jX3B1dF9kb21haW5zX21hc2socG93ZXJfZG9tYWlucykpOworCWNhbmNlbF9kZWxh eWVkX3dvcmsoJnBvd2VyX2RvbWFpbnMtPmFzeW5jX3B1dF93b3JrKTsKKworb3V0X3ZlcmlmeToK Kwl2ZXJpZnlfYXN5bmNfcHV0X2RvbWFpbnNfc3RhdGUocG93ZXJfZG9tYWlucyk7CisKKwltdXRl eF91bmxvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOworCisJaWYgKHdvcmtfd2FrZXJlZikKKwkJ aW50ZWxfcnVudGltZV9wbV9wdXRfcmF3KGk5MTUsIHdvcmtfd2FrZXJlZik7Cit9CisKKy8qKgor ICogaW50ZWxfZGlzcGxheV9wb3dlcl9mbHVzaF93b3JrX3N5bmMgLSBmbHVzaGVzIGFuZCBzeW5j cyB0aGUgYXN5bmMgZGlzcGxheSBwb3dlciBkaXNhYmxpbmcgd29yaworICogQGk5MTU6IGk5MTUg ZGV2aWNlIGluc3RhbmNlCisgKgorICogTGlrZSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2ZsdXNoX3dv cmsoKSwgYnV0IGFsc28gZW5zdXJlIHRoYXQgdGhlIHdvcmsKKyAqIGhhbmRsZXIgZnVuY3Rpb24g aXMgbm90IHJ1bm5pbmcgYW55IG1vcmUgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisgKi8K K3N0YXRpYyB2b2lkCitpbnRlbF9kaXNwbGF5X3Bvd2VyX2ZsdXNoX3dvcmtfc3luYyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlu cyAqcG93ZXJfZG9tYWlucyA9ICZkZXZfcHJpdi0+cG93ZXJfZG9tYWluczsKKworCWludGVsX2Rp c3BsYXlfcG93ZXJfZmx1c2hfd29yayhkZXZfcHJpdik7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19z eW5jKCZwb3dlcl9kb21haW5zLT5hc3luY19wdXRfd29yayk7CisKKwl2ZXJpZnlfYXN5bmNfcHV0 X2RvbWFpbnNfc3RhdGUocG93ZXJfZG9tYWlucyk7CisKKwlXQVJOX09OKHBvd2VyX2RvbWFpbnMt PmFzeW5jX3B1dF93YWtlcmVmKTsKK30KKwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1 X0RFQlVHX1JVTlRJTUVfUE0pCiAvKioKICAqIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0IC0gcmVs ZWFzZSBhIHBvd2VyIGRvbWFpbiByZWZlcmVuY2UKQEAgLTM1MjUsNiArMzg1NSw5IEBAIGludCBp bnRlbF9wb3dlcl9kb21haW5zX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQogCiAJbXV0ZXhfaW5pdCgmcG93ZXJfZG9tYWlucy0+bG9jayk7CiAKKwlJTklUX0RFTEFZRURf V09SSygmcG93ZXJfZG9tYWlucy0+YXN5bmNfcHV0X3dvcmssCisJCQkgIGludGVsX2Rpc3BsYXlf cG93ZXJfcHV0X2FzeW5jX3dvcmspOworCiAJLyoKIAkgKiBUaGUgZW5hYmxpbmcgb3JkZXIgd2ls bCBiZSBmcm9tIGxvd2VyIHRvIGhpZ2hlciBpbmRleGVkIHdlbGxzLAogCSAqIHRoZSBkaXNhYmxp bmcgb3JkZXIgaXMgcmV2ZXJzZWQuCkBAIC00NDQ1LDYgKzQ3NzgsOCBAQCB2b2lkIGludGVsX3Bv d2VyX2RvbWFpbnNfZmluaV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAlpZiAo IWk5MTVfbW9kcGFyYW1zLmRpc2FibGVfcG93ZXJfd2VsbCkKIAkJaW50ZWxfZGlzcGxheV9wb3dl cl9wdXRfdW5jaGVja2VkKGk5MTUsIFBPV0VSX0RPTUFJTl9JTklUKTsKIAorCWludGVsX2Rpc3Bs YXlfcG93ZXJfZmx1c2hfd29ya19zeW5jKGk5MTUpOworCiAJaW50ZWxfcG93ZXJfZG9tYWluc192 ZXJpZnlfc3RhdGUoaTkxNSk7CiAKIAkvKiBLZWVwIHRoZSBwb3dlciB3ZWxsIGVuYWJsZWQsIGJ1 dCBjYW5jZWwgaXRzIHJwbSB3YWtlcmVmLiAqLwpAQCAtNDUyMCw2ICs0ODU1LDcgQEAgdm9pZCBp bnRlbF9wb3dlcl9kb21haW5zX3N1c3BlbmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUs CiAJaWYgKCEoaTkxNS0+Y3NyLmFsbG93ZWRfZGNfbWFzayAmIERDX1NUQVRFX0VOX0RDOSkgJiYK IAkgICAgc3VzcGVuZF9tb2RlID09IEk5MTVfRFJNX1NVU1BFTkRfSURMRSAmJgogCSAgICBpOTE1 LT5jc3IuZG1jX3BheWxvYWQpIHsKKwkJaW50ZWxfZGlzcGxheV9wb3dlcl9mbHVzaF93b3JrKGk5 MTUpOwogCQlpbnRlbF9wb3dlcl9kb21haW5zX3ZlcmlmeV9zdGF0ZShpOTE1KTsKIAkJcmV0dXJu OwogCX0KQEAgLTQ1MzEsNiArNDg2Nyw3IEBAIHZvaWQgaW50ZWxfcG93ZXJfZG9tYWluc19zdXNw ZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCWlmICghaTkxNV9tb2RwYXJhbXMu ZGlzYWJsZV9wb3dlcl93ZWxsKQogCQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dF91bmNoZWNrZWQo aTkxNSwgUE9XRVJfRE9NQUlOX0lOSVQpOwogCisJaW50ZWxfZGlzcGxheV9wb3dlcl9mbHVzaF93 b3JrKGk5MTUpOwogCWludGVsX3Bvd2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKGk5MTUpOwogCiAJ aWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSkKQEAgLTQ2MDksNiArNDk0Niw4IEBAIHN0YXRpYyB2 b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQogCiAJbXV0ZXhfbG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7CiAKKwl2ZXJp ZnlfYXN5bmNfcHV0X2RvbWFpbnNfc3RhdGUocG93ZXJfZG9tYWlucyk7CisKIAlkdW1wX2RvbWFp bl9pbmZvID0gZmFsc2U7CiAJZm9yX2VhY2hfcG93ZXJfd2VsbChpOTE1LCBwb3dlcl93ZWxsKSB7 CiAJCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluOwpAQCAtNDY3MCw2ICs1 MDA5LDExIEBAIHN0YXRpYyBpbnRlbF93YWtlcmVmX3QgX19pbnRlbF9ydW50aW1lX3BtX2dldChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAlyZXR1cm4gdHJhY2tfaW50ZWxfcnVudGlt ZV9wbV93YWtlcmVmKGk5MTUpOwogfQogCitzdGF0aWMgaW50ZWxfd2FrZXJlZl90IGludGVsX3J1 bnRpbWVfcG1fZ2V0X3JhdyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlyZXR1 cm4gX19pbnRlbF9ydW50aW1lX3BtX2dldChpOTE1LCBmYWxzZSk7Cit9CisKIC8qKgogICogaW50 ZWxfcnVudGltZV9wbV9nZXQgLSBncmFiIGEgcnVudGltZSBwbSByZWZlcmVuY2UKICAqIEBpOTE1 OiBpOTE1IGRldmljZSBpbnN0YW5jZQpAQCAtNDc2OSw2ICs1MTEzLDE0IEBAIHN0YXRpYyB2b2lk IF9faW50ZWxfcnVudGltZV9wbV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJ cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoa2Rldik7CiB9CiAKKyNpZiBJU19FTkFCTEVEKENP TkZJR19EUk1fSTkxNV9ERUJVR19SVU5USU1FX1BNKQorc3RhdGljIHZvaWQKK2ludGVsX3J1bnRp bWVfcG1fcHV0X3JhdyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgaW50ZWxfd2FrZXJl Zl90IHdyZWYpCit7CisJX19pbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3cmVmLCBmYWxzZSk7 Cit9CisjZW5kaWYKKwogLyoqCiAgKiBpbnRlbF9ydW50aW1lX3BtX3B1dF91bmNoZWNrZWQgLSBy ZWxlYXNlIGFuIHVuY2hlY2tlZCBydW50aW1lIHBtIHJlZmVyZW5jZQogICogQGk5MTU6IGk5MTUg ZGV2aWNlIGluc3RhbmNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9y dW50aW1lX3BtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmgKaW5k ZXggZTMwYjM4NjMyYmQyLi5mZWM4M2NiNjE4ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9ydW50aW1lX3BtLmgKQEAgLTU5LDEzICs1OSwzNiBAQCBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dl dF9pZl9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCQkgICBl bnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbik7CiB2b2lkIGludGVsX2Rpc3Bs YXlfcG93ZXJfcHV0X3VuY2hlY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CiAJCQkJICAgICAgIGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluKTsKK3Zv aWQgX19pbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dF9hc3luYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSwKKwkJCQkgICAgIGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWlu LAorCQkJCSAgICAgaW50ZWxfd2FrZXJlZl90IHdha2VyZWYpOwordm9pZCBpbnRlbF9kaXNwbGF5 X3Bvd2VyX2ZsdXNoX3dvcmsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogI2lmIElT X0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X0RFQlVHX1JVTlRJTUVfUE0pCiB2b2lkIGludGVsX2Rp c3BsYXlfcG93ZXJfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAg ICAgZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4sCiAJCQkgICAgIGludGVs X3dha2VyZWZfdCB3YWtlcmVmKTsKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW50ZWxfZGlzcGxheV9w b3dlcl9wdXRfYXN5bmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkgICAgICBl bnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbiwKKwkJCSAgICAgIGludGVsX3dh a2VyZWZfdCB3YWtlcmVmKQoreworCV9faW50ZWxfZGlzcGxheV9wb3dlcl9wdXRfYXN5bmMoaTkx NSwgZG9tYWluLCB3YWtlcmVmKTsKK30KICNlbHNlCi0jZGVmaW5lIGludGVsX2Rpc3BsYXlfcG93 ZXJfcHV0KGk5MTUsIGRvbWFpbiwgd2FrZXJlZikgXAotCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0 X3VuY2hlY2tlZChpOTE1LCBkb21haW4pCitzdGF0aWMgaW5saW5lIHZvaWQKK2ludGVsX2Rpc3Bs YXlfcG93ZXJfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAorCQkJZW51bSBpbnRl bF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4sCisJCQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJl ZikKK3sKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dF91bmNoZWNrZWQoaTkxNSwgZG9tYWluKTsK K30KK3N0YXRpYyBpbmxpbmUgdm9pZAoraW50ZWxfZGlzcGxheV9wb3dlcl9wdXRfYXN5bmMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkgICAgICBlbnVtIGludGVsX2Rpc3BsYXlf cG93ZXJfZG9tYWluIGRvbWFpbiwKKwkJCSAgICAgIGludGVsX3dha2VyZWZfdCB3YWtlcmVmKQor eworCV9faW50ZWxfZGlzcGxheV9wb3dlcl9wdXRfYXN5bmMoaTkxNSwgZG9tYWluLCAtMSk7Cit9 CiAjZW5kaWYKIHZvaWQgaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCiAJCQkgICAgdTggcmVxX3NsaWNlcyk7CkBAIC04Niw3ICsxMDksMTEg QEAgdm9pZCBpbnRlbF9ydW50aW1lX3BtX3B1dF91bmNoZWNrZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X0RFQlVHX1JVTlRJ TUVfUE0pCiB2b2lkIGludGVsX3J1bnRpbWVfcG1fcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LCBpbnRlbF93YWtlcmVmX3Qgd3JlZik7CiAjZWxzZQotI2RlZmluZSBpbnRlbF9ydW50 aW1lX3BtX3B1dChpOTE1LCB3cmVmKSBpbnRlbF9ydW50aW1lX3BtX3B1dF91bmNoZWNrZWQoaTkx NSkKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW50ZWxfcnVudGltZV9wbV9wdXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsIGludGVsX3dha2VyZWZfdCB3cmVmKQoreworCWludGVsX3J1bnRp bWVfcG1fcHV0X3VuY2hlY2tlZChpOTE1KTsKK30KICNlbmRpZgogCiAjaWYgSVNfRU5BQkxFRChD T05GSUdfRFJNX0k5MTVfREVCVUdfUlVOVElNRV9QTSkKLS0gCjIuMTcuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4