From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 382116E7AA for ; Wed, 14 Aug 2019 17:42:36 +0000 (UTC) From: Anshuman Gupta Date: Wed, 14 Aug 2019 23:09:04 +0530 Message-Id: <20190814173904.4279-1-anshuman.gupta@intel.com> In-Reply-To: <20190621154252.27952-2-anshuman.gupta@intel.com> References: <20190621154252.27952-2-anshuman.gupta@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v12 1/6] lib/igt_pm: igt lib helper routines to support DC5/6 tests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Jyoti Yadav List-ID: RnJvbTogSnlvdGkgWWFkYXYgPGp5b3RpLnIueWFkYXZAaW50ZWwuY29tPgoKVGhpcyBwYXRjaCBk b2VzIHRoZSBmb2xsb3dpbmcgY2huZWdzIHRvIGxpYi9pZ3RfcG0uYwoKLWRtY19sb2FkZWQoKSB3 aWxsIGJlIHVzZWQgYnkgbmV3IHRlc3QgaTkxNV9wbV9kYy5jIHdoaWNoIHdpbGwgdmFsaWRhdGUK IERpc3BsYXkgQyBTdGF0ZXMuIFNvIG1vdmluZyB0aGUgc2FtZSB0byBpZ3RfcG0gbGlicmFyeS4K Ci1JbnRyb2R1Y2VkIGlndF9kaXNhYmxlX3J1bnRpbWVfcG0oKSBpbiBvcmRlciB0byBkaXNhYmxl IHJ1bnRpbWUgc3VzcGVuZAogZm9yIHRoZSBmdW5jdGlvbiB3aGljaCBzdXBwb3J0IGRjOS4KCi1D aGFuZ2VkIHRoZSBpZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KCkgYW5k CiBpZ3RfcG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCgpIGluIG9yZGVyIHRv IHNhdmUKIGFuZCByZXN0b3JlIHRoZSBzYXRhIGxpbmsgcG93ZXIgcG9saWN5IGJ5IGFuIGV4aXQg aGFuZGxlci4KCnYyOiBTaW1wbGlmeSB0aGUgY29tbWVudCBzZWN0aW9uLgp2MzogUmVtb3ZlIC4g ZnJvbSB0aGUgc3ViamVjdCBsaW5lLgp2NDogUmViYXNlZCwgcmVzb2x2ZSBjb25mbGljdHMgaW4g cG1fcnBtLmMKICAgIEluY2x1ZGVkIHBhdGNoIHNldCB2ZXJzaW9uIGNoYW5nZSBsb2cuCnY1OiBM aXN0aW5nIGFjdHVhbCBjaGFuZ2UgaW4gcGF0Y2ggc2V0IGNoYW5nZWxvZyB0byBtYWtlIHJldmll dyBlYXNpZXIuCnY2OiBpZ3QncyBsaWIgYWRkZWQgc3VwcG9ydCBmb3IgZGlzYWJsaW5nIHJ1bnRp bWUgc3VzcGVuZCwKICAgIGNoYW5nZSBpbiBjb21taXQgbG9nLiByZWJhc2VkIGR1ZSB0byB0ZXN0 IG5hbWUgcG1fcnBtIGNoYW5nZWQKICAgIHRvIGk5MTVfcG1fcnBtLgp2NzogQWRkcmVzc2VkIHJl dmlldyBjb21tZW50IGJ5IHNhdmluZyBQT1dFUl9ESVIgdmFsdWVzIGluCiAgICBpZ3RfZGlzYWJs ZV9ydW50aW1lX3BtKCkuIFtJbXJlXQp2ODogQWRkcmVzc2VkIHRoZSByZXZpZXcgY29tbWVudCwg aWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudAogICAgZnVuY3Rpb24gdG8g cmVzdG9yZSB0aGUgb3JpZ2luYWwgU0FUQSBsaW5rIHBvd2VyIHBvbGljeSBpZiB0aGluZ3MgZmFp bAogICAgYnkgdXNpbmcgYW4gZXhpdCBoYW5kbGVyLiBbSW1yZV0Kdjk6IElHVCBmYWlsdXJlIGZp eHR1cmUgaW4gaTkxNV9wbV9iYWNrbGlnaHQgYW5kIGk5MTVfcG1fcnBtLgp2MTA6UmV2aWV3IGNv bW1lbnQgZml4dXAgaW4gc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQKICAgIGxpYiBmdW5jdGlv bnMuIFtJbXJlXQoKU2lnbmVkLW9mZi1ieTogSnlvdGkgWWFkYXYgPGp5b3RpLnIueWFkYXZAaW50 ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBBbnNodW1hbiBHdXB0YSA8YW5zaHVtYW4uZ3VwdGFAaW50 ZWwuY29tPgotLS0KIGxpYi9pZ3RfcG0uYyAgICAgICAgICAgICAgICAgICB8IDIzOCArKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0KIGxpYi9pZ3RfcG0uaCAgICAgICAgICAgICAgICAg ICB8ICAgNiArLQogdGVzdHMvaTkxNS9pOTE1X3BtX2JhY2tsaWdodC5jIHwgICA2ICstCiB0ZXN0 cy9pOTE1L2k5MTVfcG1fcnBtLmMgICAgICAgfCAgMjQgKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAx ODkgaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9w bS5jIGIvbGliL2lndF9wbS5jCmluZGV4IGZkMjIyNzNhLi4yYTQzOTcwMCAxMDA2NDQKLS0tIGEv bGliL2lndF9wbS5jCisrKyBiL2xpYi9pZ3RfcG0uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1 ZGUgImRybXRlc3QuaCIKICNpbmNsdWRlICJpZ3RfcG0uaCIKICNpbmNsdWRlICJpZ3RfYXV4Lmgi CisjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCiAKIC8qKgogICogU0VDVElPTjppZ3RfcG0KQEAgLTYz LDExICs2NCwxNSBAQCBlbnVtIHsKICNkZWZpbmUgTUlOX1BPV0VSX1NUUgkJIm1pbl9wb3dlclxu IgogLyogUmVtZW1iZXIgdG8gZml4IHRoaXMgaWYgYWRkaW5nIGxvbmdlciBzdHJpbmdzICovCiAj ZGVmaW5lIE1BWF9QT0xJQ1lfU1RSTEVOCXN0cmxlbihNQVhfUEVSRk9STUFOQ0VfU1RSKQoraW50 OF90ICpfX3NhdGFfcG1fcG9saWNpZXM7CiAKIHN0YXRpYyBjaGFyIF9faWd0X3BtX2F1ZGlvX3J1 bnRpbWVfcG93ZXJfc2F2ZVs2NF07CiBzdGF0aWMgY2hhciAqIF9faWd0X3BtX2F1ZGlvX3J1bnRp bWVfY29udHJvbF9wYXRoOwogc3RhdGljIGNoYXIgX19pZ3RfcG1fYXVkaW9fcnVudGltZV9jb250 cm9sWzY0XTsKIAorc3RhdGljIHZvaWQgX19pZ3RfcG1fc2F0YV9saW5rX3BtX2V4aXRfaGFuZGxl cihpbnQgc2lnKTsKK3N0YXRpYyB2b2lkIF9faWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2Vy X21hbmFnZW1lbnQodm9pZCk7CisKIHN0YXRpYyBpbnQgX19pZ3RfcG1fYXVkaW9fcmVzdG9yZV9y dW50aW1lX3BtKHZvaWQpCiB7CiAJaW50IGZkOwpAQCAtMjgwLDY0ICsyODUsNzIgQEAgdm9pZCBp Z3RfcG1fZW5hYmxlX2F1ZGlvX3J1bnRpbWVfcG0odm9pZCkKIAkJaWd0X2RlYnVnKCJGYWlsZWQg dG8gZW5hYmxlIGF1ZGlvIHJ1bnRpbWUgUE0hICglZClcbiIsIC1lcnIpOwogfQogCi0vKioKLSAq IGlndF9wbV9lbmFibGVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQ6Ci0gKgotICogRW5hYmxl IHRoZSBtaW5fcG93ZXIgcG9saWN5IGZvciBTQVRBIGxpbmsgcG93ZXIgbWFuYWdlbWVudC4KLSAq IFdpdGhvdXQgdGhpcyB3ZSBjYW5ub3QgcmVhY2ggZGVlcCBydW50aW1lIHBvd2VyIHN0YXRlcy4K LSAqCi0gKiBXZSBkb24ndCBoYXZlIGFueSBhc3NlcnRpb25zIG9uIG9wZW4gc2luY2UgdGhlIHN5 c3RlbSBtaWdodCBub3QgaGF2ZQotICogYSBTQVRBIGhvc3QuCi0gKgotICogUmV0dXJuczoKLSAq IEFuIG9wYXF1ZSBwb2ludGVyIHRvIHRoZSBkYXRhIG5lZWRlZCB0byByZXN0b3JlIHRoZSBkZWZh dWx0IHZhbHVlcwotICogYWZ0ZXIgdGhlIHRlc3QgaGFzIHRlcm1pbmF0ZWQsIG9yIE5VTEwgaWYg U0FUQSBsaW5rIHBvd2VyIG1hbmFnZW1lbnQKLSAqIGlzIG5vdCBzdXBwb3J0ZWQuIFRoaXMgcG9p bnRlciBzaG91bGQgYmUgZnJlZWQgd2hlbiBubyBsb25nZXIgdXNlZAotICogKHR5cGljYWxseSBh ZnRlciBoYXZpbmcgY2FsbGVkIHJlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoKSku Ci0gKi8KLWludDhfdCAqaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCh2 b2lkKQorc3RhdGljIGludDhfdCBnZXRfc2F0YV9wb2xpY3lfZm9yX2hvc3QoaW50IGZkLCBjaGFy ICpidWYsIGludCBpKQogewotCWludCBmZCwgaTsKKwlpbnQ4X3QgcG9saWN5OwogCXNzaXplX3Qg bGVuOworCisJbGVuID0gcmVhZChmZCwgYnVmLCBNQVhfUE9MSUNZX1NUUkxFTik7CisJYnVmW2xl bl0gPSAnXDAnOworCisJaWYgKCFzdHJuY21wKE1BWF9QRVJGT1JNQU5DRV9TVFIsIGJ1ZiwKKwkJ ICAgICBzdHJsZW4oTUFYX1BFUkZPUk1BTkNFX1NUUikpKQorCQlwb2xpY3kgPSBQT0xJQ1lfTUFY X1BFUkZPUk1BTkNFOworCWVsc2UgaWYgKCFzdHJuY21wKE1FRElVTV9QT1dFUl9TVFIsIGJ1ZiwK KwkJCSAgc3RybGVuKE1FRElVTV9QT1dFUl9TVFIpKSkKKwkJcG9saWN5ID0gUE9MSUNZX01FRElV TV9QT1dFUjsKKwllbHNlIGlmICghc3RybmNtcChNSU5fUE9XRVJfU1RSLCBidWYsCisJCQkgIHN0 cmxlbihNSU5fUE9XRVJfU1RSKSkpCisJCXBvbGljeSA9IFBPTElDWV9NSU5fUE9XRVI7CisJZWxz ZQorCQlwb2xpY3kgPSBQT0xJQ1lfVU5LTk9XTjsKKworCXJldHVybiBwb2xpY3k7Cit9CisKK3N0 YXRpYyB2b2lkIF9faWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCh2b2lk KQoreworCWludCBmZCwgaTsKIAljaGFyICpidWY7CiAJY2hhciAqZmlsZV9uYW1lOwotCWludDhf dCAqbGlua19wbV9wb2xpY2llcyA9IE5VTEw7CisJaW50OF90IHBvbGljeTsKIAogCWZpbGVfbmFt ZSA9IG1hbGxvYyhQQVRIX01BWCk7CiAJYnVmID0gbWFsbG9jKE1BWF9QT0xJQ1lfU1RSTEVOICsg MSk7CiAKIAlmb3IgKGkgPSAwOyA7IGkrKykgewotCQlpbnQ4X3QgcG9saWN5OwotCiAJCXNucHJp bnRmKGZpbGVfbmFtZSwgUEFUSF9NQVgsCiAJCQkgIi9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3Ql ZC9saW5rX3Bvd2VyX21hbmFnZW1lbnRfcG9saWN5IiwKIAkJCSBpKTsKIAorCQkvKgorCQkgKiBX ZSBkb24ndCBoYXZlIGFueSBhc3NlcnRpb25zIG9uIG9wZW4gc2luY2UgdGhlIHN5c3RlbQorCQkg KiBtaWdodCBub3QgaGF2ZSBhIFNBVEEgaG9zdC4KKwkJICovCiAJCWZkID0gb3BlbihmaWxlX25h bWUsIE9fUkRXUik7CiAJCWlmIChmZCA8IDApCiAJCQlicmVhazsKIAotCQlsZW4gPSByZWFkKGZk LCBidWYsIE1BWF9QT0xJQ1lfU1RSTEVOKTsKLQkJYnVmW2xlbl0gPSAnXDAnOwotCi0JCWlmICgh c3RybmNtcChNQVhfUEVSRk9STUFOQ0VfU1RSLCBidWYsCi0JCQkgICAgIHN0cmxlbihNQVhfUEVS Rk9STUFOQ0VfU1RSKSkpCi0JCQlwb2xpY3kgPSBQT0xJQ1lfTUFYX1BFUkZPUk1BTkNFOwotCQll bHNlIGlmICghc3RybmNtcChNRURJVU1fUE9XRVJfU1RSLCBidWYsCi0JCQkJICBzdHJsZW4oTUVE SVVNX1BPV0VSX1NUUikpKQotCQkJcG9saWN5ID0gUE9MSUNZX01FRElVTV9QT1dFUjsKLQkJZWxz ZSBpZiAoIXN0cm5jbXAoTUlOX1BPV0VSX1NUUiwgYnVmLAotCQkJCSAgc3RybGVuKE1JTl9QT1dF Ul9TVFIpKSkKLQkJCXBvbGljeSA9IFBPTElDWV9NSU5fUE9XRVI7Ci0JCWVsc2UKLQkJCXBvbGlj eSA9IFBPTElDWV9VTktOT1dOOworCQlwb2xpY3kgPSBnZXRfc2F0YV9wb2xpY3lfZm9yX2hvc3Qo ZmQsIGJ1ZiwgaSk7CiAKIAkJaWYgKCEoaSAlIDI1NikpCi0JCQlsaW5rX3BtX3BvbGljaWVzID0g cmVhbGxvYyhsaW5rX3BtX3BvbGljaWVzLAotCQkJCQkJICAgKGkgLyAyNTYgKyAxKSAqIDI1NiAr IDEpOworCQkJX19zYXRhX3BtX3BvbGljaWVzID0gcmVhbGxvYyhfX3NhdGFfcG1fcG9saWNpZXMs CisJCQkJCQkgICAgIChpIC8gMjU2ICsgMSkgKiAyNTYgKyAxKTsKIAotCQlsaW5rX3BtX3BvbGlj aWVzW2ldID0gcG9saWN5OwotCQlsaW5rX3BtX3BvbGljaWVzW2kgKyAxXSA9IDA7CisJCV9fc2F0 YV9wbV9wb2xpY2llc1tpXSA9IHBvbGljeTsKKwkJY2xvc2UoZmQpOworCX0KKwkJaWd0X2luc3Rh bGxfZXhpdF9oYW5kbGVyKF9faWd0X3BtX3NhdGFfbGlua19wbV9leGl0X2hhbmRsZXIpOworCisJ Zm9yIChpID0gMDsgOyBpKyspIHsKKwkJc25wcmludGYoZmlsZV9uYW1lLCBQQVRIX01BWCwKKwkJ CSAiL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdCVkL2xpbmtfcG93ZXJfbWFuYWdlbWVudF9wb2xp Y3kiLAorCQkJIGkpOworCQlmZCA9IG9wZW4oZmlsZV9uYW1lLCBPX1JEV1IpOworCQlpZiAoZmQg PCAwKQorCQkJYnJlYWs7CisKKwkJcG9saWN5ID0gZ2V0X3NhdGFfcG9saWN5X2Zvcl9ob3N0KGZk LCBidWYsIGkpOwogCiAJCS8qIElmIHRoZSBwb2xpY3kgaXMgc29tZXRoaW5nIHdlIGRvbid0IGtu b3cgYWJvdXQsCiAJCSAqIGRvbid0IHRvdWNoIGl0LCBzaW5jZSB3ZSBtaWdodCBwb3RlbnRpYWxs eSBicmVhayB0aGluZ3MuCkBAIC0zNTUsMzkgKzM2OCwyNSBAQCBpbnQ4X3QgKmlndF9wbV9lbmFi bGVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQodm9pZCkKIAl9CiAJZnJlZShidWYpOwogCWZy ZWUoZmlsZV9uYW1lKTsKLQotCXJldHVybiBsaW5rX3BtX3BvbGljaWVzOwogfQogCi0vKioKLSAq IGlndF9wbV9yZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50OgotICogQHBtX2RhdGE6 IEFuIG9wYXF1ZSBwb2ludGVyIHdpdGggc2F2ZWQgbGluayBQTSBwb2xpY2llczsKLSAqICAgICAg ICAgICBJZiBOVUxMIGlzIHBhc3NlZCB3ZSBmb3JjZSBlbmFibGUgdGhlICJtYXhfcGVyZm9ybWFu Y2UiIHBvbGljeS4KLSAqCi0gKiBSZXN0b3JlIHRoZSBsaW5rIHBvd2VyIG1hbmFnZW1lbnQgcG9s aWNpZXMgdG8gdGhlIHZhbHVlcwotICogcHJpb3IgdG8gZW5hYmxpbmcgbWluX3Bvd2VyLgotICoK LSAqIENhdmVhdDogSWYgdGhlIHN5c3RlbSBzdXBwb3J0cyBob3RwbHVnZ2luZyBhbmQgaG90cGx1 Z2dpbmcgdGFrZXMKLSAqICAgICAgICAgcGxhY2UgZHVyaW5nIG91ciB0ZXN0aW5nIHNvIHRoYXQg dGhlIGhvc3RzIGNoYW5nZSBudW1iZXJzCi0gKiAgICAgICAgIHdlIG1pZ2h0IHJlc3RvcmUgdGhl IHNldHRpbmdzIHRvIHRoZSB3cm9uZyBob3N0cy4KLSAqLwotdm9pZCBpZ3RfcG1fcmVzdG9yZV9z YXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudChpbnQ4X3QgKnBtX2RhdGEpCi0KK3N0YXRpYyB2b2lk IF9faWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQodm9pZCkKIHsKIAlp bnQgZmQsIGk7CiAJY2hhciAqZmlsZV9uYW1lOwogCisJaWYgKCFfX3NhdGFfcG1fcG9saWNpZXMp CisJCXJldHVybjsKKwogCS8qIERpc2sgcnVudGltZSBQTSBwb2xpY2llcy4gKi8KIAlmaWxlX25h bWUgPSBtYWxsb2MoUEFUSF9NQVgpOwogCWZvciAoaSA9IDA7IDsgaSsrKSB7CiAJCWludDhfdCBw b2xpY3k7CiAKLQkJaWYgKCFwbV9kYXRhKQotCQkJcG9saWN5ID0gUE9MSUNZX01BWF9QRVJGT1JN QU5DRTsKLQkJZWxzZSBpZiAocG1fZGF0YVtpXSA9PSBQT0xJQ1lfVU5LTk9XTikKKwkJaWYgKF9f c2F0YV9wbV9wb2xpY2llc1tpXSA9PSBQT0xJQ1lfVU5LTk9XTikKIAkJCWNvbnRpbnVlOwogCQll bHNlCi0JCQlwb2xpY3kgPSBwbV9kYXRhW2ldOworCQkJcG9saWN5ID0gX19zYXRhX3BtX3BvbGlj aWVzW2ldOwogCiAJCXNucHJpbnRmKGZpbGVfbmFtZSwgUEFUSF9NQVgsCiAJCQkgIi9zeXMvY2xh c3Mvc2NzaV9ob3N0L2hvc3QlZC9saW5rX3Bvd2VyX21hbmFnZW1lbnRfcG9saWN5IiwKQEAgLTQy MSw3ICs0MjAsNDkgQEAgdm9pZCBpZ3RfcG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdl bWVudChpbnQ4X3QgKnBtX2RhdGEpCiAJCWNsb3NlKGZkKTsKIAl9CiAJZnJlZShmaWxlX25hbWUp OworCWZyZWUoX19zYXRhX3BtX3BvbGljaWVzKTsKKwlfX3NhdGFfcG1fcG9saWNpZXMgPSBOVUxM OworfQorCisvKioKKyAqIGlndF9wbV9lbmFibGVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQ6 CisgKgorICogRW5hYmxlIHRoZSBtaW5fcG93ZXIgcG9saWN5IGZvciBTQVRBIGxpbmsgcG93ZXIg bWFuYWdlbWVudC4KKyAqIFdpdGhvdXQgdGhpcyB3ZSBjYW5ub3QgcmVhY2ggZGVlcCBydW50aW1l IHBvd2VyIHN0YXRlcy4KKyAqIFJldHVybnM6IFZvaWQKKyAqLwordm9pZCBpZ3RfcG1fZW5hYmxl X3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHZvaWQpCit7CisJLyogQ2hlY2sgaWYgaGFzIGJl ZW4gYWxyZWFkeSBzYXZlZC4gKi8KKwlpZiAoX19zYXRhX3BtX3BvbGljaWVzKQorCQlyZXR1cm47 CisKKwkgX19pZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KCk7Cit9CisK Ky8qKgorICogaWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQ6CisgKgor ICogUmVzdG9yZSB0aGUgbGluayBwb3dlciBtYW5hZ2VtZW50IHBvbGljaWVzIHRvIHRoZSB2YWx1 ZXMKKyAqIHByaW9yIHRvIGVuYWJsaW5nIG1pbl9wb3dlci4KKyAqCisgKiBDYXZlYXQ6IElmIHRo ZSBzeXN0ZW0gc3VwcG9ydHMgaG90cGx1Z2dpbmcgYW5kIGhvdHBsdWdnaW5nIHRha2VzCisgKiAg ICAgICAgIHBsYWNlIGR1cmluZyBvdXIgdGVzdGluZyBzbyB0aGF0IHRoZSBob3N0cyBjaGFuZ2Ug bnVtYmVycworICogICAgICAgICB3ZSBtaWdodCByZXN0b3JlIHRoZSBzZXR0aW5ncyB0byB0aGUg d3JvbmcgaG9zdHMuCisgKi8KK3ZvaWQgaWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21h bmFnZW1lbnQodm9pZCkKK3sKKwlpZiAoIV9fc2F0YV9wbV9wb2xpY2llcykKKwkJcmV0dXJuOwor CisJIF9faWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoKTsKIH0KKwor c3RhdGljIHZvaWQgX19pZ3RfcG1fc2F0YV9saW5rX3BtX2V4aXRfaGFuZGxlcihpbnQgc2lnKQor eworCV9faWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoKTsKK30KKwog I2RlZmluZSBQT1dFUl9ESVIgIi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMC9w b3dlciIKIC8qIFdlIGp1c3QgbGVhayB0aGlzIG9uIGV4aXQgLi4uICovCiBpbnQgcG1fc3RhdHVz X2ZkID0gLTE7CkBAIC01ODUsNiArNjI2LDYxIEBAIGJvb2wgaWd0X3NldHVwX3J1bnRpbWVfcG0o dm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBpZ3RfZGlzYWJsZV9ydW50aW1lX3BtKHZv aWQpCit7CisJaW50IGZkOworCXNzaXplX3Qgc2l6ZTsKKwljaGFyIGJ1Zls2XTsKKworCWlmIChw bV9zdGF0dXNfZmQgPCAwKSB7CisJCWZkID0gb3BlbihQT1dFUl9ESVIgIi9hdXRvc3VzcGVuZF9k ZWxheV9tcyIsIE9fUkRXUik7CisJCWlmIChmZCA8IDApCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJ c2l6ZSA9IHJlYWQoZmQsIF9faWd0X3BtX3J1bnRpbWVfYXV0b3N1c3BlbmQsCisJCQkgICAgc2l6 ZW9mKF9faWd0X3BtX3J1bnRpbWVfYXV0b3N1c3BlbmQpKTsKKworCQlpZiAoc2l6ZSA8PSAwKSB7 CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlzdHJjaG9tcChfX2ln dF9wbV9ydW50aW1lX2F1dG9zdXNwZW5kKTsKKwkJaWd0X2luc3RhbGxfZXhpdF9oYW5kbGVyKF9f aWd0X3BtX3J1bnRpbWVfZXhpdF9oYW5kbGVyKTsKKwkJY2xvc2UoZmQpOworCX0KKworCS8qIFdl IGtub3cgd2Ugc3VwcG9ydCBydW50aW1lIFBNLCBsZXQncyB0cnkgdG8gZGlzYWJsZSBpdCBub3cu ICovCisJZmQgPSBvcGVuKFBPV0VSX0RJUiAiL2NvbnRyb2wiLCBPX1JEV1IpOworCWlndF9hc3Nl cnRfZihmZCA+PSAwLCAiQ2FuJ3Qgb3BlbiAiIFBPV0VSX0RJUiAiL2NvbnRyb2xcbiIpOworCisJ aWYgKHBtX3N0YXR1c19mZCA8IDApIHsKKwkJaWd0X2Fzc2VydChyZWFkKGZkLCBfX2lndF9wbV9y dW50aW1lX2NvbnRyb2wsCisJCQkJc2l6ZW9mKF9faWd0X3BtX3J1bnRpbWVfY29udHJvbCkpID4g MCk7CisJCXN0cmNob21wKF9faWd0X3BtX3J1bnRpbWVfY29udHJvbCk7CisKKwkJaWd0X2RlYnVn KCJTYXZlZCBydW50aW1lIHBvd2VyIG1hbmFnZW1lbnQgYXMgJyVzJyBhbmQgJyVzJ1xuIiwKKwkJ CSAgX19pZ3RfcG1fcnVudGltZV9hdXRvc3VzcGVuZCwKKwkJCSAgX19pZ3RfcG1fcnVudGltZV9j b250cm9sKTsKKwl9CisKKwlzaXplID0gd3JpdGUoZmQsICJvblxuIiwgMyk7CisJaWd0X2Fzc2Vy dChzaXplID09IDMpOworCWxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7CisJc2l6ZSA9IHJlYWQoZmQs IGJ1ZiwgQVJSQVlfU0laRShidWYpKTsKKwlpZ3RfYXNzZXJ0KHNpemUgPT0gMyk7CisJaWd0X2Fz c2VydChzdHJuY21wKGJ1ZiwgIm9uXG4iLCAzKSA9PSAwKTsKKwljbG9zZShmZCk7CisKKwlpZiAo cG1fc3RhdHVzX2ZkIDwgMCkgeworCQlwbV9zdGF0dXNfZmQgPSBvcGVuKFBPV0VSX0RJUiAiL3J1 bnRpbWVfc3RhdHVzIiwgT19SRE9OTFkpOworCQlpZ3RfYXNzZXJ0X2YocG1fc3RhdHVzX2ZkID49 IDAsCisJCQkgICAgICJDYW4ndCBvcGVuICIgUE9XRVJfRElSICIvcnVudGltZV9zdGF0dXNcbiIp OworCX0KKworCXJldHVybiB0cnVlOworfQorCiAvKioKICAqIGlndF9nZXRfcnVudGltZV9wbV9z dGF0dXM6CiAgKgpAQCAtNjI4LDMgKzcyNCwyOSBAQCBib29sIGlndF93YWl0X2Zvcl9wbV9zdGF0 dXMoZW51bSBpZ3RfcnVudGltZV9wbV9zdGF0dXMgc3RhdHVzKQogewogCXJldHVybiBpZ3Rfd2Fp dChpZ3RfZ2V0X3J1bnRpbWVfcG1fc3RhdHVzKCkgPT0gc3RhdHVzLCAxMDAwMCwgMTAwKTsKIH0K KworLyoqCisgKiBkbWNfbG9hZGVkOgorICogQGRlYnVnZnM6IGZkIHRvIHRoZSBkZWJ1Z2ZzIGRp ci4KKworICogQ2hlY2sgd2hldGhlciBETUMgRlcgaXMgbG9hZGVkIG9yIG5vdC4gRE1DIEZXIGlz IHJlcXVpcmUgZm9yIGZldyBEaXNwbGF5IEMKKyAqIHN0YXRlcyBsaWtlIERDNSBhbmQgREM2LiBG VyBkb2VzIHRoZSBDb250ZXh0IFNhdmUgYW5kIFJlc3RvcmUgZHVyaW5nIERpc3BsYXkKKyAqIEMg U3RhdGVzIGVudHJ5IGFuZCBleGl0LgorICoKKyAqIFJldHVybnM6CisgKiBUcnVlIGlmIERNQyBG VyBpcyBsb2FkZWQgb3RoZXJ3aXNlIGZhbHNlLgorICovCitib29sIGlndF9wbV9kbWNfbG9hZGVk KGludCBkZWJ1Z2ZzKQoreworCWNoYXIgYnVmWzE1XTsKKwlpbnQgbGVuOworCisJbGVuID0gaWd0 X3N5c2ZzX3JlYWQoZGVidWdmcywgImk5MTVfZG1jX2luZm8iLCBidWYsIHNpemVvZihidWYpIC0g MSk7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiB0cnVlOyAvKiBubyBDU1Igc3VwcG9ydCwgbm8g RE1DIHJlcXVpcmVtZW50ICovCisKKwlidWZbbGVuXSA9ICdcMCc7CisKKwlpZ3RfaW5mbygiRE1D OiAlc1xuIiwgYnVmKTsKKwlyZXR1cm4gc3Ryc3RyKGJ1ZiwgImZ3IGxvYWRlZDogeWVzIik7Cit9 CmRpZmYgLS1naXQgYS9saWIvaWd0X3BtLmggYi9saWIvaWd0X3BtLmgKaW5kZXggMTBjYzY3OTQu Ljk3OWIzNDYzIDEwMDY0NAotLS0gYS9saWIvaWd0X3BtLmgKKysrIGIvbGliL2lndF9wbS5oCkBA IC0yNSw4ICsyNSw4IEBACiAjZGVmaW5lIElHVF9QTV9ICiAKIHZvaWQgaWd0X3BtX2VuYWJsZV9h dWRpb19ydW50aW1lX3BtKHZvaWQpOwotaW50OF90ICppZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19w b3dlcl9tYW5hZ2VtZW50KHZvaWQpOwotdm9pZCBpZ3RfcG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93 ZXJfbWFuYWdlbWVudChpbnQ4X3QgKnBtX2RhdGEpOwordm9pZCBpZ3RfcG1fZW5hYmxlX3NhdGFf bGlua19wb3dlcl9tYW5hZ2VtZW50KHZvaWQpOwordm9pZCBpZ3RfcG1fcmVzdG9yZV9zYXRhX2xp bmtfcG93ZXJfbWFuYWdlbWVudCh2b2lkKTsKIAogLyoqCiAgKiBpZ3RfcnVudGltZV9wbV9zdGF0 dXM6CkBAIC00Nyw4ICs0NywxMCBAQCBlbnVtIGlndF9ydW50aW1lX3BtX3N0YXR1cyB7CiB9Owog CiBib29sIGlndF9zZXR1cF9ydW50aW1lX3BtKHZvaWQpOworYm9vbCBpZ3RfZGlzYWJsZV9ydW50 aW1lX3BtKHZvaWQpOwogdm9pZCBpZ3RfcmVzdG9yZV9ydW50aW1lX3BtKHZvaWQpOwogZW51bSBp Z3RfcnVudGltZV9wbV9zdGF0dXMgaWd0X2dldF9ydW50aW1lX3BtX3N0YXR1cyh2b2lkKTsKIGJv b2wgaWd0X3dhaXRfZm9yX3BtX3N0YXR1cyhlbnVtIGlndF9ydW50aW1lX3BtX3N0YXR1cyBzdGF0 dXMpOworYm9vbCBpZ3RfcG1fZG1jX2xvYWRlZChpbnQgZGVidWdmcyk7CiAKICNlbmRpZiAvKiBJ R1RfUE1fSCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9pOTE1X3BtX2JhY2tsaWdodC5jIGIv dGVzdHMvaTkxNS9pOTE1X3BtX2JhY2tsaWdodC5jCmluZGV4IDRjMWJmZjViLi45YTVmNGMzNyAx MDA2NDQKLS0tIGEvdGVzdHMvaTkxNS9pOTE1X3BtX2JhY2tsaWdodC5jCisrKyBiL3Rlc3RzL2k5 MTUvaTkxNV9wbV9iYWNrbGlnaHQuYwpAQCAtNDcsNyArNDcsNiBAQCBzdHJ1Y3QgY29udGV4dCB7 CiAjZGVmaW5lIEZBREVTUEVFRCAxMDAgLyogbWlsbGlzZWNvbmRzIGJldHdlZW4gc3RlcHMgKi8K IAogSUdUX1RFU1RfREVTQ1JJUFRJT04oIkJhc2ljIGJhY2tsaWdodCBzeXNmcyB0ZXN0Iik7Ci1z dGF0aWMgaW50OF90ICpwbV9kYXRhID0gTlVMTDsKIAogc3RhdGljIGludCBiYWNrbGlnaHRfcmVh ZChpbnQgKnJlc3VsdCwgY29uc3QgY2hhciAqZm5hbWUpCiB7CkBAIC0yMzUsNyArMjM0LDcgQEAg aWd0X21haW4KIAkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZmIpOwogCiAJCWlndF9kaXNw bGF5X2NvbW1pdDIoJmRpc3BsYXksIGRpc3BsYXkuaXNfYXRvbWljID8gQ09NTUlUX0FUT01JQyA6 IENPTU1JVF9MRUdBQ1kpOwotCQlwbV9kYXRhID0gaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93 ZXJfbWFuYWdlbWVudCgpOworCQlpZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2Vt ZW50KCk7CiAJfQogCiAJaWd0X3N1YnRlc3QoImJhc2ljLWJyaWdodG5lc3MiKQpAQCAtMjU1LDgg KzI1NCw3IEBAIGlndF9tYWluCiAKIAkJaWd0X2Rpc3BsYXlfZmluaSgmZGlzcGxheSk7CiAJCWln dF9yZW1vdmVfZmIoZGlzcGxheS5kcm1fZmQsICZmYik7Ci0JCWlndF9wbV9yZXN0b3JlX3NhdGFf bGlua19wb3dlcl9tYW5hZ2VtZW50KHBtX2RhdGEpOwotCQlmcmVlKHBtX2RhdGEpOworCQlpZ3Rf cG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCgpOwogCQljbG9zZShkaXNwbGF5 LmRybV9mZCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9pOTE1X3BtX3JwbS5jIGIv dGVzdHMvaTkxNS9pOTE1X3BtX3JwbS5jCmluZGV4IGEyYzlkMGVkLi4yZDJmNzdiZSAxMDA2NDQK LS0tIGEvdGVzdHMvaTkxNS9pOTE1X3BtX3JwbS5jCisrKyBiL3Rlc3RzL2k5MTUvaTkxNV9wbV9y cG0uYwpAQCAtMTIyLDggKzEyMiw2IEBAIHN0cnVjdCBtb2Rlc2V0X3BhcmFtcyBscHNwX21vZGVf cGFyYW1zOwogc3RydWN0IG1vZGVzZXRfcGFyYW1zIG5vbl9scHNwX21vZGVfcGFyYW1zOwogc3Ry dWN0IG1vZGVzZXRfcGFyYW1zICpkZWZhdWx0X21vZGVfcGFyYW1zOwogCi1zdGF0aWMgaW50OF90 ICpwbV9kYXRhID0gTlVMTDsKLQogc3RhdGljIGludCBtb2Rwcm9iZShjb25zdCBjaGFyICpkcml2 ZXIpCiB7CiAJcmV0dXJuIGlndF9rbW9kX2xvYWQoZHJpdmVyLCBOVUxMKTsKQEAgLTcxMCwyMSAr NzA4LDYgQEAgc3RhdGljIHZvaWQgc2V0dXBfcGM4KHZvaWQpCiAJaGFzX3BjOCA9IHRydWU7CiB9 CiAKLXN0YXRpYyBib29sIGRtY19sb2FkZWQodm9pZCkKLXsKLQljaGFyIGJ1ZlsxNV07Ci0JaW50 IGxlbjsKLQotCWxlbiA9IGlndF9zeXNmc19yZWFkKGRlYnVnZnMsICJpOTE1X2RtY19pbmZvIiwg YnVmLCBzaXplb2YoYnVmKSAtIDEpOwotCWlmIChsZW4gPCAwKQotCSAgICByZXR1cm4gdHJ1ZTsg Lyogbm8gQ1NSIHN1cHBvcnQsIG5vIERNQyByZXF1aXJlbWVudCAqLwotCi0JYnVmW2xlbl0gPSAn XDAnOwotCi0JaWd0X2luZm8oIkRNQzogJXNcbiIsIGJ1Zik7Ci0JcmV0dXJuIHN0cnN0cihidWYs ICJmdyBsb2FkZWQ6IHllcyIpOwotfQotCiBzdGF0aWMgdm9pZCBkdW1wX2ZpbGUoaW50IGRpciwg Y29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAJY2hhciAqY29udGVudHM7CkBAIC03NTEsNyArNzM0 LDcgQEAgc3RhdGljIGJvb2wgc2V0dXBfZW52aXJvbm1lbnQodm9pZCkKIAogCWluaXRfbW9kZV9z ZXRfZGF0YSgmbXNfZGF0YSk7CiAKLQlwbV9kYXRhID0gaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtf cG93ZXJfbWFuYWdlbWVudCgpOworCWlndF9wbV9lbmFibGVfc2F0YV9saW5rX3Bvd2VyX21hbmFn ZW1lbnQoKTsKIAogCWhhc19ydW50aW1lX3BtID0gaWd0X3NldHVwX3J1bnRpbWVfcG0oKTsKIAlz ZXR1cF9wYzgoKTsKQEAgLTc1OSw3ICs3NDIsNyBAQCBzdGF0aWMgYm9vbCBzZXR1cF9lbnZpcm9u bWVudCh2b2lkKQogCWlndF9pbmZvKCJSdW50aW1lIFBNIHN1cHBvcnQ6ICVkXG4iLCBoYXNfcnVu dGltZV9wbSk7CiAJaWd0X2luZm8oIlBDOCByZXNpZGVuY3kgc3VwcG9ydDogJWRcbiIsIGhhc19w YzgpOwogCWlndF9yZXF1aXJlKGhhc19ydW50aW1lX3BtKTsKLQlpZ3RfcmVxdWlyZShkbWNfbG9h ZGVkKCkpOworCWlndF9yZXF1aXJlKGlndF9wbV9kbWNfbG9hZGVkKGRlYnVnZnMpKTsKIAogb3V0 OgogCWRpc2FibGVfYWxsX3NjcmVlbnMoJm1zX2RhdGEpOwpAQCAtNzc2LDggKzc1OSw3IEBAIHN0 YXRpYyB2b2lkIHRlYXJkb3duX2Vudmlyb25tZW50KHZvaWQpCiAKIAlpZ3RfcmVzdG9yZV9ydW50 aW1lX3BtKCk7CiAKLQlpZ3RfcG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudChw bV9kYXRhKTsKLQlmcmVlKHBtX2RhdGEpOworCWlndF9wbV9yZXN0b3JlX3NhdGFfbGlua19wb3dl cl9tYW5hZ2VtZW50KCk7CiAKIAlmaW5pX21vZGVfc2V0X2RhdGEoJm1zX2RhdGEpOwogCi0tIAoy LjIxLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmln dC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==