From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Bragg Subject: [PATCH v9 01/11] drm/i915: Add i915 perf infrastructure Date: Mon, 7 Nov 2016 19:49:47 +0000 Message-ID: <20161107194957.3385-2-robert@sixbynine.org> References: <20161107194957.3385-1-robert@sixbynine.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161107194957.3385-1-robert@sixbynine.org> 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 Cc: David Airlie , dri-devel@lists.freedesktop.org, Sourab Gupta , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org QWRkcyBiYXNlIGk5MTUgcGVyZiBpbmZyYXN0cnVjdHVyZSBmb3IgR2VuIHBlcmZvcm1hbmNlIG1l dHJpY3MuCgpUaGlzIGFkZHMgYSBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4gaW9jdGwgdGhhdCB0 YWtlcyBhbiBhcnJheSBvZiB1aW50NjQKcHJvcGVydGllcyB0byBjb25maWd1cmUgYSBzdHJlYW0g b2YgbWV0cmljcyBhbmQgcmV0dXJucyBhIG5ldyBmZCB1c2FibGUKd2l0aCBzdGFuZGFyZCBWRlMg c3lzdGVtIGNhbGxzIGluY2x1ZGluZyByZWFkKCkgdG8gcmVhZCB0eXBlZCBhbmQgc2l6ZWQKcmVj b3JkczsgaW9jdGwoKSB0byBlbmFibGUgb3IgZGlzYWJsZSBjYXB0dXJlIGFuZCBwb2xsKCkgdG8g d2FpdCBmb3IKZGF0YS4KCkEgc3RyZWFtIGlzIG9wZW5lZCBzb21ldGhpbmcgbGlrZToKCiAgdWlu dDY0X3QgcHJvcGVydGllc1tdID0gewogICAgICAvKiBTaW5nbGUgY29udGV4dCBzYW1wbGluZyAq LwogICAgICBEUk1fSTkxNV9QRVJGX1BST1BfQ1RYX0hBTkRMRSwgICAgICAgIGN0eF9oYW5kbGUs CgogICAgICAvKiBJbmNsdWRlIE9BIHJlcG9ydHMgaW4gc2FtcGxlcyAqLwogICAgICBEUk1fSTkx NV9QRVJGX1BST1BfU0FNUExFX09BLCAgICAgICAgIHRydWUsCgogICAgICAvKiBPQSB1bml0IGNv bmZpZ3VyYXRpb24gKi8KICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCAg ICBtZXRyaWNzX3NldF9pZCwKICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0ZPUk1BVCwgICAg ICAgICByZXBvcnRfZm9ybWF0LAogICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfRVhQT05FTlQs ICAgICAgIHBlcmlvZF9leHBvbmVudCwKICAgfTsKICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Bl bl9wYXJhbSBwYXJtID0gewogICAgICAuZmxhZ3MgPSBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVD IHwKICAgICAgICAgICAgICAgSTkxNV9QRVJGX0ZMQUdfRkRfTk9OQkxPQ0sgfAogICAgICAgICAg ICAgICBJOTE1X1BFUkZfRkxBR19ESVNBQkxFRCwKICAgICAgLnByb3BlcnRpZXNfcHRyID0gKHVp bnQ2NF90KXByb3BlcnRpZXMsCiAgICAgIC5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0 aWVzKSAvIDE2LAogICB9OwogICBpbnQgZmQgPSBkcm1Jb2N0bChkcm1fZmQsIERSTV9JT0NUTF9J OTE1X1BFUkZfT1BFTiwgJnBhcmFtKTsKClJlY29yZHMgcmVhZCBhbGwgc3RhcnQgd2l0aCBhIGNv bW1vbiB7IHR5cGUsIHNpemUgfSBoZWFkZXIgd2l0aApEUk1fSTkxNV9QRVJGX1JFQ09SRF9TQU1Q TEUgYmVpbmcgb2YgbW9zdCBpbnRlcmVzdC4gU2FtcGxlIHJlY29yZHMKY29udGFpbiBhbiBleHRl bnNpYmxlIG51bWJlciBvZiBmaWVsZHMgYW5kIGl0J3MgdGhlCkRSTV9JOTE1X1BFUkZfUFJPUF9T QU1QTEVfeHl6IHByb3BlcnRpZXMgZ2l2ZW4gd2hlbiBvcGVuaW5nIHRoYXQKZGV0ZXJtaW5lIHdo YXQncyBpbmNsdWRlZCBpbiBldmVyeSBzYW1wbGUuCgpObyBzcGVjaWZpYyBzdHJlYW1zIGFyZSBz dXBwb3J0ZWQgeWV0IHNvIGFueSBhdHRlbXB0IHRvIG9wZW4gYSBzdHJlYW0Kd2lsbCByZXR1cm4g YW4gZXJyb3IuCgp2MjoKICAgIHVzZSBpOTE1X2dlbV9jb250ZXh0X2dldCgpIC0gQ2hyaXMgV2ls c29uCnYzOgogICAgdXBkYXRlIHJlYWQoKSBpbnRlcmZhY2UgdG8gYXZvaWQgcGFzc2luZyBzdGF0 ZSBzdHJ1Y3QgLSBDaHJpcyBXaWxzb24KICAgIGZpeCBzb21lIHJlYmFzZSBmYWxsb3V0LCB3aXRo IGk5MTUtcGVyZiBpbml0L2RlaW5pdAp2NDoKICAgIHMvRFJNX0lPUlcvRFJNX0lPVy8gLSBFbWls IFZlbGlrb3YKClNpZ25lZC1vZmYtYnk6IFJvYmVydCBCcmFnZyA8cm9iZXJ0QHNpeGJ5bmluZS5v cmc+ClJldmlld2VkLWJ5OiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+ClJl dmlld2VkLWJ5OiBTb3VyYWIgR3VwdGEgPHNvdXJhYi5ndXB0YUBpbnRlbC5jb20+Ci0tLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYyAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAg fCAgOTEgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jIHwgNDQ5ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5oICAgICAgfCAgNjcgKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDYxNCBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJm LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDA4NTdlNTAuLjA4YjQzYWYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC0xMTYsNiArMTE2LDkgQEAgaTkxNS0kKENPTkZJR19EUk1fSTkxNV9DQVBU VVJFX0VSUk9SKSArPSBpOTE1X2dwdV9lcnJvci5vCiAjIHZpcnR1YWwgZ3B1IGNvZGUKIGk5MTUt eSArPSBpOTE1X3ZncHUubwogCisjIHBlcmYgY29kZQoraTkxNS15ICs9IGk5MTVfcGVyZi5vCisK IGlmZXEgKCQoQ09ORklHX0RSTV9JOTE1X0dWVCkseSkKIGk5MTUteSArPSBpbnRlbF9ndnQubwog aW5jbHVkZSAkKHNyYykvZ3Z0L01ha2VmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCAw MjEzYTMwLi4yMmI0MTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTg0NCw2ICs4NDQs OCBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfZWFybHkoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAogCiAJaW50ZWxfZGV0ZWN0X3ByZXByb2R1Y3Rpb25faHcoZGV2X3By aXYpOwogCisJaTkxNV9wZXJmX2luaXQoZGV2X3ByaXYpOworCiAJcmV0dXJuIDA7CiAKIGVycl9n dnQ6CkBAIC04NTksNiArODYxLDcgQEAgc3RhdGljIGludCBpOTE1X2RyaXZlcl9pbml0X2Vhcmx5 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKICAqLwogc3RhdGljIHZvaWQgaTkx NV9kcml2ZXJfY2xlYW51cF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiB7CisJaTkxNV9wZXJmX2ZpbmkoZGV2X3ByaXYpOwogCWk5MTVfZ2VtX2xvYWRfY2xlYW51cCgm ZGV2X3ByaXYtPmRybSk7CiAJaTkxNV93b3JrcXVldWVzX2NsZWFudXAoZGV2X3ByaXYpOwogfQpA QCAtMjU2MSw2ICsyNTY0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBp OTE1X2lvY3Rsc1tdID0gewogCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1VTRVJQVFIsIGk5 MTVfZ2VtX3VzZXJwdHJfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAogCURSTV9JT0NUTF9ERUZf RFJWKEk5MTVfR0VNX0NPTlRFWFRfR0VUUEFSQU0sIGk5MTVfZ2VtX2NvbnRleHRfZ2V0cGFyYW1f aW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAogCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0NP TlRFWFRfU0VUUEFSQU0sIGk5MTVfZ2VtX2NvbnRleHRfc2V0cGFyYW1faW9jdGwsIERSTV9SRU5E RVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfUEVSRl9PUEVOLCBpOTE1X3BlcmZf b3Blbl9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGRybV9k cml2ZXIgZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNDczNWI0MTcuLmU0 Y2QzMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTc4NSw2ICsxNzg1LDg0IEBAIHN0 cnVjdCBpbnRlbF93bV9jb25maWcgewogCWJvb2wgc3ByaXRlc19zY2FsZWQ7CiB9OwogCitzdHJ1 Y3QgaTkxNV9wZXJmX3N0cmVhbTsKKworc3RydWN0IGk5MTVfcGVyZl9zdHJlYW1fb3BzIHsKKwkv KiBFbmFibGVzIHRoZSBjb2xsZWN0aW9uIG9mIEhXIHNhbXBsZXMsIGVpdGhlciBpbiByZXNwb25z ZSB0bworCSAqIEk5MTVfUEVSRl9JT0NUTF9FTkFCTEUgb3IgaW1wbGljaXRseSBjYWxsZWQgd2hl biBzdHJlYW0gaXMKKwkgKiBvcGVuZWQgd2l0aG91dCBJOTE1X1BFUkZfRkxBR19ESVNBQkxFRC4K KwkgKi8KKwl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKTsK KworCS8qIERpc2FibGVzIHRoZSBjb2xsZWN0aW9uIG9mIEhXIHNhbXBsZXMsIGVpdGhlciBpbiBy ZXNwb25zZSB0bworCSAqIEk5MTVfUEVSRl9JT0NUTF9ESVNBQkxFIG9yIGltcGxpY2l0bHkgY2Fs bGVkIGJlZm9yZQorCSAqIGRlc3Ryb3lpbmcgdGhlIHN0cmVhbS4KKwkgKi8KKwl2b2lkICgqZGlz YWJsZSkoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSk7CisKKwkvKiBSZXR1cm46IHRy dWUgaWYgYW55IGk5MTUgcGVyZiByZWNvcmRzIGFyZSByZWFkeSB0byByZWFkKCkKKwkgKiBmb3Ig dGhpcyBzdHJlYW0uCisJICovCisJYm9vbCAoKmNhbl9yZWFkKShzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSAqc3RyZWFtKTsKKworCS8qIENhbGwgcG9sbF93YWl0LCBwYXNzaW5nIGEgd2FpdCBxdWV1 ZSB0aGF0IHdpbGwgYmUgd29rZW4KKwkgKiBvbmNlIHRoZXJlIGlzIHNvbWV0aGluZyByZWFkeSB0 byByZWFkKCkgZm9yIHRoZSBzdHJlYW0KKwkgKi8KKwl2b2lkICgqcG9sbF93YWl0KShzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAg cG9sbF90YWJsZSAqd2FpdCk7CisKKwkvKiBGb3IgaGFuZGxpbmcgYSBibG9ja2luZyByZWFkLCB3 YWl0IHVudGlsIHRoZXJlIGlzIHNvbWV0aGluZworCSAqIHRvIHJlYWR5IHRvIHJlYWQoKSBmb3Ig dGhlIHN0cmVhbS4gRS5nLiB3YWl0IG9uIHRoZSBzYW1lCisJICogd2FpdCBxdWV1ZSB0aGF0IHdv dWxkIGJlIHBhc3NlZCB0byBwb2xsX3dhaXQoKSB1bnRpbAorCSAqIC0+Y2FuX3JlYWQoKSByZXR1 cm5zIHRydWUgKGlmIGl0cyBzYWZlIHRvIGNhbGwgLT5jYW5fcmVhZCgpCisJICogd2l0aG91dCB0 aGUgaTkxNSBwZXJmIGxvY2sgaGVsZCkuCisJICovCisJaW50ICgqd2FpdF91bmxvY2tlZCkoc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSk7CisKKwkvKiByZWFkIC0gQ29weSBidWZmZXJl ZCBtZXRyaWNzIGFzIHJlY29yZHMgdG8gdXNlcnNwYWNlCisJICogQGJ1ZjogdGhlIHVzZXJzcGFj ZSwgZGVzdGluYXRpb24gYnVmZmVyCisJICogQGNvdW50OiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRv IGNvcHksIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UKKwkgKiBAb2Zmc2V0OiB6ZXJvIGF0IHRoZSBz dGFydCBvZiB0aGUgcmVhZCwgdXBkYXRlZCBhcyB0aGUgcmVhZAorCSAqICAgICAgICAgIHByb2Nl ZWRzLCBpdCByZXByZXNlbnRzIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbgorCSAqICAgICAgICAg IGNvcGllZCBzbyBmYXIgYW5kIHRoZSBidWZmZXIgb2Zmc2V0IGZvciBjb3B5aW5nIHRoZQorCSAq ICAgICAgICAgIG5leHQgcmVjb3JkLgorCSAqCisJICogQ29weSBhcyBtYW55IGJ1ZmZlcmVkIGk5 MTUgcGVyZiBzYW1wbGVzIGFuZCByZWNvcmRzIGZvcgorCSAqIHRoaXMgc3RyZWFtIHRvIHVzZXJz cGFjZSBhcyB3aWxsIGZpdCBpbiB0aGUgZ2l2ZW4gYnVmZmVyLgorCSAqCisJICogT25seSB3cml0 ZSBjb21wbGV0ZSByZWNvcmRzOyByZXR1cm5pbmcgLUVOT1NQQyBpZiB0aGVyZQorCSAqIGlzbid0 IHJvb20gZm9yIGEgY29tcGxldGUgcmVjb3JkLgorCSAqCisJICogUmV0dXJuIGFueSBlcnJvciBj b25kaXRpb24gdGhhdCByZXN1bHRzIGluIGEgc2hvcnQgcmVhZAorCSAqIHN1Y2ggYXMgLUVOT1NQ QyBvciAtRUZBVUxULCBldmVuIHRob3VnaCB0aGVzZSBtYXkgYmUKKwkgKiBzcXVhc2hlZCBiZWZv cmUgcmV0dXJuaW5nIHRvIHVzZXJzcGFjZS4KKwkgKi8KKwlpbnQgKCpyZWFkKShzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorCQkgICAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJICAgIHNp emVfdCBjb3VudCwKKwkJICAgIHNpemVfdCAqb2Zmc2V0KTsKKworCS8qIENsZWFudXAgYW55IHN0 cmVhbSBzcGVjaWZpYyByZXNvdXJjZXMuCisJICoKKwkgKiBUaGUgc3RyZWFtIHdpbGwgYWx3YXlz IGJlIGRpc2FibGVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC4KKwkgKi8KKwl2b2lkICgqZGVzdHJv eSkoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSk7Cit9OworCitzdHJ1Y3QgaTkxNV9w ZXJmX3N0cmVhbSB7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2OworCisJc3Ry dWN0IGxpc3RfaGVhZCBsaW5rOworCisJdTMyIHNhbXBsZV9mbGFnczsKKworCXN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHg7CisJYm9vbCBlbmFibGVkOworCisJc3RydWN0IGk5MTVfcGVyZl9z dHJlYW1fb3BzICpvcHM7Cit9OworCiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3RydWN0 IGRybV9kZXZpY2UgZHJtOwogCkBAIC0yMDg2LDYgKzIxNjQsMTIgQEAgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgewogCiAJc3RydWN0IGk5MTVfcnVudGltZV9wbSBwbTsKIAorCXN0cnVjdCB7CisJ CWJvb2wgaW5pdGlhbGl6ZWQ7CisJCXN0cnVjdCBtdXRleCBsb2NrOworCQlzdHJ1Y3QgbGlzdF9o ZWFkIHN0cmVhbXM7CisJfSBwZXJmOworCiAJLyogQWJzdHJhY3QgdGhlIHN1Ym1pc3Npb24gbWVj aGFuaXNtIChsZWdhY3kgcmluZ2J1ZmZlciBvciBleGVjbGlzdHMpIGF3YXkgKi8KIAlzdHJ1Y3Qg ewogCQl2b2lkICgqcmVzdW1lKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqKTsKQEAgLTM2MDQs NiArMzY4OCw5IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X3NldHBhcmFtX2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiBpbnQgaTkxNV9nZW1fY29udGV4dF9yZXNldF9z dGF0c19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCSAgICAg ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwogCitpbnQgaTkxNV9wZXJmX29wZW5faW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUpOworCiAvKiBpOTE1X2dlbV9ldmljdC5jICovCiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2Vt X2V2aWN0X3NvbWV0aGluZyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCQkJICB1 NjQgbWluX3NpemUsIHU2NCBhbGlnbm1lbnQsCkBAIC0zNzM0LDYgKzM4MjEsMTAgQEAgaW50IGlu dGVsX2VuZ2luZV9jbWRfcGFyc2VyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJ CSAgICB1MzIgYmF0Y2hfbGVuLAogCQkJICAgIGJvb2wgaXNfbWFzdGVyKTsKIAorLyogaTkxNV9w ZXJmLmMgKi8KK2V4dGVybiB2b2lkIGk5MTVfcGVyZl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCBpOTE1X3BlcmZfZmluaShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCiAvKiBpOTE1X3N1c3BlbmQuYyAqLwogZXh0ZXJuIGlu dCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGk5 MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9wZXJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3Y2U2NQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCkBAIC0wLDAg KzEsNDQ5IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTUtMjAxNiBJbnRlbCBDb3Jwb3JhdGlv bgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBB dXRob3JzOgorICogICBSb2JlcnQgQnJhZ2cgPHJvYmVydEBzaXhieW5pbmUub3JnPgorICovCisK KyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIK Kworc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzIHsKKwl1MzIgc2FtcGxlX2ZsYWdzOworCisJ dTY0IHNpbmdsZV9jb250ZXh0OjE7CisJdTY0IGN0eF9oYW5kbGU7Cit9OworCitzdGF0aWMgc3Np emVfdCBpOTE1X3BlcmZfcmVhZF9sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSwKKwkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgY2hhciBfX3VzZXIgKmJ1 ZiwKKwkJCQkgICAgIHNpemVfdCBjb3VudCwKKwkJCQkgICAgIGxvZmZfdCAqcHBvcykKK3sKKwkv KiBOb3RlIHdlIGtlZXAgdGhlIG9mZnNldCAoYWthIGJ5dGVzIHJlYWQpIHNlcGFyYXRlIGZyb20g YW55CisJICogZXJyb3Igc3RhdHVzIHNvIHRoYXQgdGhlIGZpbmFsIGNoZWNrIGZvciB3aGV0aGVy IHdlIHJldHVybgorCSAqIHRoZSBieXRlcyByZWFkIHdpdGggYSBoaWdoZXIgcHJlY2VkZW5jZSB0 aGFuIGFueSBlcnJvciAoc2VlCisJICogY29tbWVudCBiZWxvdykgZG9lc24ndCBuZWVkIHRvIGJl IGhhbmRsZWQvZHVwbGljYXRlZCBpbgorCSAqIHN0cmVhbS0+b3BzLT5yZWFkKCkgaW1wbGVtZW50 YXRpb25zLgorCSAqLworCXNpemVfdCBvZmZzZXQgPSAwOworCWludCByZXQgPSBzdHJlYW0tPm9w cy0+cmVhZChzdHJlYW0sIGJ1ZiwgY291bnQsICZvZmZzZXQpOworCisJLyogSWYgd2UndmUgc3Vj Y2Vzc2Z1bGx5IGNvcGllZCBhbnkgZGF0YSB0aGVuIHJlcG9ydGluZyB0aGF0CisJICogdGFrZXMg cHJlY2VkZW5jZSBvdmVyIGFueSBpbnRlcm5hbCBlcnJvciBzdGF0dXMsIHNvIHRoZQorCSAqIGRh dGEgaXNuJ3QgbG9zdC4KKwkgKgorCSAqIEZvciBleGFtcGxlIHJldCB3aWxsIGJlIC1FTk9TUEMg d2hlbmV2ZXIgdGhlcmUgaXMgbW9yZQorCSAqIGJ1ZmZlcmVkIGRhdGEgdGhhbiBjYW4gYmUgY29w aWVkIHRvIHVzZXJzcGFjZSwgYnV0IHRoYXQncworCSAqIG9ubHkgaW50ZXJlc3RpbmcgaWYgd2Ug d2VyZW4ndCBhYmxlIHRvIGNvcHkgc29tZSBkYXRhCisJICogYmVjYXVzZSBpdCBpbXBsaWVzIHRo ZSB1c2Vyc3BhY2UgYnVmZmVyIGlzIHRvbyBzbWFsbCB0bworCSAqIHJlY2VpdmUgYSBzaW5nbGUg cmVjb3JkIChhbmQgd2UgbmV2ZXIgc3BsaXQgcmVjb3JkcykuCisJICoKKwkgKiBBbm90aGVyIGNh c2Ugd2l0aCByZXQgPT0gLUVGQVVMVCBpcyBtb3JlIG9mIGEgZ3JleSBhcmVhCisJICogc2luY2Ug aXQgd291bGQgc2VlbSBsaWtlIGJhZCBmb3JtIGZvciB1c2Vyc3BhY2UgdG8gYXNrIHVzCisJICog dG8gb3ZlcnJ1biBpdHMgYnVmZmVyLCBidXQgdGhlIHVzZXIga25vd3MgYmVzdDoKKwkgKgorCSAq ICAgaHR0cDovL3lhcmNoaXZlLm5ldC9jb21wL2xpbnV4L3BhcnRpYWxfcmVhZHNfd3JpdGVzLmh0 bWwKKwkgKi8KKwlyZXR1cm4gb2Zmc2V0ID86IChyZXQgPzogLUVBR0FJTik7Cit9CisKK3N0YXRp YyBzc2l6ZV90IGk5MTVfcGVyZl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgY2hh ciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBjb3VudCwKKwkJCSAgICAgIGxvZmZfdCAq cHBvcykKK3sKKwlzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtID0gZmlsZS0+cHJpdmF0 ZV9kYXRhOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2 X3ByaXY7CisJc3NpemVfdCByZXQ7CisKKwlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9D SykpIHsKKwkJLyogQWxsb3cgZmFsc2UgcG9zaXRpdmVzIGZyb20gc3RyZWFtLT5vcHMtPndhaXRf dW5sb2NrZWQuCisJCSAqLworCQlkbyB7CisJCQlyZXQgPSBzdHJlYW0tPm9wcy0+d2FpdF91bmxv Y2tlZChzdHJlYW0pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQltdXRleF9s b2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKwkJCXJldCA9IGk5MTVfcGVyZl9yZWFkX2xvY2tl ZChzdHJlYW0sIGZpbGUsCisJCQkJCQkgICAgYnVmLCBjb3VudCwgcHBvcyk7CisJCQltdXRleF91 bmxvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCQl9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7 CisJfSBlbHNlIHsKKwkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7CisJCXJldCA9 IGk5MTVfcGVyZl9yZWFkX2xvY2tlZChzdHJlYW0sIGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOwor CQltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCX0KKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV9wZXJmX3BvbGxfbG9ja2VkKHN0cnVjdCBp OTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCisJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJ CSAgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RyZWFtcyA9IDA7CisKKwlz dHJlYW0tPm9wcy0+cG9sbF93YWl0KHN0cmVhbSwgZmlsZSwgd2FpdCk7CisKKwlpZiAoc3RyZWFt LT5vcHMtPmNhbl9yZWFkKHN0cmVhbSkpCisJCXN0cmVhbXMgfD0gUE9MTElOOworCisJcmV0dXJu IHN0cmVhbXM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV9wZXJmX3BvbGwoc3RydWN0 IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2Nr KCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKwlyZXQgPSBpOTE1X3BlcmZfcG9sbF9sb2NrZWQoc3Ry ZWFtLCBmaWxlLCB3YWl0KTsKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOwor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wZXJmX2VuYWJsZV9sb2NrZWQo c3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKK3sKKwlpZiAoc3RyZWFtLT5lbmFibGVk KQorCQlyZXR1cm47CisKKwkvKiBBbGxvdyBzdHJlYW0tPm9wcy0+ZW5hYmxlKCkgdG8gcmVmZXIg dG8gdGhpcyAqLworCXN0cmVhbS0+ZW5hYmxlZCA9IHRydWU7CisKKwlpZiAoc3RyZWFtLT5vcHMt PmVuYWJsZSkKKwkJc3RyZWFtLT5vcHMtPmVuYWJsZShzdHJlYW0pOworfQorCitzdGF0aWMgdm9p ZCBpOTE1X3BlcmZfZGlzYWJsZV9sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSkKK3sKKwlpZiAoIXN0cmVhbS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJLyogQWxsb3cgc3Ry ZWFtLT5vcHMtPmRpc2FibGUoKSB0byByZWZlciB0byB0aGlzICovCisJc3RyZWFtLT5lbmFibGVk ID0gZmFsc2U7CisKKwlpZiAoc3RyZWFtLT5vcHMtPmRpc2FibGUpCisJCXN0cmVhbS0+b3BzLT5k aXNhYmxlKHN0cmVhbSk7Cit9CisKK3N0YXRpYyBsb25nIGk5MTVfcGVyZl9pb2N0bF9sb2NrZWQo c3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY21k LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBJ OTE1X1BFUkZfSU9DVExfRU5BQkxFOgorCQlpOTE1X3BlcmZfZW5hYmxlX2xvY2tlZChzdHJlYW0p OworCQlyZXR1cm4gMDsKKwljYXNlIEk5MTVfUEVSRl9JT0NUTF9ESVNBQkxFOgorCQlpOTE1X3Bl cmZfZGlzYWJsZV9sb2NrZWQoc3RyZWFtKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1F SU5WQUw7Cit9CisKK3N0YXRpYyBsb25nIGk5MTVfcGVyZl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmls ZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQor eworCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsK Kwlsb25nIHJldDsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCXJldCA9 IGk5MTVfcGVyZl9pb2N0bF9sb2NrZWQoc3RyZWFtLCBjbWQsIGFyZyk7CisJbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IGk5MTVfcGVyZl9kZXN0cm95X2xvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3By aXY7CisKKwlpZiAoc3RyZWFtLT5lbmFibGVkKQorCQlpOTE1X3BlcmZfZGlzYWJsZV9sb2NrZWQo c3RyZWFtKTsKKworCWlmIChzdHJlYW0tPm9wcy0+ZGVzdHJveSkKKwkJc3RyZWFtLT5vcHMtPmRl c3Ryb3koc3RyZWFtKTsKKworCWxpc3RfZGVsKCZzdHJlYW0tPmxpbmspOworCisJaWYgKHN0cmVh bS0+Y3R4KSB7CisJCW11dGV4X2xvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKKwkJ aTkxNV9nZW1fY29udGV4dF9wdXQoc3RyZWFtLT5jdHgpOworCQltdXRleF91bmxvY2soJmRldl9w cml2LT5kcm0uc3RydWN0X211dGV4KTsKKwl9CisKKwlrZnJlZShzdHJlYW0pOworfQorCitzdGF0 aWMgaW50IGk5MTVfcGVyZl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxl ICpmaWxlKQoreworCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0gPSBmaWxlLT5wcml2 YXRlX2RhdGE7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5k ZXZfcHJpdjsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCWk5MTVfcGVy Zl9kZXN0cm95X2xvY2tlZChzdHJlYW0pOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYu bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyBmb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubGxzZWVrCQk9IG5v X2xsc2VlaywKKwkucmVsZWFzZQk9IGk5MTVfcGVyZl9yZWxlYXNlLAorCS5wb2xsCQk9IGk5MTVf cGVyZl9wb2xsLAorCS5yZWFkCQk9IGk5MTVfcGVyZl9yZWFkLAorCS51bmxvY2tlZF9pb2N0bAk9 IGk5MTVfcGVyZl9pb2N0bCwKK307CisKKworc3RhdGljIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICoKK2xvb2t1cF9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkg ICAgICAgc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2LAorCSAgICAgICB1 MzIgY3R4X3VzZXJfaGFuZGxlKQoreworCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7CisJ aW50IHJldDsKKworCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXZfcHJp di0+ZHJtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJY3R4ID0gaTkx NV9nZW1fY29udGV4dF9sb29rdXAoZmlsZV9wcml2LCBjdHhfdXNlcl9oYW5kbGUpOworCWlmICgh SVNfRVJSKGN0eCkpCisJCWk5MTVfZ2VtX2NvbnRleHRfZ2V0KGN0eCk7CisKKwltdXRleF91bmxv Y2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKKworCXJldHVybiBjdHg7Cit9CisKK3N0 YXRpYyBpbnQKK2k5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSAq cGFyYW0sCisJCQkgICAgc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzICpwcm9wcywKKwkJCSAg ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKnNw ZWNpZmljX2N0eCA9IE5VTEw7CisJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSA9IE5V TEw7CisJdW5zaWduZWQgbG9uZyBmX2ZsYWdzID0gMDsKKwlpbnQgc3RyZWFtX2ZkOworCWludCBy ZXQ7CisKKwlpZiAocHJvcHMtPnNpbmdsZV9jb250ZXh0KSB7CisJCXUzMiBjdHhfaGFuZGxlID0g cHJvcHMtPmN0eF9oYW5kbGU7CisJCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVf cHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2OworCisJCXNwZWNpZmljX2N0eCA9IGxvb2t1cF9jb250 ZXh0KGRldl9wcml2LCBmaWxlX3ByaXYsIGN0eF9oYW5kbGUpOworCQlpZiAoSVNfRVJSKHNwZWNp ZmljX2N0eCkpIHsKKwkJCXJldCA9IFBUUl9FUlIoc3BlY2lmaWNfY3R4KTsKKwkJCWlmIChyZXQg IT0gLUVJTlRSKQorCQkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGxvb2sgdXAgY29udGV4dCB3aXRo IElEICV1IGZvciBvcGVuaW5nIHBlcmYgc3RyZWFtXG4iLAorCQkJCQkgIGN0eF9oYW5kbGUpOwor CQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAoIXNwZWNpZmljX2N0eCAmJiAhY2FwYWJsZShD QVBfU1lTX0FETUlOKSkgeworCQlEUk1fRVJST1IoIkluc3VmZmljaWVudCBwcml2aWxlZ2VzIHRv IG9wZW4gc3lzdGVtLXdpZGUgaTkxNSBwZXJmIHN0cmVhbVxuIik7CisJCXJldCA9IC1FQUNDRVM7 CisJCWdvdG8gZXJyX2N0eDsKKwl9CisKKwlzdHJlYW0gPSBremFsbG9jKHNpemVvZigqc3RyZWFt KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdHJlYW0pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290 byBlcnJfY3R4OworCX0KKworCXN0cmVhbS0+c2FtcGxlX2ZsYWdzID0gcHJvcHMtPnNhbXBsZV9m bGFnczsKKwlzdHJlYW0tPmRldl9wcml2ID0gZGV2X3ByaXY7CisJc3RyZWFtLT5jdHggPSBzcGVj aWZpY19jdHg7CisKKwkvKgorCSAqIFRPRE86IHN1cHBvcnQgc2FtcGxpbmcgc29tZXRoaW5nCisJ ICoKKwkgKiBGb3Igbm93IHRoaXMgaXMgYXMgZmFyIGFzIHdlIGNhbiBnby4KKwkgKi8KKwlEUk1f RVJST1IoIlVuc3VwcG9ydGVkIGk5MTUgcGVyZiBzdHJlYW0gY29uZmlndXJhdGlvblxuIik7CisJ cmV0ID0gLUVJTlZBTDsKKwlnb3RvIGVycl9hbGxvYzsKKworCWxpc3RfYWRkKCZzdHJlYW0tPmxp bmssICZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zKTsKKworCWlmIChwYXJhbS0+ZmxhZ3MgJiBJOTE1 X1BFUkZfRkxBR19GRF9DTE9FWEVDKQorCQlmX2ZsYWdzIHw9IE9fQ0xPRVhFQzsKKwlpZiAocGFy YW0tPmZsYWdzICYgSTkxNV9QRVJGX0ZMQUdfRkRfTk9OQkxPQ0spCisJCWZfZmxhZ3MgfD0gT19O T05CTE9DSzsKKworCXN0cmVhbV9mZCA9IGFub25faW5vZGVfZ2V0ZmQoIltpOTE1X3BlcmZdIiwg JmZvcHMsIHN0cmVhbSwgZl9mbGFncyk7CisJaWYgKHN0cmVhbV9mZCA8IDApIHsKKwkJcmV0ID0g c3RyZWFtX2ZkOworCQlnb3RvIGVycl9vcGVuOworCX0KKworCWlmICghKHBhcmFtLT5mbGFncyAm IEk5MTVfUEVSRl9GTEFHX0RJU0FCTEVEKSkKKwkJaTkxNV9wZXJmX2VuYWJsZV9sb2NrZWQoc3Ry ZWFtKTsKKworCXJldHVybiBzdHJlYW1fZmQ7CisKK2Vycl9vcGVuOgorCWxpc3RfZGVsKCZzdHJl YW0tPmxpbmspOworCWlmIChzdHJlYW0tPm9wcy0+ZGVzdHJveSkKKwkJc3RyZWFtLT5vcHMtPmRl c3Ryb3koc3RyZWFtKTsKK2Vycl9hbGxvYzoKKwlrZnJlZShzdHJlYW0pOworZXJyX2N0eDoKKwlp ZiAoc3BlY2lmaWNfY3R4KSB7CisJCW11dGV4X2xvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211 dGV4KTsKKwkJaTkxNV9nZW1fY29udGV4dF9wdXQoc3BlY2lmaWNfY3R4KTsKKwkJbXV0ZXhfdW5s b2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisJfQorZXJyOgorCXJldHVybiByZXQ7 Cit9CisKKy8qIE5vdGUgd2UgY29weSB0aGUgcHJvcGVydGllcyBmcm9tIHVzZXJzcGFjZSBvdXRz aWRlIG9mIHRoZSBpOTE1IHBlcmYKKyAqIG11dGV4IHRvIGF2b2lkIGFuIGF3a3dhcmQgbG9ja2Rl cCB3aXRoIG1tYXBfc2VtLgorICoKKyAqIE5vdGUgdGhpcyBmdW5jdGlvbiBvbmx5IHZhbGlkYXRl cyBwcm9wZXJ0aWVzIGluIGlzb2xhdGlvbiBpdCBkb2Vzbid0CisgKiB2YWxpZGF0ZSB0aGF0IHRo ZSBjb21iaW5hdGlvbiBvZiBwcm9wZXJ0aWVzIG1ha2VzIHNlbnNlIG9yIHRoYXQgYWxsCisgKiBw cm9wZXJ0aWVzIG5lY2Vzc2FyeSBmb3IgYSBwYXJ0aWN1bGFyIGtpbmQgb2Ygc3RyZWFtIGhhdmUg YmVlbiBzZXQuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9wcm9wZXJ0aWVzX3VubG9ja2VkKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgdTY0IF9fdXNlciAqdXByb3Bz LAorCQkJCSAgICB1MzIgbl9wcm9wcywKKwkJCQkgICAgc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0 aWVzICpwcm9wcykKK3sKKwl1NjQgX191c2VyICp1cHJvcCA9IHVwcm9wczsKKwlpbnQgaTsKKwor CW1lbXNldChwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBwZXJmX29wZW5fcHJvcGVydGllcykpOwor CisJaWYgKCFuX3Byb3BzKSB7CisJCURSTV9FUlJPUigiTm8gaTkxNSBwZXJmIHByb3BlcnRpZXMg Z2l2ZW4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29uc2lkZXJpbmcgdGhhdCBJ RCA9IDAgaXMgcmVzZXJ2ZWQgYW5kIGFzc3VtaW5nIHRoYXQgd2UgZG9uJ3QKKwkgKiAoY3VycmVu dGx5KSBleHBlY3QgYW55IGNvbmZpZ3VyYXRpb25zIHRvIGV2ZXIgc3BlY2lmeSBkdXBsaWNhdGUK KwkgKiB2YWx1ZXMgZm9yIGEgcGFydGljdWxhciBwcm9wZXJ0eSBJRCB0aGVuIHRoZSBsYXN0IF9Q Uk9QX01BWCB2YWx1ZSBpcworCSAqIG9uZSBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gbnVtYmVy IG9mIHByb3BlcnRpZXMgd2UgZXhwZWN0IHRvIGdldAorCSAqIGZyb20gdXNlcnNwYWNlLgorCSAq LworCWlmIChuX3Byb3BzID49IERSTV9JOTE1X1BFUkZfUFJPUF9NQVgpIHsKKwkJRFJNX0VSUk9S KCJNb3JlIGk5MTUgcGVyZiBwcm9wZXJ0aWVzIHNwZWNpZmllZCB0aGFuIGV4aXN0Iik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuX3Byb3BzOyBpKyspIHsKKwkJ dTY0IGlkLCB2YWx1ZTsKKwkJaW50IHJldDsKKworCQlyZXQgPSBnZXRfdXNlcihpZCwgdXByb3Ap OworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBnZXRfdXNlcih2YWx1ZSwg dXByb3AgKyAxKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJc3dpdGNoICgoZW51 bSBkcm1faTkxNV9wZXJmX3Byb3BlcnR5X2lkKWlkKSB7CisJCWNhc2UgRFJNX0k5MTVfUEVSRl9Q Uk9QX0NUWF9IQU5ETEU6CisJCQlwcm9wcy0+c2luZ2xlX2NvbnRleHQgPSAxOworCQkJcHJvcHMt PmN0eF9oYW5kbGUgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJTUlTU0lOR19D QVNFKGlkKTsKKwkJCURSTV9FUlJPUigiVW5rbm93biBpOTE1IHBlcmYgcHJvcGVydHkgSUQiKTsK KwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJdXByb3AgKz0gMjsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworaW50IGk5MTVfcGVyZl9vcGVuX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEsCisJCQkgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9p OTE1X3BlcmZfb3Blbl9wYXJhbSAqcGFyYW0gPSBkYXRhOworCXN0cnVjdCBwZXJmX29wZW5fcHJv cGVydGllcyBwcm9wczsKKwl1MzIga25vd25fb3Blbl9mbGFnczsKKwlpbnQgcmV0OworCisJaWYg KCFkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXplZCkgeworCQlEUk1fRVJST1IoImk5MTUgcGVyZiBp bnRlcmZhY2Ugbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBzeXN0ZW0iKTsKKwkJcmV0dXJuIC1FTk9U U1VQUDsKKwl9CisKKwlrbm93bl9vcGVuX2ZsYWdzID0gSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhF QyB8CisJCQkgICBJOTE1X1BFUkZfRkxBR19GRF9OT05CTE9DSyB8CisJCQkgICBJOTE1X1BFUkZf RkxBR19ESVNBQkxFRDsKKwlpZiAocGFyYW0tPmZsYWdzICYgfmtub3duX29wZW5fZmxhZ3MpIHsK KwkJRFJNX0VSUk9SKCJVbmtub3duIGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBmbGFnXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gcmVhZF9wcm9wZXJ0aWVzX3VubG9ja2Vk KGRldl9wcml2LAorCQkJCSAgICAgICB1NjRfdG9fdXNlcl9wdHIocGFyYW0tPnByb3BlcnRpZXNf cHRyKSwKKwkJCQkgICAgICAgcGFyYW0tPm51bV9wcm9wZXJ0aWVzLAorCQkJCSAgICAgICAmcHJv cHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ cGVyZi5sb2NrKTsKKwlyZXQgPSBpOTE1X3BlcmZfb3Blbl9pb2N0bF9sb2NrZWQoZGV2X3ByaXYs IHBhcmFtLCAmcHJvcHMsIGZpbGUpOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYubG9j ayk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGk5MTVfcGVyZl9pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnBl cmYuc3RyZWFtcyk7CisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBlcmYubG9jayk7CisKKwlkZXZf cHJpdi0+cGVyZi5pbml0aWFsaXplZCA9IHRydWU7Cit9CisKK3ZvaWQgaTkxNV9wZXJmX2Zpbmko c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWlmICghZGV2X3ByaXYtPnBl cmYuaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCS8qIEN1cnJlbnRseSBub3RoaW5nIHRvIGNs ZWFuIHVwICovCisKKwlkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXplZCA9IGZhbHNlOworfQpkaWZm IC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5oCmluZGV4IDAzNzI1ZmUuLjk4Y2Q0OTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFw aS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKQEAgLTI1 OCw2ICsyNTgsNyBAQCB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgewogI2RlZmluZSBE Uk1fSTkxNV9HRU1fVVNFUlBUUgkJMHgzMwogI2RlZmluZSBEUk1fSTkxNV9HRU1fQ09OVEVYVF9H RVRQQVJBTQkweDM0CiAjZGVmaW5lIERSTV9JOTE1X0dFTV9DT05URVhUX1NFVFBBUkFNCTB4MzUK KyNkZWZpbmUgRFJNX0k5MTVfUEVSRl9PUEVOCQkweDM2CiAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5 MTVfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9p OTE1X2luaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfRkxVU0gJCURSTV9JTyAoIERSTV9D T01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GTFVTSCkKQEAgLTMxMSw2ICszMTIsNyBAQCB0eXBlZGVm IHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgewogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fVVNF UlBUUgkJCURSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1VTRVJQVFIs IHN0cnVjdCBkcm1faTkxNV9nZW1fdXNlcnB0cikKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VN X0NPTlRFWFRfR0VUUEFSQU0JRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9H RU1fQ09OVEVYVF9HRVRQQVJBTSwgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtKQog I2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9TRVRQQVJBTQlEUk1fSU9XUiAoRFJN X0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9DT05URVhUX1NFVFBBUkFNLCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0pCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X1BFUkZfT1BF TglEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9QRVJGX09QRU4sIHN0cnVjdCBk cm1faTkxNV9wZXJmX29wZW5fcGFyYW0pCiAKIC8qIEFsbG93IGRyaXZlcnMgdG8gc3VibWl0IGJh dGNoYnVmZmVycyBkaXJlY3RseSB0byBoYXJkd2FyZSwgcmVseWluZwogICogb24gdGhlIHNlY3Vy aXR5IG1lY2hhbmlzbXMgcHJvdmlkZWQgYnkgaGFyZHdhcmUuCkBAIC0xMjIyLDYgKzEyMjQsNzEg QEAgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHsKIAlfX3U2NCB2YWx1ZTsKIH07 CiAKK2VudW0gZHJtX2k5MTVfcGVyZl9wcm9wZXJ0eV9pZCB7CisJLyoqCisJICogT3BlbiB0aGUg c3RyZWFtIGZvciBhIHNwZWNpZmljIGNvbnRleHQgaGFuZGxlIChhcyB1c2VkIHdpdGgKKwkgKiBl eGVjYnVmZmVyMikuIEEgc3RyZWFtIG9wZW5lZCBmb3IgYSBzcGVjaWZpYyBjb250ZXh0IHRoaXMg d2F5CisJICogd29uJ3QgdHlwaWNhbGx5IHJlcXVpcmUgcm9vdCBwcml2aWxlZ2VzLgorCSAqLwor CURSTV9JOTE1X1BFUkZfUFJPUF9DVFhfSEFORExFID0gMSwKKworCURSTV9JOTE1X1BFUkZfUFJP UF9NQVggLyogbm9uLUFCSSAqLworfTsKKworc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJh bSB7CisJX191MzIgZmxhZ3M7CisjZGVmaW5lIEk5MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUMJKDE8 PDApCisjZGVmaW5lIEk5MTVfUEVSRl9GTEFHX0ZEX05PTkJMT0NLCSgxPDwxKQorI2RlZmluZSBJ OTE1X1BFUkZfRkxBR19ESVNBQkxFRAkJKDE8PDIpCisKKwkvKiogVGhlIG51bWJlciBvZiB1NjQg KGlkLCB2YWx1ZSkgcGFpcnMgKi8KKwlfX3UzMiBudW1fcHJvcGVydGllczsKKworCS8qKgorCSAq IFBvaW50ZXIgdG8gYXJyYXkgb2YgdTY0IChpZCwgdmFsdWUpIHBhaXJzIGNvbmZpZ3VyaW5nIHRo ZSBzdHJlYW0KKwkgKiB0byBvcGVuLgorCSAqLworCV9fdTY0IF9fdXNlciBwcm9wZXJ0aWVzX3B0 cjsKK307CisKKyNkZWZpbmUgSTkxNV9QRVJGX0lPQ1RMX0VOQUJMRQlfSU8oJ2knLCAweDApCisj ZGVmaW5lIEk5MTVfUEVSRl9JT0NUTF9ESVNBQkxFCV9JTygnaScsIDB4MSkKKworLyoqCisgKiBD b21tb24gdG8gYWxsIGk5MTUgcGVyZiByZWNvcmRzCisgKi8KK3N0cnVjdCBkcm1faTkxNV9wZXJm X3JlY29yZF9oZWFkZXIgeworCV9fdTMyIHR5cGU7CisJX191MTYgcGFkOworCV9fdTE2IHNpemU7 Cit9OworCitlbnVtIGRybV9pOTE1X3BlcmZfcmVjb3JkX3R5cGUgeworCisJLyoqCisJICogU2Ft cGxlcyBhcmUgdGhlIHdvcmsgaG9yc2UgcmVjb3JkIHR5cGUgd2hvc2UgY29udGVudHMgYXJlIGV4 dGVuc2libGUKKwkgKiBhbmQgZGVmaW5lZCB3aGVuIG9wZW5pbmcgYW4gaTkxNSBwZXJmIHN0cmVh bSBiYXNlZCBvbiB0aGUgZ2l2ZW4KKwkgKiBwcm9wZXJ0aWVzLgorCSAqCisJICogQm9vbGVhbiBw cm9wZXJ0aWVzIGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24KKwkgKiBEUk1fSTkxNV9Q RVJGX1NBTVBMRV94eXpfUFJPUCByZXF1ZXN0IHRoZSBpbmNsdXNpb24gb2YgJ3h5eicgZGF0YSBp bgorCSAqIGV2ZXJ5IHNhbXBsZS4KKwkgKgorCSAqIFRoZSBvcmRlciBvZiB0aGVzZSBzYW1wbGUg cHJvcGVydGllcyBnaXZlbiBieSB1c2Vyc3BhY2UgaGFzIG5vCisJICogYWZmZWN0IG9uIHRoZSBv cmRlcmluZyBvZiBkYXRhIHdpdGhpbiBhIHNhbXBsZS4gVGhlIG9yZGVyIHdpbGwgYmUKKwkgKiBk b2N1bWVudGVkIGhlcmUuCisJICoKKwkgKiBzdHJ1Y3QgeworCSAqICAgICBzdHJ1Y3QgZHJtX2k5 MTVfcGVyZl9yZWNvcmRfaGVhZGVyIGhlYWRlcjsKKwkgKgorCSAqICAgICBUT0RPOiBpdGVtaXpl IGV4dGVuc2libGUgc2FtcGxlIGRhdGEgaGVyZQorCSAqIH07CisJICovCisJRFJNX0k5MTVfUEVS Rl9SRUNPUkRfU0FNUExFID0gMSwKKworCURSTV9JOTE1X1BFUkZfUkVDT1JEX01BWCAvKiBub24t QUJJICovCit9OworCiAjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKIH0KICNlbmRpZgotLSAKMi4x MC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK