From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Weinehall Subject: [PATCH i-g-t] lib/pm_workarounds: Lib for PM workarounds Date: Tue, 8 Dec 2015 10:50:40 +0200 Message-ID: <1449564640-6001-2-git-send-email-david.weinehall@linux.intel.com> References: <1449564640-6001-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 mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 5B71F6E51E for ; Tue, 8 Dec 2015 00:50:41 -0800 (PST) In-Reply-To: <1449564640-6001-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 TW92ZSB3b3JrYXJvdW5kcyBmb3IgcG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIGlzc3VlcyBpbiBl eHRlcm5hbApjb21wb25lbnRzIGludG8gYSBzZXBhcmF0ZSBsaWJyYXJ5LCBhbmQgbW9kaWZ5IHRo ZSB1c2VycyBvZiBzdWNoCndvcmthcm91bmRzIGFjY29yZGluZ2x5LiAgVGhpcyBjdXJyZW50bHkg aW52b2x2ZXMgSEQgYXVkaW8gYW5kClNBVEEgbGluayBwb3dlciBtYW5hZ2VtZW50LiAgRm9yIFNB VEEgbGluayBQTSB0aGVyZSdzIGFsc28gY29kZSB0bwpzYXZlIHRoZSBwcmV2aW91cyBzZXR0aW5n cywgdG8gYWxsb3cgZm9yIHJlc2V0dGluZyB0aGUgdmFsdWVzIGFmdGVyCndlJ3ZlIGZpbmlzaGVk IHRlc3RpbmcuCgpTaWduZWQtb2ZmLWJ5OiBEYXZpZCBXZWluZWhhbGwgPGRhdmlkLndlaW5laGFs bEBpbnRlbC5jb20+Ci0tLQogbGliL01ha2VmaWxlLnNvdXJjZXMgfCAgIDIgKwogbGliL2lndC5o ICAgICAgICAgICAgfCAgIDEgKwogbGliL2lndF9hdXguYyAgICAgICAgfCAgMTUgKy0tLQogbGli L3BtX3dvcmthcm91bmRzLmMgfCAyMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBsaWIvcG1fd29ya2Fyb3VuZHMuaCB8ICAzMSArKysrKysrCiB0 ZXN0cy9wbV9scHNwLmMgICAgICB8ICAyNSArLS0tLS0KIHRlc3RzL3BtX3JwbS5jICAgICAgIHwg IDI5ICsrLS0tLS0KIDcgZmlsZXMgY2hhbmdlZCwgMjc5IGluc2VydGlvbnMoKyksIDU3IGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9wbV93b3JrYXJvdW5kcy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgbGliL3BtX3dvcmthcm91bmRzLmgKCmRpZmYgLS1naXQgYS9saWIvTWFrZWZp bGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGNiMjBmMDMwY2JlYy4uMjVm NjdlZGJkMTlhIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuc291cmNlcworKysgYi9saWIvTWFr ZWZpbGUuc291cmNlcwpAQCAtNTksNiArNTksOCBAQCBsaWJpbnRlbF90b29sc19sYV9TT1VSQ0VT ID0gCVwKIAlpZ3RfY29yZS5oCQlcCiAJaWd0X2RyYXcuYwkJXAogCWlndF9kcmF3LmgJCVwKKwlw bV93b3JrYXJvdW5kcy5jCVwKKwlwbV93b3JrYXJvdW5kcy5oCVwKIAkkKE5VTEwpCiAKIC5QSE9O WTogdmVyc2lvbi5oLnRtcApkaWZmIC0tZ2l0IGEvbGliL2lndC5oIGIvbGliL2lndC5oCmluZGV4 IDNiZTI1NTExYmI3Ny4uYmIxYzE5OWJiYmVjIDEwMDY0NAotLS0gYS9saWIvaWd0LmgKKysrIGIv bGliL2lndC5oCkBAIC00NCw1ICs0NCw2IEBACiAjaW5jbHVkZSAibWVkaWFfZmlsbC5oIgogI2lu Y2x1ZGUgIm1lZGlhX3NwaW4uaCIKICNpbmNsdWRlICJyZW5kZXJjb3B5LmgiCisjaW5jbHVkZSAi cG1fd29ya2Fyb3VuZHMuaCIKIAogI2VuZGlmIC8qIElHVF9IICovCmRpZmYgLS1naXQgYS9saWIv aWd0X2F1eC5jIGIvbGliL2lndF9hdXguYwppbmRleCA0ZDA4ZDY4YmI5MzIuLmRhOTc3MGVjODhl YSAxMDA2NDQKLS0tIGEvbGliL2lndF9hdXguYworKysgYi9saWIvaWd0X2F1eC5jCkBAIC01OSw2 ICs1OSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCiAjaW5jbHVkZSAiaW9jdGxfd3JhcHBl cnMuaCIKICNpbmNsdWRlICJpZ3Rfa21zLmgiCisjaW5jbHVkZSAicG1fd29ya2Fyb3VuZHMuaCIK IAogLyoqCiAgKiBTRUNUSU9OOmlndF9hdXgKQEAgLTUzMSwxOSArNTMyLDcgQEAgYm9vbCBpZ3Rf c2V0dXBfcnVudGltZV9wbSh2b2lkKQogCWlmIChwbV9zdGF0dXNfZmQgPj0gMCkKIAkJcmV0dXJu IHRydWU7CiAKLQkvKiBUaGUgQXVkaW8gZHJpdmVyIGNhbiBnZXQgcnVudGltZSBQTSByZWZlcmVu Y2VzLCBzbyB3ZSBuZWVkIHRvIG1ha2UKLQkgKiBzdXJlIGl0cyBydW50aW1lIFBNIGlzIGVuYWJs ZWQsIHNvIGl0IGNhbiByZWxlYXNlIHRoZSByZWZzIGFuZAotCSAqIGFjdHVhbGx5IGVuYWJsZSB1 cyB0byBydW50aW1lIHN1c3BlbmQuICovCi0JZmQgPSBvcGVuKCIvc3lzL21vZHVsZS9zbmRfaGRh X2ludGVsL3BhcmFtZXRlcnMvcG93ZXJfc2F2ZSIsIE9fV1JPTkxZKTsKLQlpZiAoZmQgPj0gMCkg ewotCQlpZ3RfYXNzZXJ0KHdyaXRlKGZkLCAiMVxuIiwgMikgPT0gMik7Ci0JCWNsb3NlKGZkKTsK LQl9Ci0JZmQgPSBvcGVuKCIvc3lzL2J1cy9wY2kvZGV2aWNlcy8wMDAwOjAwOjAzLjAvcG93ZXIv Y29udHJvbCIsIE9fV1JPTkxZKTsKLQlpZiAoZmQgPj0gMCkgewotCQlpZ3RfYXNzZXJ0KHdyaXRl KGZkLCAiYXV0b1xuIiwgNSkgPT0gNSk7Ci0JCWNsb3NlKGZkKTsKLQl9CisJZW5hYmxlX2F1ZGlv X3J1bnRpbWVfcG0oKTsKIAogCS8qIE91ciBpbXBsZW1lbnRhdGlvbiB1c2VzIGF1dG9zdXNwZW5k LiBUcnkgdG8gc2V0IGl0IHRvIDBtcyBzbyB0aGUgdGVzdAogCSAqIHN1aXRlIGdvZXMgZmFzdGVy IGFuZCB3ZSBoYXZlIGEgaGlnaGVyIHByb2JhYmlsaXR5IG9mIHRyaWdnZXJpbmcgcmFjZQpkaWZm IC0tZ2l0IGEvbGliL3BtX3dvcmthcm91bmRzLmMgYi9saWIvcG1fd29ya2Fyb3VuZHMuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFlOWRhNGZhZDkxMAotLS0gL2Rl di9udWxsCisrKyBiL2xpYi9wbV93b3JrYXJvdW5kcy5jCkBAIC0wLDAgKzEsMjMzIEBACisvKgor ICogQ29weXJpZ2h0IMKpIDIwMTMsIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAg IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgorICogICAgRGF2aWQgV2Vp bmVoYWxsIDxkYXZpZC53ZWluZWhhbGxAaW50ZWwuY29tPgorICoKKyAqLworI2luY2x1ZGUgPGZj bnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp bmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSAi ZHJtdGVzdC5oIgorI2luY2x1ZGUgInBtX3dvcmthcm91bmRzLmgiCisKK2VudW0geworCVBPTElD WV9VTktOT1dOID0gLTEsCisJUE9MSUNZX01BWF9QRVJGT1JNQU5DRSA9IDAsCisJUE9MSUNZX01F RElVTV9QT1dFUiA9IDEsCisJUE9MSUNZX01JTl9QT1dFUiA9IDIKK307CisKKyNkZWZpbmUgTUFY X1BFUkZPUk1BTkNFX1NUUgkibWF4X3BlcmZvcm1hbmNlXG4iCisjZGVmaW5lIE1FRElVTV9QT1dF Ul9TVFIJIm1lZGl1bV9wb3dlclxuIgorI2RlZmluZSBNSU5fUE9XRVJfU1RSCQkibWluX3Bvd2Vy XG4iCisvKiBSZW1lbWJlciB0byBmaXggdGhpcyBpZiBhZGRpbmcgbG9uZ2VyIHN0cmluZ3MgKi8K KyNkZWZpbmUgTUFYX1BPTElDWV9TVFJMRU4Jc3RybGVuKE1BWF9QRVJGT1JNQU5DRV9TVFIpCisK Ky8qKgorICogU0VDVElPTjpwbV93b3JrYXJvdW5kcworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBX b3JrYXJvdW5kcyBmb3IgUE0gaXNzdWVzIGluIGV4dGVybmFsIGNvbXBvbmVudHMKKyAqIEB0aXRs ZTogUE0gV29ya2Fyb3VuZHMKKyAqIEBpbmNsdWRlOiBpZ3QuaAorICoKKyAqIFRoaXMgbGlicmFy eSBwcm92aWRlcyB2YXJpb3VzIGhlbHBlcnMgdGhhdCB3aWxsIHdvcmthcm91bmQsCisgKiBhbmQg aW4gc29tZSBjYXNlcyBzdWJzZXF1ZW50bHkgYWxsb3cgcmVzdG9yaW5nIG9mIHRoZSBvbGQgYmVo YXZpb3VyIG9mLAorICogdmFyaW91cyBleHRlcm5hbCBjb21wb25lbnRzIHRoYXQgYnkgZGVmYXVs dCBhcmUgc2V0IHVwIGluIGEgd2F5CisgKiB0aGF0IGludGVyZmVyZXMgd2l0aCB0aGUgdGVzdGlu ZyBvZiBvdXIgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5LgorICovCisvKioKKyAqIGVu YWJsZV9hdWRpb19ydW50aW1lX3BtOgorICoKKyAqIFdlIGtub3cgdGhhdCBpZiB3ZSBkb24ndCBl bmFibGUgYXVkaW8gcnVudGltZSBQTSwgc25kX2hkYV9pbnRlbCB3aWxsIG5ldmVyCisgKiByZWxl YXNlIGl0cyBwb3dlciB3ZWxsIHJlZmNvdW50LCBhbmQgd2UnbGwgbmV2ZXIgcmVhY2ggdGhlIExQ U1Agc2F0ZS4KKyAqIFRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCByZWxlYXNlIHRo ZSBwb3dlciB3ZWxsIGlmIHdlIGVuYWJsZQorICogcnVudGltZSBQTSwgYnV0IGF0IGxlYXN0IHdl IGNhbiB0cnkuCisgKgorICogV2UgZG9uJ3QgaGF2ZSBhbnkgYXNzZXJ0aW9ucyBvbiBvcGVuIHNp bmNlIHRoZSB1c2VyIG1heSBub3QgZXZlbiBoYXZlCisgKiBzbmRfaGRhX2ludGVsIGxvYWRlZCwg d2hpY2ggaXMgbm90IGEgcHJvYmxlbS4KKyAqLwordm9pZCBlbmFibGVfYXVkaW9fcnVudGltZV9w bSh2b2lkKQoreworCWludCBmZDsKKworCWZkID0gb3BlbigiL3N5cy9tb2R1bGUvc25kX2hkYV9p bnRlbC9wYXJhbWV0ZXJzL3Bvd2VyX3NhdmUiLCBPX1dST05MWSk7CisJaWYgKGZkID49IDApIHsK KwkJaWd0X2Fzc2VydF9lcSh3cml0ZShmZCwgIjFcbiIsIDIpLCAyKTsKKwkJY2xvc2UoZmQpOwor CX0KKwlmZCA9IG9wZW4oIi9zeXMvYnVzL3BjaS9kZXZpY2VzLzAwMDA6MDA6MDMuMC9wb3dlci9j b250cm9sIiwgT19XUk9OTFkpOworCWlmIChmZCA+PSAwKSB7CisJCWlndF9hc3NlcnRfZXEod3Jp dGUoZmQsICJhdXRvXG4iLCA1KSwgNSk7CisJCWNsb3NlKGZkKTsKKwl9CisJLyogR2l2ZSBzb21l IHRpbWUgZm9yIGl0IHRvIHJlYWN0LiAqLworCXNsZWVwKDEpOworfQorCisvKioKKyAqIGVuYWJs ZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudDoKKyAqCisgKiBFbmFibGUgdGhlIG1pbl9wb3dl ciBwb2xpY3kgZm9yIFNBVEEgbGluayBwb3dlciBtYW5hZ2VtZW50LgorICogV2l0aG91dCB0aGlz IHdlIGNhbm5vdCByZWFjaCBkZWVwIHJ1bnRpbWUgcG93ZXIgc3RhdGVzLgorICoKKyAqIFdlIGRv bid0IGhhdmUgYW55IGFzc2VydGlvbnMgb24gb3BlbiBzaW5jZSB0aGUgc3lzdGVtIG1pZ2h0IG5v dCBoYXZlCisgKiBhIFNBVEEgaG9zdC4KKyAqCisgKiBSZXR1cm5zOgorICogQW4gb3BhcXVlIHBv aW50ZXIgdG8gdGhlIGRhdGEgbmVlZGVkIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgdmFsdWVzCisg KiBhZnRlciB0aGUgdGVzdCBoYXMgdGVybWluYXRlZCwgb3IgTlVMTCBpZiBTQVRBIGxpbmsgcG93 ZXIgbWFuYWdlbWVudAorICogaXMgbm90IHN1cHBvcnRlZC4gVGhpcyBwb2ludGVyIHNob3VsZCBi ZSBmcmVlZCB3aGVuIG5vIGxvbmdlciB1c2VkCisgKiAodHlwaWNhbGx5IGFmdGVyIGhhdmluZyBj YWxsZWQgcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYW5hZ2VtZW50KS4KKyAqLworaW50OF90 ICplbmFibGVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQodm9pZCkKK3sKKwlpbnQgZmQsIGk7 CisJc3NpemVfdCBsZW47CisJY2hhciAqYnVmOworCWNoYXIgKmZpbGVfbmFtZTsKKwlpbnQ4X3Qg KmxpbmtfcG1fcG9saWNpZXMgPSBOVUxMOworCisJZmlsZV9uYW1lID0gbWFsbG9jKFBBVEhfTUFY KTsKKwlidWYgPSBtYWxsb2MoTUFYX1BPTElDWV9TVFJMRU4gKyAxKTsKKworCWZvciAoaSA9IDA7 IDsgaSsrKSB7CisJCWludDhfdCBwb2xpY3k7CisKKwkJc25wcmludGYoZmlsZV9uYW1lLCBQQVRI X01BWCwKKwkJCSAiL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdCVkL2xpbmtfcG93ZXJfbWFuYWdl bWVudF9wb2xpY3kiLAorCQkJIGkpOworCisJCWZkID0gb3BlbihmaWxlX25hbWUsIE9fUkRXUik7 CisJCWlmIChmZCA8IDApCisJCQlicmVhazsKKworCQlsZW4gPSByZWFkKGZkLCBidWYsIE1BWF9Q T0xJQ1lfU1RSTEVOKTsKKwkJYnVmW2xlbl0gPSAnXDAnOworCisJCWlmICghc3RybmNtcChNQVhf UEVSRk9STUFOQ0VfU1RSLCBidWYsCisJCQkgICAgIHN0cmxlbihNQVhfUEVSRk9STUFOQ0VfU1RS KSkpCisJCQlwb2xpY3kgPSBQT0xJQ1lfTUFYX1BFUkZPUk1BTkNFOworCQllbHNlIGlmICghc3Ry bmNtcChNRURJVU1fUE9XRVJfU1RSLCBidWYsCisJCQkJICBzdHJsZW4oTUVESVVNX1BPV0VSX1NU UikpKQorCQkJcG9saWN5ID0gUE9MSUNZX01FRElVTV9QT1dFUjsKKwkJZWxzZSBpZiAoIXN0cm5j bXAoTUlOX1BPV0VSX1NUUiwgYnVmLAorCQkJCSAgc3RybGVuKE1JTl9QT1dFUl9TVFIpKSkKKwkJ CXBvbGljeSA9IFBPTElDWV9NSU5fUE9XRVI7CisJCWVsc2UKKwkJCXBvbGljeSA9IFBPTElDWV9V TktOT1dOOworCisJCWlmICghKGkgJSAyNTYpKQorCQkJbGlua19wbV9wb2xpY2llcyA9IHJlYWxs b2MobGlua19wbV9wb2xpY2llcywKKwkJCQkJCSAgIChpIC8gMjU2ICsgMSkgKiAyNTYgKyAxKTsK KworCQlsaW5rX3BtX3BvbGljaWVzW2ldID0gcG9saWN5OworCQlsaW5rX3BtX3BvbGljaWVzW2kg KyAxXSA9IDA7CisKKwkJLyogSWYgdGhlIHBvbGljeSBpcyBzb21ldGhpbmcgd2UgZG9uJ3Qga25v dyBhYm91dCwKKwkJICogZG9uJ3QgdG91Y2ggaXQsIHNpbmNlIHdlIG1pZ2h0IHBvdGVudGlhbGx5 IGJyZWFrIHRoaW5ncy4KKwkJICogQW5kIHdlIG9idmlvdXNseSBkb24ndCBuZWVkIHRvIHRvdWNo IGFueXRoaW5nIGlmIHRoZQorCQkgKiBzZXR0aW5nIGlzIGFscmVhZHkgY29ycmVjdC4uLgorCQkg Ki8KKwkJaWYgKHBvbGljeSAhPSBQT0xJQ1lfVU5LTk9XTiAmJgorCQkgICAgcG9saWN5ICE9IFBP TElDWV9NSU5fUE9XRVIpIHsKKwkJCWxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7CisJCQlpZ3RfYXNz ZXJ0X2VxKHdyaXRlKGZkLCBNSU5fUE9XRVJfU1RSLAorCQkJCQkgICAgc3RybGVuKE1JTl9QT1dF Ul9TVFIpKSwKKwkJCQkgICAgICBzdHJsZW4oTUlOX1BPV0VSX1NUUikpOworCQl9CisJCWNsb3Nl KGZkKTsKKwl9CisJZnJlZShidWYpOworCWZyZWUoZmlsZV9uYW1lKTsKKworCXJldHVybiBsaW5r X3BtX3BvbGljaWVzOworfQorCisvKioKKyAqIHJlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFn ZW1lbnQ6CisgKiBAcG1fZGF0YTogQW4gb3BhcXVlIHBvaW50ZXIgd2l0aCBzYXZlZCBsaW5rIFBN IHBvbGljaWVzOworICogICAgICAgICAgIElmIE5VTEwgaXMgcGFzc2VkIHdlIGZvcmNlIGVuYWJs ZSB0aGUgIm1heF9wZXJmb3JtYW5jZSIgcG9saWN5LgorICoKKyAqIFJlc3RvcmUgdGhlIGxpbmsg cG93ZXIgbWFuYWdlbWVudCBwb2xpY2llcyB0byB0aGUgdmFsdWVzCisgKiBwcmlvciB0byBlbmFi bGluZyBtaW5fcG93ZXIuCisgKgorICogQ2F2ZWF0OiBJZiB0aGUgc3lzdGVtIHN1cHBvcnRzIGhv dHBsdWdnaW5nIGFuZCBob3RwbHVnZ2luZyB0YWtlcworICogICAgICAgICBwbGFjZSBkdXJpbmcg b3VyIHRlc3Rpbmcgc28gdGhhdCB0aGUgaG9zdHMgY2hhbmdlIG51bWJlcnMKKyAqICAgICAgICAg d2UgbWlnaHQgcmVzdG9yZSB0aGUgc2V0dGluZ3MgdG8gdGhlIHdyb25nIGhvc3RzLgorICovCit2 b2lkIHJlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoaW50OF90ICpwbV9kYXRhKQor eworCWludCBmZCwgaTsKKwljaGFyICpmaWxlX25hbWU7CisKKwkvKiBEaXNrIHJ1bnRpbWUgUE0g cG9saWNpZXMuICovCisJZmlsZV9uYW1lID0gbWFsbG9jKFBBVEhfTUFYKTsKKwlmb3IgKGkgPSAw OyA7IGkrKykgeworCQlpbnQ4X3QgcG9saWN5OworCisJCWlmICghcG1fZGF0YSkKKwkJCXBvbGlj eSA9IFBPTElDWV9NQVhfUEVSRk9STUFOQ0U7CisJCWVsc2UgaWYgKHBtX2RhdGFbaV0gPT0gUE9M SUNZX1VOS05PV04pCisJCQljb250aW51ZTsKKwkJZWxzZQorCQkJcG9saWN5ID0gcG1fZGF0YVtp XTsKKworCQlzbnByaW50ZihmaWxlX25hbWUsIFBBVEhfTUFYLAorCQkJICIvc3lzL2NsYXNzL3Nj c2lfaG9zdC9ob3N0JWQvbGlua19wb3dlcl9tYW5hZ2VtZW50X3BvbGljeSIsCisJCQkgaSk7CisK KwkJZmQgPSBvcGVuKGZpbGVfbmFtZSwgT19XUk9OTFkpOworCQlpZiAoZmQgPCAwKQorCQkJYnJl YWs7CisKKwkJc3dpdGNoIChwb2xpY3kpIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSBQT0xJQ1lfTUFY X1BFUkZPUk1BTkNFOgorCQkJaWd0X2Fzc2VydF9lcSh3cml0ZShmZCwgTUFYX1BFUkZPUk1BTkNF X1NUUiwKKwkJCQkJICAgIHN0cmxlbihNQVhfUEVSRk9STUFOQ0VfU1RSKSksCisJCQkJICAgICAg c3RybGVuKE1BWF9QRVJGT1JNQU5DRV9TVFIpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9MSUNZ X01FRElVTV9QT1dFUjoKKwkJCWlndF9hc3NlcnRfZXEod3JpdGUoZmQsIE1FRElVTV9QT1dFUl9T VFIsCisJCQkJCSAgICBzdHJsZW4oTUVESVVNX1BPV0VSX1NUUikpLAorCQkJCSAgICAgIHN0cmxl bihNRURJVU1fUE9XRVJfU1RSKSk7CisJCQlicmVhazsKKworCQljYXNlIFBPTElDWV9NSU5fUE9X RVI6CisJCQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKGZkLCBNSU5fUE9XRVJfU1RSLAorCQkJCQkgICAg c3RybGVuKE1JTl9QT1dFUl9TVFIpKSwKKwkJCQkgICAgICBzdHJsZW4oTUlOX1BPV0VSX1NUUikp OworCQkJYnJlYWs7CisJCX0KKworCQljbG9zZShmZCk7CisJfQorCWZyZWUoZmlsZV9uYW1lKTsK K30KZGlmZiAtLWdpdCBhL2xpYi9wbV93b3JrYXJvdW5kcy5oIGIvbGliL3BtX3dvcmthcm91bmRz LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44NjdlMzk4NmY5MWQK LS0tIC9kZXYvbnVsbAorKysgYi9saWIvcG1fd29ya2Fyb3VuZHMuaApAQCAtMCwwICsxLDMxIEBA CisvKgorICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBQTV9XT1JL QVJPVU5EU19ICisjZGVmaW5lIFBNX1dPUktBUk9VTkRTX0gKKwordm9pZCBlbmFibGVfYXVkaW9f cnVudGltZV9wbSh2b2lkKTsKK2ludDhfdCAqZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2Vt ZW50KHZvaWQpOwordm9pZCByZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KGludDhf dCAqcG1fZGF0YSk7CisKKyNlbmRpZiAvKiBQTV9XT1JLQVJPVU5EU19IICovCmRpZmYgLS1naXQg YS90ZXN0cy9wbV9scHNwLmMgYi90ZXN0cy9wbV9scHNwLmMKaW5kZXggMjU3YWUxYjhiMWQ5Li45 ZTNjMjQ3NzhlMzggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3BtX2xwc3AuYworKysgYi90ZXN0cy9wbV9s cHNwLmMKQEAgLTMxLDI5ICszMSw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKIAotLyogV2Ug a25vdyB0aGF0IGlmIHdlIGRvbid0IGVuYWJsZSBhdWRpbyBydW50aW1lIFBNLCBzbmRfaGRhX2lu dGVsIHdpbGwgbmV2ZXIKLSAqIHJlbGVhc2UgaXRzIHBvd2VyIHdlbGwgcmVmY291bnQsIGFuZCB3 ZSdsbCBuZXZlciByZWFjaCB0aGUgTFBTUCBzYXRlLiBPVE9ICi0gKiB0aGVyZSdzIG5vIGd1YXJh bnRlZSB0aGF0IGl0IHdpbGwgcmVsZWFzZSB0aGUgcG93ZXIgd2VsbCBpZiB3ZSBlbmFibGUgcnVu dGltZQotICogUE0sIGJ1dCBhdCBsZWFzdCB3ZSBjYW4gdHJ5LiAgV2UgZG9uJ3QgaGF2ZSBhbnkg YXNzZXJ0aW9ucyBzaW5jZSB0aGUgdXNlciBtYXkKLSAqIG5vdCBldmVuIGhhdmUgc25kX2hkYV9p bnRlbCBsb2FkZWQsIHdoaWNoIGlzIG5vdCBhIHByb2JsZW0uICovCi1zdGF0aWMgdm9pZCBkaXNh YmxlX2F1ZGlvX3J1bnRpbWVfcG0odm9pZCkKLXsKLQlpbnQgZmQ7Ci0KLQlmZCA9IG9wZW4oIi9z eXMvbW9kdWxlL3NuZF9oZGFfaW50ZWwvcGFyYW1ldGVycy9wb3dlcl9zYXZlIiwgT19XUk9OTFkp OwotCWlmIChmZCA+PSAwKSB7Ci0JCWlndF9hc3NlcnRfZXEod3JpdGUoZmQsICIxXG4iLCAyKSwg Mik7Ci0JCWNsb3NlKGZkKTsKLQl9Ci0JZmQgPSBvcGVuKCIvc3lzL2J1cy9wY2kvZGV2aWNlcy8w MDAwOjAwOjAzLjAvcG93ZXIvY29udHJvbCIsIE9fV1JPTkxZKTsKLQlpZiAoZmQgPj0gMCkgewot CQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKGZkLCAiYXV0b1xuIiwgNSksIDUpOwotCQljbG9zZShmZCk7 Ci0JfQotCS8qIEdpdmUgc29tZSB0aW1lIGZvciBpdCB0byByZWFjdC4gKi8KLQlzbGVlcCgxKTsK LX0KLQogc3RhdGljIGJvb2wgc3VwcG9ydHNfbHBzcCh1aW50MzJfdCBkZXZpZCkKIHsKIAlyZXR1 cm4gSVNfSEFTV0VMTChkZXZpZCkgfHwgSVNfQlJPQURXRUxMKGRldmlkKTsKQEAgLTIzNCw3ICsy MTEsNyBAQCBpZ3RfbWFpbgogCQkJZHJtX2Nvbm5lY3RvcnNbaV0gPSBkcm1Nb2RlR2V0Q29ubmVj dG9yQ3VycmVudChkcm1fZmQsCiAJCQkJCQkJZHJtX3Jlcy0+Y29ubmVjdG9yc1tpXSk7CiAKLQkJ ZGlzYWJsZV9hdWRpb19ydW50aW1lX3BtKCk7CisJCWVuYWJsZV9hdWRpb19ydW50aW1lX3BtKCk7 CiAKIAkJaWd0X3JlcXVpcmUoc3VwcG9ydHNfbHBzcChkZXZpZCkpOwogCmRpZmYgLS1naXQgYS90 ZXN0cy9wbV9ycG0uYyBiL3Rlc3RzL3BtX3JwbS5jCmluZGV4IDU1ZmRiMzFjYjcyMy4uNWJmNTYy YTk5Y2Y4IDEwMDY0NAotLS0gYS90ZXN0cy9wbV9ycG0uYworKysgYi90ZXN0cy9wbV9ycG0uYwpA QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv bgorICogQ29weXJpZ2h0IMKpIDIwMTMsIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQogICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKQEAgLTExMSw2ICsxMTEsOCBAQCBz dHJ1Y3QgbW9kZXNldF9wYXJhbXMgbHBzcF9tb2RlX3BhcmFtczsKIHN0cnVjdCBtb2Rlc2V0X3Bh cmFtcyBub25fbHBzcF9tb2RlX3BhcmFtczsKIHN0cnVjdCBtb2Rlc2V0X3BhcmFtcyAqZGVmYXVs dF9tb2RlX3BhcmFtczsKIAorc3RhdGljIGludDhfdCAqcG1fZGF0YSA9IE5VTEw7CisKIC8qIElm IHRoZSByZWFkIGZhaWxzLCB0aGVuIHRoZSBtYWNoaW5lIGRvZXNuJ3Qgc3VwcG9ydCBQQzgrIHJl c2lkZW5jaWVzLiAqLwogc3RhdGljIGJvb2wgc3VwcG9ydHNfcGM4X3BsdXNfcmVzaWRlbmNpZXMo dm9pZCkKIHsKQEAgLTY3NywyNSArNjc5LDcgQEAgc3RhdGljIHZvaWQgc2V0dXBfcGM4KHZvaWQp CiAgKiBhbnl0aGluZywganVzdCB0cnkgdG8gaGVscCB3aXRoIHRoZSBtb3JlIGNvbW1vbiBwcm9i bGVtcy4gKi8KIHN0YXRpYyB2b2lkIHNldHVwX25vbl9ncmFwaGljc19ydW50aW1lX3BtKHZvaWQp CiB7Ci0JaW50IGZkLCBpOwotCWNoYXIgKmZpbGVfbmFtZTsKLQotCS8qIERpc2sgcnVudGltZSBQ TSBwb2xpY2llcy4gKi8KLQlmaWxlX25hbWUgPSBtYWxsb2MoUEFUSF9NQVgpOwotCWZvciAoaSA9 IDA7IDsgaSsrKSB7Ci0KLQkJc25wcmludGYoZmlsZV9uYW1lLCBQQVRIX01BWCwKLQkJCSAiL3N5 cy9jbGFzcy9zY3NpX2hvc3QvaG9zdCVkL2xpbmtfcG93ZXJfbWFuYWdlbWVudF9wb2xpY3kiLAot CQkJIGkpOwotCi0JCWZkID0gb3BlbihmaWxlX25hbWUsIE9fV1JPTkxZKTsKLQkJaWYgKGZkIDwg MCkKLQkJCWJyZWFrOwotCi0JCWlndF9hc3NlcnQod3JpdGUoZmQsICJtaW5fcG93ZXJcbiIsIDEw KSA9PSAxMCk7Ci0JCWNsb3NlKGZkKTsKLQl9Ci0JZnJlZShmaWxlX25hbWUpOworCXBtX2RhdGEg PSBlbmFibGVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoKTsKIH0KIAogc3RhdGljIHZvaWQg c2V0dXBfZW52aXJvbm1lbnQodm9pZCkKQEAgLTcxMywxMSArNjk3LDE2IEBAIHN0YXRpYyB2b2lk IHNldHVwX2Vudmlyb25tZW50KHZvaWQpCiAJaWd0X2luZm8oIlBDOCByZXNpZGVuY3kgc3VwcG9y dDogJWRcbiIsIGhhc19wYzgpOwogCiAJaWd0X3JlcXVpcmUoaGFzX3J1bnRpbWVfcG0pOworfQog CitzdGF0aWMgdm9pZCByZXN0b3JlX2Vudmlyb25tZW50KHZvaWQpCit7CisJcmVzdG9yZV9zYXRh X2xpbmtfcG93ZXJfbWFuYWdlbWVudChwbV9kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgdGVhcmRv d25fZW52aXJvbm1lbnQodm9pZCkKIHsKKwlyZXN0b3JlX2Vudmlyb25tZW50KCk7CiAJZmluaV9t b2RlX3NldF9kYXRhKCZtc19kYXRhKTsKIAlkcm1DbG9zZShkcm1fZmQpOwogCWNsb3NlKG1zcl9m ZCk7Ci0tIAoyLjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK