From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Weinehall Subject: [PATCH i-g-t] lib/igt_pm: Lib for power management Date: Tue, 15 Dec 2015 11:14:43 +0200 Message-ID: <1450170884-10002-2-git-send-email-david.weinehall@linux.intel.com> References: <1449564640-6001-1-git-send-email-david.weinehall@linux.intel.com> <1450170884-10002-1-git-send-email-david.weinehall@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 72AEA6E0C9 for ; Tue, 15 Dec 2015 01:15:28 -0800 (PST) In-Reply-To: <1450170884-10002-1-git-send-email-david.weinehall@linux.intel.com> 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 Weinehall List-Id: intel-gfx@lists.freedesktop.org TW92ZSBwb3dlciBtYW5hZ2VtZW50IHJlbGF0ZWQgY29kZSB0byBhIHNlcGFyYXRlIGxpYnJhcnku CkluaXRpYWxseSB0aGlzIGlzIGRvbmUgb25seSBmb3Igd29ya2Fyb3VuZHMgdGhhdCBhcHBseSB0 byBleHRlcm5hbApjb21wb25lbnRzLiAgTW9kaWZ5IHRoZSB1c2VycyBvZiBzdWNoIHdvcmthcm91 bmRzIGFjY29yZGluZ2x5LgpUaGlzIGN1cnJlbnRseSBpbnZvbHZlcyBIRCBhdWRpbyBhbmQgU0FU QSBsaW5rIHBvd2VyIG1hbmFnZW1lbnQuCkZvciBTQVRBIGxpbmsgUE0gdGhlcmUncyBhbHNvIGNv ZGUgdG8gc2F2ZSB0aGUgcHJldmlvdXMgc2V0dGluZ3MsCnRvIGFsbG93IGZvciByZXNldHRpbmcg dGhlIHZhbHVlcyBhZnRlciB3ZSd2ZSBmaW5pc2hlZCB0ZXN0aW5nLgoKU2lnbmVkLW9mZi1ieTog RGF2aWQgV2VpbmVoYWxsIDxkYXZpZC53ZWluZWhhbGxAaW50ZWwuY29tPgotLS0KIGxpYi9NYWtl ZmlsZS5zb3VyY2VzIHwgICAyICsKIGxpYi9pZ3QuaCAgICAgICAgICAgIHwgICAxICsKIGxpYi9p Z3RfYXV4LmMgICAgICAgIHwgIDE1ICstLS0KIGxpYi9pZ3RfcG0uYyAgICAgICAgIHwgMjMzICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL2ln dF9wbS5oICAgICAgICAgfCAgMzEgKysrKysrKwogdGVzdHMvcG1fbHBzcC5jICAgICAgfCAgMjUg Ky0tLS0tCiB0ZXN0cy9wbV9ycG0uYyAgICAgICB8ICAyOSArKy0tLS0tCiA3IGZpbGVzIGNoYW5n ZWQsIDI3OSBpbnNlcnRpb25zKCspLCA1NyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWIvaWd0X3BtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X3BtLmgKCmRpZmYgLS1n aXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDQ5 OTk4NjgwNTJiMS4uMmYwZWIyMDc1ZTE0IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuc291cmNl cworKysgYi9saWIvTWFrZWZpbGUuc291cmNlcwpAQCAtNjAsNiArNjAsOCBAQCBsaWJpbnRlbF90 b29sc19sYV9TT1VSQ0VTID0gCVwKIAlpZ3RfY29yZS5oCQlcCiAJaWd0X2RyYXcuYwkJXAogCWln dF9kcmF3LmgJCVwKKwlpZ3RfcG0uYwlcCisJaWd0X3BtLmgJXAogCSQoTlVMTCkKIAogLlBIT05Z OiB2ZXJzaW9uLmgudG1wCmRpZmYgLS1naXQgYS9saWIvaWd0LmggYi9saWIvaWd0LmgKaW5kZXgg M2JlMjU1MTFiYjc3Li5iODc5MjE0MWVlM2MgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3QuaAorKysgYi9s aWIvaWd0LmgKQEAgLTQ0LDUgKzQ0LDYgQEAKICNpbmNsdWRlICJtZWRpYV9maWxsLmgiCiAjaW5j bHVkZSAibWVkaWFfc3Bpbi5oIgogI2luY2x1ZGUgInJlbmRlcmNvcHkuaCIKKyNpbmNsdWRlICJp Z3RfcG0uaCIKIAogI2VuZGlmIC8qIElHVF9IICovCmRpZmYgLS1naXQgYS9saWIvaWd0X2F1eC5j IGIvbGliL2lndF9hdXguYwppbmRleCA0ZDA4ZDY4YmI5MzIuLmNkN2YxNDY0OWZlMiAxMDA2NDQK LS0tIGEvbGliL2lndF9hdXguYworKysgYi9saWIvaWd0X2F1eC5jCkBAIC01OSw2ICs1OSw3IEBA CiAjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCiAjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKICNp bmNsdWRlICJpZ3Rfa21zLmgiCisjaW5jbHVkZSAiaWd0X3BtLmgiCiAKIC8qKgogICogU0VDVElP TjppZ3RfYXV4CkBAIC01MzEsMTkgKzUzMiw3IEBAIGJvb2wgaWd0X3NldHVwX3J1bnRpbWVfcG0o dm9pZCkKIAlpZiAocG1fc3RhdHVzX2ZkID49IDApCiAJCXJldHVybiB0cnVlOwogCi0JLyogVGhl IEF1ZGlvIGRyaXZlciBjYW4gZ2V0IHJ1bnRpbWUgUE0gcmVmZXJlbmNlcywgc28gd2UgbmVlZCB0 byBtYWtlCi0JICogc3VyZSBpdHMgcnVudGltZSBQTSBpcyBlbmFibGVkLCBzbyBpdCBjYW4gcmVs ZWFzZSB0aGUgcmVmcyBhbmQKLQkgKiBhY3R1YWxseSBlbmFibGUgdXMgdG8gcnVudGltZSBzdXNw ZW5kLiAqLwotCWZkID0gb3BlbigiL3N5cy9tb2R1bGUvc25kX2hkYV9pbnRlbC9wYXJhbWV0ZXJz L3Bvd2VyX3NhdmUiLCBPX1dST05MWSk7Ci0JaWYgKGZkID49IDApIHsKLQkJaWd0X2Fzc2VydCh3 cml0ZShmZCwgIjFcbiIsIDIpID09IDIpOwotCQljbG9zZShmZCk7Ci0JfQotCWZkID0gb3Blbigi L3N5cy9idXMvcGNpL2RldmljZXMvMDAwMDowMDowMy4wL3Bvd2VyL2NvbnRyb2wiLCBPX1dST05M WSk7Ci0JaWYgKGZkID49IDApIHsKLQkJaWd0X2Fzc2VydCh3cml0ZShmZCwgImF1dG9cbiIsIDUp ID09IDUpOwotCQljbG9zZShmZCk7Ci0JfQorCWlndF9wbV9lbmFibGVfYXVkaW9fcnVudGltZV9w bSgpOwogCiAJLyogT3VyIGltcGxlbWVudGF0aW9uIHVzZXMgYXV0b3N1c3BlbmQuIFRyeSB0byBz ZXQgaXQgdG8gMG1zIHNvIHRoZSB0ZXN0CiAJICogc3VpdGUgZ29lcyBmYXN0ZXIgYW5kIHdlIGhh dmUgYSBoaWdoZXIgcHJvYmFiaWxpdHkgb2YgdHJpZ2dlcmluZyByYWNlCmRpZmYgLS1naXQgYS9s aWIvaWd0X3BtLmMgYi9saWIvaWd0X3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5mMmUxM2JhNmE0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X3BtLmMK QEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMywgMjAxNSBJbnRlbCBD b3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAor ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKiBBdXRob3JzOgorICogICAgUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRl bC5jb20+CisgKiAgICBEYXZpZCBXZWluZWhhbGwgPGRhdmlkLndlaW5laGFsbEBpbnRlbC5jb20+ CisgKgorICovCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1 ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor I2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lz L3R5cGVzLmg+CisKKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiaWd0X3BtLmgiCisK K2VudW0geworCVBPTElDWV9VTktOT1dOID0gLTEsCisJUE9MSUNZX01BWF9QRVJGT1JNQU5DRSA9 IDAsCisJUE9MSUNZX01FRElVTV9QT1dFUiA9IDEsCisJUE9MSUNZX01JTl9QT1dFUiA9IDIKK307 CisKKyNkZWZpbmUgTUFYX1BFUkZPUk1BTkNFX1NUUgkibWF4X3BlcmZvcm1hbmNlXG4iCisjZGVm aW5lIE1FRElVTV9QT1dFUl9TVFIJIm1lZGl1bV9wb3dlclxuIgorI2RlZmluZSBNSU5fUE9XRVJf U1RSCQkibWluX3Bvd2VyXG4iCisvKiBSZW1lbWJlciB0byBmaXggdGhpcyBpZiBhZGRpbmcgbG9u Z2VyIHN0cmluZ3MgKi8KKyNkZWZpbmUgTUFYX1BPTElDWV9TVFJMRU4Jc3RybGVuKE1BWF9QRVJG T1JNQU5DRV9TVFIpCisKKy8qKgorICogU0VDVElPTjppZ3RfcG0KKyAqIEBzaG9ydF9kZXNjcmlw dGlvbjogUG93ZXIgTWFuYWdlbWVudCByZWxhdGVkIGhlbHBlcnMKKyAqIEB0aXRsZTogSUdUIFBN CisgKiBAaW5jbHVkZTogaWd0X3BtLmgKKyAqCisgKiBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgdmFy aW91cyBoZWxwZXJzIHRvIGVuYWJsZSBwb3dlciBtYW5hZ2VtZW50LAorICogYW5kIGluIHNvbWUg Y2FzZXMgc3Vic2VxdWVudGx5IGFsbG93IHJlc3RvcmluZyBvZiB0aGUgb2xkIGJlaGF2aW91ciBv ZiwKKyAqIHZhcmlvdXMgZXh0ZXJuYWwgY29tcG9uZW50cyB0aGF0IGJ5IGRlZmF1bHQgYXJlIHNl dCB1cCBpbiBhIHdheQorICogdGhhdCBpbnRlcmZlcmVzIHdpdGggdGhlIHRlc3Rpbmcgb2Ygb3Vy IHBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eS4KKyAqLworLyoqCisgKiBpZ3RfcG1fZW5h YmxlX2F1ZGlvX3J1bnRpbWVfcG06CisgKgorICogV2Uga25vdyB0aGF0IGlmIHdlIGRvbid0IGVu YWJsZSBhdWRpbyBydW50aW1lIFBNLCBzbmRfaGRhX2ludGVsIHdpbGwgbmV2ZXIKKyAqIHJlbGVh c2UgaXRzIHBvd2VyIHdlbGwgcmVmY291bnQsIGFuZCB3ZSdsbCBuZXZlciByZWFjaCB0aGUgTFBT UCBzYXRlLgorICogVGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIHJlbGVhc2UgdGhl IHBvd2VyIHdlbGwgaWYgd2UgZW5hYmxlCisgKiBydW50aW1lIFBNLCBidXQgYXQgbGVhc3Qgd2Ug Y2FuIHRyeS4KKyAqCisgKiBXZSBkb24ndCBoYXZlIGFueSBhc3NlcnRpb25zIG9uIG9wZW4gc2lu Y2UgdGhlIHVzZXIgbWF5IG5vdCBldmVuIGhhdmUKKyAqIHNuZF9oZGFfaW50ZWwgbG9hZGVkLCB3 aGljaCBpcyBub3QgYSBwcm9ibGVtLgorICovCit2b2lkIGlndF9wbV9lbmFibGVfYXVkaW9fcnVu dGltZV9wbSh2b2lkKQoreworCWludCBmZDsKKworCWZkID0gb3BlbigiL3N5cy9tb2R1bGUvc25k X2hkYV9pbnRlbC9wYXJhbWV0ZXJzL3Bvd2VyX3NhdmUiLCBPX1dST05MWSk7CisJaWYgKGZkID49 IDApIHsKKwkJaWd0X2Fzc2VydF9lcSh3cml0ZShmZCwgIjFcbiIsIDIpLCAyKTsKKwkJY2xvc2Uo ZmQpOworCX0KKwlmZCA9IG9wZW4oIi9zeXMvYnVzL3BjaS9kZXZpY2VzLzAwMDA6MDA6MDMuMC9w b3dlci9jb250cm9sIiwgT19XUk9OTFkpOworCWlmIChmZCA+PSAwKSB7CisJCWlndF9hc3NlcnRf ZXEod3JpdGUoZmQsICJhdXRvXG4iLCA1KSwgNSk7CisJCWNsb3NlKGZkKTsKKwl9CisJLyogR2l2 ZSBzb21lIHRpbWUgZm9yIGl0IHRvIHJlYWN0LiAqLworCXNsZWVwKDEpOworfQorCisvKioKKyAq IGlndF9wbV9lbmFibGVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQ6CisgKgorICogRW5hYmxl IHRoZSBtaW5fcG93ZXIgcG9saWN5IGZvciBTQVRBIGxpbmsgcG93ZXIgbWFuYWdlbWVudC4KKyAq IFdpdGhvdXQgdGhpcyB3ZSBjYW5ub3QgcmVhY2ggZGVlcCBydW50aW1lIHBvd2VyIHN0YXRlcy4K KyAqCisgKiBXZSBkb24ndCBoYXZlIGFueSBhc3NlcnRpb25zIG9uIG9wZW4gc2luY2UgdGhlIHN5 c3RlbSBtaWdodCBub3QgaGF2ZQorICogYSBTQVRBIGhvc3QuCisgKgorICogUmV0dXJuczoKKyAq IEFuIG9wYXF1ZSBwb2ludGVyIHRvIHRoZSBkYXRhIG5lZWRlZCB0byByZXN0b3JlIHRoZSBkZWZh dWx0IHZhbHVlcworICogYWZ0ZXIgdGhlIHRlc3QgaGFzIHRlcm1pbmF0ZWQsIG9yIE5VTEwgaWYg U0FUQSBsaW5rIHBvd2VyIG1hbmFnZW1lbnQKKyAqIGlzIG5vdCBzdXBwb3J0ZWQuIFRoaXMgcG9p bnRlciBzaG91bGQgYmUgZnJlZWQgd2hlbiBubyBsb25nZXIgdXNlZAorICogKHR5cGljYWxseSBh ZnRlciBoYXZpbmcgY2FsbGVkIHJlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFuYWdlbWVudCku CisgKi8KK2ludDhfdCAqaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCh2 b2lkKQoreworCWludCBmZCwgaTsKKwlzc2l6ZV90IGxlbjsKKwljaGFyICpidWY7CisJY2hhciAq ZmlsZV9uYW1lOworCWludDhfdCAqbGlua19wbV9wb2xpY2llcyA9IE5VTEw7CisKKwlmaWxlX25h bWUgPSBtYWxsb2MoUEFUSF9NQVgpOworCWJ1ZiA9IG1hbGxvYyhNQVhfUE9MSUNZX1NUUkxFTiAr IDEpOworCisJZm9yIChpID0gMDsgOyBpKyspIHsKKwkJaW50OF90IHBvbGljeTsKKworCQlzbnBy aW50ZihmaWxlX25hbWUsIFBBVEhfTUFYLAorCQkJICIvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0 JWQvbGlua19wb3dlcl9tYW5hZ2VtZW50X3BvbGljeSIsCisJCQkgaSk7CisKKwkJZmQgPSBvcGVu KGZpbGVfbmFtZSwgT19SRFdSKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWJyZWFrOworCisJCWxlbiA9 IHJlYWQoZmQsIGJ1ZiwgTUFYX1BPTElDWV9TVFJMRU4pOworCQlidWZbbGVuXSA9ICdcMCc7CisK KwkJaWYgKCFzdHJuY21wKE1BWF9QRVJGT1JNQU5DRV9TVFIsIGJ1ZiwKKwkJCSAgICAgc3RybGVu KE1BWF9QRVJGT1JNQU5DRV9TVFIpKSkKKwkJCXBvbGljeSA9IFBPTElDWV9NQVhfUEVSRk9STUFO Q0U7CisJCWVsc2UgaWYgKCFzdHJuY21wKE1FRElVTV9QT1dFUl9TVFIsIGJ1ZiwKKwkJCQkgIHN0 cmxlbihNRURJVU1fUE9XRVJfU1RSKSkpCisJCQlwb2xpY3kgPSBQT0xJQ1lfTUVESVVNX1BPV0VS OworCQllbHNlIGlmICghc3RybmNtcChNSU5fUE9XRVJfU1RSLCBidWYsCisJCQkJICBzdHJsZW4o TUlOX1BPV0VSX1NUUikpKQorCQkJcG9saWN5ID0gUE9MSUNZX01JTl9QT1dFUjsKKwkJZWxzZQor CQkJcG9saWN5ID0gUE9MSUNZX1VOS05PV047CisKKwkJaWYgKCEoaSAlIDI1NikpCisJCQlsaW5r X3BtX3BvbGljaWVzID0gcmVhbGxvYyhsaW5rX3BtX3BvbGljaWVzLAorCQkJCQkJICAgKGkgLyAy NTYgKyAxKSAqIDI1NiArIDEpOworCisJCWxpbmtfcG1fcG9saWNpZXNbaV0gPSBwb2xpY3k7CisJ CWxpbmtfcG1fcG9saWNpZXNbaSArIDFdID0gMDsKKworCQkvKiBJZiB0aGUgcG9saWN5IGlzIHNv bWV0aGluZyB3ZSBkb24ndCBrbm93IGFib3V0LAorCQkgKiBkb24ndCB0b3VjaCBpdCwgc2luY2Ug d2UgbWlnaHQgcG90ZW50aWFsbHkgYnJlYWsgdGhpbmdzLgorCQkgKiBBbmQgd2Ugb2J2aW91c2x5 IGRvbid0IG5lZWQgdG8gdG91Y2ggYW55dGhpbmcgaWYgdGhlCisJCSAqIHNldHRpbmcgaXMgYWxy ZWFkeSBjb3JyZWN0Li4uCisJCSAqLworCQlpZiAocG9saWN5ICE9IFBPTElDWV9VTktOT1dOICYm CisJCSAgICBwb2xpY3kgIT0gUE9MSUNZX01JTl9QT1dFUikgeworCQkJbHNlZWsoZmQsIDAsIFNF RUtfU0VUKTsKKwkJCWlndF9hc3NlcnRfZXEod3JpdGUoZmQsIE1JTl9QT1dFUl9TVFIsCisJCQkJ CSAgICBzdHJsZW4oTUlOX1BPV0VSX1NUUikpLAorCQkJCSAgICAgIHN0cmxlbihNSU5fUE9XRVJf U1RSKSk7CisJCX0KKwkJY2xvc2UoZmQpOworCX0KKwlmcmVlKGJ1Zik7CisJZnJlZShmaWxlX25h bWUpOworCisJcmV0dXJuIGxpbmtfcG1fcG9saWNpZXM7Cit9CisKKy8qKgorICogaXRfcG1fcmVz dG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudDoKKyAqIEBwbV9kYXRhOiBBbiBvcGFxdWUg cG9pbnRlciB3aXRoIHNhdmVkIGxpbmsgUE0gcG9saWNpZXM7CisgKiAgICAgICAgICAgSWYgTlVM TCBpcyBwYXNzZWQgd2UgZm9yY2UgZW5hYmxlIHRoZSAibWF4X3BlcmZvcm1hbmNlIiBwb2xpY3ku CisgKgorICogUmVzdG9yZSB0aGUgbGluayBwb3dlciBtYW5hZ2VtZW50IHBvbGljaWVzIHRvIHRo ZSB2YWx1ZXMKKyAqIHByaW9yIHRvIGVuYWJsaW5nIG1pbl9wb3dlci4KKyAqCisgKiBDYXZlYXQ6 IElmIHRoZSBzeXN0ZW0gc3VwcG9ydHMgaG90cGx1Z2dpbmcgYW5kIGhvdHBsdWdnaW5nIHRha2Vz CisgKiAgICAgICAgIHBsYWNlIGR1cmluZyBvdXIgdGVzdGluZyBzbyB0aGF0IHRoZSBob3N0cyBj aGFuZ2UgbnVtYmVycworICogICAgICAgICB3ZSBtaWdodCByZXN0b3JlIHRoZSBzZXR0aW5ncyB0 byB0aGUgd3JvbmcgaG9zdHMuCisgKi8KK3ZvaWQgaWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bv d2VyX21hbmFnZW1lbnQoaW50OF90ICpwbV9kYXRhKQoreworCWludCBmZCwgaTsKKwljaGFyICpm aWxlX25hbWU7CisKKwkvKiBEaXNrIHJ1bnRpbWUgUE0gcG9saWNpZXMuICovCisJZmlsZV9uYW1l ID0gbWFsbG9jKFBBVEhfTUFYKTsKKwlmb3IgKGkgPSAwOyA7IGkrKykgeworCQlpbnQ4X3QgcG9s aWN5OworCisJCWlmICghcG1fZGF0YSkKKwkJCXBvbGljeSA9IFBPTElDWV9NQVhfUEVSRk9STUFO Q0U7CisJCWVsc2UgaWYgKHBtX2RhdGFbaV0gPT0gUE9MSUNZX1VOS05PV04pCisJCQljb250aW51 ZTsKKwkJZWxzZQorCQkJcG9saWN5ID0gcG1fZGF0YVtpXTsKKworCQlzbnByaW50ZihmaWxlX25h bWUsIFBBVEhfTUFYLAorCQkJICIvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0JWQvbGlua19wb3dl cl9tYW5hZ2VtZW50X3BvbGljeSIsCisJCQkgaSk7CisKKwkJZmQgPSBvcGVuKGZpbGVfbmFtZSwg T19XUk9OTFkpOworCQlpZiAoZmQgPCAwKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChwb2xpY3kp IHsKKwkJZGVmYXVsdDoKKwkJY2FzZSBQT0xJQ1lfTUFYX1BFUkZPUk1BTkNFOgorCQkJaWd0X2Fz c2VydF9lcSh3cml0ZShmZCwgTUFYX1BFUkZPUk1BTkNFX1NUUiwKKwkJCQkJICAgIHN0cmxlbihN QVhfUEVSRk9STUFOQ0VfU1RSKSksCisJCQkJICAgICAgc3RybGVuKE1BWF9QRVJGT1JNQU5DRV9T VFIpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9MSUNZX01FRElVTV9QT1dFUjoKKwkJCWlndF9h c3NlcnRfZXEod3JpdGUoZmQsIE1FRElVTV9QT1dFUl9TVFIsCisJCQkJCSAgICBzdHJsZW4oTUVE SVVNX1BPV0VSX1NUUikpLAorCQkJCSAgICAgIHN0cmxlbihNRURJVU1fUE9XRVJfU1RSKSk7CisJ CQlicmVhazsKKworCQljYXNlIFBPTElDWV9NSU5fUE9XRVI6CisJCQlpZ3RfYXNzZXJ0X2VxKHdy aXRlKGZkLCBNSU5fUE9XRVJfU1RSLAorCQkJCQkgICAgc3RybGVuKE1JTl9QT1dFUl9TVFIpKSwK KwkJCQkgICAgICBzdHJsZW4oTUlOX1BPV0VSX1NUUikpOworCQkJYnJlYWs7CisJCX0KKworCQlj bG9zZShmZCk7CisJfQorCWZyZWUoZmlsZV9uYW1lKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pZ3Rf cG0uaCBiL2xpYi9pZ3RfcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmMxNGZmMWY3YTBlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfcG0uaApAQCAtMCww ICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRl ZiBJR1RfUE1fSAorI2RlZmluZSBJR1RfUE1fSAorCit2b2lkIGlndF9wbV9lbmFibGVfYXVkaW9f cnVudGltZV9wbSh2b2lkKTsKK2ludDhfdCAqaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJf bWFuYWdlbWVudCh2b2lkKTsKK3ZvaWQgaWd0X3BtX3Jlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21h bmFnZW1lbnQoaW50OF90ICpwbV9kYXRhKTsKKworI2VuZGlmIC8qIElHVF9QTV9IICovCmRpZmYg LS1naXQgYS90ZXN0cy9wbV9scHNwLmMgYi90ZXN0cy9wbV9scHNwLmMKaW5kZXggMjU3YWUxYjhi MWQ5Li42Y2I2OTdlZDBiZDUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3BtX2xwc3AuYworKysgYi90ZXN0 cy9wbV9scHNwLmMKQEAgLTMxLDI5ICszMSw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKIAot LyogV2Uga25vdyB0aGF0IGlmIHdlIGRvbid0IGVuYWJsZSBhdWRpbyBydW50aW1lIFBNLCBzbmRf aGRhX2ludGVsIHdpbGwgbmV2ZXIKLSAqIHJlbGVhc2UgaXRzIHBvd2VyIHdlbGwgcmVmY291bnQs IGFuZCB3ZSdsbCBuZXZlciByZWFjaCB0aGUgTFBTUCBzYXRlLiBPVE9ICi0gKiB0aGVyZSdzIG5v IGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgcmVsZWFzZSB0aGUgcG93ZXIgd2VsbCBpZiB3ZSBlbmFi bGUgcnVudGltZQotICogUE0sIGJ1dCBhdCBsZWFzdCB3ZSBjYW4gdHJ5LiAgV2UgZG9uJ3QgaGF2 ZSBhbnkgYXNzZXJ0aW9ucyBzaW5jZSB0aGUgdXNlciBtYXkKLSAqIG5vdCBldmVuIGhhdmUgc25k X2hkYV9pbnRlbCBsb2FkZWQsIHdoaWNoIGlzIG5vdCBhIHByb2JsZW0uICovCi1zdGF0aWMgdm9p ZCBkaXNhYmxlX2F1ZGlvX3J1bnRpbWVfcG0odm9pZCkKLXsKLQlpbnQgZmQ7Ci0KLQlmZCA9IG9w ZW4oIi9zeXMvbW9kdWxlL3NuZF9oZGFfaW50ZWwvcGFyYW1ldGVycy9wb3dlcl9zYXZlIiwgT19X Uk9OTFkpOwotCWlmIChmZCA+PSAwKSB7Ci0JCWlndF9hc3NlcnRfZXEod3JpdGUoZmQsICIxXG4i LCAyKSwgMik7Ci0JCWNsb3NlKGZkKTsKLQl9Ci0JZmQgPSBvcGVuKCIvc3lzL2J1cy9wY2kvZGV2 aWNlcy8wMDAwOjAwOjAzLjAvcG93ZXIvY29udHJvbCIsIE9fV1JPTkxZKTsKLQlpZiAoZmQgPj0g MCkgewotCQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKGZkLCAiYXV0b1xuIiwgNSksIDUpOwotCQljbG9z ZShmZCk7Ci0JfQotCS8qIEdpdmUgc29tZSB0aW1lIGZvciBpdCB0byByZWFjdC4gKi8KLQlzbGVl cCgxKTsKLX0KLQogc3RhdGljIGJvb2wgc3VwcG9ydHNfbHBzcCh1aW50MzJfdCBkZXZpZCkKIHsK IAlyZXR1cm4gSVNfSEFTV0VMTChkZXZpZCkgfHwgSVNfQlJPQURXRUxMKGRldmlkKTsKQEAgLTIz NCw3ICsyMTEsNyBAQCBpZ3RfbWFpbgogCQkJZHJtX2Nvbm5lY3RvcnNbaV0gPSBkcm1Nb2RlR2V0 Q29ubmVjdG9yQ3VycmVudChkcm1fZmQsCiAJCQkJCQkJZHJtX3Jlcy0+Y29ubmVjdG9yc1tpXSk7 CiAKLQkJZGlzYWJsZV9hdWRpb19ydW50aW1lX3BtKCk7CisJCWlndF9wbV9lbmFibGVfYXVkaW9f cnVudGltZV9wbSgpOwogCiAJCWlndF9yZXF1aXJlKHN1cHBvcnRzX2xwc3AoZGV2aWQpKTsKIApk aWZmIC0tZ2l0IGEvdGVzdHMvcG1fcnBtLmMgYi90ZXN0cy9wbV9ycG0uYwppbmRleCA1NWZkYjMx Y2I3MjMuLjZkNjk1YTVlM2UwMSAxMDA2NDQKLS0tIGEvdGVzdHMvcG1fcnBtLmMKKysrIGIvdGVz dHMvcG1fcnBtLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IMKpIDIwMTMgSW50 ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCDCqSAyMDEzLCAyMDE1IEludGVsIENvcnBvcmF0 aW9uCiAgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCkBAIC0xMTEs NiArMTExLDggQEAgc3RydWN0IG1vZGVzZXRfcGFyYW1zIGxwc3BfbW9kZV9wYXJhbXM7CiBzdHJ1 Y3QgbW9kZXNldF9wYXJhbXMgbm9uX2xwc3BfbW9kZV9wYXJhbXM7CiBzdHJ1Y3QgbW9kZXNldF9w YXJhbXMgKmRlZmF1bHRfbW9kZV9wYXJhbXM7CiAKK3N0YXRpYyBpbnQ4X3QgKnBtX2RhdGEgPSBO VUxMOworCiAvKiBJZiB0aGUgcmVhZCBmYWlscywgdGhlbiB0aGUgbWFjaGluZSBkb2Vzbid0IHN1 cHBvcnQgUEM4KyByZXNpZGVuY2llcy4gKi8KIHN0YXRpYyBib29sIHN1cHBvcnRzX3BjOF9wbHVz X3Jlc2lkZW5jaWVzKHZvaWQpCiB7CkBAIC02NzcsMjUgKzY3OSw3IEBAIHN0YXRpYyB2b2lkIHNl dHVwX3BjOCh2b2lkKQogICogYW55dGhpbmcsIGp1c3QgdHJ5IHRvIGhlbHAgd2l0aCB0aGUgbW9y ZSBjb21tb24gcHJvYmxlbXMuICovCiBzdGF0aWMgdm9pZCBzZXR1cF9ub25fZ3JhcGhpY3NfcnVu dGltZV9wbSh2b2lkKQogewotCWludCBmZCwgaTsKLQljaGFyICpmaWxlX25hbWU7Ci0KLQkvKiBE aXNrIHJ1bnRpbWUgUE0gcG9saWNpZXMuICovCi0JZmlsZV9uYW1lID0gbWFsbG9jKFBBVEhfTUFY KTsKLQlmb3IgKGkgPSAwOyA7IGkrKykgewotCi0JCXNucHJpbnRmKGZpbGVfbmFtZSwgUEFUSF9N QVgsCi0JCQkgIi9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3QlZC9saW5rX3Bvd2VyX21hbmFnZW1l bnRfcG9saWN5IiwKLQkJCSBpKTsKLQotCQlmZCA9IG9wZW4oZmlsZV9uYW1lLCBPX1dST05MWSk7 Ci0JCWlmIChmZCA8IDApCi0JCQlicmVhazsKLQotCQlpZ3RfYXNzZXJ0KHdyaXRlKGZkLCAibWlu X3Bvd2VyXG4iLCAxMCkgPT0gMTApOwotCQljbG9zZShmZCk7Ci0JfQotCWZyZWUoZmlsZV9uYW1l KTsKKwlwbV9kYXRhID0gaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCgp OwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF9lbnZpcm9ubWVudCh2b2lkKQpAQCAtNzEzLDExICs2 OTcsMTYgQEAgc3RhdGljIHZvaWQgc2V0dXBfZW52aXJvbm1lbnQodm9pZCkKIAlpZ3RfaW5mbygi UEM4IHJlc2lkZW5jeSBzdXBwb3J0OiAlZFxuIiwgaGFzX3BjOCk7CiAKIAlpZ3RfcmVxdWlyZSho YXNfcnVudGltZV9wbSk7Cit9CiAKK3N0YXRpYyB2b2lkIHJlc3RvcmVfZW52aXJvbm1lbnQodm9p ZCkKK3sKKwlpZ3RfcG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudChwbV9kYXRh KTsKIH0KIAogc3RhdGljIHZvaWQgdGVhcmRvd25fZW52aXJvbm1lbnQodm9pZCkKIHsKKwlyZXN0 b3JlX2Vudmlyb25tZW50KCk7CiAJZmluaV9tb2RlX3NldF9kYXRhKCZtc19kYXRhKTsKIAlkcm1D bG9zZShkcm1fZmQpOwogCWNsb3NlKG1zcl9mZCk7Ci0tIAoyLjYuMwoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK