From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nautiyal Ankit Subject: [RFC] Idleness DRRS test Date: Wed, 31 Aug 2016 13:46:03 +0530 Message-ID: <1472631363-6709-1-git-send-email-ankit.k.nautiyal@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0917F6E3AF for ; Wed, 31 Aug 2016 08:20:31 +0000 (UTC) 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, daniel.vetter@ffwll.ch, chris@chris-wilson.co.uk, rodrigo.vivi@intel.com Cc: aknautiy , paulo.r.zanoni@intel.com List-Id: intel-gfx@lists.freedesktop.org RnJvbTogYWtuYXV0aXkgPGFua2l0LmsubmF1dGl5YWxAaW50ZWwuY29tPgoKSWRsZW5lc3MgRFJS UzoKCUJ5IGRlZmF1bHQgdGhlIERSUlMgc3RhdGUgd2lsbCBiZSBhdCBEUlJTX0hJR0hfUlIuIFdo ZW4gYSBEaXNwbGF5Cgljb250ZW50IGlzIElkbGUgZm9yIG1vcmUgdGhhbiAxU2VjIElkbGVuZXNz IHdpbGwgYmUgZGVjbGFyZWQgYW5kCglEUlJTX0xPV19SUiB3aWxsIGJlIGludm9rZWQsIGNoYW5n aW5nIHRoZSByZWZyZXNoIHJhdGUgdG8gdGhlCglsb3dlciBtb3N0IHJlZnJlc2ggcmF0ZSBzdXBw b3J0ZWQgYnkgdGhlIHBhbmVsLiBBcyBzb29uIGFzIHRoZXJlCglpcyBhIGRpc3BsYXkgY29udGVu dCBjaGFuZ2UgdGhlcmUgd2lsbCBiZSBhIERSUlMgc3RhdGUgdHJhbnNpdGlvbgoJYXMgRFJSU19M T1dfUlItLT4gRFJSU19ISUdIX1JSLCBjaGFuZ2luZyB0aGUgcmVmcmVzaCByYXRlIHRvIHRoZQoJ aGlnaGVzdCByZWZyZXNoIHJhdGUgc3VwcG9ydGVkIGJ5IHRoZSBwYW5lbC4KClRvIHRlc3QgdGhp cywgSWRsZW5lc3MgRFJSUyBJR1Qgd2lsbCBwcm9iZSB0aGUgRFJSUyBzdGF0ZSBhdCBiZWxvdwpp bnN0YW5jZXMgYW5kIGNvbXBhcmUgd2l0aCB0aGUgZXhwZWN0ZWQgc3RhdGUuCgoJSW5zdGFuY2UJ CQkJCUV4cGVjdGVkIFN0YXRlCjEuIEltbWVkaWF0ZWx5IGFmdGVyIHJlbmRlcmluZyB0aGUgc3Rp bGwgaW1hZ2UJCURSUlNfSElHSF9SUgoyLiBBZnRlciBhIGRlbGF5IG9mIDEuMlNlYwkJCQlEUlJT X0xPV19SUgozLiBBZnRlciBjaGFuZ2luZyB0aGUgZnJhbWUgYnVmZmVyCQkJRFJSU19ISUdIX1JS CjQuIEFmdGVyIGEgZGVsYXkgb2YgMS4yU2VjCQkJCURSUlNfTE9XX1JSCjUuIEFmdGVyIGNoYW5n aW5nIHRoZSBmcmFtZSBidWZmZXIJCQlEUlJTX0hJR0hfUlIKNi4gQWZ0ZXIgYSBkZWxheSBvZiAx LjJTZWMJCQkJRFJSU19MT1dfUlIKClRoZSB0ZXN0IGNoZWNrcyB0aGUgZHJpdmVyIERSUlMgc3Rh dGUgZnJvbSB0aGUgZGVidWdmcyBlbnRyeS4gVG8gY2hlY2sgdGhlCmFjdHVhbCByZWZyZXNoLXJh dGUsIGEgc2VwYXJhdGUgdGhyZWFkIGNvdW50cyB0aGUgbnVtYmVyIG9mIHZibGFua3MKcmVjZWl2 ZWQgcGVyIHNlYy4gVGhlIHJlZnJlc2gtcmF0ZSBjYWxjdWxhdGVkIGlzIGNoZWNrZWQgYWdhaW5z dCB0aGUKZXhwZWN0ZWQgcmVmcmVzaC1yYXRlIHdpdGggYSB0b2xlcmFuY2UgdmFsdWUgb2YgMi4K ClRoaXMgcGF0Y2ggaXMgYSBjb250aW51YXRpb24gb2YgdGhlIGVhcmxpZXIgd29yawpodHRwczov L3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvcGF0Y2gvNDU0NzIvIHRvd2FyZHMgaWd0IGZvciBp ZGxlbmVzcwoKRFJSUy4gVGhlIGNvZGUgaXMgdGVzdGVkIG9uIEJyb3h0b24gQlhUX1QgcGxhdGZv cm0uCgpTaWduZWQtb2ZmLWJ5OiBha25hdXRpeSA8YW5raXQuay5uYXV0aXlhbEBpbnRlbC5jb20+ Ci0tLQogdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCiB0ZXN0cy9rbXNfZHJycy5jICAg ICAgIHwgNjE0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDIgZmlsZXMgY2hhbmdlZCwgNjE1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB0ZXN0cy9rbXNfZHJycy5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBi L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggYTgzNzk3Ny4uNWYzMTUyMSAxMDA2NDQKLS0t IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBA IC05MSw2ICs5MSw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCiAJa21zX2N1cnNvcl9jcmMgXAogCWtt c19jdXJzb3JfbGVnYWN5IFwKIAlrbXNfZHJhd19jcmMgXAorCWttc19kcnJzIFwKIAlrbXNfZmJj X2NyYyBcCiAJa21zX2ZiY29uX2ZidCBcCiAJa21zX2ZsaXAgXApkaWZmIC0tZ2l0IGEvdGVzdHMv a21zX2RycnMuYyBiL3Rlc3RzL2ttc19kcnJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZmJlNzhjNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttc19kcnJzLmMKQEAg LTAsMCArMSw2MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlv bgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8K KworI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJpZ3RfZGVidWdmcy5oIgorI2luY2x1 ZGUgImlndF9rbXMuaCIKKyNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCisjaW5jbHVkZSAiaW50 ZWxfYmF0Y2hidWZmZXIuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorI2luY2x1ZGUg PHRpbWUuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j bHVkZSA8c3lzL3RpbWUuaD4KK0lHVF9URVNUX0RFU0NSSVBUSU9OKAorIlBlcmZvcm1zIHdyaXRl IG9wZXJhdGlvbnMgYW5kIHRoZW4gd2FpdHMgZm9yIERSUlMgdG8gaW52b2tlIHRoZSIKKyJMb3cg UmVmcmVzaCBSYXRlIGFuZCB0aGVuIGRpc3R1cmJzIHRoZSBjb250ZW50cyBvZiB0aGUgc2NyZWVu IG9uY2UiCisiYWdhaW4gaGVuY2UgRFJSUyByZXZlcnQgYmFjayB0byBIaWdoIFJlZnJlc2ggUmF0 ZShEZWZhdWx0KS4iKTsKKworI2RlZmluZSBEUlJTX1NUQVRVU19CWVRFU19DTlQJMTAwMAorI2Rl ZmluZSBTRVQJMQorI2RlZmluZSBSRVNFVAkwCisKKy8qCisgKiBTdHJ1Y3R1cmUgdG8gc3RvcmUg ZGF0YSB0byBjcmVhdGUgMiBmcmFtZWJ1ZmZlcnMsIGZiWzBdIGFuZCBmYlsxXSBvbiBhIGdpdmVu CisgKiBkaXNwbGF5LiBUbyBkaXN0dXJiIHRoZSBjb250ZW50IG9mIHRoZSBzY3JlZW4sIHdlIHJl cGxhY2UgZmJbMF0gYnkgZmJbMV0gYW5kCisgKiB2aWNlIHZlcnNhLgorICovCit0eXBlZGVmIHN0 cnVjdCB7CisJaW50IGRybV9mZDsKKwl1aW50MzJfdCBkZXZpZDsKKwl1aW50MzJfdCBoYW5kbGVb Ml07CisJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWVu dW0gcGlwZSBwaXBlOworCWlndF9wbGFuZV90ICpwcmltYXJ5OworCXN0cnVjdCBpZ3RfZmIgZmJb Ml07CisJdWludDMyX3QgZmJfaWRbMl07Cit9IGRhdGFfdDsKKworLyoKKyAqIFN0cnVjdHVyZSB0 byBjb3VudCB2YmxhbmsgYW5kIG5vdGUgdGhlIHN0YXJ0aW5nIHRpbWUgb2YgdGhlIGNvdW50ZXIK KyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCB2YmxfY291bnQ7CisJc3RydWN0 IHRpbWV2YWwgc3RhcnQ7Cit9IHZibF9pbmZvOworCisvKgorICogQ29uZGl0aW9uIHZhcmlhYmxl cyxtdXRleCwgYW5kIHNoYXJlZCB2YXJpYWJsZXMgZm9yIHRocmVhZCBzeW5jaHJvbml6YXRpb24K KyAqLworcHRocmVhZF9tdXRleF90IHJyX211dGV4OworcHRocmVhZF9jb25kX3QgY3ZfcnJfY2Fs Y19yZXF1ZXN0ZWQ7CitwdGhyZWFkX2NvbmRfdCBjdl9ycl9jYWxjX2NvbXBsZXRlZDsKK2ludCBy cl9jYWxjX3JlcXVlc3RlZCA9IFJFU0VUOworaW50IHJyX2NhbGNfY29tcGxldGVkID0gUkVTRVQ7 CitpbnQgdGhyZWFkX2ZsYWcgPSBTRVQ7CitpbnQgcmVmcmVzaF9yYXRlX3NoYXJlZCA9IC0xOwor CisvKgorICogU3RydWN0dXJlIGZvciByZWZyZXNoIHJhdGUgdHlwZQorICovCit0eXBlZGVmIHN0 cnVjdHsKKwlpbnQgcmF0ZTsKKwljb25zdCBjaGFyICpuYW1lOworfSByZWZyZXNoX3JhdGVfdDsK KworLyoKKyAqIHZibGFua19oYW5kbGVyIDoKKyAqCVVzZXIgZGVmaW5lZCB2YmxhbmsgZXZlbnQg aGFuZGxlciwgdG8gY291bnQgdmJsYW5rcy4KKyAqCVRoZSBjb250cm9sIHJlYWNoZXMgdGhpcyBm dW5jdGlvbiBhZnRlciBhIHZibGFuayBldmVudCBpcyByZWdpc3RlcmVkCisgKi8KK3N0YXRpYyB2 b2lkIHZibGFua19oYW5kbGVyKGludCBmZCwgdW5zaWduZWQgaW50IGZyYW1lLAorCQkJdW5zaWdu ZWQgaW50IHNlYywgdW5zaWduZWQgaW50IHVzZWMsIHZvaWQgKmRhdGEpCit7CisJLyogVGhlIGNv bnRyb2wgcmVhY2hlcyB0aGlzIGZ1bmN0aW9uIGFmdGVyIGEgdmJsYW5rIGV2ZW50IGlzCisJICog cmVnaXN0ZXJlZAorCSAqLworCXZibF9pbmZvICppbmZvID0gZGF0YTsKKworCWlmIChpbmZvID09 IE5VTEwpIHsKKwkJaWd0X2luZm8oIkVSUk9SOiBJbnZhbGlkIERhdGEgcGFzc2VkIHRvIHRoZSB2 YmxhbmsgaGFuZGxlclxuIik7CisJCXJldHVybjsKKwl9CisJaW5mby0+dmJsX2NvdW50Kys7Cit9 CisKKworLyoKKyAqIHJlYWRfZHJyc19zdGF0dXMgOgorICoJRnVuYyB0byByZWFkIHRoZSBEUlJT IHN0YXR1cyBmcm9tIGRlYnVnZnMKKyAqLworc3RhdGljIGJvb2wgcmVhZF9kcnJzX3N0YXR1cyhk YXRhX3QgKmRhdGEsIGNoYXIgKnN0cikKK3sKKwlGSUxFICpzdGF0dXM7CisJaW50IGNudDsKKwor CXN0YXR1cyA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKCJpOTE1X2RycnNfc3RhdHVzIiwgInIiKTsKKwlp Z3RfYXNzZXJ0KHN0YXR1cyk7CisKKwljbnQgPSBmcmVhZChzdHIsIERSUlNfU1RBVFVTX0JZVEVT X0NOVCAtIDEsIDEsIHN0YXR1cyk7CisJaWYgKCFjbnQpIHsKKwkJaWYgKCFmZW9mKHN0YXR1cykp IHsKKwkJCWlndF9pbmZvKCJFUlJPUjogJWQgYXQgZnJlYWRcbiIsIGZlcnJvcihzdGF0dXMpKTsK KwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQljbGVhcmVycihzdGF0dXMpOworCX0KKwlmY2xvc2Uo c3RhdHVzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIGlzX2RycnNfZW5hYmxlZCA6Cisg KglGdW5jIHRvIGNoZWNrIGZvciBEUlJTIHN1cHBvcnQKKyAqLworc3RhdGljIGJvb2wgaXNfZHJy c19lbmFibGVkKGRhdGFfdCAqZGF0YSkKK3sKKwljaGFyIHN0cltEUlJTX1NUQVRVU19CWVRFU19D TlRdID0ge307CisKKwlpZiAoIXJlYWRfZHJyc19zdGF0dXMoZGF0YSwgc3RyKSkgeworCQlpZ3Rf aW5mbygiRVJST1I6IERlYnVnZnMgcmVhZCBGQUlMRURcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJ fQorCXJldHVybiBzdHJzdHIoc3RyLCAiRFJSUyBTdXBwb3J0ZWQ6IFllcyIpICE9IE5VTEw7Cit9 CisKKy8qCisgKiBwcmVwYXJlX2NydGMgOgorICoJRnVuYyB0byBwcmVwYXJlIGNydGMgZm9yIHRo ZSBnaXZlbiBkaXNwbGF5CisgKi8KK3N0YXRpYyBib29sIHByZXBhcmVfY3J0YyhkYXRhX3QgKmRh dGEpCit7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCWlndF9kaXNwbGF5 X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dCA9IGRh dGEtPm91dHB1dDsKKworCS8qIHNlbGVjdCB0aGUgcGlwZSB3ZSB3YW50IHRvIHVzZSAqLworCWln dF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBkYXRhLT5waXBlKTsKKwlpZ3RfZGlzcGxheV9jb21t aXQoZGlzcGxheSk7CisKKwlpZiAoIW91dHB1dC0+dmFsaWQpIHsKKwkJaWd0X291dHB1dF9zZXRf cGlwZShvdXRwdXQsIFBJUEVfQU5ZKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0KGRpc3BsYXkpOwor CQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBjYWxjdWxh dGVfcmVmcmVzaF9yYXRlIDoKKyAqCUZ1bmMgdG8gY2FsY3VsYXRlIHRoZSByZWZyZXNoIHJhdGUg YnkgY291bnRpbmcKKyAqCXZibGFua3MgaW4gMSBzZWMuIEl0IHJldHVybnMgdGhlIGNhbGN1bGF0 ZWQgcmVmcmVzaCByYXRlIG9uIHN1Y2Nlc3MuCisgKglSZXR1cm5zIC0xIGluIGNhc2Ugb2YgZXJy b3IuCisgKi8KK2ludCBjYWxjdWxhdGVfcmVmcmVzaF9yYXRlKGRhdGFfdCAqZGF0YSkKK3sKKwlk cm1FdmVudENvbnRleHQgZXZjdHg7CisJZHJtVkJsYW5rIHZibDsKKwl2YmxfaW5mbyBoYW5kbGVy X2luZm87CisJc3RydWN0IHRpbWV2YWwgc3RhcnRfdGltZSwgY3Vycl90aW1lOworCWRvdWJsZSB0 aW1lX2VsYXBzZWQ7CisJaW50IHJlZnJlc2hfcmF0ZSA9IDAsIHZibF9jb3VudCA9IDA7CisJLypz ZXQgdXAgZXZlbnQgY29udGV4dCBmb3IgaGFuZGxpbmcgdmJsYW5rIGV2ZW50cyovCisJbWVtc2V0 KCZldmN0eCwgMCwgc2l6ZW9mKGV2Y3R4KSk7CisJZXZjdHgudmVyc2lvbiA9IERSTV9FVkVOVF9D T05URVhUX1ZFUlNJT047CisJZXZjdHgudmJsYW5rX2hhbmRsZXIgPSB2YmxhbmtfaGFuZGxlcjsK KwlldmN0eC5wYWdlX2ZsaXBfaGFuZGxlciA9IE5VTEw7CisKKwkvKmluaXRpYWxpemUgdGhlIHZi bCBjb3VudCB0byB6ZXJvIGFuZCBzZXQgdGhlIHN0YXJ0aW5nIHRpbWUqLworCWhhbmRsZXJfaW5m by52YmxfY291bnQgPSAwOworCWdldHRpbWVvZmRheSgmc3RhcnRfdGltZSwgTlVMTCk7CisJaGFu ZGxlcl9pbmZvLnN0YXJ0ID0gc3RhcnRfdGltZTsKKwljdXJyX3RpbWUgPSBzdGFydF90aW1lOwor CisJdGltZV9lbGFwc2VkID0gMC4wOworCS8qIFRvIGNvdW50IHZibGFua3MgaW4gMSBzZWMuIExv b3AgdGlsbAorCSAqIChjdXJyZW50LXRpbWUgLSBzdGFydGluZyB0aW1lKSA8PSAxLjAgc2VjCisJ ICovCisJd2hpbGUgKHRpbWVfZWxhcHNlZCA8PSAxLjApIHsKKwkJaW50IHJldDsKKworCQl2Ymwu cmVxdWVzdC50eXBlID0gRFJNX1ZCTEFOS19SRUxBVElWRSB8IERSTV9WQkxBTktfRVZFTlQ7CisJ CXZibC5yZXF1ZXN0LnNlcXVlbmNlID0gMTsKKwkJdmJsLnJlcXVlc3Quc2lnbmFsID0gKHVuc2ln bmVkIGxvbmcpJmhhbmRsZXJfaW5mbzsKKwkJcmV0ID0gZHJtV2FpdFZCbGFuayhkYXRhLT5kcm1f ZmQsICZ2YmwpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWlndF9pbmZvKCJFUlJPUiA6IGRybVdh aXRWQmxhbmsgRkFJTEVEIDolZFxuIiwgcmV0KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkvKmNh bGwgZHJtSGFuZGxlRXZlbnQoKSB0byBoYW5kbGUgdmJsYW5rIGV2ZW50ICovCisJCXJldCA9IGRy bUhhbmRsZUV2ZW50KGRhdGEtPmRybV9mZCwgJmV2Y3R4KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJ CQlpZ3RfaW5mbygiRVJST1IgOiBkcm1IYW5kbGVFdmVudCBGQUlMRUQgJWRcbiIsIHJldCk7CisJ CQlyZXR1cm4gLTE7CisJCX0KKworCQlnZXR0aW1lb2ZkYXkoJmN1cnJfdGltZSwgTlVMTCk7CisJ CXRpbWVfZWxhcHNlZCA9IGN1cnJfdGltZS50dl9zZWMgKyBjdXJyX3RpbWUudHZfdXNlYyAqIDFl LTYgLQorCQkJKHN0YXJ0X3RpbWUudHZfc2VjICsgc3RhcnRfdGltZS50dl91c2VjICogMWUtNik7 CisJfQorCWlmICghdGltZV9lbGFwc2VkKSB7CisJCWlndF9pbmZvKCJFUlJPUjogSW5jb3JyZWN0 IG1lYXN1cmVtZW50IG9mIHZibGFuayBkdXJhdGlvblxuIik7CisJCXJldHVybiAtMTsKKwl9CisJ dmJsX2NvdW50ID0gaGFuZGxlcl9pbmZvLnZibF9jb3VudDsKKwkvKiBjYWxjdWxhdGUgdGhlIHJl ZnJlc2ggcmF0ZTsgcnI9dmJsYW5rX2NvdW50L3RpbWVfdGFrZW4gKi8KKwlyZWZyZXNoX3JhdGUg PSB2YmxfY291bnQgLyB0aW1lX2VsYXBzZWQ7CisJcmV0dXJuIHJlZnJlc2hfcmF0ZTsKK30KKwor LyoKKyAqIHdvcmtlcl90aHJlYWRfZnVuYyA6CisgKglGdW5jIHdoaWNoIGlzIHJ1biBieSBhIHdv cmtlciB0aHJlYWQgdG8gY2FsY3VsYXRlIHRoZSByZWZyZXNoX3JhdGUsCisgKgl3aGVuIHNpZ25h bGxlZCBieSB0aGUgbWFzdGVyIHRocmVhZC4KKyAqLwordm9pZCAqd29ya2VyX3RocmVhZF9mdW5j KHZvaWQgKnB0cikKK3sKKwlkYXRhX3QgKmRhdGEgPSBwdHI7CisKKwl3aGlsZSAoMSkgeworCQlp bnQgcmVmcmVzaF9yYXRlID0gMDsKKwkJLyp3YWl0IGZvciBzaWduYWwgZnJvbSBtYXN0ZXIqLwor CQlwdGhyZWFkX211dGV4X2xvY2soJnJyX211dGV4KTsKKwkJd2hpbGUgKCFycl9jYWxjX3JlcXVl c3RlZCkKKwkJCXB0aHJlYWRfY29uZF93YWl0KCZjdl9ycl9jYWxjX3JlcXVlc3RlZCwgJnJyX211 dGV4KTsKKworCQkvKiBjaGVja3BvaW50IGZvciB0aHJlYWQgdGVybWluYXRpb24gKi8KKwkJaWYg KHRocmVhZF9mbGFnID09IFJFU0VUKSB7CisJCQlwdGhyZWFkX211dGV4X3VubG9jaygmcnJfbXV0 ZXgpOworCQkJcHRocmVhZF9leGl0KE5VTEwpOworCQl9CisJCXJyX2NhbGNfcmVxdWVzdGVkID0g UkVTRVQ7CisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZycl9tdXRleCk7CisJCS8qY2FsY3VsYXRl IHJlZnJlc2hfcmF0ZSovCisJCXJlZnJlc2hfcmF0ZSA9IGNhbGN1bGF0ZV9yZWZyZXNoX3JhdGUo ZGF0YSk7CisKKwkJLyogc2lnbmFsIHRoZSBtYXN0ZXIgKi8KKwkJcHRocmVhZF9tdXRleF9sb2Nr KCZycl9tdXRleCk7CisJCXJlZnJlc2hfcmF0ZV9zaGFyZWQgPSByZWZyZXNoX3JhdGU7CisJCXJy X2NhbGNfY29tcGxldGVkID0gU0VUOworCQlwdGhyZWFkX211dGV4X3VubG9jaygmcnJfbXV0ZXgp OworCQlwdGhyZWFkX2NvbmRfc2lnbmFsKCZjdl9ycl9jYWxjX2NvbXBsZXRlZCk7CisJfQorCXJl dHVybiBOVUxMOworfQorCisvKgorICogY2hlY2tfcmVmcmVzaF9yYXRlIDoKKyAqCUZ1bmMgdG8g Y2hlY2sgdGhlIHJlZnJlc2ggcmF0ZSBjYWxjdWxhdGVkLCBhZ2FpbnN0IHRoZSBleHBlY3RlZCBy ZWZyZXNoCisgKglyYXRlLiBJdCBzaWduYWxzIHRoZSB3b3JrZXIgdGhyZWFkIHRvIGNhbGN1bGF0 ZSB0aGUgcmVmcmVzaC0KKyAqCXJhdGUsIGFuZCBjaGVja3MgaWYgdGhlIGNvcnJlY3QgcmVmcmVz aCByYXRlIGlzIHN3aXRjaGVkLgorICoJUmV0dXJucyAxIGluIGNhc2Ugb2YgcGFzcyAsIDAgaW4g Y2FzZSBvZiBmYWlsdXJlLCBhbmQgLTEgZm9yIGVycm9yLgorICovCisKK3N0YXRpYyBpbnQgY2hl Y2tfcmVmcmVzaF9yYXRlKGRhdGFfdCAqZGF0YSwgcmVmcmVzaF9yYXRlX3QgKmV4cGVjdGVkX3Jy KQoreworLyoKKyAqIFRoZSBjYWxjdWxhdGVkIHJlZnJlc2gtcmF0ZSBpcyBhbiBhcHByb3hpbWF0 aW9uIHRvIGVzdGltYXRlZCByZWZyZXNoLXJhdGUuCisgKiBUaGUgdG9sZXJhbmNlIHRocmVzaG9s ZCBmb3IgdGhlIGRpZmZlcmVuY2UgaXMgc2V0IHRvIDIuIERpZmZlcmVuY2UgbW9yZSB0aGFuCisg KiAyIGlzIGNvbnNpZGVyZWQgYXMgZmFpbHVyZSBmb3IgdGhlIGNoZWNrX3JlZnJlc2hfcmF0ZS4K KyAqLworI2RlZmluZSBUT0xFUkFOQ0VfVEhSRVNIT0xECQkyCisJaW50IHJldCwgcmVmcmVzaF9y YXRlID0gLTE7CisJY2hhciBkcnJzX3N0YXR1c1tEUlJTX1NUQVRVU19CWVRFU19DTlRdID0ge307 CisKKwkvKiBTaWduYWwgd29ya2VyIHRocmVhZCB0byBjYWxjdWxhdGUgcmVmcmVzaCByYXRlICov CisJcHRocmVhZF9tdXRleF9sb2NrKCZycl9tdXRleCk7CisJcnJfY2FsY19yZXF1ZXN0ZWQgPSBT RVQ7CisJcHRocmVhZF9tdXRleF91bmxvY2soJnJyX211dGV4KTsKKwlwdGhyZWFkX2NvbmRfc2ln bmFsKCZjdl9ycl9jYWxjX3JlcXVlc3RlZCk7CisKKwkvKiBHZXQgdGhlIERSUlMgU3RhdHVzIGZy b20gdGhlIGRlYnVnZnMgZW50cnkgKi8KKwlpZiAoIXJlYWRfZHJyc19zdGF0dXMoZGF0YSwgZHJy c19zdGF0dXMpKSB7CisJCWlndF9pbmZvKCJFUlJPUiA6IERSUlMgZGVidWdmcyByZWFkIEZBSUxF RFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJLyogV2FpdCBmb3IgdGhlIHJlZnJlc2ggcmF0ZSBj YWxjdWxhdG9yIHRocmVhZCAqLworCXB0aHJlYWRfbXV0ZXhfbG9jaygmcnJfbXV0ZXgpOworCXdo aWxlICghcnJfY2FsY19jb21wbGV0ZWQpCisJCXB0aHJlYWRfY29uZF93YWl0KCZjdl9ycl9jYWxj X2NvbXBsZXRlZCwgJnJyX211dGV4KTsKKwlycl9jYWxjX2NvbXBsZXRlZCA9IFJFU0VUOworCXJl ZnJlc2hfcmF0ZSA9IHJlZnJlc2hfcmF0ZV9zaGFyZWQ7CisJcHRocmVhZF9tdXRleF91bmxvY2so JnJyX211dGV4KTsKKwlpZiAocmVmcmVzaF9yYXRlIDwgMCkgeworCQlpZ3RfaW5mbygiRVJST1Ig OiBSZWZyZXNoIHJhdGUgY2FsY3VsYXRpb24gRkFJTEVEXG4iKTsKKwkJcmV0dXJuIC0xOworCX0K KwlpZ3RfaW5mbygiSU5GTyA6IEFjdHVhbCBSZWZyZXNoX3JhdGUgYmFzZWQgb24gVmJsYW5rIENv dW50cy9zZWMgPSAlZFxuIgorCQkJCQkJCSwgcmVmcmVzaF9yYXRlKTsKKworCS8qIENvbXBhcmUg d2l0aCBFeHBlY3RlZCBSZWZyZXNoIFJhdGUqLworCWlndF9pbmZvKCJJTkZPOiBFeHBlY3RlZCBS ZWZyZXNoLVJhdGUgJWRcbiIsIGV4cGVjdGVkX3JyLT5yYXRlKTsKKwlpZiAoc3Ryc3RyKGRycnNf c3RhdHVzLCBleHBlY3RlZF9yci0+bmFtZSkgIT0gTlVMTAorCSYmIGFicyhyZWZyZXNoX3JhdGUg LSBleHBlY3RlZF9yci0+cmF0ZSkgPD0gVE9MRVJBTkNFX1RIUkVTSE9MRCkgeworCQlpZ3RfaW5m bygiSU5GTzogRXhwZWN0ZWQgJXMgOiBQQVNTRURcbiIsIGV4cGVjdGVkX3JyLT5uYW1lKTsKKwkJ cmV0dXJuIDE7CisJfQorCisJaWd0X2luZm8oIklORk8gOiBFeHBlY3RlZCAlcyA6IEZBSUxFRFxu IiwgZXhwZWN0ZWRfcnItPm5hbWUpOworCXJldHVybiAwOworfQorCisvKgorICogY2xlYW5fdXAg OgorICoJRnVuYyB0byBzdG9wIHRoZSB3b3JrZXIgdGhyZWFkIGFuZCBkZXN0cm95IHRocmVhZCBz eW5jcm9uaXphdGlvbgorICoJc3RydWN0dXJlcy4KKyAqLwordm9pZCBjbGVhbl91cChwdGhyZWFk X3QgcnJfdGhyZWFkKQoreworCS8qIFN0b3AgdGhlIHdvcmtlciB0aHJlYWQgKi8KKwlwdGhyZWFk X211dGV4X2xvY2soJnJyX211dGV4KTsKKwl0aHJlYWRfZmxhZyA9IFJFU0VUOworCXJyX2NhbGNf cmVxdWVzdGVkID0gU0VUOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZycl9tdXRleCk7CisJcHRo cmVhZF9jb25kX3NpZ25hbCgmY3ZfcnJfY2FsY19yZXF1ZXN0ZWQpOworCXB0aHJlYWRfam9pbihy cl90aHJlYWQsIE5VTEwpOworCisJLyogZGVzdHJveSB0aGUgY29uZGl0aW9uIHZhcmlhYmxlcyBh bmQgbXV0ZXggKi8KKwlwdGhyZWFkX2NvbmRfZGVzdHJveSgmY3ZfcnJfY2FsY19yZXF1ZXN0ZWQp OworCXB0aHJlYWRfY29uZF9kZXN0cm95KCZjdl9ycl9jYWxjX2NvbXBsZXRlZCk7CisJcHRocmVh ZF9tdXRleF9kZXN0cm95KCZycl9tdXRleCk7Cit9CisKKy8qCisgKiBleGVjdXRlX3Rlc3Q6Cisg KglUaGlzIGZ1bmN0aW9uCisgKgkxLiBJbml0aWFsaXplcyB0aGUgdGhyZWFkIHN5bmMgc3RydWN0 dXJlcy4KKyAqCTIuIENyZWF0ZXMgYSB3b3JrZXIgdGhyZWFkIHdoaWNoIGNhbiBiZSBzaWduYWxl ZCB0byBlc3RpbWF0ZQorICoJdGhlIHJlZnJlc2ggcmF0ZXMgYmFzZWQgb24gY291bnRpbmcgdmJs YW5rcyBwZXIgc2VjLgorICoJMy4gQ3JlYXRlcyB0d28gZGlmZmVyZW50IEZyYW1lYnVmZmVyIGZi MCwgZmIxCisgKglhbmQgYXBwbHkgdGhlbSBpbiB0aGUgaW50ZXJ2YWwgb2YgMS4yU2VjLiBTbyBi ZXR3ZWVuIEZCIGNoYW5nZQorICoJRFJSUyBzaG91bGQgdG9nZ2xlIGZyb20gRFJSU19ISUdIX1JS IC0+IERSUlNfTE9XX1JSLgorICoJQW5kIG9uIG5leHQgRkIgY2hhbmdlIERSUlNfTE9XX1JSIC0+ IERSUlNfSElHSF9SUi4KKyAqCisgKglUaGVzZSBleHBlY3RlZCB0cmFuc2lzdGlvbnMgYXJlIHZl cmlmaWVkIHVzaW5nIHRoZSBrZXJuZWwgZGVidWdmcworICoJYW5kIHRoZSByZWZyZXNoLXJhdGUs IGNhbGN1bGF0ZWQgYnkgY291bnRpbmcgdmJsYW5rcyBwZXIgc2VjIGJ5IHRoZQorICoJd29ya2Vy IHRocmVhZC4KKyAqLworc3RhdGljIGJvb2wgZXhlY3V0ZV90ZXN0KGRhdGFfdCAqZGF0YSkKK3sK KwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X291dHB1dF90 ICpvdXRwdXQgPSBkYXRhLT5vdXRwdXQ7CisJZHJtTW9kZU1vZGVJbmZvICptb2RlLCAqc3VwcG9y dGVkX21vZGVzOworCWJvb2wgdGVzdF9mYWlsZWQgPSBmYWxzZTsKKwlpbnQgcmV0LCBpLCBjb3Vu dF9tb2RlczsKKwlyZWZyZXNoX3JhdGVfdCBoaWdoX3JyLCBsb3dfcnI7CisJcHRocmVhZF90IHJy X3RocmVhZDsKKworCS8qaW5pdGlhbGl6ZSB0aGUgY29uZGl0aW9uIHZhcmlhYmxlcyBhbmQgIG11 dGV4Ki8KKwlwdGhyZWFkX2NvbmRfaW5pdCgmY3ZfcnJfY2FsY19yZXF1ZXN0ZWQsIE5VTEwpOwor CXB0aHJlYWRfY29uZF9pbml0KCZjdl9ycl9jYWxjX2NvbXBsZXRlZCwgTlVMTCk7CisJcHRocmVh ZF9tdXRleF9pbml0KCZycl9tdXRleCwgTlVMTCk7CisJdGhyZWFkX2ZsYWcgPSBTRVQ7CisJcnJf Y2FsY19yZXF1ZXN0ZWQgPSBSRVNFVDsKKwlycl9jYWxjX2NvbXBsZXRlZCA9IFJFU0VUOworCS8q IENyZWF0ZSBhIHRocmVhZCBmb3IgY2FsY3VsYXRpbmcgdGhlIHJlZnJlc2ggcmF0ZSAqLworCXJl dCA9IHB0aHJlYWRfY3JlYXRlKCZycl90aHJlYWQsIE5VTEwsIHdvcmtlcl90aHJlYWRfZnVuYywK KwkJCQkJCQkodm9pZCAqKSBkYXRhKTsKKwlpZiAocmV0ID09IC0xKSB7CisJCWlndF9pbmZvKCJF UlJPUiA6IFJlZnJlc2ggcmF0ZSB0aHJlYWQgY3JlYXRpb24gRkFJTEVEXG4iKTsKKwkJY2xlYW5f dXAocnJfdGhyZWFkKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkvKmNsb3NlIHRoZSB3cml0ZSBl bmQgb2YgdGhlIHBpcGUgYXMgaXQgd2lsbCBiZSB1c2VkIGZvciByZWFkaW5nIG9ubHkqLworCisJ aGlnaF9yci5uYW1lID0gIkRSUlNfSElHSF9SUiI7CisJaGlnaF9yci5yYXRlID0gMDsKKwlsb3df cnIubmFtZSA9ICJEUlJTX0xPV19SUiI7CisJbG93X3JyLnJhdGUgPSAwOworCS8qIGdldCB0aGUg bWF4IGFuZCBtaW4gc3VwcG9ydGVkIHJlZnJlc2ggcmF0ZXMgZm9yIHRoZSBkaXNwbGF5ICovCisJ c3VwcG9ydGVkX21vZGVzID0gb3V0cHV0LT5jb25maWcuY29ubmVjdG9yLT5tb2RlczsKKwljb3Vu dF9tb2RlcyA9IG91dHB1dC0+Y29uZmlnLmNvbm5lY3Rvci0+Y291bnRfbW9kZXM7CisJLyogbWlu aW11bSAyIG1vZGVzIGFyZSByZXF1aXJlZCBmb3IgRFJSUyAqLworCWlmIChjb3VudF9tb2RlcyA8 IDIpIHsKKwkJaWd0X2luZm8oIkVSUk9SOiBNaW5pbXVtIDIgbW9kZXMgcmVxdWlyZWQgZm9yIERS UlNcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWZvciAoaSA9IDA7IGkgPCBjb3VudF9tb2Rl czsgaSsrKSB7CisJCWludCByciA9IHN1cHBvcnRlZF9tb2Rlc1tpXS52cmVmcmVzaDsKKworCQlp ZiAoaSA9PSAwKSB7CisJCQloaWdoX3JyLnJhdGUgPSBsb3dfcnIucmF0ZSA9IHJyOworCQkJY29u dGludWU7CisJCX0KKwkJaWYgKGhpZ2hfcnIucmF0ZSA8IHJyKQorCQkJaGlnaF9yci5yYXRlID0g cnI7CisJCWlmIChsb3dfcnIucmF0ZSA+IHJyKQorCQkJbG93X3JyLnJhdGUgPSBycjsKKwl9CisJ ZGF0YS0+cHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKGRhdGEtPm91dHB1dCwgSUdUX1BM QU5FX1BSSU1BUlkpOworCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKGRhdGEtPm91dHB1dCk7 CisJZGF0YS0+ZmJfaWRbMF0gPSBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgbW9k ZS0+aGRpc3BsYXksCisJCQltb2RlLT52ZGlzcGxheSwKKwkJCURSTV9GT1JNQVRfWFJHQjg4ODgs CisJCQlMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJMC4wLCAxMDAuMSwgMC4wLCAmZGF0 YS0+ZmJbMF0pOworCWlndF9hc3NlcnQoZGF0YS0+ZmJfaWRbMF0pOworCWRhdGEtPmZiX2lkWzFd ID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LAorCQkJ bW9kZS0+dmRpc3BsYXksCisJCQlEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJTE9DQUxfRFJNX0ZP Uk1BVF9NT0RfTk9ORSwKKwkJCTEwMC4xLCAwLjAsIDAuMCwKKwkJCSZkYXRhLT5mYlsxXSk7CisJ aWd0X2Fzc2VydChkYXRhLT5mYl9pZFsxXSk7CisKKwlkYXRhLT5oYW5kbGVbMF0gPSBkYXRhLT5m YlswXS5nZW1faGFuZGxlOworCWRhdGEtPmhhbmRsZVsxXSA9IGRhdGEtPmZiWzFdLmdlbV9oYW5k bGU7CisKKwkvKiBzY2Fub3V0ID0gZmJbMV0gKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnBy aW1hcnksICZkYXRhLT5mYlsxXSk7CisJaWd0X2Rpc3BsYXlfY29tbWl0KGRpc3BsYXkpOworCisJ aWYgKCFpc19kcnJzX2VuYWJsZWQoZGF0YSkpIHsKKwkJaWd0X2luZm8oIklORk8gOiBEUlJTIG5v dCBlbmFibGVkXG4iKTsKKwkJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmltYXJ5LCBOVUxMKTsK KwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfQU5ZKTsKKwkJaWd0X2Rpc3BsYXlf Y29tbWl0KGRpc3BsYXkpOworCisJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ ZmJbMF0pOworCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiWzFdKTsKKwkJ Y2xlYW5fdXAocnJfdGhyZWFkKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIGV4cGVjdGlu ZyBIaWdoIFJSICovCisJcmV0ID0gIGNoZWNrX3JlZnJlc2hfcmF0ZShkYXRhLCAmaGlnaF9ycik7 CisJaWYgKHJldCAhPSAxKQorCQl0ZXN0X2ZhaWxlZCA9IHRydWU7CisJLyogMS4yU2VjIHRvIEVu dGVyIHRoZSBJZGxlbmVzcyBhbmQgY2hlY2sgZm9yIExvdyBSZWZyZXNoIFJhdGUgKi8KKwl1c2xl ZXAoMTIwMDAwMCk7CisJcmV0ID0gIGNoZWNrX3JlZnJlc2hfcmF0ZShkYXRhLCAmbG93X3JyKTsK KwlpZiAocmV0ICE9IDEpCisJCXRlc3RfZmFpbGVkID0gdHJ1ZTsKKworCS8qIHNjYW5vdXQgPSBm YlswXSBhbmQgY2hlY2sgZm9yIEhpZ2ggUmVmcmVzaCBSYXRlKi8KKwlpZ3RfcGxhbmVfc2V0X2Zi KGRhdGEtPnByaW1hcnksICZkYXRhLT5mYlswXSk7CisJaWd0X2Rpc3BsYXlfY29tbWl0KGRpc3Bs YXkpOworCXJldCA9ICBjaGVja19yZWZyZXNoX3JhdGUoZGF0YSwgJmhpZ2hfcnIpOworCWlmIChy ZXQgIT0gMSkKKwkJdGVzdF9mYWlsZWQgPSB0cnVlOworCisJLyogMS4yU2VjIHRvIEVudGVyIHRo ZSBJZGxlbmVzcyBhbmQgY2hlY2sgZm9yIExvdyBSZWZyZXNoIFJhdGUgKi8KKwl1c2xlZXAoMTIw MDAwMCk7CisJcmV0ID0gIGNoZWNrX3JlZnJlc2hfcmF0ZShkYXRhLCAmbG93X3JyKTsKKwlpZiAo cmV0ICE9IDEpCisJCXRlc3RfZmFpbGVkID0gdHJ1ZTsKKworCS8qIHNjYW5vdXQgPSBmYlsxXSBh bmQgY2hlY2sgZm9yIEhpZ2ggUmVmcmVzaCBSYXRlKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEt PnByaW1hcnksICZkYXRhLT5mYlsxXSk7CisJaWd0X2Rpc3BsYXlfY29tbWl0KGRpc3BsYXkpOwor CXJldCA9ICBjaGVja19yZWZyZXNoX3JhdGUoZGF0YSwgJmhpZ2hfcnIpOworCWlmIChyZXQgIT0g MSkKKwkJdGVzdF9mYWlsZWQgPSB0cnVlOworCisJLyogMS4yU2VjIHRvIEVudGVyIHRoZSBJZGxl bmVzcyAqLworCXVzbGVlcCgxMjAwMDAwKTsKKwlyZXQgPSAgY2hlY2tfcmVmcmVzaF9yYXRlKGRh dGEsICZsb3dfcnIpOworCWlmIChyZXQgIT0gMSkKKwkJdGVzdF9mYWlsZWQgPSB0cnVlOworCisJ aWd0X2Fzc2VydCghdGVzdF9mYWlsZWQpOworCWNsZWFuX3VwKHJyX3RocmVhZCk7CisJcmV0dXJu IHRydWU7Cit9CisKKy8qCisgKiBmaW5pc2hfY3J0YyA6CisgKglGdW5jIHRvIGZyZWUgdGhlIGZy YW1lYnVmZmVycyBhZnRlciB0aGUgdGVzdCBjb21wbGV0aW9uLgorICovCitzdGF0aWMgdm9pZCBm aW5pc2hfY3J0YyhkYXRhX3QgKmRhdGEpCit7CisJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmlt YXJ5LCBOVUxMKTsKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKGRhdGEtPm91dHB1dCwgUElQRV9BTlkp OworCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxheSk7CisKKwlpZ3RfcmVtb3ZlX2Zi KGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiWzBdKTsKKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9m ZCwgJmRhdGEtPmZiWzFdKTsKK30KKworLyoKKyAqIHJlc2V0X2Rpc3BsYXkgOgorICoJRnVuYyB0 byByZXNldCB0aGUgZGlzcGxheSBzdHJ1Y3R1cmVzIGFmdGVyIHRoZSB0ZXN0IGNvbXBsZXRpb24u CisgKi8KK3N0YXRpYyB2b2lkIHJlc2V0X2Rpc3BsYXkoZGF0YV90ICpkYXRhKQoreworCWlndF9k aXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKworCWZvcl9lYWNoX2Nvbm5lY3Rl ZF9vdXRwdXQoZGlzcGxheSwgZGF0YS0+b3V0cHV0KSB7CisJCWlmIChkYXRhLT5vdXRwdXQtPnZh bGlkKSB7CisJCQlkYXRhLT5wcmltYXJ5ID0gIGlndF9vdXRwdXRfZ2V0X3BsYW5lKGRhdGEtPm91 dHB1dCwKKwkJCQkJCQlJR1RfUExBTkVfUFJJTUFSWSk7CisJCQlpZ3RfcGxhbmVfc2V0X2ZiKGRh dGEtPnByaW1hcnksIE5VTEwpOworCQl9CisJCWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS0+b3V0 cHV0LCBQSVBFX0FOWSk7CisJfQorfQorLyoKKyAqIHJ1bl90ZXN0IDoKKyAqCUZ1bmMgdG8gcnVu IHRoZSB0ZXN0IGZvciB0aGUgZURQIGRpc3BsYXkuCisgKi8KK3N0YXRpYyB2b2lkIHJ1bl90ZXN0 KGRhdGFfdCAqZGF0YSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3Bs YXk7CisJaW50IHZhbGlkX3Rlc3RzID0gMDsKKworCXJlc2V0X2Rpc3BsYXkoZGF0YSk7CisJLyog Q2hlY2sgZm9yIGVEUCBDb25uZWN0b3Igb24gUElQRSBBICxhcyBlRFAgZ29lcyBub3JtYWxseSBv biBQSVBFX0EgKi8KKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRpc3BsYXksIGRhdGEtPm91 dHB1dCkgeworCQlkcm1Nb2RlQ29ubmVjdG9yUHRyIGMgPSBkYXRhLT5vdXRwdXQtPmNvbmZpZy5j b25uZWN0b3I7CisKKwkJaWYgKGMtPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RP Ul9lRFAgfHwKKwkJCWMtPmNvbm5lY3Rpb24gIT0gRFJNX01PREVfQ09OTkVDVEVEKQorCQkJY29u dGludWU7CisJCQlkYXRhLT5waXBlID0gUElQRV9BOworCQkJcHJlcGFyZV9jcnRjKGRhdGEpOwor CQkJaWd0X2luZm8oIklORk8gOiBCZWdpbm5pbmcgJXMgb24gcGlwZSAlcyxjb25uZWN0b3IgJXNc biIsCisJCQkJCQlpZ3Rfc3VidGVzdF9uYW1lKCksCisJCQkJCQlrbXN0ZXN0X3BpcGVfbmFtZShk YXRhLT5waXBlKSwKKwkJCQkJCWlndF9vdXRwdXRfbmFtZShkYXRhLT5vdXRwdXQpKTsKKworCQkJ aWYgKCFleGVjdXRlX3Rlc3QoZGF0YSkpIHsKKwkJCQlpZ3RfaW5mbygiSU5GTyA6JXMgb24gcGlw ZSAlcywgY29ubmVjdG9yICVzOlNLSVBQRURcbiIsCisJCQkJCQlpZ3Rfc3VidGVzdF9uYW1lKCks CisJCQkJCQlrbXN0ZXN0X3BpcGVfbmFtZShkYXRhLT5waXBlKSwKKwkJCQkJCWlndF9vdXRwdXRf bmFtZShkYXRhLT5vdXRwdXQpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJdmFsaWRfdGVz dHMrKzsKKworCQkJaWd0X2luZm8oIklORk8gOiVzIG9uIHBpcGUgJXMsIGNvbm5lY3RvciAlczog UEFTU0VEXG4iLAorCQkJCQlpZ3Rfc3VidGVzdF9uYW1lKCksCisJCQkJCWttc3Rlc3RfcGlwZV9u YW1lKGRhdGEtPnBpcGUpLAorCQkJCQlpZ3Rfb3V0cHV0X25hbWUoZGF0YS0+b3V0cHV0KSk7CisK KwkJCWZpbmlzaF9jcnRjKGRhdGEpOworCX0KK30KKworaWd0X21haW4KK3sKKwlkYXRhX3QgZGF0 YSA9IHt9OworCisJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOworCisJaWd0X2ZpeHR1cmUgewor CQljaGFyIGJ1Zls2NF07CisJCWludCBjbnQ7CisJCUZJTEUgKnN0YXR1czsKKworCQlkYXRhLmRy bV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0lOVEVMKTsKKwkJaWYgKGRhdGEu ZHJtX2ZkID09IC0xKSB7CisJCQlpZ3RfaW5mbygiRVJST1IgOiBpbnZhbGlkIGZkXG4iKTsKKwkJ CXJldHVybjsKKwkJfQorCisJCWRhdGEuZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRhdGEu ZHJtX2ZkKTsKKwkJaWYgKGRhdGEuZGV2aWQgPCAwKSB7CisJCQlpZ3RfaW5mbygiRVJST1IgOiBp bnZhbGlkIGRldiBpZFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlzdGF0dXMgPSBpZ3RfZGVi dWdmc19mb3BlbigiaTkxNV9kcnJzX3N0YXR1cyIsICJyIik7CisJCWlmIChzdGF0dXMgPT0gTlVM TCkgeworCQkJaWd0X2luZm8oIkVSUk9SIDogZGVidWdmcyBvcGVuIEZBSUxFRFxuIik7CisJCQly ZXR1cm47CisJCX0KKwkJaWd0X3JlcXVpcmVfZihzdGF0dXMsICJObyBpOTE1X2RycnNfc3RhdHVz IGZvdW5kXG4iKTsKKwkJY250ID0gZnJlYWQoYnVmLCBzaXplb2YoYnVmKSwgMSwgc3RhdHVzKTsK KwkJaWYgKCFjbnQpIHsKKwkJCWlndF9pbmZvKCJFUlJPUiA6IGZyZWFkIEZBSUxFRFxuIik7CisJ CQlyZXR1cm47CisJCX0KKwkJZmNsb3NlKHN0YXR1cyk7CisJCWJ1ZltzaXplb2YoYnVmKSAtIDFd ID0gJ1wwJzsKKwkJaWd0X3JlcXVpcmVfZighc3Ryc3RyKGJ1ZiwgImRpc2FibGVkIiksCisJCQkJ IkRSUlMgbm90IHN1cHBvcnRlZDpjaGVjayBWQlQvcGFuZWwgY2Fwc1xuIik7CisKKwkJLyogQ2hl Y2sgaWYgdGhlIERSUlMgaXMgc3VwcG9ydGVkLgorCQkgKiBJZiB5ZXMgY2FsbCB0aGUgSWRsZW5l c3MgRFJSUyB0ZXN0CisJCSAqLworCisJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEuZGlzcGxheSwg ZGF0YS5kcm1fZmQpOworCX0KKwlpZ3Rfc3VidGVzdF9mKCJJZGxlbmVzc19EUlJTIikKKwkJcnVu X3Rlc3QoJmRhdGEpOworCisJaWd0X2ZpeHR1cmUgeworCQlpZ3RfZGlzcGxheV9maW5pKCZkYXRh LmRpc3BsYXkpOworCX0KK30KLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK