From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8CA4789183 for ; Fri, 16 Aug 2019 10:31:08 +0000 (UTC) From: Anshuman Gupta Date: Fri, 16 Aug 2019 15:57:34 +0530 Message-Id: <20190816102734.26929-1-anshuman.gupta@intel.com> In-Reply-To: <20190814173904.4279-1-anshuman.gupta@intel.com> References: <20190814173904.4279-1-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 ZWwuY29tPgotLS0KIGxpYi9pZ3RfcG0uYyAgICAgICAgICAgICAgICAgICB8IDIxMCArKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0KIGxpYi9pZ3RfcG0uaCAgICAgICAgICAgICAgICAg ICB8ICAgNiArLQogdGVzdHMvaTkxNS9pOTE1X3BtX2JhY2tsaWdodC5jIHwgICA2ICstCiB0ZXN0 cy9pOTE1L2k5MTVfcG1fcnBtLmMgICAgICAgfCAgMjQgKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAx NzIgaW5zZXJ0aW9ucygrKSwgNzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9w bS5jIGIvbGliL2lndF9wbS5jCmluZGV4IGZkMjIyNzNhLi5iOTFhMGY5NiAxMDA2NDQKLS0tIGEv bGliL2lndF9wbS5jCisrKyBiL2xpYi9pZ3RfcG0uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1 ZGUgImRybXRlc3QuaCIKICNpbmNsdWRlICJpZ3RfcG0uaCIKICNpbmNsdWRlICJpZ3RfYXV4Lmgi CisjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCiAKIC8qKgogICogU0VDVElPTjppZ3RfcG0KQEAgLTYz LDExICs2NCwxNiBAQCBlbnVtIHsKICNkZWZpbmUgTUlOX1BPV0VSX1NUUgkJIm1pbl9wb3dlclxu IgogLyogUmVtZW1iZXIgdG8gZml4IHRoaXMgaWYgYWRkaW5nIGxvbmdlciBzdHJpbmdzICovCiAj ZGVmaW5lIE1BWF9QT0xJQ1lfU1RSTEVOCXN0cmxlbihNQVhfUEVSRk9STUFOQ0VfU1RSKQoraW50 OF90ICpfX3NhdGFfcG1fcG9saWNpZXM7CitpbnQgX19zY3NpX2hvc3RfY250OwogCiBzdGF0aWMg Y2hhciBfX2lndF9wbV9hdWRpb19ydW50aW1lX3Bvd2VyX3NhdmVbNjRdOwogc3RhdGljIGNoYXIg KiBfX2lndF9wbV9hdWRpb19ydW50aW1lX2NvbnRyb2xfcGF0aDsKIHN0YXRpYyBjaGFyIF9faWd0 X3BtX2F1ZGlvX3J1bnRpbWVfY29udHJvbFs2NF07CiAKK3N0YXRpYyB2b2lkIF9faWd0X3BtX3Nh dGFfbGlua19wbV9leGl0X2hhbmRsZXIoaW50IHNpZyk7CitzdGF0aWMgdm9pZCBfX2lndF9wbV9y ZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHZvaWQpOworCiBzdGF0aWMgaW50IF9f aWd0X3BtX2F1ZGlvX3Jlc3RvcmVfcnVudGltZV9wbSh2b2lkKQogewogCWludCBmZDsKQEAgLTI4 MCwzOSArMjg2LDI2IEBAIHZvaWQgaWd0X3BtX2VuYWJsZV9hdWRpb19ydW50aW1lX3BtKHZvaWQp CiAJCWlndF9kZWJ1ZygiRmFpbGVkIHRvIGVuYWJsZSBhdWRpbyBydW50aW1lIFBNISAoJWQpXG4i LCAtZXJyKTsKIH0KIAotLyoqCi0gKiBpZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5h Z2VtZW50OgotICoKLSAqIEVuYWJsZSB0aGUgbWluX3Bvd2VyIHBvbGljeSBmb3IgU0FUQSBsaW5r IHBvd2VyIG1hbmFnZW1lbnQuCi0gKiBXaXRob3V0IHRoaXMgd2UgY2Fubm90IHJlYWNoIGRlZXAg cnVudGltZSBwb3dlciBzdGF0ZXMuCi0gKgotICogV2UgZG9uJ3QgaGF2ZSBhbnkgYXNzZXJ0aW9u cyBvbiBvcGVuIHNpbmNlIHRoZSBzeXN0ZW0gbWlnaHQgbm90IGhhdmUKLSAqIGEgU0FUQSBob3N0 LgotICoKLSAqIFJldHVybnM6Ci0gKiBBbiBvcGFxdWUgcG9pbnRlciB0byB0aGUgZGF0YSBuZWVk ZWQgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCB2YWx1ZXMKLSAqIGFmdGVyIHRoZSB0ZXN0IGhhcyB0 ZXJtaW5hdGVkLCBvciBOVUxMIGlmIFNBVEEgbGluayBwb3dlciBtYW5hZ2VtZW50Ci0gKiBpcyBu b3Qgc3VwcG9ydGVkLiBUaGlzIHBvaW50ZXIgc2hvdWxkIGJlIGZyZWVkIHdoZW4gbm8gbG9uZ2Vy IHVzZWQKLSAqICh0eXBpY2FsbHkgYWZ0ZXIgaGF2aW5nIGNhbGxlZCByZXN0b3JlX3NhdGFfbGlu a19wb3dlcl9tYW5hZ2VtZW50KCkpLgotICovCi1pbnQ4X3QgKmlndF9wbV9lbmFibGVfc2F0YV9s aW5rX3Bvd2VyX21hbmFnZW1lbnQodm9pZCkKK3N0YXRpYyB2b2lkIF9faWd0X3BtX2VuYWJsZV9z YXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCh2b2lkKQogewogCWludCBmZCwgaTsKIAlzc2l6ZV90 IGxlbjsKIAljaGFyICpidWY7CiAJY2hhciAqZmlsZV9uYW1lOwotCWludDhfdCAqbGlua19wbV9w b2xpY2llcyA9IE5VTEw7CisJaW50OF90IHBvbGljeTsKIAogCWZpbGVfbmFtZSA9IG1hbGxvYyhQ QVRIX01BWCk7CiAJYnVmID0gbWFsbG9jKE1BWF9QT0xJQ1lfU1RSTEVOICsgMSk7CiAKLQlmb3Ig KGkgPSAwOyA7IGkrKykgewotCQlpbnQ4X3QgcG9saWN5OwotCisJZm9yIChfX3Njc2lfaG9zdF9j bnQgPSAwOyA7IF9fc2NzaV9ob3N0X2NudCsrKSB7CiAJCXNucHJpbnRmKGZpbGVfbmFtZSwgUEFU SF9NQVgsCiAJCQkgIi9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3QlZC9saW5rX3Bvd2VyX21hbmFn ZW1lbnRfcG9saWN5IiwKLQkJCSBpKTsKKwkJCSBfX3Njc2lfaG9zdF9jbnQpOwogCisJCS8qCisJ CSAqIFdlIGRvbid0IGhhdmUgYW55IGFzc2VydGlvbnMgb24gb3BlbiBzaW5jZSB0aGUgc3lzdGVt CisJCSAqIG1pZ2h0IG5vdCBoYXZlIGEgU0FUQSBob3N0LgorCQkgKi8KIAkJZmQgPSBvcGVuKGZp bGVfbmFtZSwgT19SRFdSKTsKIAkJaWYgKGZkIDwgMCkKIAkJCWJyZWFrOwpAQCAtMzMyLDEyICsz MjUsMjYgQEAgaW50OF90ICppZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50 KHZvaWQpCiAJCWVsc2UKIAkJCXBvbGljeSA9IFBPTElDWV9VTktOT1dOOwogCi0JCWlmICghKGkg JSAyNTYpKQotCQkJbGlua19wbV9wb2xpY2llcyA9IHJlYWxsb2MobGlua19wbV9wb2xpY2llcywK LQkJCQkJCSAgIChpIC8gMjU2ICsgMSkgKiAyNTYgKyAxKTsKKwkJaWYgKCEoX19zY3NpX2hvc3Rf Y250ICUgMjU2KSkKKwkJCV9fc2F0YV9wbV9wb2xpY2llcyA9IHJlYWxsb2MoX19zYXRhX3BtX3Bv bGljaWVzLAorCQkJCQkJICAgICAoX19zY3NpX2hvc3RfY250IC8gMjU2ICsgMSkKKwkJCQkJCSAg ICAgKiAyNTYgKyAxKTsKIAotCQlsaW5rX3BtX3BvbGljaWVzW2ldID0gcG9saWN5OwotCQlsaW5r X3BtX3BvbGljaWVzW2kgKyAxXSA9IDA7CisJCV9fc2F0YV9wbV9wb2xpY2llc1tfX3Njc2lfaG9z dF9jbnRdID0gcG9saWN5OworCQljbG9zZShmZCk7CisJfQorCisJaWd0X2luc3RhbGxfZXhpdF9o YW5kbGVyKF9faWd0X3BtX3NhdGFfbGlua19wbV9leGl0X2hhbmRsZXIpOworCisJZm9yIChpID0g MDsgaSA8IF9fc2NzaV9ob3N0X2NudDsgaSsrKSB7CisJCXNucHJpbnRmKGZpbGVfbmFtZSwgUEFU SF9NQVgsCisJCQkgIi9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3QlZC9saW5rX3Bvd2VyX21hbmFn ZW1lbnRfcG9saWN5IiwKKwkJCSBpKTsKKwkJZmQgPSBvcGVuKGZpbGVfbmFtZSwgT19SRFdSKTsK KwkJaWYgKGZkIDwgMCkKKwkJCWJyZWFrOworCisJCXBvbGljeSA9IF9fc2F0YV9wbV9wb2xpY2ll c1tpXTsKIAogCQkvKiBJZiB0aGUgcG9saWN5IGlzIHNvbWV0aGluZyB3ZSBkb24ndCBrbm93IGFi b3V0LAogCQkgKiBkb24ndCB0b3VjaCBpdCwgc2luY2Ugd2UgbWlnaHQgcG90ZW50aWFsbHkgYnJl YWsgdGhpbmdzLgpAQCAtMzU1LDM5ICszNjIsMjUgQEAgaW50OF90ICppZ3RfcG1fZW5hYmxlX3Nh dGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHZvaWQpCiAJfQogCWZyZWUoYnVmKTsKIAlmcmVlKGZp bGVfbmFtZSk7Ci0KLQlyZXR1cm4gbGlua19wbV9wb2xpY2llczsKIH0KIAotLyoqCi0gKiBpZ3Rf cG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudDoKLSAqIEBwbV9kYXRhOiBBbiBv cGFxdWUgcG9pbnRlciB3aXRoIHNhdmVkIGxpbmsgUE0gcG9saWNpZXM7Ci0gKiAgICAgICAgICAg SWYgTlVMTCBpcyBwYXNzZWQgd2UgZm9yY2UgZW5hYmxlIHRoZSAibWF4X3BlcmZvcm1hbmNlIiBw b2xpY3kuCi0gKgotICogUmVzdG9yZSB0aGUgbGluayBwb3dlciBtYW5hZ2VtZW50IHBvbGljaWVz IHRvIHRoZSB2YWx1ZXMKLSAqIHByaW9yIHRvIGVuYWJsaW5nIG1pbl9wb3dlci4KLSAqCi0gKiBD YXZlYXQ6IElmIHRoZSBzeXN0ZW0gc3VwcG9ydHMgaG90cGx1Z2dpbmcgYW5kIGhvdHBsdWdnaW5n IHRha2VzCi0gKiAgICAgICAgIHBsYWNlIGR1cmluZyBvdXIgdGVzdGluZyBzbyB0aGF0IHRoZSBo b3N0cyBjaGFuZ2UgbnVtYmVycwotICogICAgICAgICB3ZSBtaWdodCByZXN0b3JlIHRoZSBzZXR0 aW5ncyB0byB0aGUgd3JvbmcgaG9zdHMuCi0gKi8KLXZvaWQgaWd0X3BtX3Jlc3RvcmVfc2F0YV9s aW5rX3Bvd2VyX21hbmFnZW1lbnQoaW50OF90ICpwbV9kYXRhKQotCitzdGF0aWMgdm9pZCBfX2ln dF9wbV9yZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHZvaWQpCiB7CiAJaW50IGZk LCBpOwogCWNoYXIgKmZpbGVfbmFtZTsKIAorCWlmICghX19zYXRhX3BtX3BvbGljaWVzKQorCQly ZXR1cm47CisKIAkvKiBEaXNrIHJ1bnRpbWUgUE0gcG9saWNpZXMuICovCiAJZmlsZV9uYW1lID0g bWFsbG9jKFBBVEhfTUFYKTsKLQlmb3IgKGkgPSAwOyA7IGkrKykgeworCWZvciAoaSA9IDA7IGkg PCBfX3Njc2lfaG9zdF9jbnQ7IGkrKykgewogCQlpbnQ4X3QgcG9saWN5OwogCi0JCWlmICghcG1f ZGF0YSkKLQkJCXBvbGljeSA9IFBPTElDWV9NQVhfUEVSRk9STUFOQ0U7Ci0JCWVsc2UgaWYgKHBt X2RhdGFbaV0gPT0gUE9MSUNZX1VOS05PV04pCisJCWlmIChfX3NhdGFfcG1fcG9saWNpZXNbaV0g PT0gUE9MSUNZX1VOS05PV04pCiAJCQljb250aW51ZTsKIAkJZWxzZQotCQkJcG9saWN5ID0gcG1f ZGF0YVtpXTsKKwkJCXBvbGljeSA9IF9fc2F0YV9wbV9wb2xpY2llc1tpXTsKIAogCQlzbnByaW50 ZihmaWxlX25hbWUsIFBBVEhfTUFYLAogCQkJICIvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0JWQv bGlua19wb3dlcl9tYW5hZ2VtZW50X3BvbGljeSIsCkBAIC00MjEsNyArNDE0LDQ5IEBAIHZvaWQg aWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoaW50OF90ICpwbV9kYXRh KQogCQljbG9zZShmZCk7CiAJfQogCWZyZWUoZmlsZV9uYW1lKTsKKwlmcmVlKF9fc2F0YV9wbV9w b2xpY2llcyk7CisJX19zYXRhX3BtX3BvbGljaWVzID0gTlVMTDsKIH0KKworLyoqCisgKiBpZ3Rf cG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50OgorICoKKyAqIEVuYWJsZSB0aGUg bWluX3Bvd2VyIHBvbGljeSBmb3IgU0FUQSBsaW5rIHBvd2VyIG1hbmFnZW1lbnQuCisgKiBXaXRo b3V0IHRoaXMgd2UgY2Fubm90IHJlYWNoIGRlZXAgcnVudGltZSBwb3dlciBzdGF0ZXMuCisgKiBS ZXR1cm5zOiBWb2lkCisgKi8KK3ZvaWQgaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFu YWdlbWVudCh2b2lkKQoreworCS8qIENoZWNrIGlmIGhhcyBiZWVuIGFscmVhZHkgc2F2ZWQuICov CisJaWYgKF9fc2F0YV9wbV9wb2xpY2llcykKKwkJcmV0dXJuOworCisJIF9faWd0X3BtX2VuYWJs ZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCgpOworfQorCisvKioKKyAqIGlndF9wbV9yZXN0 b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50OgorICoKKyAqIFJlc3RvcmUgdGhlIGxpbmsg cG93ZXIgbWFuYWdlbWVudCBwb2xpY2llcyB0byB0aGUgdmFsdWVzCisgKiBwcmlvciB0byBlbmFi bGluZyBtaW5fcG93ZXIuCisgKgorICogQ2F2ZWF0OiBJZiB0aGUgc3lzdGVtIHN1cHBvcnRzIGhv dHBsdWdnaW5nIGFuZCBob3RwbHVnZ2luZyB0YWtlcworICogICAgICAgICBwbGFjZSBkdXJpbmcg b3VyIHRlc3Rpbmcgc28gdGhhdCB0aGUgaG9zdHMgY2hhbmdlIG51bWJlcnMKKyAqICAgICAgICAg d2UgbWlnaHQgcmVzdG9yZSB0aGUgc2V0dGluZ3MgdG8gdGhlIHdyb25nIGhvc3RzLgorICovCit2 b2lkIGlndF9wbV9yZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHZvaWQpCit7CisJ aWYgKCFfX3NhdGFfcG1fcG9saWNpZXMpCisJCXJldHVybjsKKworCSBfX2lndF9wbV9yZXN0b3Jl X3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faWd0X3Bt X3NhdGFfbGlua19wbV9leGl0X2hhbmRsZXIoaW50IHNpZykKK3sKKwlfX2lndF9wbV9yZXN0b3Jl X3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KCk7Cit9CisKICNkZWZpbmUgUE9XRVJfRElSICIv c3lzL2RldmljZXMvcGNpMDAwMDowMC8wMDAwOjAwOjAyLjAvcG93ZXIiCiAvKiBXZSBqdXN0IGxl YWsgdGhpcyBvbiBleGl0IC4uLiAqLwogaW50IHBtX3N0YXR1c19mZCA9IC0xOwpAQCAtNTg1LDYg KzYyMCw2MSBAQCBib29sIGlndF9zZXR1cF9ydW50aW1lX3BtKHZvaWQpCiAJcmV0dXJuIHRydWU7 CiB9CiAKK2Jvb2wgaWd0X2Rpc2FibGVfcnVudGltZV9wbSh2b2lkKQoreworCWludCBmZDsKKwlz c2l6ZV90IHNpemU7CisJY2hhciBidWZbNl07CisKKwlpZiAocG1fc3RhdHVzX2ZkIDwgMCkgewor CQlmZCA9IG9wZW4oUE9XRVJfRElSICIvYXV0b3N1c3BlbmRfZGVsYXlfbXMiLCBPX1JEV1IpOwor CQlpZiAoZmQgPCAwKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXNpemUgPSByZWFkKGZkLCBfX2ln dF9wbV9ydW50aW1lX2F1dG9zdXNwZW5kLAorCQkJICAgIHNpemVvZihfX2lndF9wbV9ydW50aW1l X2F1dG9zdXNwZW5kKSk7CisKKwkJaWYgKHNpemUgPD0gMCkgeworCQkJY2xvc2UoZmQpOworCQkJ cmV0dXJuIGZhbHNlOworCQl9CisKKwkJc3RyY2hvbXAoX19pZ3RfcG1fcnVudGltZV9hdXRvc3Vz cGVuZCk7CisJCWlndF9pbnN0YWxsX2V4aXRfaGFuZGxlcihfX2lndF9wbV9ydW50aW1lX2V4aXRf aGFuZGxlcik7CisJCWNsb3NlKGZkKTsKKwl9CisKKwkvKiBXZSBrbm93IHdlIHN1cHBvcnQgcnVu dGltZSBQTSwgbGV0J3MgdHJ5IHRvIGRpc2FibGUgaXQgbm93LiAqLworCWZkID0gb3BlbihQT1dF Ul9ESVIgIi9jb250cm9sIiwgT19SRFdSKTsKKwlpZ3RfYXNzZXJ0X2YoZmQgPj0gMCwgIkNhbid0 IG9wZW4gIiBQT1dFUl9ESVIgIi9jb250cm9sXG4iKTsKKworCWlmIChwbV9zdGF0dXNfZmQgPCAw KSB7CisJCWlndF9hc3NlcnQocmVhZChmZCwgX19pZ3RfcG1fcnVudGltZV9jb250cm9sLAorCQkJ CXNpemVvZihfX2lndF9wbV9ydW50aW1lX2NvbnRyb2wpKSA+IDApOworCQlzdHJjaG9tcChfX2ln dF9wbV9ydW50aW1lX2NvbnRyb2wpOworCisJCWlndF9kZWJ1ZygiU2F2ZWQgcnVudGltZSBwb3dl ciBtYW5hZ2VtZW50IGFzICclcycgYW5kICclcydcbiIsCisJCQkgIF9faWd0X3BtX3J1bnRpbWVf YXV0b3N1c3BlbmQsCisJCQkgIF9faWd0X3BtX3J1bnRpbWVfY29udHJvbCk7CisJfQorCisJc2l6 ZSA9IHdyaXRlKGZkLCAib25cbiIsIDMpOworCWlndF9hc3NlcnQoc2l6ZSA9PSAzKTsKKwlsc2Vl ayhmZCwgMCwgU0VFS19TRVQpOworCXNpemUgPSByZWFkKGZkLCBidWYsIEFSUkFZX1NJWkUoYnVm KSk7CisJaWd0X2Fzc2VydChzaXplID09IDMpOworCWlndF9hc3NlcnQoc3RybmNtcChidWYsICJv blxuIiwgMykgPT0gMCk7CisJY2xvc2UoZmQpOworCisJaWYgKHBtX3N0YXR1c19mZCA8IDApIHsK KwkJcG1fc3RhdHVzX2ZkID0gb3BlbihQT1dFUl9ESVIgIi9ydW50aW1lX3N0YXR1cyIsIE9fUkRP TkxZKTsKKwkJaWd0X2Fzc2VydF9mKHBtX3N0YXR1c19mZCA+PSAwLAorCQkJICAgICAiQ2FuJ3Qg b3BlbiAiIFBPV0VSX0RJUiAiL3J1bnRpbWVfc3RhdHVzXG4iKTsKKwl9CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKwogLyoqCiAgKiBpZ3RfZ2V0X3J1bnRpbWVfcG1fc3RhdHVzOgogICoKQEAgLTYyOCwz ICs3MTgsMjkgQEAgYm9vbCBpZ3Rfd2FpdF9mb3JfcG1fc3RhdHVzKGVudW0gaWd0X3J1bnRpbWVf cG1fc3RhdHVzIHN0YXR1cykKIHsKIAlyZXR1cm4gaWd0X3dhaXQoaWd0X2dldF9ydW50aW1lX3Bt X3N0YXR1cygpID09IHN0YXR1cywgMTAwMDAsIDEwMCk7CiB9CisKKy8qKgorICogZG1jX2xvYWRl ZDoKKyAqIEBkZWJ1Z2ZzOiBmZCB0byB0aGUgZGVidWdmcyBkaXIuCisKKyAqIENoZWNrIHdoZXRo ZXIgRE1DIEZXIGlzIGxvYWRlZCBvciBub3QuIERNQyBGVyBpcyByZXF1aXJlIGZvciBmZXcgRGlz cGxheSBDCisgKiBzdGF0ZXMgbGlrZSBEQzUgYW5kIERDNi4gRlcgZG9lcyB0aGUgQ29udGV4dCBT YXZlIGFuZCBSZXN0b3JlIGR1cmluZyBEaXNwbGF5CisgKiBDIFN0YXRlcyBlbnRyeSBhbmQgZXhp dC4KKyAqCisgKiBSZXR1cm5zOgorICogVHJ1ZSBpZiBETUMgRlcgaXMgbG9hZGVkIG90aGVyd2lz ZSBmYWxzZS4KKyAqLworYm9vbCBpZ3RfcG1fZG1jX2xvYWRlZChpbnQgZGVidWdmcykKK3sKKwlj aGFyIGJ1ZlsxNV07CisJaW50IGxlbjsKKworCWxlbiA9IGlndF9zeXNmc19yZWFkKGRlYnVnZnMs ICJpOTE1X2RtY19pbmZvIiwgYnVmLCBzaXplb2YoYnVmKSAtIDEpOworCWlmIChsZW4gPCAwKQor CQlyZXR1cm4gdHJ1ZTsgLyogbm8gQ1NSIHN1cHBvcnQsIG5vIERNQyByZXF1aXJlbWVudCAqLwor CisJYnVmW2xlbl0gPSAnXDAnOworCisJaWd0X2luZm8oIkRNQzogJXNcbiIsIGJ1Zik7CisJcmV0 dXJuIHN0cnN0cihidWYsICJmdyBsb2FkZWQ6IHllcyIpOworfQpkaWZmIC0tZ2l0IGEvbGliL2ln dF9wbS5oIGIvbGliL2lndF9wbS5oCmluZGV4IDEwY2M2Nzk0Li45NzliMzQ2MyAxMDA2NDQKLS0t IGEvbGliL2lndF9wbS5oCisrKyBiL2xpYi9pZ3RfcG0uaApAQCAtMjUsOCArMjUsOCBAQAogI2Rl ZmluZSBJR1RfUE1fSAogCiB2b2lkIGlndF9wbV9lbmFibGVfYXVkaW9fcnVudGltZV9wbSh2b2lk KTsKLWludDhfdCAqaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCh2b2lk KTsKLXZvaWQgaWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoaW50OF90 ICpwbV9kYXRhKTsKK3ZvaWQgaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVu dCh2b2lkKTsKK3ZvaWQgaWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQo dm9pZCk7CiAKIC8qKgogICogaWd0X3J1bnRpbWVfcG1fc3RhdHVzOgpAQCAtNDcsOCArNDcsMTAg QEAgZW51bSBpZ3RfcnVudGltZV9wbV9zdGF0dXMgewogfTsKIAogYm9vbCBpZ3Rfc2V0dXBfcnVu dGltZV9wbSh2b2lkKTsKK2Jvb2wgaWd0X2Rpc2FibGVfcnVudGltZV9wbSh2b2lkKTsKIHZvaWQg aWd0X3Jlc3RvcmVfcnVudGltZV9wbSh2b2lkKTsKIGVudW0gaWd0X3J1bnRpbWVfcG1fc3RhdHVz IGlndF9nZXRfcnVudGltZV9wbV9zdGF0dXModm9pZCk7CiBib29sIGlndF93YWl0X2Zvcl9wbV9z dGF0dXMoZW51bSBpZ3RfcnVudGltZV9wbV9zdGF0dXMgc3RhdHVzKTsKK2Jvb2wgaWd0X3BtX2Rt Y19sb2FkZWQoaW50IGRlYnVnZnMpOwogCiAjZW5kaWYgLyogSUdUX1BNX0ggKi8KZGlmZiAtLWdp dCBhL3Rlc3RzL2k5MTUvaTkxNV9wbV9iYWNrbGlnaHQuYyBiL3Rlc3RzL2k5MTUvaTkxNV9wbV9i YWNrbGlnaHQuYwppbmRleCA0YzFiZmY1Yi4uOWE1ZjRjMzcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2k5 MTUvaTkxNV9wbV9iYWNrbGlnaHQuYworKysgYi90ZXN0cy9pOTE1L2k5MTVfcG1fYmFja2xpZ2h0 LmMKQEAgLTQ3LDcgKzQ3LDYgQEAgc3RydWN0IGNvbnRleHQgewogI2RlZmluZSBGQURFU1BFRUQg MTAwIC8qIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHN0ZXBzICovCiAKIElHVF9URVNUX0RFU0NSSVBU SU9OKCJCYXNpYyBiYWNrbGlnaHQgc3lzZnMgdGVzdCIpOwotc3RhdGljIGludDhfdCAqcG1fZGF0 YSA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgYmFja2xpZ2h0X3JlYWQoaW50ICpyZXN1bHQsIGNvbnN0 IGNoYXIgKmZuYW1lKQogewpAQCAtMjM1LDcgKzIzNCw3IEBAIGlndF9tYWluCiAJCWlndF9wbGFu ZV9zZXRfZmIocHJpbWFyeSwgJmZiKTsKIAogCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkaXNwbGF5 LCBkaXNwbGF5LmlzX2F0b21pYyA/IENPTU1JVF9BVE9NSUMgOiBDT01NSVRfTEVHQUNZKTsKLQkJ cG1fZGF0YSA9IGlndF9wbV9lbmFibGVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoKTsKKwkJ aWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCgpOwogCX0KIAogCWlndF9z dWJ0ZXN0KCJiYXNpYy1icmlnaHRuZXNzIikKQEAgLTI1NSw4ICsyNTQsNyBAQCBpZ3RfbWFpbgog CiAJCWlndF9kaXNwbGF5X2ZpbmkoJmRpc3BsYXkpOwogCQlpZ3RfcmVtb3ZlX2ZiKGRpc3BsYXku ZHJtX2ZkLCAmZmIpOwotCQlpZ3RfcG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVu dChwbV9kYXRhKTsKLQkJZnJlZShwbV9kYXRhKTsKKwkJaWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5r X3Bvd2VyX21hbmFnZW1lbnQoKTsKIAkJY2xvc2UoZGlzcGxheS5kcm1fZmQpOwogCX0KIH0KZGlm ZiAtLWdpdCBhL3Rlc3RzL2k5MTUvaTkxNV9wbV9ycG0uYyBiL3Rlc3RzL2k5MTUvaTkxNV9wbV9y cG0uYwppbmRleCAyMTY4ZmY3Mi4uNjg3OWM1MTMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2k5MTUvaTkx NV9wbV9ycG0uYworKysgYi90ZXN0cy9pOTE1L2k5MTVfcG1fcnBtLmMKQEAgLTEyMyw4ICsxMjMs NiBAQCBzdHJ1Y3QgbW9kZXNldF9wYXJhbXMgbHBzcF9tb2RlX3BhcmFtczsKIHN0cnVjdCBtb2Rl c2V0X3BhcmFtcyBub25fbHBzcF9tb2RlX3BhcmFtczsKIHN0cnVjdCBtb2Rlc2V0X3BhcmFtcyAq ZGVmYXVsdF9tb2RlX3BhcmFtczsKIAotc3RhdGljIGludDhfdCAqcG1fZGF0YSA9IE5VTEw7Ci0K IHN0YXRpYyBpbnQgbW9kcHJvYmUoY29uc3QgY2hhciAqZHJpdmVyKQogewogCXJldHVybiBpZ3Rf a21vZF9sb2FkKGRyaXZlciwgTlVMTCk7CkBAIC03NTUsMjEgKzc1Myw2IEBAIHN0YXRpYyB2b2lk IHNldHVwX3BjOCh2b2lkKQogCWhhc19wYzggPSB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBkbWNf bG9hZGVkKHZvaWQpCi17Ci0JY2hhciBidWZbMTVdOwotCWludCBsZW47Ci0KLQlsZW4gPSBpZ3Rf c3lzZnNfcmVhZChkZWJ1Z2ZzLCAiaTkxNV9kbWNfaW5mbyIsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAx KTsKLQlpZiAobGVuIDwgMCkKLQkgICAgcmV0dXJuIHRydWU7IC8qIG5vIENTUiBzdXBwb3J0LCBu byBETUMgcmVxdWlyZW1lbnQgKi8KLQotCWJ1ZltsZW5dID0gJ1wwJzsKLQotCWlndF9pbmZvKCJE TUM6ICVzXG4iLCBidWYpOwotCXJldHVybiBzdHJzdHIoYnVmLCAiZncgbG9hZGVkOiB5ZXMiKTsK LX0KLQogc3RhdGljIHZvaWQgZHVtcF9maWxlKGludCBkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1l KQogewogCWNoYXIgKmNvbnRlbnRzOwpAQCAtNzk2LDcgKzc3OSw3IEBAIHN0YXRpYyBib29sIHNl dHVwX2Vudmlyb25tZW50KHZvaWQpCiAKIAlpbml0X21vZGVfc2V0X2RhdGEoJm1zX2RhdGEpOwog Ci0JcG1fZGF0YSA9IGlndF9wbV9lbmFibGVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoKTsK KwlpZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KCk7CiAKIAloYXNfcnVu dGltZV9wbSA9IGlndF9zZXR1cF9ydW50aW1lX3BtKCk7CiAJc2V0dXBfcGM4KCk7CkBAIC04MDQs NyArNzg3LDcgQEAgc3RhdGljIGJvb2wgc2V0dXBfZW52aXJvbm1lbnQodm9pZCkKIAlpZ3RfaW5m bygiUnVudGltZSBQTSBzdXBwb3J0OiAlZFxuIiwgaGFzX3J1bnRpbWVfcG0pOwogCWlndF9pbmZv KCJQQzggcmVzaWRlbmN5IHN1cHBvcnQ6ICVkXG4iLCBoYXNfcGM4KTsKIAlpZ3RfcmVxdWlyZSho YXNfcnVudGltZV9wbSk7Ci0JaWd0X3JlcXVpcmUoZG1jX2xvYWRlZCgpKTsKKwlpZ3RfcmVxdWly ZShpZ3RfcG1fZG1jX2xvYWRlZChkZWJ1Z2ZzKSk7CiAKIG91dDoKIAlkaXNhYmxlX2FsbF9zY3Jl ZW5zKCZtc19kYXRhKTsKQEAgLTgyMSw4ICs4MDQsNyBAQCBzdGF0aWMgdm9pZCB0ZWFyZG93bl9l bnZpcm9ubWVudCh2b2lkKQogCiAJaWd0X3Jlc3RvcmVfcnVudGltZV9wbSgpOwogCi0JaWd0X3Bt X3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQocG1fZGF0YSk7Ci0JZnJlZShwbV9k YXRhKTsKKwlpZ3RfcG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCgpOwogCiAJ ZmluaV9tb2RlX3NldF9kYXRhKCZtc19kYXRhKTsKIAotLSAKMi4yMS4wCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdApp Z3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=