From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Bragg Subject: [PATCH 1/9] drm/i915: Add i915 perf infrastructure Date: Wed, 20 Apr 2016 15:23:06 +0100 Message-ID: <1461162194-1424-2-git-send-email-robert@sixbynine.org> References: <1461162194-1424-1-git-send-email-robert@sixbynine.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1461162194-1424-1-git-send-email-robert@sixbynine.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org, Sourab Gupta , Deepak S , Daniel Vetter , Robert Bragg List-Id: intel-gfx@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 YW4gZXJyb3IuCgpTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgQnJhZ2cgPHJvYmVydEBzaXhieW5pbmUu b3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgIHwgICAzICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggIHwgIDg2ICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Bl cmYuYyB8IDQ0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1 ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgIHwgIDY3ICsrKysrKwogNSBmaWxlcyBjaGFuZ2Vk LCA2MDcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcGVyZi5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCAwYjg4YmEwLi4yZjdlZjcx IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtOTgsNiArOTgsOSBAQCBpOTE1LXkgKz0gZHZvX2No NzAxNy5vIFwKICMgdmlydHVhbCBncHUgY29kZQogaTkxNS15ICs9IGk5MTVfdmdwdS5vCiAKKyMg cGVyZiBjb2RlCitpOTE1LXkgKz0gaTkxNV9wZXJmLm8KKwogIyBsZWdhY3kgaG9ycm9ycwogaTkx NS15ICs9IGk5MTVfZG1hLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggYjM3Nzc1My4u YjYyZTI2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0xMDM5LDYgKzEwMzksMTEgQEAg c3RhdGljIGludCBpOTE1X2RyaXZlcl9pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIE11c3QgYXQg bGVhc3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRyeWluZyB0byBwaW4gYW55IGNvbnRleHQKKwkg KiB3aGljaCBpOTE1X3BlcmYgaG9va3MgaW50by4KKwkgKi8KKwlpOTE1X3BlcmZfaW5pdChkZXYp OworCiAJLyogVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IGNhbGxzIHRvIEhBU19QQ0hf KiAqLwogCWludGVsX2RldGVjdF9wY2goZGV2KTsKIApAQCAtMTQyNSw2ICsxNDMwLDggQEAgaW50 IGk5MTVfZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCiAJaTkxNV9kcml2 ZXJfdW5yZWdpc3RlcihkZXZfcHJpdik7CiAKKwlpOTE1X3BlcmZfZmluaShkZXYpOworCiAJZHJt X3ZibGFua19jbGVhbnVwKGRldik7CiAKIAlpbnRlbF9tb2Rlc2V0X2NsZWFudXAoZGV2KTsKQEAg LTE1NzksNiArMTU4Niw3IEBAIGNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpOTE1X2lvY3Rs c1tdID0gewogCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1VTRVJQVFIsIGk5MTVfZ2VtX3Vz ZXJwdHJfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAogCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVf R0VNX0NPTlRFWFRfR0VUUEFSQU0sIGk5MTVfZ2VtX2NvbnRleHRfZ2V0cGFyYW1faW9jdGwsIERS TV9SRU5ERVJfQUxMT1cpLAogCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0NPTlRFWFRfU0VU UEFSQU0sIGk5MTVfZ2VtX2NvbnRleHRfc2V0cGFyYW1faW9jdGwsIERSTV9SRU5ERVJfQUxMT1cp LAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfUEVSRl9PUEVOLCBpOTE1X3BlcmZfb3Blbl9pb2N0 bCwgRFJNX1JFTkRFUl9BTExPVyksCiB9OwogCiBpbnQgaTkxNV9tYXhfaW9jdGwgPSBBUlJBWV9T SVpFKGk5MTVfaW9jdGxzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDg1MTAyYWQuLjVh MmE0ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTcwOCw2ICsxNzA4LDc5IEBAIHN0 cnVjdCBpbnRlbF93bV9jb25maWcgewogCWJvb2wgc3ByaXRlc19zY2FsZWQ7CiB9OwogCitzdHJ1 Y3QgaTkxNV9wZXJmX3JlYWRfc3RhdGUgeworCWludCBjb3VudDsKKwlzc2l6ZV90IHJlYWQ7CisJ Y2hhciBfX3VzZXIgKmJ1ZjsKK307CisKK3N0cnVjdCBpOTE1X3BlcmZfc3RyZWFtIHsKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7 CisKKwl1MzIgc2FtcGxlX2ZsYWdzOworCisJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eDsKKwli b29sIGVuYWJsZWQ7CisKKwkvKiBFbmFibGVzIHRoZSBjb2xsZWN0aW9uIG9mIEhXIHNhbXBsZXMs IGVpdGhlciBpbiByZXNwb25zZSB0bworCSAqIEk5MTVfUEVSRl9JT0NUTF9FTkFCTEUgb3IgaW1w bGljaXRseSBjYWxsZWQgd2hlbiBzdHJlYW0gaXMKKwkgKiBvcGVuZWQgd2l0aG91dCBJOTE1X1BF UkZfRkxBR19ESVNBQkxFRC4KKwkgKi8KKwl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtKTsKKworCS8qIERpc2FibGVzIHRoZSBjb2xsZWN0aW9uIG9mIEhXIHNh bXBsZXMsIGVpdGhlciBpbiByZXNwb25zZSB0bworCSAqIEk5MTVfUEVSRl9JT0NUTF9ESVNBQkxF IG9yIGltcGxpY2l0bHkgY2FsbGVkIGJlZm9yZQorCSAqIGRlc3Ryb3lpbmcgdGhlIHN0cmVhbS4K KwkgKi8KKwl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSk7 CisKKwkvKiBSZXR1cm46IHRydWUgaWYgYW55IGk5MTUgcGVyZiByZWNvcmRzIGFyZSByZWFkeSB0 byByZWFkKCkKKwkgKiBmb3IgdGhpcyBzdHJlYW0uCisJICovCisJYm9vbCAoKmNhbl9yZWFkKShz dHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKTsKKworCS8qIENhbGwgcG9sbF93YWl0LCBw YXNzaW5nIGEgd2FpdCBxdWV1ZSB0aGF0IHdpbGwgYmUgd29rZW4KKwkgKiBvbmNlIHRoZXJlIGlz IHNvbWV0aGluZyByZWFkeSB0byByZWFkKCkgZm9yIHRoZSBzdHJlYW0KKwkgKi8KKwl2b2lkICgq cG9sbF93YWl0KShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorCQkJICBzdHJ1Y3Qg ZmlsZSAqZmlsZSwKKwkJCSAgcG9sbF90YWJsZSAqd2FpdCk7CisKKwkvKiBGb3IgaGFuZGxpbmcg YSBibG9ja2luZyByZWFkLCB3YWl0IHVudGlsIHRoZXJlIGlzIHNvbWV0aGluZworCSAqIHRvIHJl YWR5IHRvIHJlYWQoKSBmb3IgdGhlIHN0cmVhbS4gRS5nLiB3YWl0IG9uIHRoZSBzYW1lCisJICog d2FpdCBxdWV1ZSB0aGF0IHdvdWxkIGJlIHBhc3NlZCB0byBwb2xsX3dhaXQoKSB1bnRpbAorCSAq IC0+Y2FuX3JlYWQoKSByZXR1cm5zIHRydWUgKGlmIGl0cyBzYWZlIHRvIGNhbGwgLT5jYW5fcmVh ZCgpCisJICogd2l0aG91dCB0aGUgaTkxNSBwZXJmIGxvY2sgaGVsZCkuCisJICovCisJaW50ICgq d2FpdF91bmxvY2tlZCkoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSk7CisKKwkvKiBD b3B5IGFzIG1hbnkgYnVmZmVyZWQgaTkxNSBwZXJmIHNhbXBsZXMgYW5kIHJlY29yZHMgZm9yCisJ ICogdGhpcyBzdHJlYW0gdG8gdXNlcnNwYWNlIGFzIHdpbGwgZml0IGluIHRoZSBnaXZlbiBidWZm ZXIuCisJICoKKwkgKiBPbmx5IHdyaXRlIGNvbXBsZXRlIHJlY29yZHMuCisJICoKKwkgKiByZWFk X3N0YXRlLT5jb3VudCBpcyB0aGUgbGVuZ3RoIG9mIHJlYWRfc3RhdGUtPmJ1ZgorCSAqCisJICog VXBkYXRlIHJlYWRfc3RhdGUtPnJlYWQgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4u CisJICoKKwkgKiBSZXR1cm4gYW55IGVycm9yIGNvbmRpdGlvbiB0aGF0IHJlc3VsdHMgaW4gYSBz aG9ydCByZWFkCisJICogc3VjaCBhcyAtRU5PU1BDIG9yIC1FRkFVTFQsIGV2ZW4gdGhvdWdoIHRo ZXNlIG1heSBiZQorCSAqIHNxdWFzaGVkIHRvIDAgYmVmb3JlIHJldHVybmluZyB0byB1c2Vyc3Bh Y2UgKGlmIGF0IGxlYXN0CisJICogb25lIHJlY29yZCB3YXMgc3VjY2Vzc2Z1bGx5IGNvcGllZCwg YXMgZGV0ZXJtaW5lZCB2aWEKKwkgKiB0aGUgcmVhZF9zdGF0ZS0+cmVhZCBsZW5ndGgpCisJICov CisJaW50ICgqcmVhZCkoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJICAgIHN0 cnVjdCBpOTE1X3BlcmZfcmVhZF9zdGF0ZSAqcmVhZF9zdGF0ZSk7CisKKwkvKiBDbGVhbnVwIGFu eSBzdHJlYW0gc3BlY2lmaWMgcmVzb3VyY2VzLgorCSAqCisJICogVGhlIHN0cmVhbSB3aWxsIGFs d2F5cyBiZSBkaXNhYmxlZCBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuCisJICovCisJdm9pZCAoKmRl c3Ryb3kpKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pOworfTsKKwogc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJc3RydWN0IGttZW1f Y2FjaGUgKm9iamVjdHM7CkBAIC0xOTc5LDYgKzIwNTIsMTIgQEAgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgewogCiAJc3RydWN0IGk5MTVfcnVudGltZV9wbSBwbTsKIAorCXN0cnVjdCB7CisJCWJv b2wgaW5pdGlhbGl6ZWQ7CisJCXN0cnVjdCBtdXRleCBsb2NrOworCQlzdHJ1Y3QgbGlzdF9oZWFk IHN0cmVhbXM7CisJfSBwZXJmOworCiAJLyogQWJzdHJhY3QgdGhlIHN1Ym1pc3Npb24gbWVjaGFu aXNtIChsZWdhY3kgcmluZ2J1ZmZlciBvciBleGVjbGlzdHMpIGF3YXkgKi8KIAlzdHJ1Y3Qgewog CQlpbnQgKCpleGVjYnVmX3N1Ym1pdCkoc3RydWN0IGk5MTVfZXhlY2J1ZmZlcl9wYXJhbXMgKnBh cmFtcywKQEAgLTMzMzQsNiArMzQxMyw5IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X2dldHBhcmFt X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiBpbnQgaTkxNV9nZW1f Y29udGV4dF9zZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAogCQkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKK2ludCBpOTE1X3BlcmZf b3Blbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSk7CisKIC8qIGk5MTVfZ2VtX2V2aWN0LmMgKi8KIGludCBfX211c3Rf Y2hlY2sgaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ CQkJCSAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCkBAIC0zNDUwLDYgKzM1MzIsMTAg QEAgaW50IGk5MTVfcGFyc2VfY21kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJ CSAgICB1MzIgYmF0Y2hfbGVuLAogCQkgICAgYm9vbCBpc19tYXN0ZXIpOwogCisvKiBpOTE1X3Bl cmYuYyAqLworZXh0ZXJuIHZvaWQgaTkxNV9wZXJmX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7CitleHRlcm4gdm9pZCBpOTE1X3BlcmZfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK KwogLyogaTkxNV9zdXNwZW5kLmMgKi8KIGV4dGVybiBpbnQgaTkxNV9zYXZlX3N0YXRlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNDM0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwpAQCAtMCwwICsxLDQ0MyBAQAorLyoKKyAqIENvcHly aWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwor ICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5o PgorI2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+CisKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCitz dHJ1Y3QgcGVyZl9vcGVuX3Byb3BlcnRpZXMgeworCXUzMiBzYW1wbGVfZmxhZ3M7CisKKwl1NjQg c2luZ2xlX2NvbnRleHQ6MTsKKwl1NjQgY3R4X2hhbmRsZTsKK307CisKK3N0YXRpYyBzc2l6ZV90 IGk5MTVfcGVyZl9yZWFkX2xvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAor CQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgICBjaGFyIF9fdXNlciAqYnVmLAor CQkJCSAgICAgc2l6ZV90IGNvdW50LAorCQkJCSAgICAgbG9mZl90ICpwcG9zKQoreworCXN0cnVj dCBpOTE1X3BlcmZfcmVhZF9zdGF0ZSBzdGF0ZSA9IHsgY291bnQsIDAsIGJ1ZiB9OworCWludCBy ZXQgPSBzdHJlYW0tPnJlYWQoc3RyZWFtLCAmc3RhdGUpOworCisJaWYgKChyZXQgPT0gLUVOT1NQ QyB8fCByZXQgPT0gLUVGQVVMVCkgJiYgc3RhdGUucmVhZCkKKwkJcmV0ID0gMDsKKworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3RhdGUucmVhZCA/IHN0YXRlLnJlYWQgOiAt RUFHQUlOOworfQorCitzdGF0aWMgc3NpemVfdCBpOTE1X3BlcmZfcmVhZChzdHJ1Y3QgZmlsZSAq ZmlsZSwKKwkJCSAgICAgIGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICBzaXplX3QgY291bnQs CisJCQkgICAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0 cmVhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCXNzaXplX3QgcmV0OworCisJaWYgKCEoZmlsZS0+ Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSB7CisJCS8qIFRoZXJlJ3MgdGhlIHNtYWxsIGNoYW5jZSBv ZiBmYWxzZSBwb3NpdGl2ZXMgZnJvbQorCQkgKiBzdHJlYW0tPndhaXRfdW5sb2NrZWQuCisJCSAq CisJCSAqIEUuZy4gd2l0aCBzaW5nbGUgY29udGV4dCBmaWx0ZXJpbmcgc2luY2Ugd2Ugb25seSB3 YWl0IHVudGlsCisJCSAqIG9hYnVmZmVyIGhhcyA+PSAxIHJlcG9ydCB3ZSBkb24ndCBpbW1lZGlh dGVseSBrbm93IHdoZXRoZXIKKwkJICogYW55IHJlcG9ydHMgcmVhbGx5IGJlbG9uZyB0byB0aGUg Y3VycmVudCBjb250ZXh0CisJCSAqLworCQlkbyB7CisJCQlyZXQgPSBzdHJlYW0tPndhaXRfdW5s b2NrZWQoc3RyZWFtKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKworCQkJbXV0ZXhf bG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7CisJCQlyZXQgPSBpOTE1X3BlcmZfcmVhZF9sb2Nr ZWQoc3RyZWFtLCBmaWxlLAorCQkJCQkJICAgIGJ1ZiwgY291bnQsIHBwb3MpOworCQkJbXV0ZXhf dW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKwkJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4p OworCX0gZWxzZSB7CisJCW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCQlyZXQg PSBpOTE1X3BlcmZfcmVhZF9sb2NrZWQoc3RyZWFtLCBmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsK KwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKwl9CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGk5MTVfcGVyZl9wb2xsX2xvY2tlZChzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJ CQkgIHBvbGxfdGFibGUgKndhaXQpCit7CisJdW5zaWduZWQgaW50IHN0cmVhbXMgPSAwOworCisJ c3RyZWFtLT5wb2xsX3dhaXQoc3RyZWFtLCBmaWxlLCB3YWl0KTsKKworCWlmIChzdHJlYW0tPmNh bl9yZWFkKHN0cmVhbSkpCisJCXN0cmVhbXMgfD0gUE9MTElOOworCisJcmV0dXJuIHN0cmVhbXM7 Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV9wZXJmX3BvbGwoc3RydWN0IGZpbGUgKmZp bGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBzdHJlYW0tPmRldl9wcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXZfcHJp di0+cGVyZi5sb2NrKTsKKwlyZXQgPSBpOTE1X3BlcmZfcG9sbF9sb2NrZWQoc3RyZWFtLCBmaWxl LCB3YWl0KTsKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wZXJmX2VuYWJsZV9sb2NrZWQoc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKK3sKKwlpZiAoc3RyZWFtLT5lbmFibGVkKQorCQlyZXR1 cm47CisKKwkvKiBBbGxvdyBzdHJlYW0tPmVuYWJsZSgpIHRvIHJlZmVyIHRvIHRoaXMgKi8KKwlz dHJlYW0tPmVuYWJsZWQgPSB0cnVlOworCisJaWYgKHN0cmVhbS0+ZW5hYmxlKQorCQlzdHJlYW0t PmVuYWJsZShzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BlcmZfZGlzYWJsZV9sb2Nr ZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKK3sKKwlpZiAoIXN0cmVhbS0+ZW5h YmxlZCkKKwkJcmV0dXJuOworCisJLyogQWxsb3cgc3RyZWFtLT5kaXNhYmxlKCkgdG8gcmVmZXIg dG8gdGhpcyAqLworCXN0cmVhbS0+ZW5hYmxlZCA9IGZhbHNlOworCisJaWYgKHN0cmVhbS0+ZGlz YWJsZSkKKwkJc3RyZWFtLT5kaXNhYmxlKHN0cmVhbSk7Cit9CisKK3N0YXRpYyBsb25nIGk5MTVf cGVyZl9pb2N0bF9sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCQkg ICB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRj aCAoY21kKSB7CisJY2FzZSBJOTE1X1BFUkZfSU9DVExfRU5BQkxFOgorCQlpOTE1X3BlcmZfZW5h YmxlX2xvY2tlZChzdHJlYW0pOworCQlyZXR1cm4gMDsKKwljYXNlIEk5MTVfUEVSRl9JT0NUTF9E SVNBQkxFOgorCQlpOTE1X3BlcmZfZGlzYWJsZV9sb2NrZWQoc3RyZWFtKTsKKwkJcmV0dXJuIDA7 CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBsb25nIGk5MTVfcGVyZl9pb2N0 bChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgIHVu c2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0gPSBm aWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g c3RyZWFtLT5kZXZfcHJpdjsKKwlsb25nIHJldDsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5w ZXJmLmxvY2spOworCXJldCA9IGk5MTVfcGVyZl9pb2N0bF9sb2NrZWQoc3RyZWFtLCBjbWQsIGFy Zyk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcGVyZl9kZXN0cm95X2xvY2tlZChzdHJ1Y3QgaTkxNV9w ZXJmX3N0cmVhbSAqc3RyZWFtKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHN0cmVhbS0+ZGV2X3ByaXY7CisKKwlpZiAoc3RyZWFtLT5lbmFibGVkKQorCQlpOTE1X3Bl cmZfZGlzYWJsZV9sb2NrZWQoc3RyZWFtKTsKKworCWlmIChzdHJlYW0tPmRlc3Ryb3kpCisJCXN0 cmVhbS0+ZGVzdHJveShzdHJlYW0pOworCisJbGlzdF9kZWwoJnN0cmVhbS0+bGluayk7CisKKwlp ZiAoc3RyZWFtLT5jdHgpIHsKKwkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRldi0+c3RydWN0X211 dGV4KTsKKwkJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShzdHJlYW0tPmN0eCk7CisJCW11 dGV4X3VubG9jaygmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KTsKKwl9CisKKwlrZnJlZShz dHJlYW0pOworfQorCitzdGF0aWMgaW50IGk5MTVfcGVyZl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpz dHJlYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJm LmxvY2spOworCWk5MTVfcGVyZl9kZXN0cm95X2xvY2tlZChzdHJlYW0pOworCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPnBlcmYubG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29u c3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVM RSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkucmVsZWFzZQk9IGk5MTVfcGVyZl9yZWxlYXNl LAorCS5wb2xsCQk9IGk5MTVfcGVyZl9wb2xsLAorCS5yZWFkCQk9IGk5MTVfcGVyZl9yZWFkLAor CS51bmxvY2tlZF9pb2N0bAk9IGk5MTVfcGVyZl9pb2N0bCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qg aW50ZWxfY29udGV4dCAqCitsb29rdXBfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCisJICAgICAgIHN0cnVjdCBmaWxlICp1c2VyX2ZpbHAsCisJICAgICAgIHUzMiBj dHhfdXNlcl9oYW5kbGUpCit7CisJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eDsKKworCW11dGV4 X2xvY2soJmRldl9wcml2LT5kZXYtPnN0cnVjdF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRy eShjdHgsICZkZXZfcHJpdi0+Y29udGV4dF9saXN0LCBsaW5rKSB7CisJCXN0cnVjdCBkcm1fZmls ZSAqZHJtX2ZpbGU7CisKKwkJaWYgKCFjdHgtPmZpbGVfcHJpdikKKwkJCWNvbnRpbnVlOworCisJ CWRybV9maWxlID0gY3R4LT5maWxlX3ByaXYtPmZpbGU7CisKKwkJaWYgKHVzZXJfZmlscC0+cHJp dmF0ZV9kYXRhID09IGRybV9maWxlICYmCisJCSAgICBjdHgtPnVzZXJfaGFuZGxlID09IGN0eF91 c2VyX2hhbmRsZSkgeworCQkJaTkxNV9nZW1fY29udGV4dF9yZWZlcmVuY2UoY3R4KTsKKwkJCW11 dGV4X3VubG9jaygmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KTsKKworCQkJcmV0dXJuIGN0 eDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kZXYtPnN0cnVjdF9tdXRleCk7 CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IGk5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFy YW0gKnBhcmFtLAorCQkJCXN0cnVjdCBwZXJmX29wZW5fcHJvcGVydGllcyAqcHJvcHMsCisJCQkJ c3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2NvbnRleHQgKnNwZWNpZmlj X2N0eCA9IE5VTEw7CisJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJ dW5zaWduZWQgbG9uZyBmX2ZsYWdzID0gMDsKKwlpbnQgc3RyZWFtX2ZkOworCWludCByZXQgPSAw OworCisJaWYgKHByb3BzLT5zaW5nbGVfY29udGV4dCkgeworCQl1MzIgY3R4X2hhbmRsZSA9IHBy b3BzLT5jdHhfaGFuZGxlOworCisJCXNwZWNpZmljX2N0eCA9IGxvb2t1cF9jb250ZXh0KGRldl9w cml2LCBmaWxlLT5maWxwLCBjdHhfaGFuZGxlKTsKKwkJaWYgKCFzcGVjaWZpY19jdHgpIHsKKwkJ CURSTV9FUlJPUigiRmFpbGVkIHRvIGxvb2sgdXAgY29udGV4dCB3aXRoIElEICV1IGZvciBvcGVu aW5nIHBlcmYgc3RyZWFtXG4iLAorCQkJCSAgY3R4X2hhbmRsZSk7CisJCQlyZXQgPSAtRUlOVkFM OworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAoIXNwZWNpZmljX2N0eCAmJiAhY2FwYWJs ZShDQVBfU1lTX0FETUlOKSkgeworCQlEUk1fRVJST1IoIkluc3VmZmljaWVudCBwcml2aWxlZ2Vz IHRvIG9wZW4gc3lzdGVtLXdpZGUgaTkxNSBwZXJmIHN0cmVhbVxuIik7CisJCXJldCA9IC1FQUND RVM7CisJCWdvdG8gZXJyX2N0eDsKKwl9CisKKwlzdHJlYW0gPSBremFsbG9jKHNpemVvZigqc3Ry ZWFtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdHJlYW0pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJ Z290byBlcnJfY3R4OworCX0KKworCXN0cmVhbS0+c2FtcGxlX2ZsYWdzID0gcHJvcHMtPnNhbXBs ZV9mbGFnczsKKwlzdHJlYW0tPmRldl9wcml2ID0gZGV2X3ByaXY7CisJc3RyZWFtLT5jdHggPSBz cGVjaWZpY19jdHg7CisKKwkvKgorCSAqIFRPRE86IHN1cHBvcnQgc2FtcGxpbmcgc29tZXRoaW5n CisJICoKKwkgKiBGb3Igbm93IHRoaXMgaXMgYXMgZmFyIGFzIHdlIGNhbiBnby4KKwkgKi8KKwlE Uk1fRVJST1IoIlVuc3VwcG9ydGVkIGk5MTUgcGVyZiBzdHJlYW0gY29uZmlndXJhdGlvblxuIik7 CisJcmV0ID0gLUVJTlZBTDsKKwlnb3RvIGVycl9hbGxvYzsKKworCWxpc3RfYWRkKCZzdHJlYW0t PmxpbmssICZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zKTsKKworCWlmIChwYXJhbS0+ZmxhZ3MgJiBJ OTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDKQorCQlmX2ZsYWdzIHw9IE9fQ0xPRVhFQzsKKwlpZiAo cGFyYW0tPmZsYWdzICYgSTkxNV9QRVJGX0ZMQUdfRkRfTk9OQkxPQ0spCisJCWZfZmxhZ3MgfD0g T19OT05CTE9DSzsKKworCXN0cmVhbV9mZCA9IGFub25faW5vZGVfZ2V0ZmQoIltpOTE1X3BlcmZd IiwgJmZvcHMsIHN0cmVhbSwgZl9mbGFncyk7CisJaWYgKHN0cmVhbV9mZCA8IDApIHsKKwkJcmV0 ID0gc3RyZWFtX2ZkOworCQlnb3RvIGVycl9vcGVuOworCX0KKworCWlmICghKHBhcmFtLT5mbGFn cyAmIEk5MTVfUEVSRl9GTEFHX0RJU0FCTEVEKSkKKwkJaTkxNV9wZXJmX2VuYWJsZV9sb2NrZWQo c3RyZWFtKTsKKworCXJldHVybiBzdHJlYW1fZmQ7CisKK2Vycl9vcGVuOgorCWxpc3RfZGVsKCZz dHJlYW0tPmxpbmspOworCWlmIChzdHJlYW0tPmRlc3Ryb3kpCisJCXN0cmVhbS0+ZGVzdHJveShz dHJlYW0pOworZXJyX2FsbG9jOgorCWtmcmVlKHN0cmVhbSk7CitlcnJfY3R4OgorCWlmIChzcGVj aWZpY19jdHgpIHsKKwkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KTsK KwkJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShzcGVjaWZpY19jdHgpOworCQltdXRleF91 bmxvY2soJmRldl9wcml2LT5kZXYtPnN0cnVjdF9tdXRleCk7CisJfQorZXJyOgorCXJldHVybiBy ZXQ7Cit9CisKKy8qIE5vdGUgd2UgY29weSB0aGUgcHJvcGVydGllcyBmcm9tIHVzZXJzcGFjZSBv dXRzaWRlIG9mIHRoZSBpOTE1IHBlcmYKKyAqIG11dGV4IHRvIGF2b2lkIGFuIGF3a3dhcmQgbG9j a2RlcCB3aXRoIG1tYXBfc2VtLgorICoKKyAqIE5vdGUgdGhpcyBmdW5jdGlvbiBvbmx5IHZhbGlk YXRlcyBwcm9wZXJ0aWVzIGluIGlzb2xhdGlvbiBpdCBkb2Vzbid0CisgKiB2YWxpZGF0ZSB0aGF0 IHRoZSBjb21iaW5hdGlvbiBvZiBwcm9wZXJ0aWVzIG1ha2VzIHNlbnNlIG9yIHRoYXQgYWxsCisg KiBwcm9wZXJ0aWVzIG5lY2Vzc2FyeSBmb3IgYSBwYXJ0aWN1bGFyIGtpbmQgb2Ygc3RyZWFtIGhh dmUgYmVlbiBzZXQuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9wcm9wZXJ0aWVzX3VubG9ja2VkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgdTY0IF9fdXNlciAqdXBy b3BzLAorCQkJCSAgICB1MzIgbl9wcm9wcywKKwkJCQkgICAgc3RydWN0IHBlcmZfb3Blbl9wcm9w ZXJ0aWVzICpwcm9wcykKK3sKKwl1NjQgX191c2VyICp1cHJvcCA9IHVwcm9wczsKKwlpbnQgaTsK KworCW1lbXNldChwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBwZXJmX29wZW5fcHJvcGVydGllcykp OworCisJaWYgKCFuX3Byb3BzKSB7CisJCURSTV9FUlJPUigiTm8gaTkxNSBwZXJmIHByb3BlcnRp ZXMgZ2l2ZW4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG5fcHJvcHMgPiBEUk1f STkxNV9QRVJGX1BST1BfTUFYKSB7CisJCURSTV9FUlJPUigiTW9yZSBpOTE1IHBlcmYgcHJvcGVy dGllcyBzcGVjaWZpZWQgdGhhbiBleGlzdCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgbl9wcm9wczsgaSsrKSB7CisJCXU2NCBpZCwgdmFsdWU7CisJCWludCBy ZXQ7CisKKwkJcmV0ID0gZ2V0X3VzZXIoaWQsICh1NjQgX191c2VyICopdXByb3ApOworCQlpZiAo cmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoaWQgPT0gMCB8fCBpZCA+PSBEUk1fSTkxNV9Q RVJGX1BST1BfTUFYKSB7CisJCQlEUk1fRVJST1IoIlVua25vd24gaTkxNSBwZXJmIHByb3BlcnR5 IElEIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldCA9IGdldF91c2VyKHZhbHVl LCAodTY0IF9fdXNlciAqKXVwcm9wICsgMSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0Owor CisJCXN3aXRjaCAoKGVudW0gZHJtX2k5MTVfcGVyZl9wcm9wZXJ0eV9pZClpZCkgeworCQljYXNl IERSTV9JOTE1X1BFUkZfUFJPUF9DVFhfSEFORExFOgorCQkJcHJvcHMtPnNpbmdsZV9jb250ZXh0 ID0gMTsKKwkJCXByb3BzLT5jdHhfaGFuZGxlID0gdmFsdWU7CisJCQlicmVhazsKKworCQljYXNl IERSTV9JOTE1X1BFUkZfUFJPUF9NQVg6CisJCQlCVUcoKTsKKwkJfQorCisJCXVwcm9wICs9IDI7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBpOTE1X3BlcmZfb3Blbl9pb2N0bChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCXN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0gKnBhcmFtID0gZGF0YTsKKwlzdHJ1 Y3QgcGVyZl9vcGVuX3Byb3BlcnRpZXMgcHJvcHM7CisJdTMyIGtub3duX29wZW5fZmxhZ3MgPSAw OworCWludCByZXQ7CisKKwlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkKSB7CisJCURS TV9FUlJPUigiaTkxNSBwZXJmIGludGVyZmFjZSBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHN5c3Rl bSIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCWtub3duX29wZW5fZmxhZ3MgPSBJOTE1 X1BFUkZfRkxBR19GRF9DTE9FWEVDIHwKKwkJCSAgIEk5MTVfUEVSRl9GTEFHX0ZEX05PTkJMT0NL IHwKKwkJCSAgIEk5MTVfUEVSRl9GTEFHX0RJU0FCTEVEOworCWlmIChwYXJhbS0+ZmxhZ3MgJiB+ a25vd25fb3Blbl9mbGFncykgeworCQlEUk1fRVJST1IoIlVua25vd24gZHJtX2k5MTVfcGVyZl9v cGVuX3BhcmFtIGZsYWdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSByZWFk X3Byb3BlcnRpZXNfdW5sb2NrZWQoZGV2X3ByaXYsCisJCQkJICAgICAgIHRvX3VzZXJfcHRyKHBh cmFtLT5wcm9wZXJ0aWVzX3B0ciksCisJCQkJICAgICAgIHBhcmFtLT5udW1fcHJvcGVydGllcywK KwkJCQkgICAgICAgJnByb3BzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhf bG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7CisJcmV0ID0gaTkxNV9wZXJmX29wZW5faW9jdGxf bG9ja2VkKGRldiwgcGFyYW0sICZwcm9wcywgZmlsZSk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJp di0+cGVyZi5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaTkxNV9wZXJmX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGRldik7CisKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnBlcmYu c3RyZWFtcyk7CisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBlcmYubG9jayk7CisKKwlkZXZfcHJp di0+cGVyZi5pbml0aWFsaXplZCA9IHRydWU7Cit9CisKK3ZvaWQgaTkxNV9wZXJmX2Zpbmkoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7CisKKwlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkKQor CQlyZXR1cm47CisKKwkvKiBDdXJyZW50bHkgbm90aGluZyB0byBjbGVhbiB1cCAqLworCisJZGV2 X3ByaXYtPnBlcmYuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUv dWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAppbmRleCBh NTUyNGNjLi45NjJjYzk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgK KysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCkBAIC0yMzAsNiArMjMwLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X3NhcmVhIHsKICNkZWZpbmUgRFJNX0k5MTVfR0VNX1VTRVJQ VFIJCTB4MzMKICNkZWZpbmUgRFJNX0k5MTVfR0VNX0NPTlRFWFRfR0VUUEFSQU0JMHgzNAogI2Rl ZmluZSBEUk1fSTkxNV9HRU1fQ09OVEVYVF9TRVRQQVJBTQkweDM1CisjZGVmaW5lIERSTV9JOTE1 X1BFUkZfT1BFTgkJMHgzNgogCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0lOSVQJCURSTV9JT1co IERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9JTklULCBkcm1faTkxNV9pbml0X3QpCiAjZGVm aW5lIERSTV9JT0NUTF9JOTE1X0ZMVVNICQlEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJN X0k5MTVfRkxVU0gpCkBAIC0yODMsNiArMjg0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1 X3NhcmVhIHsKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1VTRVJQVFIJCQlEUk1fSU9XUiAo RFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9VU0VSUFRSLCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3VzZXJwdHIpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9DT05URVhUX0dFVFBBUkFN CURSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0NPTlRFWFRfR0VUUEFS QU0sIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSkKICNkZWZpbmUgRFJNX0lPQ1RM X0k5MTVfR0VNX0NPTlRFWFRfU0VUUEFSQU0JRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBE Uk1fSTkxNV9HRU1fQ09OVEVYVF9TRVRQQVJBTSwgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0 X3BhcmFtKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4JRFJNX0lPV1IoRFJNX0NP TU1BTkRfQkFTRSArIERSTV9JOTE1X1BFUkZfT1BFTiwgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Bl bl9wYXJhbSkKIAogLyogQWxsb3cgZHJpdmVycyB0byBzdWJtaXQgYmF0Y2hidWZmZXJzIGRpcmVj dGx5IHRvIGhhcmR3YXJlLCByZWx5aW5nCiAgKiBvbiB0aGUgc2VjdXJpdHkgbWVjaGFuaXNtcyBw cm92aWRlZCBieSBoYXJkd2FyZS4KQEAgLTExNzAsNCArMTE3Miw2OSBAQCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2NvbnRleHRfcGFyYW0gewogCV9fdTY0IHZhbHVlOwogfTsKIAorZW51bSBkcm1faTkx NV9wZXJmX3Byb3BlcnR5X2lkIHsKKwkvKioKKwkgKiBPcGVuIHRoZSBzdHJlYW0gZm9yIGEgc3Bl Y2lmaWMgY29udGV4dCBoYW5kbGUgKGFzIHVzZWQgd2l0aAorCSAqIGV4ZWNidWZmZXIyKS4gQSBz dHJlYW0gb3BlbmVkIGZvciBhIHNwZWNpZmljIGNvbnRleHQgdGhpcyB3YXkKKwkgKiB3b24ndCB0 eXBpY2FsbHkgcmVxdWlyZSByb290IHByaXZpbGVnZXMuCisJICovCisJRFJNX0k5MTVfUEVSRl9Q Uk9QX0NUWF9IQU5ETEUgPSAxLAorCisJRFJNX0k5MTVfUEVSRl9QUk9QX01BWCAvKiBub24tQUJJ ICovCit9OworCitzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtIHsKKwlfX3UzMiBmbGFn czsKKyNkZWZpbmUgSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQwkoMTw8MCkKKyNkZWZpbmUgSTkx NV9QRVJGX0ZMQUdfRkRfTk9OQkxPQ0sJKDE8PDEpCisjZGVmaW5lIEk5MTVfUEVSRl9GTEFHX0RJ U0FCTEVECQkoMTw8MikKKworCS8qKiBUaGUgbnVtYmVyIG9mIHU2NCAoaWQsIHZhbHVlKSBwYWly cyAqLworCV9fdTMyIG51bV9wcm9wZXJ0aWVzOworCisJLyoqCisJICogUG9pbnRlciB0byBhcnJh eSBvZiB1NjQgKGlkLCB2YWx1ZSkgcGFpcnMgY29uZmlndXJpbmcgdGhlIHN0cmVhbQorCSAqIHRv IG9wZW4uCisJICovCisJX191NjQgX191c2VyIHByb3BlcnRpZXNfcHRyOworfTsKKworI2RlZmlu ZSBJOTE1X1BFUkZfSU9DVExfRU5BQkxFCV9JTygnaScsIDB4MCkKKyNkZWZpbmUgSTkxNV9QRVJG X0lPQ1RMX0RJU0FCTEUJX0lPKCdpJywgMHgxKQorCisvKioKKyAqIENvbW1vbiB0byBhbGwgaTkx NSBwZXJmIHJlY29yZHMKKyAqLworc3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRlciB7 CisJX191MzIgdHlwZTsKKwlfX3UxNiBwYWQ7CisJX191MTYgc2l6ZTsKK307CisKK2VudW0gZHJt X2k5MTVfcGVyZl9yZWNvcmRfdHlwZSB7CisKKwkvKioKKwkgKiBTYW1wbGVzIGFyZSB0aGUgd29y ayBob3JzZSByZWNvcmQgdHlwZSB3aG9zZSBjb250ZW50cyBhcmUgZXh0ZW5zaWJsZQorCSAqIGFu ZCBkZWZpbmVkIHdoZW4gb3BlbmluZyBhbiBpOTE1IHBlcmYgc3RyZWFtIGJhc2VkIG9uIHRoZSBn aXZlbgorCSAqIHByb3BlcnRpZXMuCisJICoKKwkgKiBCb29sZWFuIHByb3BlcnRpZXMgZm9sbG93 aW5nIHRoZSBuYW1pbmcgY29udmVudGlvbgorCSAqIERSTV9JOTE1X1BFUkZfU0FNUExFX3h5el9Q Uk9QIHJlcXVlc3QgdGhlIGluY2x1c2lvbiBvZiAneHl6JyBkYXRhIGluCisJICogZXZlcnkgc2Ft cGxlLgorCSAqCisJICogVGhlIG9yZGVyIG9mIHRoZXNlIHNhbXBsZSBwcm9wZXJ0aWVzIGdpdmVu IGJ5IHVzZXJzcGFjZSBoYXMgbm8KKwkgKiBhZmZlY3Qgb24gdGhlIG9yZGVyaW5nIG9mIGRhdGEg d2l0aGluIGEgc2FtcGxlLiBUaGUgb3JkZXIgd2lsbCBiZQorCSAqIGRvY3VtZW50ZWQgaGVyZS4K KwkgKgorCSAqIHN0cnVjdCB7CisJICogICAgIHN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29yZF9o ZWFkZXIgaGVhZGVyOworCSAqCisJICogICAgIFRPRE86IGl0ZW1pemUgZXh0ZW5zaWJsZSBzYW1w bGUgZGF0YSBoZXJlCisJICogfTsKKwkgKi8KKwlEUk1fSTkxNV9QRVJGX1JFQ09SRF9TQU1QTEUg PSAxLAorCisJRFJNX0k5MTVfUEVSRl9SRUNPUkRfTUFYIC8qIG5vbi1BQkkgKi8KK307CisKICNl bmRpZiAvKiBfVUFQSV9JOTE1X0RSTV9IXyAqLwotLSAKMi43LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=