From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Bragg Subject: [PATCH v7 01/11] drm/i915: Add i915 perf infrastructure Date: Tue, 25 Oct 2016 00:19:24 +0100 Message-ID: <20161024231934.2243-2-robert@sixbynine.org> References: <20161024231934.2243-1-robert@sixbynine.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161024231934.2243-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 YW4gZXJyb3IuCgp2NDoKICAgIHMvRFJNX0lPUlcvRFJNX0lPVy8gLSBFbWlsIFZlbGlrb3YKdjM6 CiAgICB1cGRhdGUgcmVhZCgpIGludGVyZmFjZSB0byBhdm9pZCBwYXNzaW5nIHN0YXRlIHN0cnVj dCAtIENocmlzIFdpbHNvbgogICAgZml4IHNvbWUgcmViYXNlIGZhbGxvdXQsIHdpdGggaTkxNS1w ZXJmIGluaXQvZGVpbml0CnYyOgogICAgdXNlIGk5MTVfZ2VtX2NvbnRleHRfZ2V0KCkgLSBDaHJp cyBXaWxzb24KClNpZ25lZC1vZmYtYnk6IFJvYmVydCBCcmFnZyA8cm9iZXJ0QHNpeGJ5bmluZS5v cmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgfCAgIDMgKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCAgfCAgOTEgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVy Zi5jIHwgNDQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVk ZS91YXBpL2RybS9pOTE1X2RybS5oICAgICAgfCAgNjcgKysrKysrCiA1IGZpbGVzIGNoYW5nZWQs IDYwOCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9wZXJmLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDYxMjM0MDAuLjhkNGUyNWYg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0xMTMsNiArMTEzLDkgQEAgaTkxNS0kKENPTkZJR19E Uk1fSTkxNV9DQVBUVVJFX0VSUk9SKSArPSBpOTE1X2dwdV9lcnJvci5vCiAjIHZpcnR1YWwgZ3B1 IGNvZGUKIGk5MTUteSArPSBpOTE1X3ZncHUubwogCisjIHBlcmYgY29kZQoraTkxNS15ICs9IGk5 MTVfcGVyZi5vCisKIGlmZXEgKCQoQ09ORklHX0RSTV9JOTE1X0dWVCkseSkKIGk5MTUteSArPSBp bnRlbF9ndnQubwogaW5jbHVkZSAkKHNyYykvZ3Z0L01ha2VmaWxlCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuYwppbmRleCA5OWU0ZTA0Li5lOTlkMTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAg LTgzNiw2ICs4MzYsOCBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfZWFybHkoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCiAJaW50ZWxfZGV0ZWN0X3ByZXByb2R1Y3Rp b25faHcoZGV2X3ByaXYpOwogCisJaTkxNV9wZXJmX2luaXQoZGV2X3ByaXYpOworCiAJcmV0dXJu IDA7CiAKIGVycl93b3JrcXVldWVzOgpAQCAtODQ5LDYgKzg1MSw3IEBAIHN0YXRpYyBpbnQgaTkx NV9kcml2ZXJfaW5pdF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAg Ki8KIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX2NsZWFudXBfZWFybHkoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQogeworCWk5MTVfcGVyZl9maW5pKGRldl9wcml2KTsKIAlpOTE1 X2dlbV9sb2FkX2NsZWFudXAoJmRldl9wcml2LT5kcm0pOwogCWk5MTVfd29ya3F1ZXVlc19jbGVh bnVwKGRldl9wcml2KTsKIH0KQEAgLTI1NTQsNiArMjU1Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNbXSA9IHsKIAlEUk1fSU9DVExfREVGX0RSVihJ OTE1X0dFTV9VU0VSUFRSLCBpOTE1X2dlbV91c2VycHRyX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9X KSwKIAlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9DT05URVhUX0dFVFBBUkFNLCBpOTE1X2dl bV9jb250ZXh0X2dldHBhcmFtX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKIAlEUk1fSU9DVExf REVGX0RSVihJOTE1X0dFTV9DT05URVhUX1NFVFBBUkFNLCBpOTE1X2dlbV9jb250ZXh0X3NldHBh cmFtX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X1BF UkZfT1BFTiwgaTkxNV9wZXJmX29wZW5faW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAogfTsKIAog c3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o CmluZGV4IGRkM2FjYWIuLmZjYzU5NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTc2 NCw2ICsxNzY0LDg0IEBAIHN0cnVjdCBpbnRlbF93bV9jb25maWcgewogCWJvb2wgc3ByaXRlc19z Y2FsZWQ7CiB9OwogCitzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbTsKKworc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW1fb3BzIHsKKwkvKiBFbmFibGVzIHRoZSBjb2xsZWN0aW9uIG9mIEhXIHNhbXBsZXMs IGVpdGhlciBpbiByZXNwb25zZSB0bworCSAqIEk5MTVfUEVSRl9JT0NUTF9FTkFCTEUgb3IgaW1w bGljaXRseSBjYWxsZWQgd2hlbiBzdHJlYW0gaXMKKwkgKiBvcGVuZWQgd2l0aG91dCBJOTE1X1BF UkZfRkxBR19ESVNBQkxFRC4KKwkgKi8KKwl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtKTsKKworCS8qIERpc2FibGVzIHRoZSBjb2xsZWN0aW9uIG9mIEhXIHNh bXBsZXMsIGVpdGhlciBpbiByZXNwb25zZSB0bworCSAqIEk5MTVfUEVSRl9JT0NUTF9ESVNBQkxF IG9yIGltcGxpY2l0bHkgY2FsbGVkIGJlZm9yZQorCSAqIGRlc3Ryb3lpbmcgdGhlIHN0cmVhbS4K KwkgKi8KKwl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSk7 CisKKwkvKiBSZXR1cm46IHRydWUgaWYgYW55IGk5MTUgcGVyZiByZWNvcmRzIGFyZSByZWFkeSB0 byByZWFkKCkKKwkgKiBmb3IgdGhpcyBzdHJlYW0uCisJICovCisJYm9vbCAoKmNhbl9yZWFkKShz dHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKTsKKworCS8qIENhbGwgcG9sbF93YWl0LCBw YXNzaW5nIGEgd2FpdCBxdWV1ZSB0aGF0IHdpbGwgYmUgd29rZW4KKwkgKiBvbmNlIHRoZXJlIGlz IHNvbWV0aGluZyByZWFkeSB0byByZWFkKCkgZm9yIHRoZSBzdHJlYW0KKwkgKi8KKwl2b2lkICgq cG9sbF93YWl0KShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorCQkJICBzdHJ1Y3Qg ZmlsZSAqZmlsZSwKKwkJCSAgcG9sbF90YWJsZSAqd2FpdCk7CisKKwkvKiBGb3IgaGFuZGxpbmcg YSBibG9ja2luZyByZWFkLCB3YWl0IHVudGlsIHRoZXJlIGlzIHNvbWV0aGluZworCSAqIHRvIHJl YWR5IHRvIHJlYWQoKSBmb3IgdGhlIHN0cmVhbS4gRS5nLiB3YWl0IG9uIHRoZSBzYW1lCisJICog d2FpdCBxdWV1ZSB0aGF0IHdvdWxkIGJlIHBhc3NlZCB0byBwb2xsX3dhaXQoKSB1bnRpbAorCSAq IC0+Y2FuX3JlYWQoKSByZXR1cm5zIHRydWUgKGlmIGl0cyBzYWZlIHRvIGNhbGwgLT5jYW5fcmVh ZCgpCisJICogd2l0aG91dCB0aGUgaTkxNSBwZXJmIGxvY2sgaGVsZCkuCisJICovCisJaW50ICgq d2FpdF91bmxvY2tlZCkoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSk7CisKKwkvKiBy ZWFkIC0gQ29weSBidWZmZXJlZCBtZXRyaWNzIGFzIHJlY29yZHMgdG8gdXNlcnNwYWNlCisJICog QGJ1ZjogdGhlIHVzZXJzcGFjZSwgZGVzdGluYXRpb24gYnVmZmVyCisJICogQGNvdW50OiB0aGUg bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UKKwkgKiBAb2Zm c2V0OiB6ZXJvIGF0IHRoZSBzdGFydCBvZiB0aGUgcmVhZCwgdXBkYXRlZCBhcyB0aGUgcmVhZAor CSAqICAgICAgICAgIHByb2NlZWRzLCBpdCByZXByZXNlbnRzIGhvdyBtYW55IGJ5dGVzIGhhdmUg YmVlbgorCSAqICAgICAgICAgIGNvcGllZCBzbyBmYXIgYW5kIHRoZSBidWZmZXIgb2Zmc2V0IGZv ciBjb3B5aW5nIHRoZQorCSAqICAgICAgICAgIG5leHQgcmVjb3JkLgorCSAqCisJICogQ29weSBh cyBtYW55IGJ1ZmZlcmVkIGk5MTUgcGVyZiBzYW1wbGVzIGFuZCByZWNvcmRzIGZvcgorCSAqIHRo aXMgc3RyZWFtIHRvIHVzZXJzcGFjZSBhcyB3aWxsIGZpdCBpbiB0aGUgZ2l2ZW4gYnVmZmVyLgor CSAqCisJICogT25seSB3cml0ZSBjb21wbGV0ZSByZWNvcmRzOyByZXR1cm5pbmcgLUVOT1NQQyBp ZiB0aGVyZQorCSAqIGlzbid0IHJvb20gZm9yIGEgY29tcGxldGUgcmVjb3JkLgorCSAqCisJICog UmV0dXJuIGFueSBlcnJvciBjb25kaXRpb24gdGhhdCByZXN1bHRzIGluIGEgc2hvcnQgcmVhZAor CSAqIHN1Y2ggYXMgLUVOT1NQQyBvciAtRUZBVUxULCBldmVuIHRob3VnaCB0aGVzZSBtYXkgYmUK KwkgKiBzcXVhc2hlZCBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXJzcGFjZS4KKwkgKi8KKwlpbnQg KCpyZWFkKShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorCQkgICAgY2hhciBfX3Vz ZXIgKmJ1ZiwKKwkJICAgIHNpemVfdCBjb3VudCwKKwkJICAgIHNpemVfdCAqb2Zmc2V0KTsKKwor CS8qIENsZWFudXAgYW55IHN0cmVhbSBzcGVjaWZpYyByZXNvdXJjZXMuCisJICoKKwkgKiBUaGUg c3RyZWFtIHdpbGwgYWx3YXlzIGJlIGRpc2FibGVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC4KKwkg Ki8KKwl2b2lkICgqZGVzdHJveSkoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSk7Cit9 OworCitzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSB7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2OworCisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCisJdTMyIHNhbXBsZV9mbGFn czsKKworCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7CisJYm9vbCBlbmFibGVkOworCisJ c3RydWN0IGk5MTVfcGVyZl9zdHJlYW1fb3BzICpvcHM7Cit9OworCiBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSB7CiAJc3RydWN0IGRybV9kZXZpY2UgZHJtOwogCkBAIC0yMDY0LDYgKzIxNDIsMTIg QEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCiAJc3RydWN0IGk5MTVfcnVudGltZV9wbSBw bTsKIAorCXN0cnVjdCB7CisJCWJvb2wgaW5pdGlhbGl6ZWQ7CisJCXN0cnVjdCBtdXRleCBsb2Nr OworCQlzdHJ1Y3QgbGlzdF9oZWFkIHN0cmVhbXM7CisJfSBwZXJmOworCiAJLyogQWJzdHJhY3Qg dGhlIHN1Ym1pc3Npb24gbWVjaGFuaXNtIChsZWdhY3kgcmluZ2J1ZmZlciBvciBleGVjbGlzdHMp IGF3YXkgKi8KIAlzdHJ1Y3QgewogCQl2b2lkICgqcmVzdW1lKShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqKTsKQEAgLTM0NzQsNiArMzU1OCw5IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X3NldHBh cmFtX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiBpbnQgaTkxNV9n ZW1fY29udGV4dF9yZXNldF9zdGF0c19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLAogCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwogCitpbnQgaTkxNV9w ZXJmX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOworCiAvKiBpOTE1X2dlbV9ldmljdC5jICovCiBpbnQgX19t dXN0X2NoZWNrIGk5MTVfZ2VtX2V2aWN0X3NvbWV0aGluZyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKIAkJCQkJICB1NjQgbWluX3NpemUsIHU2NCBhbGlnbm1lbnQsCkBAIC0zNTk5LDYg KzM2ODYsMTAgQEAgaW50IGludGVsX2VuZ2luZV9jbWRfcGFyc2VyKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKIAkJCSAgICB1MzIgYmF0Y2hfbGVuLAogCQkJICAgIGJvb2wgaXNfbWFz dGVyKTsKIAorLyogaTkxNV9wZXJmLmMgKi8KK2V4dGVybiB2b2lkIGk5MTVfcGVyZl9pbml0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCBpOTE1X3BlcmZf ZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCiAvKiBpOTE1X3N1c3Bl bmQuYyAqLwogZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7CiBleHRlcm4gaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNGQ1MTU4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcGVyZi5jCkBAIC0wLDAgKzEsNDQzIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTUtMjAx NiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICBSb2JlcnQgQnJhZ2cgPHJvYmVydEBzaXhi eW5pbmUub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgorCisjaW5j bHVkZSAiaTkxNV9kcnYuaCIKKworc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzIHsKKwl1MzIg c2FtcGxlX2ZsYWdzOworCisJdTY0IHNpbmdsZV9jb250ZXh0OjE7CisJdTY0IGN0eF9oYW5kbGU7 Cit9OworCitzdGF0aWMgc3NpemVfdCBpOTE1X3BlcmZfcmVhZF9sb2NrZWQoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAg ICAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICAgIHNpemVfdCBjb3VudCwKKwkJCQkgICAgIGxv ZmZfdCAqcHBvcykKK3sKKwkvKiBOb3RlIHdlIGtlZXAgdGhlIG9mZnNldCAoYWthIGJ5dGVzIHJl YWQpIHNlcGFyYXRlIGZyb20gYW55CisJICogZXJyb3Igc3RhdHVzIHNvIHRoYXQgdGhlIGZpbmFs IGNoZWNrIGZvciB3aGV0aGVyIHdlIHJldHVybgorCSAqIHRoZSBieXRlcyByZWFkIHdpdGggYSBo aWdoZXIgcHJlY2VkZW5jZSB0aGFuIGFueSBlcnJvciAoc2VlCisJICogY29tbWVudCBiZWxvdykg ZG9lc24ndCBuZWVkIHRvIGJlIGhhbmRsZWQvZHVwbGljYXRlZCBpbgorCSAqIHN0cmVhbS0+b3Bz LT5yZWFkKCkgaW1wbGVtZW50YXRpb25zLgorCSAqLworCXNpemVfdCBvZmZzZXQgPSAwOworCWlu dCByZXQgPSBzdHJlYW0tPm9wcy0+cmVhZChzdHJlYW0sIGJ1ZiwgY291bnQsICZvZmZzZXQpOwor CisJLyogSWYgd2UndmUgc3VjY2Vzc2Z1bGx5IGNvcGllZCBhbnkgZGF0YSB0aGVuIHJlcG9ydGlu ZyB0aGF0CisJICogdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGFueSBpbnRlcm5hbCBlcnJvciBzdGF0 dXMsIHNvIHRoZQorCSAqIGRhdGEgaXNuJ3QgbG9zdC4KKwkgKgorCSAqIEZvciBleGFtcGxlIHJl dCB3aWxsIGJlIC1FTk9TUEMgd2hlbmV2ZXIgdGhlcmUgaXMgbW9yZQorCSAqIGJ1ZmZlcmVkIGRh dGEgdGhhbiBjYW4gYmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYnV0IHRoYXQncworCSAqIG9ubHkg aW50ZXJlc3RpbmcgaWYgd2Ugd2VyZW4ndCBhYmxlIHRvIGNvcHkgc29tZSBkYXRhCisJICogYmVj YXVzZSBpdCBpbXBsaWVzIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIGlzIHRvbyBzbWFsbCB0bworCSAq IHJlY2VpdmUgYSBzaW5nbGUgcmVjb3JkIChhbmQgd2UgbmV2ZXIgc3BsaXQgcmVjb3JkcykuCisJ ICoKKwkgKiBBbm90aGVyIGNhc2Ugd2l0aCByZXQgPT0gLUVGQVVMVCBpcyBtb3JlIG9mIGEgZ3Jl eSBhcmVhCisJICogc2luY2UgaXQgd291bGQgc2VlbSBsaWtlIGJhZCBmb3JtIGZvciB1c2Vyc3Bh Y2UgdG8gYXNrIHVzCisJICogdG8gb3ZlcnJ1biBpdHMgYnVmZmVyLCBidXQgdGhlIHVzZXIga25v d3MgYmVzdDoKKwkgKgorCSAqICAgaHR0cDovL3lhcmNoaXZlLm5ldC9jb21wL2xpbnV4L3BhcnRp YWxfcmVhZHNfd3JpdGVzLmh0bWwKKwkgKi8KKwlyZXR1cm4gb2Zmc2V0ID86IChyZXQgPzogLUVB R0FJTik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGk5MTVfcGVyZl9yZWFkKHN0cnVjdCBmaWxlICpm aWxlLAorCQkJICAgICAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBjb3VudCwK KwkJCSAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3Ry ZWFtID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CisJc3NpemVfdCByZXQ7CisKKwlpZiAoIShmaWxlLT5m X2ZsYWdzICYgT19OT05CTE9DSykpIHsKKwkJLyogQWxsb3cgZmFsc2UgcG9zaXRpdmVzIGZyb20g c3RyZWFtLT5vcHMtPndhaXRfdW5sb2NrZWQuCisJCSAqLworCQlkbyB7CisJCQlyZXQgPSBzdHJl YW0tPm9wcy0+d2FpdF91bmxvY2tlZChzdHJlYW0pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4g cmV0OworCisJCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKwkJCXJldCA9IGk5 MTVfcGVyZl9yZWFkX2xvY2tlZChzdHJlYW0sIGZpbGUsCisJCQkJCQkgICAgYnVmLCBjb3VudCwg cHBvcyk7CisJCQltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCQl9IHdoaWxl IChyZXQgPT0gLUVBR0FJTik7CisJfSBlbHNlIHsKKwkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBl cmYubG9jayk7CisJCXJldCA9IGk5MTVfcGVyZl9yZWFkX2xvY2tlZChzdHJlYW0sIGZpbGUsIGJ1 ZiwgY291bnQsIHBwb3MpOworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOwor CX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV9wZXJmX3Bv bGxfbG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCisJCQkJCSAgc3RydWN0 IGZpbGUgKmZpbGUsCisJCQkJCSAgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwl1bnNpZ25lZCBpbnQg c3RyZWFtcyA9IDA7CisKKwlzdHJlYW0tPm9wcy0+cG9sbF93YWl0KHN0cmVhbSwgZmlsZSwgd2Fp dCk7CisKKwlpZiAoc3RyZWFtLT5vcHMtPmNhbl9yZWFkKHN0cmVhbSkpCisJCXN0cmVhbXMgfD0g UE9MTElOOworCisJcmV0dXJuIHN0cmVhbXM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTkx NV9wZXJmX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCWludCBy ZXQ7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKwlyZXQgPSBpOTE1X3Bl cmZfcG9sbF9sb2NrZWQoc3RyZWFtLCBmaWxlLCB3YWl0KTsKKwltdXRleF91bmxvY2soJmRldl9w cml2LT5wZXJmLmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9w ZXJmX2VuYWJsZV9sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKK3sKKwlp ZiAoc3RyZWFtLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwkvKiBBbGxvdyBzdHJlYW0tPm9wcy0+ ZW5hYmxlKCkgdG8gcmVmZXIgdG8gdGhpcyAqLworCXN0cmVhbS0+ZW5hYmxlZCA9IHRydWU7CisK KwlpZiAoc3RyZWFtLT5vcHMtPmVuYWJsZSkKKwkJc3RyZWFtLT5vcHMtPmVuYWJsZShzdHJlYW0p OworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BlcmZfZGlzYWJsZV9sb2NrZWQoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSkKK3sKKwlpZiAoIXN0cmVhbS0+ZW5hYmxlZCkKKwkJcmV0dXJu OworCisJLyogQWxsb3cgc3RyZWFtLT5vcHMtPmRpc2FibGUoKSB0byByZWZlciB0byB0aGlzICov CisJc3RyZWFtLT5lbmFibGVkID0gZmFsc2U7CisKKwlpZiAoc3RyZWFtLT5vcHMtPmRpc2FibGUp CisJCXN0cmVhbS0+b3BzLT5kaXNhYmxlKHN0cmVhbSk7Cit9CisKK3N0YXRpYyBsb25nIGk5MTVf cGVyZl9pb2N0bF9sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCQkg ICB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRj aCAoY21kKSB7CisJY2FzZSBJOTE1X1BFUkZfSU9DVExfRU5BQkxFOgorCQlpOTE1X3BlcmZfZW5h YmxlX2xvY2tlZChzdHJlYW0pOworCQlyZXR1cm4gMDsKKwljYXNlIEk5MTVfUEVSRl9JT0NUTF9E SVNBQkxFOgorCQlpOTE1X3BlcmZfZGlzYWJsZV9sb2NrZWQoc3RyZWFtKTsKKwkJcmV0dXJuIDA7 CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBsb25nIGk5MTVfcGVyZl9pb2N0 bChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgIHVu c2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0gPSBm aWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g c3RyZWFtLT5kZXZfcHJpdjsKKwlsb25nIHJldDsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5w ZXJmLmxvY2spOworCXJldCA9IGk5MTVfcGVyZl9pb2N0bF9sb2NrZWQoc3RyZWFtLCBjbWQsIGFy Zyk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcGVyZl9kZXN0cm95X2xvY2tlZChzdHJ1Y3QgaTkxNV9w ZXJmX3N0cmVhbSAqc3RyZWFtKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHN0cmVhbS0+ZGV2X3ByaXY7CisKKwlpZiAoc3RyZWFtLT5lbmFibGVkKQorCQlpOTE1X3Bl cmZfZGlzYWJsZV9sb2NrZWQoc3RyZWFtKTsKKworCWlmIChzdHJlYW0tPm9wcy0+ZGVzdHJveSkK KwkJc3RyZWFtLT5vcHMtPmRlc3Ryb3koc3RyZWFtKTsKKworCWxpc3RfZGVsKCZzdHJlYW0tPmxp bmspOworCisJaWYgKHN0cmVhbS0+Y3R4KSB7CisJCW11dGV4X2xvY2soJmRldl9wcml2LT5kcm0u c3RydWN0X211dGV4KTsKKwkJaTkxNV9nZW1fY29udGV4dF9wdXQoc3RyZWFtLT5jdHgpOworCQlt dXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKKwl9CisKKwlrZnJlZShz dHJlYW0pOworfQorCitzdGF0aWMgaW50IGk5MTVfcGVyZl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpz dHJlYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJm LmxvY2spOworCWk5MTVfcGVyZl9kZXN0cm95X2xvY2tlZChzdHJlYW0pOworCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPnBlcmYubG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29u c3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVM RSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkucmVsZWFzZQk9IGk5MTVfcGVyZl9yZWxlYXNl LAorCS5wb2xsCQk9IGk5MTVfcGVyZl9wb2xsLAorCS5yZWFkCQk9IGk5MTVfcGVyZl9yZWFkLAor CS51bmxvY2tlZF9pb2N0bAk9IGk5MTVfcGVyZl9pb2N0bCwKK307CisKKworc3RhdGljIHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICoKK2xvb2t1cF9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKKwkgICAgICAgc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmls ZV9wcml2LAorCSAgICAgICB1MzIgY3R4X3VzZXJfaGFuZGxlKQoreworCXN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHg7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRl cnJ1cHRpYmxlKCZkZXZfcHJpdi0+ZHJtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihy ZXQpOworCisJY3R4ID0gaTkxNV9nZW1fY29udGV4dF9sb29rdXAoZmlsZV9wcml2LCBjdHhfdXNl cl9oYW5kbGUpOworCWlmICghSVNfRVJSKGN0eCkpCisJCWk5MTVfZ2VtX2NvbnRleHRfZ2V0KGN0 eCk7CisKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKKworCXJl dHVybiBjdHg7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgc3RydWN0IGRybV9pOTE1 X3BlcmZfb3Blbl9wYXJhbSAqcGFyYW0sCisJCQkgICAgc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0 aWVzICpwcm9wcywKKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKnNwZWNpZmljX2N0eCA9IE5VTEw7CisJc3RydWN0IGk5MTVfcGVyZl9z dHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmX2ZsYWdzID0gMDsKKwlpbnQg c3RyZWFtX2ZkOworCWludCByZXQ7CisKKwlpZiAocHJvcHMtPnNpbmdsZV9jb250ZXh0KSB7CisJ CXUzMiBjdHhfaGFuZGxlID0gcHJvcHMtPmN0eF9oYW5kbGU7CisJCXN0cnVjdCBkcm1faTkxNV9m aWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2OworCisJCXNwZWNpZmlj X2N0eCA9IGxvb2t1cF9jb250ZXh0KGRldl9wcml2LCBmaWxlX3ByaXYsIGN0eF9oYW5kbGUpOwor CQlpZiAoSVNfRVJSKHNwZWNpZmljX2N0eCkpIHsKKwkJCXJldCA9IFBUUl9FUlIoc3BlY2lmaWNf Y3R4KTsKKwkJCWlmIChyZXQgIT0gLUVJTlRSKQorCQkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGxv b2sgdXAgY29udGV4dCB3aXRoIElEICV1IGZvciBvcGVuaW5nIHBlcmYgc3RyZWFtXG4iLAorCQkJ CQkgIGN0eF9oYW5kbGUpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAoIXNwZWNpZmlj X2N0eCAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgeworCQlEUk1fRVJST1IoIkluc3VmZmlj aWVudCBwcml2aWxlZ2VzIHRvIG9wZW4gc3lzdGVtLXdpZGUgaTkxNSBwZXJmIHN0cmVhbVxuIik7 CisJCXJldCA9IC1FQUNDRVM7CisJCWdvdG8gZXJyX2N0eDsKKwl9CisKKwlzdHJlYW0gPSBremFs bG9jKHNpemVvZigqc3RyZWFtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdHJlYW0pIHsKKwkJcmV0 ID0gLUVOT01FTTsKKwkJZ290byBlcnJfY3R4OworCX0KKworCXN0cmVhbS0+c2FtcGxlX2ZsYWdz ID0gcHJvcHMtPnNhbXBsZV9mbGFnczsKKwlzdHJlYW0tPmRldl9wcml2ID0gZGV2X3ByaXY7CisJ c3RyZWFtLT5jdHggPSBzcGVjaWZpY19jdHg7CisKKwkvKgorCSAqIFRPRE86IHN1cHBvcnQgc2Ft cGxpbmcgc29tZXRoaW5nCisJICoKKwkgKiBGb3Igbm93IHRoaXMgaXMgYXMgZmFyIGFzIHdlIGNh biBnby4KKwkgKi8KKwlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIGk5MTUgcGVyZiBzdHJlYW0gY29u ZmlndXJhdGlvblxuIik7CisJcmV0ID0gLUVJTlZBTDsKKwlnb3RvIGVycl9hbGxvYzsKKworCWxp c3RfYWRkKCZzdHJlYW0tPmxpbmssICZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zKTsKKworCWlmIChw YXJhbS0+ZmxhZ3MgJiBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDKQorCQlmX2ZsYWdzIHw9IE9f Q0xPRVhFQzsKKwlpZiAocGFyYW0tPmZsYWdzICYgSTkxNV9QRVJGX0ZMQUdfRkRfTk9OQkxPQ0sp CisJCWZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKworCXN0cmVhbV9mZCA9IGFub25faW5vZGVfZ2V0 ZmQoIltpOTE1X3BlcmZdIiwgJmZvcHMsIHN0cmVhbSwgZl9mbGFncyk7CisJaWYgKHN0cmVhbV9m ZCA8IDApIHsKKwkJcmV0ID0gc3RyZWFtX2ZkOworCQlnb3RvIGVycl9vcGVuOworCX0KKworCWlm ICghKHBhcmFtLT5mbGFncyAmIEk5MTVfUEVSRl9GTEFHX0RJU0FCTEVEKSkKKwkJaTkxNV9wZXJm X2VuYWJsZV9sb2NrZWQoc3RyZWFtKTsKKworCXJldHVybiBzdHJlYW1fZmQ7CisKK2Vycl9vcGVu OgorCWxpc3RfZGVsKCZzdHJlYW0tPmxpbmspOworCWlmIChzdHJlYW0tPm9wcy0+ZGVzdHJveSkK KwkJc3RyZWFtLT5vcHMtPmRlc3Ryb3koc3RyZWFtKTsKK2Vycl9hbGxvYzoKKwlrZnJlZShzdHJl YW0pOworZXJyX2N0eDoKKwlpZiAoc3BlY2lmaWNfY3R4KSB7CisJCW11dGV4X2xvY2soJmRldl9w cml2LT5kcm0uc3RydWN0X211dGV4KTsKKwkJaTkxNV9nZW1fY29udGV4dF9wdXQoc3BlY2lmaWNf Y3R4KTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisJfQor ZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qIE5vdGUgd2UgY29weSB0aGUgcHJvcGVydGllcyBm cm9tIHVzZXJzcGFjZSBvdXRzaWRlIG9mIHRoZSBpOTE1IHBlcmYKKyAqIG11dGV4IHRvIGF2b2lk IGFuIGF3a3dhcmQgbG9ja2RlcCB3aXRoIG1tYXBfc2VtLgorICoKKyAqIE5vdGUgdGhpcyBmdW5j dGlvbiBvbmx5IHZhbGlkYXRlcyBwcm9wZXJ0aWVzIGluIGlzb2xhdGlvbiBpdCBkb2Vzbid0Cisg KiB2YWxpZGF0ZSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBwcm9wZXJ0aWVzIG1ha2VzIHNlbnNl IG9yIHRoYXQgYWxsCisgKiBwcm9wZXJ0aWVzIG5lY2Vzc2FyeSBmb3IgYSBwYXJ0aWN1bGFyIGtp bmQgb2Ygc3RyZWFtIGhhdmUgYmVlbiBzZXQuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9wcm9wZXJ0 aWVzX3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAg dTY0IF9fdXNlciAqdXByb3BzLAorCQkJCSAgICB1MzIgbl9wcm9wcywKKwkJCQkgICAgc3RydWN0 IHBlcmZfb3Blbl9wcm9wZXJ0aWVzICpwcm9wcykKK3sKKwl1NjQgX191c2VyICp1cHJvcCA9IHVw cm9wczsKKwlpbnQgaTsKKworCW1lbXNldChwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBwZXJmX29w ZW5fcHJvcGVydGllcykpOworCisJaWYgKCFuX3Byb3BzKSB7CisJCURSTV9FUlJPUigiTm8gaTkx NSBwZXJmIHByb3BlcnRpZXMgZ2l2ZW4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYg KG5fcHJvcHMgPiBEUk1fSTkxNV9QRVJGX1BST1BfTUFYKSB7CisJCURSTV9FUlJPUigiTW9yZSBp OTE1IHBlcmYgcHJvcGVydGllcyBzcGVjaWZpZWQgdGhhbiBleGlzdCIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9wcm9wczsgaSsrKSB7CisJCXU2NCBpZCwg dmFsdWU7CisJCWludCByZXQ7CisKKwkJcmV0ID0gZ2V0X3VzZXIoaWQsICh1NjQgX191c2VyICop dXByb3ApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBnZXRfdXNlcih2 YWx1ZSwgKHU2NCBfX3VzZXIgKil1cHJvcCArIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKKworCQlzd2l0Y2ggKChlbnVtIGRybV9pOTE1X3BlcmZfcHJvcGVydHlfaWQpaWQpIHsKKwkJ Y2FzZSBEUk1fSTkxNV9QRVJGX1BST1BfQ1RYX0hBTkRMRToKKwkJCXByb3BzLT5zaW5nbGVfY29u dGV4dCA9IDE7CisJCQlwcm9wcy0+Y3R4X2hhbmRsZSA9IHZhbHVlOworCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQlNSVNTSU5HX0NBU0UoaWQpOworCQkJRFJNX0VSUk9SKCJVbmtub3duIGk5MTUg cGVyZiBwcm9wZXJ0eSBJRCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQl1cHJvcCAr PSAyOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgaTkxNV9wZXJmX29wZW5faW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtICpwYXJhbSA9IGRhdGE7CisJ c3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzIHByb3BzOworCXUzMiBrbm93bl9vcGVuX2ZsYWdz OworCWludCByZXQ7CisKKwlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkKSB7CisJCURS TV9FUlJPUigiaTkxNSBwZXJmIGludGVyZmFjZSBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHN5c3Rl bSIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCWtub3duX29wZW5fZmxhZ3MgPSBJOTE1 X1BFUkZfRkxBR19GRF9DTE9FWEVDIHwKKwkJCSAgIEk5MTVfUEVSRl9GTEFHX0ZEX05PTkJMT0NL IHwKKwkJCSAgIEk5MTVfUEVSRl9GTEFHX0RJU0FCTEVEOworCWlmIChwYXJhbS0+ZmxhZ3MgJiB+ a25vd25fb3Blbl9mbGFncykgeworCQlEUk1fRVJST1IoIlVua25vd24gZHJtX2k5MTVfcGVyZl9v cGVuX3BhcmFtIGZsYWdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSByZWFk X3Byb3BlcnRpZXNfdW5sb2NrZWQoZGV2X3ByaXYsCisJCQkJICAgICAgIHU2NF90b191c2VyX3B0 cihwYXJhbS0+cHJvcGVydGllc19wdHIpLAorCQkJCSAgICAgICBwYXJhbS0+bnVtX3Byb3BlcnRp ZXMsCisJCQkJICAgICAgICZwcm9wcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW11 dGV4X2xvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCXJldCA9IGk5MTVfcGVyZl9vcGVuX2lv Y3RsX2xvY2tlZChkZXZfcHJpdiwgcGFyYW0sICZwcm9wcywgZmlsZSk7CisJbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaTkxNV9w ZXJmX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCUlOSVRfTElT VF9IRUFEKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zKTsKKwltdXRleF9pbml0KCZkZXZfcHJpdi0+ cGVyZi5sb2NrKTsKKworCWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkID0gdHJ1ZTsKK30KKwor dm9pZCBpOTE1X3BlcmZfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7 CisJaWYgKCFkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJLyogQ3Vy cmVudGx5IG5vdGhpbmcgdG8gY2xlYW4gdXAgKi8KKworCWRldl9wcml2LT5wZXJmLmluaXRpYWxp emVkID0gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgg Yi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKaW5kZXggMDM3MjVmZS4uOThjZDQ5MyAxMDA2 NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9k cm0vaTkxNV9kcm0uaApAQCAtMjU4LDYgKzI1OCw3IEBAIHR5cGVkZWYgc3RydWN0IF9kcm1faTkx NV9zYXJlYSB7CiAjZGVmaW5lIERSTV9JOTE1X0dFTV9VU0VSUFRSCQkweDMzCiAjZGVmaW5lIERS TV9JOTE1X0dFTV9DT05URVhUX0dFVFBBUkFNCTB4MzQKICNkZWZpbmUgRFJNX0k5MTVfR0VNX0NP TlRFWFRfU0VUUEFSQU0JMHgzNQorI2RlZmluZSBEUk1fSTkxNV9QRVJGX09QRU4JCTB4MzYKIAog I2RlZmluZSBEUk1fSU9DVExfSTkxNV9JTklUCQlEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsg RFJNX0k5MTVfSU5JVCwgZHJtX2k5MTVfaW5pdF90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9G TFVTSAkJRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0ZMVVNIKQpAQCAtMzEx LDYgKzMxMiw3IEBAIHR5cGVkZWYgc3RydWN0IF9kcm1faTkxNV9zYXJlYSB7CiAjZGVmaW5lIERS TV9JT0NUTF9JOTE1X0dFTV9VU0VSUFRSCQkJRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBE Uk1fSTkxNV9HRU1fVVNFUlBUUiwgc3RydWN0IGRybV9pOTE1X2dlbV91c2VycHRyKQogI2RlZmlu ZSBEUk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9HRVRQQVJBTQlEUk1fSU9XUiAoRFJNX0NPTU1B TkRfQkFTRSArIERSTV9JOTE1X0dFTV9DT05URVhUX0dFVFBBUkFNLCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2NvbnRleHRfcGFyYW0pCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9DT05URVhUX1NF VFBBUkFNCURSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0NPTlRFWFRf U0VUUEFSQU0sIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSkKKyNkZWZpbmUgRFJN X0lPQ1RMX0k5MTVfUEVSRl9PUEVOCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1 X1BFUkZfT1BFTiwgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSkKIAogLyogQWxsb3cg ZHJpdmVycyB0byBzdWJtaXQgYmF0Y2hidWZmZXJzIGRpcmVjdGx5IHRvIGhhcmR3YXJlLCByZWx5 aW5nCiAgKiBvbiB0aGUgc2VjdXJpdHkgbWVjaGFuaXNtcyBwcm92aWRlZCBieSBoYXJkd2FyZS4K QEAgLTEyMjIsNiArMTIyNCw3MSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0g ewogCV9fdTY0IHZhbHVlOwogfTsKIAorZW51bSBkcm1faTkxNV9wZXJmX3Byb3BlcnR5X2lkIHsK KwkvKioKKwkgKiBPcGVuIHRoZSBzdHJlYW0gZm9yIGEgc3BlY2lmaWMgY29udGV4dCBoYW5kbGUg KGFzIHVzZWQgd2l0aAorCSAqIGV4ZWNidWZmZXIyKS4gQSBzdHJlYW0gb3BlbmVkIGZvciBhIHNw ZWNpZmljIGNvbnRleHQgdGhpcyB3YXkKKwkgKiB3b24ndCB0eXBpY2FsbHkgcmVxdWlyZSByb290 IHByaXZpbGVnZXMuCisJICovCisJRFJNX0k5MTVfUEVSRl9QUk9QX0NUWF9IQU5ETEUgPSAxLAor CisJRFJNX0k5MTVfUEVSRl9QUk9QX01BWCAvKiBub24tQUJJICovCit9OworCitzdHJ1Y3QgZHJt X2k5MTVfcGVyZl9vcGVuX3BhcmFtIHsKKwlfX3UzMiBmbGFnczsKKyNkZWZpbmUgSTkxNV9QRVJG X0ZMQUdfRkRfQ0xPRVhFQwkoMTw8MCkKKyNkZWZpbmUgSTkxNV9QRVJGX0ZMQUdfRkRfTk9OQkxP Q0sJKDE8PDEpCisjZGVmaW5lIEk5MTVfUEVSRl9GTEFHX0RJU0FCTEVECQkoMTw8MikKKworCS8q KiBUaGUgbnVtYmVyIG9mIHU2NCAoaWQsIHZhbHVlKSBwYWlycyAqLworCV9fdTMyIG51bV9wcm9w ZXJ0aWVzOworCisJLyoqCisJICogUG9pbnRlciB0byBhcnJheSBvZiB1NjQgKGlkLCB2YWx1ZSkg cGFpcnMgY29uZmlndXJpbmcgdGhlIHN0cmVhbQorCSAqIHRvIG9wZW4uCisJICovCisJX191NjQg X191c2VyIHByb3BlcnRpZXNfcHRyOworfTsKKworI2RlZmluZSBJOTE1X1BFUkZfSU9DVExfRU5B QkxFCV9JTygnaScsIDB4MCkKKyNkZWZpbmUgSTkxNV9QRVJGX0lPQ1RMX0RJU0FCTEUJX0lPKCdp JywgMHgxKQorCisvKioKKyAqIENvbW1vbiB0byBhbGwgaTkxNSBwZXJmIHJlY29yZHMKKyAqLwor c3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRlciB7CisJX191MzIgdHlwZTsKKwlfX3Ux NiBwYWQ7CisJX191MTYgc2l6ZTsKK307CisKK2VudW0gZHJtX2k5MTVfcGVyZl9yZWNvcmRfdHlw ZSB7CisKKwkvKioKKwkgKiBTYW1wbGVzIGFyZSB0aGUgd29yayBob3JzZSByZWNvcmQgdHlwZSB3 aG9zZSBjb250ZW50cyBhcmUgZXh0ZW5zaWJsZQorCSAqIGFuZCBkZWZpbmVkIHdoZW4gb3Blbmlu ZyBhbiBpOTE1IHBlcmYgc3RyZWFtIGJhc2VkIG9uIHRoZSBnaXZlbgorCSAqIHByb3BlcnRpZXMu CisJICoKKwkgKiBCb29sZWFuIHByb3BlcnRpZXMgZm9sbG93aW5nIHRoZSBuYW1pbmcgY29udmVu dGlvbgorCSAqIERSTV9JOTE1X1BFUkZfU0FNUExFX3h5el9QUk9QIHJlcXVlc3QgdGhlIGluY2x1 c2lvbiBvZiAneHl6JyBkYXRhIGluCisJICogZXZlcnkgc2FtcGxlLgorCSAqCisJICogVGhlIG9y ZGVyIG9mIHRoZXNlIHNhbXBsZSBwcm9wZXJ0aWVzIGdpdmVuIGJ5IHVzZXJzcGFjZSBoYXMgbm8K KwkgKiBhZmZlY3Qgb24gdGhlIG9yZGVyaW5nIG9mIGRhdGEgd2l0aGluIGEgc2FtcGxlLiBUaGUg b3JkZXIgd2lsbCBiZQorCSAqIGRvY3VtZW50ZWQgaGVyZS4KKwkgKgorCSAqIHN0cnVjdCB7CisJ ICogICAgIHN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29yZF9oZWFkZXIgaGVhZGVyOworCSAqCisJ ICogICAgIFRPRE86IGl0ZW1pemUgZXh0ZW5zaWJsZSBzYW1wbGUgZGF0YSBoZXJlCisJICogfTsK KwkgKi8KKwlEUk1fSTkxNV9QRVJGX1JFQ09SRF9TQU1QTEUgPSAxLAorCisJRFJNX0k5MTVfUEVS Rl9SRUNPUkRfTUFYIC8qIG5vbi1BQkkgKi8KK307CisKICNpZiBkZWZpbmVkKF9fY3BsdXNwbHVz KQogfQogI2VuZGlmCi0tIAoyLjEwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=