From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nautiyal Ankit Subject: [PATCH v2] Idleness DRRS test Date: Fri, 23 Sep 2016 18:10:29 +0530 Message-ID: <1474634429-30760-1-git-send-email-ankit.k.nautiyal@intel.com> References: <71e43520-bda1-73b0-da1e-69cebd14c0df@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id D70B36EA60 for ; Fri, 23 Sep 2016 12:43:55 +0000 (UTC) In-Reply-To: <71e43520-bda1-73b0-da1e-69cebd14c0df@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, daniel.vetter@ffwll.ch, chris@chris-wilson.co.uk, rodrigo.vivi@intel.com Cc: paulo.r.zanoni@intel.com List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUmFtYWxpbmdhbSBDIDxyYW1hbGluZ2FtLmNAaW50ZWwuY29tPgoKSWRsZW5lc3MgRFJS UzoKCUJ5IGRlZmF1bHQgdGhlIERSUlMgc3RhdGUgd2lsbCBiZSBhdCBEUlJTX0hJR0hfUlIuIFdo ZW4gYSBEaXNwbGF5Cgljb250ZW50IGlzIElkbGUgZm9yIG1vcmUgdGhhbiAxU2VjIElkbGVuZXNz IHdpbGwgYmUgZGVjbGFyZWQgYW5kCglEUlJTX0xPV19SUiB3aWxsIGJlIGludm9rZWQsIGNoYW5n aW5nIHRoZSByZWZyZXNoIHJhdGUgdG8gdGhlCglsb3dlciBtb3N0IHJlZnJlc2ggcmF0ZSBzdXBw b3J0ZWQgYnkgdGhlIHBhbmVsLiBBcyBzb29uIGFzIHRoZXJlCglpcyBhIGRpc3BsYXkgY29udGVu dCBjaGFuZ2UgdGhlcmUgd2lsbCBiZSBhIERSUlMgc3RhdGUgdHJhbnNpdGlvbgoJYXMgRFJSU19M T1dfUlItLT4gRFJSU19ISUdIX1JSLCBjaGFuZ2luZyB0aGUgcmVmcmVzaCByYXRlIHRvIHRoZQoJ aGlnaGVzdCByZWZyZXNoIHJhdGUgc3VwcG9ydGVkIGJ5IHRoZSBwYW5lbC4KClRvIHRlc3QgdGhp cywgSWRsZW5lc3MgRFJSUyBJR1Qgd2lsbCBwcm9iZSB0aGUgRFJSUyBzdGF0ZSBhdCBiZWxvdwpp bnN0YW5jZXMgYW5kIGNvbXBhcmUgd2l0aCB0aGUgZXhwZWN0ZWQgc3RhdGUuCgoJSW5zdGFuY2UJ CQkJCUV4cGVjdGVkIFN0YXRlCjEuIEltbWVkaWF0ZWx5IGFmdGVyIHJlbmRlcmluZyB0aGUgc3Rp bGwgaW1hZ2UJCURSUlNfSElHSF9SUgoyLiBBZnRlciBhIGRlbGF5IG9mIDEuMlNlYwkJCQlEUlJT X0xPV19SUgozLiBBZnRlciBjaGFuZ2luZyB0aGUgZnJhbWUgYnVmZmVyCQkJRFJSU19ISUdIX1JS CjQuIEFmdGVyIGEgZGVsYXkgb2YgMS4yU2VjCQkJCURSUlNfTE9XX1JSCjUuIEFmdGVyIGNoYW5n aW5nIHRoZSBmcmFtZSBidWZmZXIJCQlEUlJTX0hJR0hfUlIKNi4gQWZ0ZXIgYSBkZWxheSBvZiAx LjJTZWMJCQkJRFJSU19MT1dfUlIKClRoZSB0ZXN0IGNoZWNrcyB0aGUgZHJpdmVyIERSUlMgc3Rh dGUgZnJvbSB0aGUgZGVidWdmcyBlbnRyeS4gVG8gY2hlY2sgdGhlCmFjdHVhbCByZWZyZXNoLXJh dGUsIGEgc2VwYXJhdGUgdGhyZWFkIGNvdW50cyB0aGUgbnVtYmVyIG9mIHZibGFua3MKcmVjZWl2 ZWQgcGVyIHNlYy4gVGhlIHJlZnJlc2gtcmF0ZSBjYWxjdWxhdGVkIGlzIGNoZWNrZWQgYWdhaW5z dCB0aGUKZXhwZWN0ZWQgcmVmcmVzaC1yYXRlIHdpdGggYSB0b2xlcmFuY2UgdmFsdWUgb2YgMi4K ClRoaXMgcGF0Y2ggaXMgYSBjb250aW51YXRpb24gb2YgdGhlIGVhcmxpZXIgd29yawpodHRwczov L3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvcGF0Y2gvNDU0NzIvIHRvd2FyZHMgaWd0IGZvciBp ZGxlbmVzcwoKRFJSUy4gVGhlIGNvZGUgaXMgdGVzdGVkIG9uIEJyb3h0b24gQlhUX1QgcGxhdGZv cm0uCgp2MjogQWRkcmVzc2VkIHRoZSBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgZnJvbSBWbGFk LCBNYXJpdXMuClRoZSBzaWdub2ZmIGRldGFpbHMgZnJvbSB0aGUgZWFybGllciB3b3JrIGFyZSBh bHNvIGluY2x1ZGVkLgoKU2lnbmVkLW9mZi1ieTogUmFtYWxpbmdhbSBDIDxyYW1hbGluZ2FtLmNA aW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBWYW5kYW5hIEthbm5hbiA8dmFuZGFuYS5rYW5uYW5A aW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBha25hdXRpeSA8YW5raXQuay5uYXV0aXlhbEBpbnRl bC5jb20+Ci0tLQogdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCiB0ZXN0cy9rbXNfZHJy cy5jICAgICAgIHwgNjEyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNjEzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB0ZXN0cy9rbXNfZHJycy5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291 cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggYTgzNzk3Ny4uNWYzMTUyMSAxMDA2 NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzCkBAIC05MSw2ICs5MSw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCiAJa21zX2N1cnNvcl9jcmMg XAogCWttc19jdXJzb3JfbGVnYWN5IFwKIAlrbXNfZHJhd19jcmMgXAorCWttc19kcnJzIFwKIAlr bXNfZmJjX2NyYyBcCiAJa21zX2ZiY29uX2ZidCBcCiAJa21zX2ZsaXAgXApkaWZmIC0tZ2l0IGEv dGVzdHMva21zX2RycnMuYyBiL3Rlc3RzL2ttc19kcnJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNjlmOGIwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttc19kcnJz LmMKQEAgLTAsMCArMSw2MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKi8KKworI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJpZ3RfZGVidWdmcy5oIgor I2luY2x1ZGUgImlndF9rbXMuaCIKKyNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCisjaW5jbHVk ZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorI2lu Y2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+ CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KK0lHVF9URVNUX0RFU0NSSVBUSU9OKAorIlBlcmZvcm1z IHdyaXRlIG9wZXJhdGlvbnMgYW5kIHRoZW4gd2FpdHMgZm9yIERSUlMgdG8gaW52b2tlIHRoZSIK KyJMb3cgUmVmcmVzaCBSYXRlIGFuZCB0aGVuIGRpc3R1cmJzIHRoZSBjb250ZW50cyBvZiB0aGUg c2NyZWVuIG9uY2UiCisiYWdhaW4gaGVuY2UgRFJSUyByZXZlcnQgYmFjayB0byBIaWdoIFJlZnJl c2ggUmF0ZShEZWZhdWx0KS4iKTsKKworI2RlZmluZSBEUlJTX1NUQVRVU19CWVRFU19DTlQJMTAw MAorI2RlZmluZSBTRVQJMQorI2RlZmluZSBSRVNFVAkwCisKKy8qCisgKiBTdHJ1Y3R1cmUgdG8g c3RvcmUgZGF0YSB0byBjcmVhdGUgMiBmcmFtZWJ1ZmZlcnMsIGZiWzBdIGFuZCBmYlsxXSBvbiBh IGdpdmVuCisgKiBkaXNwbGF5LiBUbyBkaXN0dXJiIHRoZSBjb250ZW50IG9mIHRoZSBzY3JlZW4s IHdlIHJlcGxhY2UgZmJbMF0gYnkgZmJbMV0gYW5kCisgKiB2aWNlIHZlcnNhLgorICovCit0eXBl ZGVmIHN0cnVjdCB7CisJaW50IGRybV9mZDsKKwl1aW50MzJfdCBkZXZpZDsKKwl1aW50MzJfdCBo YW5kbGVbMl07CisJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OworCWlndF9vdXRwdXRfdCAqb3V0cHV0 OworCWVudW0gcGlwZSBwaXBlOworCWlndF9wbGFuZV90ICpwcmltYXJ5OworCXN0cnVjdCBpZ3Rf ZmIgZmJbMl07CisJdWludDMyX3QgZmJfaWRbMl07Cit9IGRhdGFfdDsKKworLyoKKyAqIFN0cnVj dHVyZSB0byBjb3VudCB2YmxhbmsgYW5kIG5vdGUgdGhlIHN0YXJ0aW5nIHRpbWUgb2YgdGhlIGNv dW50ZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCB2YmxfY291bnQ7CisJ c3RydWN0IHRpbWV2YWwgc3RhcnQ7Cit9IHZibF9pbmZvOworCisvKgorICogQ29uZGl0aW9uIHZh cmlhYmxlcyxtdXRleCwgYW5kIHNoYXJlZCB2YXJpYWJsZXMgZm9yIHRocmVhZCBzeW5jaHJvbml6 YXRpb24KKyAqLworcHRocmVhZF9tdXRleF90IHJyX211dGV4OworcHRocmVhZF9jb25kX3QgY3Zf cnJfY2FsY19yZXF1ZXN0ZWQ7CitwdGhyZWFkX2NvbmRfdCBjdl9ycl9jYWxjX2NvbXBsZXRlZDsK K2ludCBycl9jYWxjX3JlcXVlc3RlZCA9IFJFU0VUOworaW50IHJyX2NhbGNfY29tcGxldGVkID0g UkVTRVQ7CitpbnQgdGhyZWFkX2ZsYWcgPSBTRVQ7CitpbnQgcmVmcmVzaF9yYXRlX3NoYXJlZCA9 IC0xOworCisvKgorICogU3RydWN0dXJlIGZvciByZWZyZXNoIHJhdGUgdHlwZQorICovCit0eXBl ZGVmIHN0cnVjdHsKKwlpbnQgcmF0ZTsKKwljb25zdCBjaGFyICpuYW1lOworfSByZWZyZXNoX3Jh dGVfdDsKKworLyoKKyAqIHZibGFua19oYW5kbGVyIDoKKyAqCVVzZXIgZGVmaW5lZCB2Ymxhbmsg ZXZlbnQgaGFuZGxlciwgdG8gY291bnQgdmJsYW5rcy4KKyAqCVRoZSBjb250cm9sIHJlYWNoZXMg dGhpcyBmdW5jdGlvbiBhZnRlciBhIHZibGFuayBldmVudCBpcyByZWdpc3RlcmVkCisgKi8KK3N0 YXRpYyB2b2lkIHZibGFua19oYW5kbGVyKGludCBmZCwgdW5zaWduZWQgaW50IGZyYW1lLAorCQkJ dW5zaWduZWQgaW50IHNlYywgdW5zaWduZWQgaW50IHVzZWMsIHZvaWQgKmRhdGEpCit7CisJLyog VGhlIGNvbnRyb2wgcmVhY2hlcyB0aGlzIGZ1bmN0aW9uIGFmdGVyIGEgdmJsYW5rIGV2ZW50IGlz CisJICogcmVnaXN0ZXJlZAorCSAqLworCXZibF9pbmZvICppbmZvID0gKHZibF9pbmZvICopIGRh dGE7CisKKwlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCWlndF9pbmZvKCJFUlJPUjogSW52YWxpZCBE YXRhIHBhc3NlZCB0byB0aGUgdmJsYW5rIGhhbmRsZXJcbiIpOworCQlyZXR1cm47CisJfQorCWlu Zm8tPnZibF9jb3VudCsrOworfQorCisKKy8qCisgKiByZWFkX2RycnNfc3RhdHVzIDoKKyAqCUZ1 bmMgdG8gcmVhZCB0aGUgRFJSUyBzdGF0dXMgZnJvbSBkZWJ1Z2ZzCisgKi8KK3N0YXRpYyBib29s IHJlYWRfZHJyc19zdGF0dXMoY2hhciAqc3RyKQoreworCUZJTEUgKnN0YXR1czsKKwlpbnQgY250 OworCisJc3RhdHVzID0gaWd0X2RlYnVnZnNfZm9wZW4oImk5MTVfZHJyc19zdGF0dXMiLCAiciIp OworCWlndF9hc3NlcnQoc3RhdHVzKTsKKworCWNudCA9IGZyZWFkKHN0ciwgRFJSU19TVEFUVVNf QllURVNfQ05UIC0gMSwgMSwgc3RhdHVzKTsKKwlpZiAoIWNudCkgeworCQlpZiAoIWZlb2Yoc3Rh dHVzKSkgeworCQkJaWd0X2luZm8oIkVSUk9SOiAlZCBhdCBmcmVhZFxuIiwgZmVycm9yKHN0YXR1 cykpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWNsZWFyZXJyKHN0YXR1cyk7CisJfQorCWZj bG9zZShzdGF0dXMpOworCXJldHVybiB0cnVlOworfQorCisvKgorICogaXNfZHJyc19zdXBwb3J0 ZWQgOgorICoJRnVuYyB0byBjaGVjayBmb3IgRFJSUyBzdXBwb3J0CisgKi8KK3N0YXRpYyBib29s IGlzX2RycnNfc3VwcG9ydGVkKHZvaWQpCit7CisJY2hhciBzdHJbRFJSU19TVEFUVVNfQllURVNf Q05UXSA9IHt9OworCisJaWYgKCFyZWFkX2RycnNfc3RhdHVzKHN0cikpIHsKKwkJaWd0X2luZm8o IkVSUk9SOiBEZWJ1Z2ZzIHJlYWQgRkFJTEVEXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwly ZXR1cm4gc3Ryc3RyKHN0ciwgIkRSUlMgU3VwcG9ydGVkOiBZZXMiKSAhPSBOVUxMOworfQorCisv KgorICogaXNfZHJyc19lbmFibGVkIDoKKyAqCUZ1bmMgdG8gY2hlY2sgaWYgRFJSUyBpcyBlbmFi bGVkIGJ5IGRyaXZlcgorICovCitzdGF0aWMgYm9vbCBpc19kcnJzX2VuYWJsZWQodm9pZCkKK3sK KwljaGFyIHN0cltEUlJTX1NUQVRVU19CWVRFU19DTlRdID0ge307CisKKwlpZiAoIXJlYWRfZHJy c19zdGF0dXMoc3RyKSkgeworCQlpZ3RfaW5mbygiRVJST1I6IERlYnVnZnMgcmVhZCBGQUlMRURc biIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiBzdHJzdHIoc3RyLCAiSWRsZW5lc3Mg RFJSUzogRGlzYWJsZWQiKSA9PSBOVUxMOworfQorCisvKgorICogcHJlcGFyZV9jcnRjIDoKKyAq CUZ1bmMgdG8gcHJlcGFyZSBjcnRjIGZvciB0aGUgZ2l2ZW4gZGlzcGxheQorICovCitzdGF0aWMg Ym9vbCBwcmVwYXJlX2NydGMoZGF0YV90ICpkYXRhKQoreworCWlmIChkYXRhID09IE5VTEwpCisJ CXJldHVybiBmYWxzZTsKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7 CisJaWd0X291dHB1dF90ICpvdXRwdXQgPSBkYXRhLT5vdXRwdXQ7CisKKwkvKiBzZWxlY3QgdGhl IHBpcGUgd2Ugd2FudCB0byB1c2UgKi8KKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgZGF0 YS0+cGlwZSk7CisJaWd0X2Rpc3BsYXlfY29tbWl0KGRpc3BsYXkpOworCisJaWYgKCFvdXRwdXQt PnZhbGlkKSB7CisJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX0FOWSk7CisJCWln dF9kaXNwbGF5X2NvbW1pdChkaXNwbGF5KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVy biB0cnVlOworfQorCisvKgorICogY2FsY3VsYXRlX3JlZnJlc2hfcmF0ZSA6CisgKglGdW5jIHRv IGNhbGN1bGF0ZSB0aGUgcmVmcmVzaCByYXRlIGJ5IGNvdW50aW5nCisgKgl2YmxhbmtzIGluIDEg c2VjLiBJdCByZXR1cm5zIHRoZSBjYWxjdWxhdGVkIHJlZnJlc2ggcmF0ZSBvbiBzdWNjZXNzLgor ICoJUmV0dXJucyAtMSBpbiBjYXNlIG9mIGVycm9yLgorICovCitpbnQgY2FsY3VsYXRlX3JlZnJl c2hfcmF0ZShkYXRhX3QgKmRhdGEpCit7CisJZHJtRXZlbnRDb250ZXh0IGV2Y3R4OworCWRybVZC bGFuayB2Ymw7CisJdmJsX2luZm8gaGFuZGxlcl9pbmZvOworCXN0cnVjdCB0aW1ldmFsIHN0YXJ0 X3RpbWUsIGN1cnJfdGltZTsKKwlkb3VibGUgdGltZV9lbGFwc2VkOworCWludCByZWZyZXNoX3Jh dGUgPSAwLCB2YmxfY291bnQgPSAwOworCS8qc2V0IHVwIGV2ZW50IGNvbnRleHQgZm9yIGhhbmRs aW5nIHZibGFuayBldmVudHMqLworCW1lbXNldCgmZXZjdHgsIDAsIHNpemVvZihldmN0eCkpOwor CWV2Y3R4LnZlcnNpb24gPSBEUk1fRVZFTlRfQ09OVEVYVF9WRVJTSU9OOworCWV2Y3R4LnZibGFu a19oYW5kbGVyID0gdmJsYW5rX2hhbmRsZXI7CisJZXZjdHgucGFnZV9mbGlwX2hhbmRsZXIgPSBO VUxMOworCisJLyppbml0aWFsaXplIHRoZSB2YmwgY291bnQgdG8gemVybyBhbmQgc2V0IHRoZSBz dGFydGluZyB0aW1lKi8KKwloYW5kbGVyX2luZm8udmJsX2NvdW50ID0gMDsKKwlnZXR0aW1lb2Zk YXkoJnN0YXJ0X3RpbWUsIE5VTEwpOworCWhhbmRsZXJfaW5mby5zdGFydCA9IHN0YXJ0X3RpbWU7 CisJY3Vycl90aW1lID0gc3RhcnRfdGltZTsKKworCXRpbWVfZWxhcHNlZCA9IDAuMDsKKwkvKiBU byBjb3VudCB2YmxhbmtzIGluIDEgc2VjLiBMb29wIHRpbGwKKwkgKiAoY3VycmVudC10aW1lIC0g c3RhcnRpbmcgdGltZSkgPD0gMS4wIHNlYworCSAqLworCXdoaWxlICh0aW1lX2VsYXBzZWQgPD0g MS4wKSB7CisJCWludCByZXQ7CisKKwkJdmJsLnJlcXVlc3QudHlwZSA9IERSTV9WQkxBTktfUkVM QVRJVkUgfCBEUk1fVkJMQU5LX0VWRU5UOworCQl2YmwucmVxdWVzdC5zZXF1ZW5jZSA9IDE7CisJ CXZibC5yZXF1ZXN0LnNpZ25hbCA9ICh1bnNpZ25lZCBsb25nKSZoYW5kbGVyX2luZm87CisJCXJl dCA9IGRybVdhaXRWQmxhbmsoZGF0YS0+ZHJtX2ZkLCAmdmJsKTsKKwkJaWYgKHJldCAhPSAwKSB7 CisJCQlpZ3RfaW5mbygiRVJST1IgOiBkcm1XYWl0VkJsYW5rIEZBSUxFRCA6JWRcbiIsIHJldCk7 CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJLypjYWxsIGRybUhhbmRsZUV2ZW50KCkgdG8gaGFuZGxl IHZibGFuayBldmVudCAqLworCQlyZXQgPSBkcm1IYW5kbGVFdmVudChkYXRhLT5kcm1fZmQsICZl dmN0eCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJaWd0X2luZm8oIkVSUk9SIDogZHJtSGFuZGxl RXZlbnQgRkFJTEVEICVkXG4iLCByZXQpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJZ2V0dGlt ZW9mZGF5KCZjdXJyX3RpbWUsIE5VTEwpOworCQl0aW1lX2VsYXBzZWQgPSBjdXJyX3RpbWUudHZf c2VjICsgY3Vycl90aW1lLnR2X3VzZWMgKiAxZS02IC0KKwkJCShzdGFydF90aW1lLnR2X3NlYyAr IHN0YXJ0X3RpbWUudHZfdXNlYyAqIDFlLTYpOworCX0KKwlpZiAoIXRpbWVfZWxhcHNlZCkgewor CQlpZ3RfaW5mbygiRVJST1I6IEluY29ycmVjdCBtZWFzdXJlbWVudCBvZiB2YmxhbmsgZHVyYXRp b25cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXZibF9jb3VudCA9IGhhbmRsZXJfaW5mby52Ymxf Y291bnQ7CisJLyogY2FsY3VsYXRlIHRoZSByZWZyZXNoIHJhdGU7IHJyPXZibGFua19jb3VudC90 aW1lX3Rha2VuICovCisJcmVmcmVzaF9yYXRlID0gdmJsX2NvdW50IC8gdGltZV9lbGFwc2VkOwor CXJldHVybiByZWZyZXNoX3JhdGU7Cit9CisKKy8qCisgKiB3b3JrZXJfdGhyZWFkX2Z1bmMgOgor ICoJRnVuYyB3aGljaCBpcyBydW4gYnkgYSB3b3JrZXIgdGhyZWFkIHRvIGNhbGN1bGF0ZSB0aGUg cmVmcmVzaF9yYXRlLAorICoJd2hlbiBzaWduYWxsZWQgYnkgdGhlIG1hc3RlciB0aHJlYWQuCisg Ki8KK3ZvaWQgKndvcmtlcl90aHJlYWRfZnVuYyh2b2lkICpwdHIpCit7CisJZGF0YV90ICpkYXRh ID0gKGRhdGFfdCAqKSBwdHI7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgcmVmcmVzaF9yYXRlID0g MDsKKwkJLyp3YWl0IGZvciBzaWduYWwgZnJvbSBtYXN0ZXIqLworCQlwdGhyZWFkX211dGV4X2xv Y2soJnJyX211dGV4KTsKKwkJd2hpbGUgKCFycl9jYWxjX3JlcXVlc3RlZCkKKwkJCXB0aHJlYWRf Y29uZF93YWl0KCZjdl9ycl9jYWxjX3JlcXVlc3RlZCwgJnJyX211dGV4KTsKKworCQkvKiBjaGVj a3BvaW50IGZvciB0aHJlYWQgdGVybWluYXRpb24gKi8KKwkJaWYgKHRocmVhZF9mbGFnID09IFJF U0VUKSB7CisJCQlwdGhyZWFkX211dGV4X3VubG9jaygmcnJfbXV0ZXgpOworCQkJcHRocmVhZF9l eGl0KE5VTEwpOworCQl9CisJCXJyX2NhbGNfcmVxdWVzdGVkID0gUkVTRVQ7CisJCXB0aHJlYWRf bXV0ZXhfdW5sb2NrKCZycl9tdXRleCk7CisJCS8qY2FsY3VsYXRlIHJlZnJlc2hfcmF0ZSovCisJ CXJlZnJlc2hfcmF0ZSA9IGNhbGN1bGF0ZV9yZWZyZXNoX3JhdGUoZGF0YSk7CisKKwkJLyogc2ln bmFsIHRoZSBtYXN0ZXIgKi8KKwkJcHRocmVhZF9tdXRleF9sb2NrKCZycl9tdXRleCk7CisJCXJl ZnJlc2hfcmF0ZV9zaGFyZWQgPSByZWZyZXNoX3JhdGU7CisJCXJyX2NhbGNfY29tcGxldGVkID0g U0VUOworCQlwdGhyZWFkX211dGV4X3VubG9jaygmcnJfbXV0ZXgpOworCQlwdGhyZWFkX2NvbmRf c2lnbmFsKCZjdl9ycl9jYWxjX2NvbXBsZXRlZCk7CisJfQorCXJldHVybiBOVUxMOworfQorCisv KgorICogY2hlY2tfcmVmcmVzaF9yYXRlIDoKKyAqCUZ1bmMgdG8gY2hlY2sgdGhlIHJlZnJlc2gg cmF0ZSBjYWxjdWxhdGVkLCBhZ2FpbnN0IHRoZSBleHBlY3RlZCByZWZyZXNoCisgKglyYXRlLiBJ dCBzaWduYWxzIHRoZSB3b3JrZXIgdGhyZWFkIHRvIGNhbGN1bGF0ZSB0aGUgcmVmcmVzaC0KKyAq CXJhdGUsIGFuZCBjaGVja3MgaWYgdGhlIGNvcnJlY3QgcmVmcmVzaCByYXRlIGlzIHN3aXRjaGVk LgorICoJUmV0dXJucyAwIGluIGNhc2Ugb2YgcGFzcyAsIDEgaW4gY2FzZSBvZiBmYWlsdXJlLCBh bmQgLTEgZm9yIGVycm9yLgorICovCisKK3N0YXRpYyBpbnQgY2hlY2tfcmVmcmVzaF9yYXRlKGRh dGFfdCAqZGF0YSwgcmVmcmVzaF9yYXRlX3QgKmV4cGVjdGVkX3JyKQoreworLyoKKyAqIFRoZSBj YWxjdWxhdGVkIHJlZnJlc2gtcmF0ZSBpcyBhbiBhcHByb3hpbWF0aW9uIHRvIGVzdGltYXRlZCBy ZWZyZXNoLXJhdGUuCisgKiBUaGUgdG9sZXJhbmNlIHRocmVzaG9sZCBmb3IgdGhlIGRpZmZlcmVu Y2UgaXMgc2V0IHRvIDIuIERpZmZlcmVuY2UgbW9yZSB0aGFuCisgKiAyIGlzIGNvbnNpZGVyZWQg YXMgZmFpbHVyZSBmb3IgdGhlIGNoZWNrX3JlZnJlc2hfcmF0ZS4KKyAqLworI2RlZmluZSBUT0xF UkFOQ0VfVEhSRVNIT0xECQkyCisJaW50IHJlZnJlc2hfcmF0ZSA9IC0xOworCWNoYXIgZHJyc19z dGF0dXNbRFJSU19TVEFUVVNfQllURVNfQ05UXSA9IHt9OworCisJLyogU2lnbmFsIHdvcmtlciB0 aHJlYWQgdG8gY2FsY3VsYXRlIHJlZnJlc2ggcmF0ZSAqLworCXB0aHJlYWRfbXV0ZXhfbG9jaygm cnJfbXV0ZXgpOworCXJyX2NhbGNfcmVxdWVzdGVkID0gU0VUOworCXB0aHJlYWRfbXV0ZXhfdW5s b2NrKCZycl9tdXRleCk7CisJcHRocmVhZF9jb25kX3NpZ25hbCgmY3ZfcnJfY2FsY19yZXF1ZXN0 ZWQpOworCisJLyogR2V0IHRoZSBEUlJTIFN0YXR1cyBmcm9tIHRoZSBkZWJ1Z2ZzIGVudHJ5ICov CisJaWYgKCFyZWFkX2RycnNfc3RhdHVzKGRycnNfc3RhdHVzKSkgeworCQlpZ3RfaW5mbygiRVJS T1IgOiBEUlJTIGRlYnVnZnMgcmVhZCBGQUlMRURcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCS8q IFdhaXQgZm9yIHRoZSByZWZyZXNoIHJhdGUgY2FsY3VsYXRvciB0aHJlYWQgKi8KKwlwdGhyZWFk X211dGV4X2xvY2soJnJyX211dGV4KTsKKwl3aGlsZSAoIXJyX2NhbGNfY29tcGxldGVkKQorCQlw dGhyZWFkX2NvbmRfd2FpdCgmY3ZfcnJfY2FsY19jb21wbGV0ZWQsICZycl9tdXRleCk7CisJcnJf Y2FsY19jb21wbGV0ZWQgPSBSRVNFVDsKKwlyZWZyZXNoX3JhdGUgPSByZWZyZXNoX3JhdGVfc2hh cmVkOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZycl9tdXRleCk7CisJaWYgKHJlZnJlc2hfcmF0 ZSA8IDApIHsKKwkJaWd0X2luZm8oIkVSUk9SIDogUmVmcmVzaCByYXRlIGNhbGN1bGF0aW9uIEZB SUxFRFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJaWd0X2luZm8oIklORk8gOiBBY3R1YWwgUmVm cmVzaF9yYXRlIGJhc2VkIG9uIFZibGFuayBDb3VudHMvc2VjID0gJWRcbiIKKwkJCQkJCQksIHJl ZnJlc2hfcmF0ZSk7CisKKwkvKiBDb21wYXJlIHdpdGggRXhwZWN0ZWQgUmVmcmVzaCBSYXRlKi8K KwlpZ3RfaW5mbygiSU5GTzogRXhwZWN0ZWQgUmVmcmVzaC1SYXRlICVkXG4iLCBleHBlY3RlZF9y ci0+cmF0ZSk7CisJaWYgKHN0cnN0cihkcnJzX3N0YXR1cywgZXhwZWN0ZWRfcnItPm5hbWUpICE9 IE5VTEwKKwkmJiBhYnMocmVmcmVzaF9yYXRlIC0gZXhwZWN0ZWRfcnItPnJhdGUpIDw9IFRPTEVS QU5DRV9USFJFU0hPTEQpIHsKKwkJaWd0X2luZm8oIklORk86IEV4cGVjdGVkICVzIDogUEFTU0VE XG4iLCBleHBlY3RlZF9yci0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCWlndF9pbmZvKCJJ TkZPIDogRXhwZWN0ZWQgJXMgOiBGQUlMRUQuXG4iLCBleHBlY3RlZF9yci0+bmFtZSk7CisJcmV0 dXJuIDE7Cit9CisKKy8qCisgKiBjbGVhbl91cCA6CisgKglGdW5jIHRvIHN0b3AgdGhlIHdvcmtl ciB0aHJlYWQgYW5kIGRlc3Ryb3kgdGhyZWFkIHN5bmNyb25pemF0aW9uCisgKglzdHJ1Y3R1cmVz LgorICovCit2b2lkIGNsZWFuX3VwKHB0aHJlYWRfdCBycl90aHJlYWQpCit7CisJLyogU3RvcCB0 aGUgd29ya2VyIHRocmVhZCAqLworCXB0aHJlYWRfbXV0ZXhfbG9jaygmcnJfbXV0ZXgpOworCXRo cmVhZF9mbGFnID0gUkVTRVQ7CisJcnJfY2FsY19yZXF1ZXN0ZWQgPSBTRVQ7CisJcHRocmVhZF9t dXRleF91bmxvY2soJnJyX211dGV4KTsKKwlwdGhyZWFkX2NvbmRfc2lnbmFsKCZjdl9ycl9jYWxj X3JlcXVlc3RlZCk7CisJcHRocmVhZF9qb2luKHJyX3RocmVhZCwgTlVMTCk7CisKKwkvKiBkZXN0 cm95IHRoZSBjb25kaXRpb24gdmFyaWFibGVzIGFuZCBtdXRleCAqLworCXB0aHJlYWRfY29uZF9k ZXN0cm95KCZjdl9ycl9jYWxjX3JlcXVlc3RlZCk7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJmN2 X3JyX2NhbGNfY29tcGxldGVkKTsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnJyX211dGV4KTsK K30KKworLyoKKyAqIGV4ZWN1dGVfdGVzdDoKKyAqCVRoaXMgZnVuY3Rpb24KKyAqCTEuIEluaXRp YWxpemVzIHRoZSB0aHJlYWQgc3luYyBzdHJ1Y3R1cmVzLgorICoJMi4gQ3JlYXRlcyBhIHdvcmtl ciB0aHJlYWQgd2hpY2ggY2FuIGJlIHNpZ25hbGVkIHRvIGVzdGltYXRlCisgKgl0aGUgcmVmcmVz aCByYXRlcyBiYXNlZCBvbiBjb3VudGluZyB2YmxhbmtzIHBlciBzZWMuCisgKgkzLiBDcmVhdGVz IHR3byBkaWZmZXJlbnQgRnJhbWVidWZmZXIgZmIwLCBmYjEKKyAqCWFuZCBhcHBseSB0aGVtIGlu IHRoZSBpbnRlcnZhbCBvZiAxLjJTZWMuIFNvIGJldHdlZW4gRkIgY2hhbmdlCisgKglEUlJTIHNo b3VsZCB0b2dnbGUgZnJvbSBEUlJTX0hJR0hfUlIgLT4gRFJSU19MT1dfUlIuCisgKglBbmQgb24g bmV4dCBGQiBjaGFuZ2UgRFJSU19MT1dfUlIgLT4gRFJSU19ISUdIX1JSLgorICoKKyAqCVRoZXNl IGV4cGVjdGVkIHRyYW5zaXRpb25zIGFyZSB2ZXJpZmllZCB1c2luZyB0aGUga2VybmVsIGRlYnVn ZnMKKyAqCWFuZCB0aGUgcmVmcmVzaC1yYXRlLCBjYWxjdWxhdGVkIGJ5IGNvdW50aW5nIHZibGFu a3MgcGVyIHNlYyBieSB0aGUKKyAqCXdvcmtlciB0aHJlYWQuCisgKi8KK3N0YXRpYyBpbnQgZXhl Y3V0ZV90ZXN0KGRhdGFfdCAqZGF0YSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRh dGEtPmRpc3BsYXk7CisJaWd0X291dHB1dF90ICpvdXRwdXQgPSBkYXRhLT5vdXRwdXQ7CisJZHJt TW9kZU1vZGVJbmZvICptb2RlLCAqc3VwcG9ydGVkX21vZGVzOworCWludCB0ZXN0X2ZhaWxlZCA9 IDA7CisJaW50IHJldCwgaSwgY291bnRfbW9kZXM7CisJcmVmcmVzaF9yYXRlX3QgaGlnaF9yciwg bG93X3JyOworCXB0aHJlYWRfdCBycl90aHJlYWQ7CisKKwkvKmluaXRpYWxpemUgdGhlIGNvbmRp dGlvbiB2YXJpYWJsZXMgYW5kICBtdXRleCovCisJcHRocmVhZF9jb25kX2luaXQoJmN2X3JyX2Nh bGNfcmVxdWVzdGVkLCBOVUxMKTsKKwlwdGhyZWFkX2NvbmRfaW5pdCgmY3ZfcnJfY2FsY19jb21w bGV0ZWQsIE5VTEwpOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmcnJfbXV0ZXgsIE5VTEwpOworCXRo cmVhZF9mbGFnID0gU0VUOworCXJyX2NhbGNfcmVxdWVzdGVkID0gUkVTRVQ7CisJcnJfY2FsY19j b21wbGV0ZWQgPSBSRVNFVDsKKwkvKiBjcmVhdGUgYSB0aHJlYWQgZm9yIGNhbGN1bGF0aW5nIHRo ZSByZWZyZXNoIHJhdGUgKi8KKwlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmcnJfdGhyZWFkLCBOVUxM LCB3b3JrZXJfdGhyZWFkX2Z1bmMsCisJCQkJCQkJKHZvaWQgKikgZGF0YSk7CisJaWYgKHJldCA9 PSAtMSkgeworCQlpZ3RfaW5mbygiRVJST1IgOiBSZWZyZXNoIHJhdGUgdGhyZWFkIGNyZWF0aW9u IEZBSUxFRFxuIik7CisJCWNsZWFuX3VwKHJyX3RocmVhZCk7CisJCXJldHVybiAtMTsKKwl9CisK KwloaWdoX3JyLm5hbWUgPSAiRFJSU19ISUdIX1JSIjsKKwloaWdoX3JyLnJhdGUgPSAwOworCWxv d19yci5uYW1lID0gIkRSUlNfTE9XX1JSIjsKKwlsb3dfcnIucmF0ZSA9IDA7CisJLyogZ2V0IHRo ZSBtYXggYW5kIG1pbiBzdXBwb3J0ZWQgcmVmcmVzaCByYXRlcyBmb3IgdGhlIGRpc3BsYXkgKi8K KwlzdXBwb3J0ZWRfbW9kZXMgPSBvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3ItPm1vZGVzOworCWNv dW50X21vZGVzID0gb3V0cHV0LT5jb25maWcuY29ubmVjdG9yLT5jb3VudF9tb2RlczsKKwkvKiBt aW5pbXVtIDIgbW9kZXMgYXJlIHJlcXVpcmVkIGZvciBEUlJTICovCisJaWYgKGNvdW50X21vZGVz IDwgMikgeworCQlpZ3RfaW5mbygiRVJST1I6IE1pbmltdW0gMiBtb2RlcyByZXF1aXJlZCBmb3Ig RFJSU1xuIik7CisJCXJldHVybiAtMTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGNvdW50X21vZGVz OyBpKyspIHsKKwkJaW50IHJyID0gc3VwcG9ydGVkX21vZGVzW2ldLnZyZWZyZXNoOworCisJCWlm IChpID09IDApIHsKKwkJCWhpZ2hfcnIucmF0ZSA9IGxvd19yci5yYXRlID0gcnI7CisJCQljb250 aW51ZTsKKwkJfQorCQlpZiAoaGlnaF9yci5yYXRlIDwgcnIpCisJCQloaWdoX3JyLnJhdGUgPSBy cjsKKwkJaWYgKGxvd19yci5yYXRlID4gcnIpCisJCQlsb3dfcnIucmF0ZSA9IHJyOworCX0KKwlk YXRhLT5wcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmUoZGF0YS0+b3V0cHV0LCBJR1RfUExB TkVfUFJJTUFSWSk7CisJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUoZGF0YS0+b3V0cHV0KTsK KwlkYXRhLT5mYl9pZFswXSA9IGlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLCBtb2Rl LT5oZGlzcGxheSwKKwkJCW1vZGUtPnZkaXNwbGF5LAorCQkJRFJNX0ZPUk1BVF9YUkdCODg4OCwK KwkJCUxPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkwLjAsIDEwMC4xLCAwLjAsICZkYXRh LT5mYlswXSk7CisJaWd0X2Fzc2VydChkYXRhLT5mYl9pZFswXSk7CisJZGF0YS0+ZmJfaWRbMV0g PSBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksCisJCQlt b2RlLT52ZGlzcGxheSwKKwkJCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQlMT0NBTF9EUk1fRk9S TUFUX01PRF9OT05FLAorCQkJMTAwLjEsIDAuMCwgMC4wLAorCQkJJmRhdGEtPmZiWzFdKTsKKwlp Z3RfYXNzZXJ0KGRhdGEtPmZiX2lkWzFdKTsKKworCWRhdGEtPmhhbmRsZVswXSA9IGRhdGEtPmZi WzBdLmdlbV9oYW5kbGU7CisJZGF0YS0+aGFuZGxlWzFdID0gZGF0YS0+ZmJbMV0uZ2VtX2hhbmRs ZTsKKworCS8qIHNjYW5vdXQgPSBmYlsxXSAqLworCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJp bWFyeSwgJmRhdGEtPmZiWzFdKTsKKwlpZ3RfZGlzcGxheV9jb21taXQoZGlzcGxheSk7CisJaWYg KCFpc19kcnJzX2VuYWJsZWQoKSkgeworCQlpZ3RfaW5mbygiSU5GTyA6IERSUlMgbm90IGVuYWJs ZWRcbiIpOworCQlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1hcnksIE5VTEwpOworCQlpZ3Rf b3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9BTlkpOworCQlpZ3RfZGlzcGxheV9jb21taXQo ZGlzcGxheSk7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmJbMF0pOwor CQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiWzFdKTsKKwkJY2xlYW5fdXAo cnJfdGhyZWFkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGV4cGVjdGluZyBIaWdoIFJSICov CisJcmV0ID0gIGNoZWNrX3JlZnJlc2hfcmF0ZShkYXRhLCAmaGlnaF9ycik7CisJaWYgKHJldCA9 PSAtMSkKKwkJcmV0dXJuIC0xOworCWlmIChyZXQgPT0gMSkKKwkJdGVzdF9mYWlsZWQgPSAxOwor CS8qIDEuMlNlYyB0byBFbnRlciB0aGUgSWRsZW5lc3MgYW5kIGNoZWNrIGZvciBMb3cgUmVmcmVz aCBSYXRlICovCisJdXNsZWVwKDEyMDAwMDApOworCXJldCA9ICBjaGVja19yZWZyZXNoX3JhdGUo ZGF0YSwgJmxvd19ycik7CisJaWYgKHJldCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCWlmIChyZXQg PT0gMSkKKwkJdGVzdF9mYWlsZWQgPSAxOworCisJLyogc2Nhbm91dCA9IGZiWzBdIGFuZCBjaGVj ayBmb3IgSGlnaCBSZWZyZXNoIFJhdGUqLworCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJpbWFy eSwgJmRhdGEtPmZiWzBdKTsKKwlpZ3RfZGlzcGxheV9jb21taXQoZGlzcGxheSk7CisJcmV0ID0g IGNoZWNrX3JlZnJlc2hfcmF0ZShkYXRhLCAmaGlnaF9ycik7CisJaWYgKHJldCA9PSAtMSkKKwkJ cmV0dXJuIC0xOworCWlmIChyZXQgPT0gMSkKKwkJdGVzdF9mYWlsZWQgPSAxOworCisJLyogMS4y U2VjIHRvIEVudGVyIHRoZSBJZGxlbmVzcyBhbmQgY2hlY2sgZm9yIExvdyBSZWZyZXNoIFJhdGUg Ki8KKwl1c2xlZXAoMTIwMDAwMCk7CisJcmV0ID0gIGNoZWNrX3JlZnJlc2hfcmF0ZShkYXRhLCAm bG93X3JyKTsKKwlpZiAocmV0ID09IC0xKQorCQlyZXR1cm4gLTE7CisJaWYgKHJldCA9PSAxKQor CQl0ZXN0X2ZhaWxlZCA9IDE7CisKKwkvKiBzY2Fub3V0ID0gZmJbMV0gYW5kIGNoZWNrIGZvciBI aWdoIFJlZnJlc2ggUmF0ZSovCisJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmltYXJ5LCAmZGF0 YS0+ZmJbMV0pOworCWlndF9kaXNwbGF5X2NvbW1pdChkaXNwbGF5KTsKKwlyZXQgPSAgY2hlY2tf cmVmcmVzaF9yYXRlKGRhdGEsICZoaWdoX3JyKTsKKwlpZiAocmV0ID09IC0xKQorCQlyZXR1cm4g LTE7CisJaWYgKHJldCA9PSAxKQorCQl0ZXN0X2ZhaWxlZCA9IDE7CisKKwkvKiAxLjJTZWMgdG8g RW50ZXIgdGhlIElkbGVuZXNzICovCisJdXNsZWVwKDEyMDAwMDApOworCXJldCA9ICBjaGVja19y ZWZyZXNoX3JhdGUoZGF0YSwgJmxvd19ycik7CisJaWYgKHJldCA9PSAtMSkKKwkJcmV0dXJuIC0x OworCWlmIChyZXQgPT0gMSkKKwkJdGVzdF9mYWlsZWQgPSAxOworCisJY2xlYW5fdXAocnJfdGhy ZWFkKTsKKwlyZXR1cm4gdGVzdF9mYWlsZWQ7Cit9CisKKy8qCisgKiBmaW5pc2hfY3J0YyA6Cisg KglGdW5jIHRvIGZyZWUgdGhlIGZyYW1lYnVmZmVycyBhZnRlciB0aGUgdGVzdCBjb21wbGV0aW9u LgorICovCitzdGF0aWMgdm9pZCBmaW5pc2hfY3J0YyhkYXRhX3QgKmRhdGEpCit7CisJaWd0X3Bs YW5lX3NldF9mYihkYXRhLT5wcmltYXJ5LCBOVUxMKTsKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKGRh dGEtPm91dHB1dCwgUElQRV9BTlkpOworCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxh eSk7CisKKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiWzBdKTsKKwlpZ3Rf cmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiWzFdKTsKK30KKworLyoKKyAqIHJlc2V0 X2Rpc3BsYXkgOgorICoJRnVuYyB0byByZXNldCB0aGUgZGlzcGxheSBzdHJ1Y3R1cmVzIGFmdGVy IHRoZSB0ZXN0IGNvbXBsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHJlc2V0X2Rpc3BsYXkoZGF0 YV90ICpkYXRhKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsK KworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoZGlzcGxheSwgZGF0YS0+b3V0cHV0KSB7CisJ CWlmIChkYXRhLT5vdXRwdXQtPnZhbGlkKSB7CisJCQlkYXRhLT5wcmltYXJ5ID0gIGlndF9vdXRw dXRfZ2V0X3BsYW5lKGRhdGEtPm91dHB1dCwKKwkJCQkJCQlJR1RfUExBTkVfUFJJTUFSWSk7CisJ CQlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1hcnksIE5VTEwpOworCQl9CisJCWlndF9vdXRw dXRfc2V0X3BpcGUoZGF0YS0+b3V0cHV0LCBQSVBFX0FOWSk7CisJfQorfQorLyoKKyAqIHJ1bl90 ZXN0IDoKKyAqCUZ1bmMgdG8gcnVuIHRoZSB0ZXN0IGZvciB0aGUgZURQIGRpc3BsYXkuCisgKi8K K3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGRhdGFfdCAqZGF0YSkKK3sKKwlpZ3RfZGlzcGxheV90ICpk aXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaW50IHJldDsKKworCXJlc2V0X2Rpc3BsYXkoZGF0 YSk7CisJLyogQ2hlY2sgZm9yIGVEUCBDb25uZWN0b3Igb24gUElQRSBBICxhcyBlRFAgZ29lcyBu b3JtYWxseSBvbiBQSVBFX0EgKi8KKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRpc3BsYXks IGRhdGEtPm91dHB1dCkgeworCQlkcm1Nb2RlQ29ubmVjdG9yUHRyIGMgPSBkYXRhLT5vdXRwdXQt PmNvbmZpZy5jb25uZWN0b3I7CisKKwkJaWYgKGMtPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RF X0NPTk5FQ1RPUl9lRFAgfHwKKwkJCWMtPmNvbm5lY3Rpb24gIT0gRFJNX01PREVfQ09OTkVDVEVE KQorCQkJY29udGludWU7CisJCWRhdGEtPnBpcGUgPSBQSVBFX0E7CisJCWlndF9hc3NlcnRfZihw cmVwYXJlX2NydGMoZGF0YSksICJGYWlsZWQgdG8gcHJlcGFyZSBDUlRDXG4iKTsKKwkJaWd0X2lu Zm8oIklORk8gOiBCZWdpbm5pbmcgJXMgb24gcGlwZSAlcyxjb25uZWN0b3IgJXNcbiIsCisJCQkJ CWlndF90ZXN0X25hbWUoKSwKKwkJCQkJa21zdGVzdF9waXBlX25hbWUoZGF0YS0+cGlwZSksCisJ CQkJCWlndF9vdXRwdXRfbmFtZShkYXRhLT5vdXRwdXQpKTsKKworCQlyZXQgPSBleGVjdXRlX3Rl c3QoZGF0YSk7CisJCWlndF9za2lwX29uX2YocmV0ID09IC0xLAorCQkJCSJJTkZPIDolcyBvbiBw aXBlICVzLCBjb25uZWN0b3IgJXM6U0tJUFBFRFxuIiwKKwkJCQkJaWd0X3Rlc3RfbmFtZSgpLAor CQkJCQlrbXN0ZXN0X3BpcGVfbmFtZShkYXRhLT5waXBlKSwKKwkJCQkJaWd0X291dHB1dF9uYW1l KGRhdGEtPm91dHB1dCkpOworCQlpZ3RfZmFpbF9vbl9mKHJldCA9PSAxLAorCQkJCSJJTkZPIDol cyBvbiBwaXBlICVzLCBjb25uZWN0b3IgJXM6RkFJTEVEXG4iLAorCQkJCQlpZ3RfdGVzdF9uYW1l KCksCisJCQkJCWttc3Rlc3RfcGlwZV9uYW1lKGRhdGEtPnBpcGUpLAorCQkJCQlpZ3Rfb3V0cHV0 X25hbWUoZGF0YS0+b3V0cHV0KSk7CisKKwkJaWd0X2Fzc2VydF9mKHJldCA9PSAwLAorCQkJCSJJ TkZPIDolcyBvbiBwaXBlICVzLCBjb25uZWN0b3IgJXM6IFBBU1NFRFxuIiwKKwkJCQkJaWd0X3Rl c3RfbmFtZSgpLAorCQkJCQlrbXN0ZXN0X3BpcGVfbmFtZShkYXRhLT5waXBlKSwKKwkJCQkJaWd0 X291dHB1dF9uYW1lKGRhdGEtPm91dHB1dCkpOworCisJCWZpbmlzaF9jcnRjKGRhdGEpOworCX0K K30KKworaWd0X3NpbXBsZV9tYWluCit7CisJZGF0YV90IGRhdGEgPSB7fTsKKworCWlndF9za2lw X29uX3NpbXVsYXRpb24oKTsKKwlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIo RFJJVkVSX0lOVEVMKTsKKwlpZiAoZGF0YS5kcm1fZmQgPT0gLTEpIHsKKwkJaWd0X2luZm8oIkVS Uk9SIDogaW52YWxpZCBmZFxuIik7CisJCXJldHVybjsKKwl9CisJZGF0YS5kZXZpZCA9IGludGVs X2dldF9kcm1fZGV2aWQoZGF0YS5kcm1fZmQpOworCWlmIChkYXRhLmRldmlkIDwgMCkgeworCQlp Z3RfaW5mbygiRVJST1IgOiBpbnZhbGlkIGRldiBpZFxuIik7CisJCXJldHVybjsKKwl9CisJLyog Q2hlY2sgaWYgdGhlIERSUlMgaXMgc3VwcG9ydGVkLgorCSAqIElmIHllcyBjYWxsIHRoZSBJZGxl bmVzcyBEUlJTIHRlc3QKKwkgKi8KKwlpZ3RfcmVxdWlyZV9mKGlzX2RycnNfc3VwcG9ydGVkKCks CisJCQkiRFJSUyBub3Qgc3VwcG9ydGVkOmNoZWNrIFZCVC9wYW5lbCBjYXBzXG4iKTsKKwlpZ3Rf ZGlzcGxheV9pbml0KCZkYXRhLmRpc3BsYXksIGRhdGEuZHJtX2ZkKTsKKwlydW5fdGVzdCgmZGF0 YSk7CisJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKK30KLS0gCjIuNy40CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK