From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: [PATCH i-g-t v4] lib/igt_core: Add kmsg capture and dumping Date: Thu, 26 Nov 2015 14:17:53 +0200 Message-ID: <1448540273-19233-1-git-send-email-joonas.lahtinen@linux.intel.com> References: <1448019977.4983.8.camel@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 7A8DB6E699 for ; Thu, 26 Nov 2015 04:17:58 -0800 (PST) In-Reply-To: <1448019977.4983.8.camel@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 graphics driver community testing & development Cc: Daniel Vetter , Thomas Wood List-Id: intel-gfx@lists.freedesktop.org Q2FwdHVyZSB0aGUgb3V0cHV0IGZyb20gL2Rldi9rbXNnIGR1cmluZyB0ZXN0IGV4ZWN1dGlvbiBp bmRlcGVuZGFudGx5Cm9mIG90aGVyIGNvbmN1cnJlbnQgd2F0Y2hlcnMgbGlrZSBQaWdsaXQgdGVz dCBydW5uZXIuCgpUaGUgY2FwdHVyZWQgb3V0cHV0IGlzIGFuYWx5emVkIGFuZCB0aGUgd2hvbGUg b3V0cHV0IGR1bXBlZCBpZiBtZXNzYWdlCndpdGggcHJpb3JpdHkgTE9HX1dBUk5JTkcgb3IgaGln aGVyIGlzIGVtaXR0ZWQgZnJvbSBhbnkgZG9tYWluLgoKQWxzbyBhZGRpbmcgaWd0X2NhcHR1cmUg dG8gbGliL3Rlc3RzIHdoaWNoIHdpbGwgZmFpbCBzdWJ0ZXN0cyBhbmQKcHJvZHVjZSBrbXNnIG91 dHB1dCB3aGljaCBzaG91bGQgYmUgY2FwdHVyZWQgYnkgdGhlIG5ldyBjb2RlLgoKdjQ6Ci0gRG8g bm90IGVmZmVjdCByZXR1cm4gdmFsdWUgb2YgdGVzdCwganVzdCBkdW1wIChEYW5pZWwpCgp2MzoK LSBVc2UgT19DTE9FWEVDIGFuZCBjbGFyaWZ5IGhleCBkZWNvZGluZyAoQ2hyaXMpCgp2MjoKLSBS ZW9wZW4vY2xvc2UgdGhlIGttc2cgRkQgcGVyIGVhY2ggdGVzdCAoQ2hyaXMpCi0gQmV0dGVyIGNv bW1pdCBtZXNhZ2UgKERhbmllbCkKLSBEaXNwbGF5IGZhaWx1cmUgZHVlIHRvIGttc2cgb25seSBh cyBGQUlMIChLTVNHKQoKQ2M6IFRob21hcyBXb29kIDx0aG9tYXMud29vZEBpbnRlbC5jb20+CkNj OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IERhbWllbiBMZXNw aWF1IDxkYW1pZW4ubGVzcGlhdUBpbnRlbC5jb20+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwu dmV0dGVyQGZmd2xsLmNoPgpBY2tlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBm ZndsbC5jaD4KU2lnbmVkLW9mZi1ieTogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5A bGludXguaW50ZWwuY29tPgotLS0KIGxpYi9pZ3RfY29yZS5jICAgICAgICAgICAgIHwgMTI5ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogbGliL3Rlc3RzLy5n aXRpZ25vcmUgICAgICAgfCAgIDEgKwogbGliL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDIg KwogbGliL3Rlc3RzL2lndF9jYXB0dXJlLmMgICAgfCAgODkgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAyMTggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdGVzdHMvaWd0X2NhcHR1cmUuYwoKZGlmZiAt LWdpdCBhL2xpYi9pZ3RfY29yZS5jIGIvbGliL2lndF9jb3JlLmMKaW5kZXggODRjZjhkMi4uYjFh YTc1MCAxMDA2NDQKLS0tIGEvbGliL2lndF9jb3JlLmMKKysrIGIvbGliL2lndF9jb3JlLmMKQEAg LTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxnZXRvcHQuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4K ICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KICNpbmNsdWRlIDxzeXMv d2FpdC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmZGVmIF9fbGludXhfXwpAQCAtMjEx LDYgKzIxMiw4IEBACiAgKiAiLS1oZWxwIiBjb21tYW5kIGxpbmUgb3B0aW9uLgogICovCiAKKyNk ZWZpbmUgSUdUX0tNU0dfRFVNUF9CVUZfU0laRQkJNDA5NgorCiBzdGF0aWMgdW5zaWduZWQgaW50 IGV4aXRfaGFuZGxlcl9jb3VudDsKIGNvbnN0IGNoYXIgKmlndF9pbnRlcmFjdGl2ZV9kZWJ1ZzsK IApAQCAtMjQ4LDYgKzI1MSwxMCBAQCBlbnVtIHsKIHN0YXRpYyBpbnQgaWd0X2V4aXRjb2RlID0g SUdUX0VYSVRfU1VDQ0VTUzsKIHN0YXRpYyBjb25zdCBjaGFyICpjb21tYW5kX3N0cjsKIAorc3Rh dGljIGludCBpZ3Rfa21zZ19jYXB0dXJlX2ZkID0gLTE7CitzdGF0aWMgaW50IGlndF9rbXNnX2No ZWNrX2ZkID0gLTE7CitzdGF0aWMgY2hhciogaWd0X2ttc2dfZHVtcF9idWYgPSBOVUxMOworCiBz dGF0aWMgY2hhciogaWd0X2xvZ19kb21haW5fZmlsdGVyOwogc3RhdGljIHN0cnVjdCB7CiAJY2hh ciAqZW50cmllc1syNTZdOwpAQCAtMzEzLDYgKzMyMCwxMTIgQEAgc3RhdGljIHZvaWQgX2lndF9s b2dfYnVmZmVyX2R1bXAodm9pZCkKIAlwdGhyZWFkX211dGV4X3VubG9jaygmbG9nX2J1ZmZlcl9t dXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9pZ3Rfa21zZ19yZXNldCh2b2lkKQoreworCWlmIChp Z3Rfa21zZ19kdW1wX2J1ZiA9PSBOVUxMKQorCQlpZ3Rfa21zZ19kdW1wX2J1ZiA9IG1hbGxvYyhJ R1RfS01TR19EVU1QX0JVRl9TSVpFKTsKKworCWlmIChpZ3Rfa21zZ19kdW1wX2J1ZiA9PSBOVUxM KSB7CisJCWlndF93YXJuKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5LCAiCisJCQkgImNhbiBu b3QgZHVtcCBrbXNnLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaWd0X2ttc2dfY2FwdHVy ZV9mZCA9PSAtMSkKKwkJaWd0X2ttc2dfY2FwdHVyZV9mZCA9IG9wZW4oIi9kZXYva21zZyIsCisJ CQkJCSAgIE9fUkRPTkxZIHwgT19OT05CTE9DSyB8IE9fQ0xPRVhFQyk7CisKKwlpZiAoaWd0X2tt c2dfY2FwdHVyZV9mZCA9PSAtMSkKKwkJZ290byBlcnJfY2FwdHVyZTsKKworCWlmIChpZ3Rfa21z Z19jaGVja19mZCA9PSAtMSkKKwkJaWd0X2ttc2dfY2hlY2tfZmQgPSBvcGVuKCIvZGV2L2ttc2ci LAorCQkJCQkgT19SRE9OTFkgfCBPX05PTkJMT0NLIHwgT19DTE9FWEVDKTsKKworCWlmIChpZ3Rf a21zZ19jaGVja19mZCA9PSAtMSkKKwkJZ290byBlcnJfY2hlY2s7CisKKwlsc2VlayhpZ3Rfa21z Z19jYXB0dXJlX2ZkLCAwLCBTRUVLX0VORCk7CisJbHNlZWsoaWd0X2ttc2dfY2hlY2tfZmQsIDAs IFNFRUtfRU5EKTsKKwlyZXR1cm47CisKK2Vycl9jaGVjazoKKwljbG9zZShpZ3Rfa21zZ19jYXB0 dXJlX2ZkKTsKKwlpZ3Rfa21zZ19jYXB0dXJlX2ZkID0gLTE7CitlcnJfY2FwdHVyZToKKwlmcmVl KGlndF9rbXNnX2R1bXBfYnVmKTsKKwlpZ3Rfa21zZ19kdW1wX2J1ZiA9IE5VTEw7CisJcmV0dXJu OworfQorCitzdGF0aWMgaW50IF9pZ3Rfa21zZ19kdW1wKGJvb2wgcHJpbnQsIGludCBmaWx0ZXJf cHJpb3JpdHkpCit7CisJc2l6ZV90IG5ieXRlczsKKwlpbnQgbmxpbmVzOworCWludCBwcmVmaXg7 CisJaW50IHByaW9yaXR5OworCWNoYXIgKnA7CisJaW50IGZkOworCisJZmQgPSBwcmludCA/IGln dF9rbXNnX2NhcHR1cmVfZmQgOiBpZ3Rfa21zZ19jaGVja19mZDsKKwlpZiAoZmQgPT0gLTEpCisJ CXJldHVybiAwOworCisJbmxpbmVzID0gMDsKKwlkbyB7CisJCWVycm5vID0gMDsKKwkJbmJ5dGVz ID0gcmVhZChmZCwgaWd0X2ttc2dfZHVtcF9idWYsIElHVF9LTVNHX0RVTVBfQlVGX1NJWkUpOwor CisJCWlmIChuYnl0ZXMgPT0gLTEpCisJCQljb250aW51ZTsKKworCQlzc2NhbmYoaWd0X2ttc2df ZHVtcF9idWYsICIlZDsiLCAmcHJlZml4KTsKKwkJcHJpb3JpdHkgPSBwcmVmaXggJiAweDc7CisK KwkJaWYgKHByaW9yaXR5ID4gZmlsdGVyX3ByaW9yaXR5KQorCQkJY29udGludWU7CisKKwkJbmxp bmVzKys7CisKKwkJaWYgKCFwcmludCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChubGluZXMgPT0g MSkKKwkJCWZwcmludGYoc3RkZXJyLCAiKioqKiBLTVNHICoqKipcbiIpOworCisJCXAgPSBzdHJj aHIoaWd0X2ttc2dfZHVtcF9idWYsICc7JykgKyAxOworCQl3aGlsZSAocCAtIGlndF9rbXNnX2R1 bXBfYnVmIDwgbmJ5dGVzKSB7CisJCQlpbnQgYyA9ICpwKys7CisJCQkvKiBEZWNvZGUgbm9uLXBy aW50YWJsZSBjaGFyYWN0ZXJzIGVzY2FwZWQgaW4KKwkJCSAqIGhleCBmb3JtIChceDBmKS4gKi8K KwkJCWlmIChjID09ICdcXCcpIHsKKwkJCQlpZ3RfYXNzZXJ0KCpwKysgPT0gJ3gnKTsKKwkJCQlp Z3RfYXNzZXJ0KHNzY2FuZihwLCAiJXgiLCAmYykgPT0gMSk7CisJCQkJcCArPSAyOworCQkJfQor CQkJZnB1dGMoYywgc3RkZXJyKTsKKwkJfQorCX0gd2hpbGUoZXJybm8gPT0gMCk7CisKKwlpZiAo cHJpbnQgJiYgbmxpbmVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIioqKiogIEVORCAgKioqKlxuIik7 CisKKwlpZiAoZXJybm8gIT0gRUFHQUlOKQorCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBJbmNv bXBsZXRlIGttc2chXG4iKTsKKworCWNsb3NlKGZkKTsKKworCWlmIChwcmludCkgeworCQlpZ3Rf a21zZ19jYXB0dXJlX2ZkID0gLTE7CisJCWZyZWUoaWd0X2ttc2dfZHVtcF9idWYpOworCQlpZ3Rf a21zZ19kdW1wX2J1ZiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWd0X2ttc2dfY2hlY2tfZmQgPSAt MTsKKwl9CisKKwlyZXR1cm4gbmxpbmVzOworfQorCiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJp bnRmLCAxLCAyKSkpCiBzdGF0aWMgdm9pZCBrbXNnKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQog I2RlZmluZSBLRVJOX0VNRVIJIjwwPiIKQEAgLTcxMiw4ICs4MjUsMTAgQEAgb3V0OgogCS8qIGlu c3RhbGwgZXhpdCBoYW5kbGVyLCB0byBlbnN1cmUgd2UgY2xlYW4gdXAgKi8KIAlpZ3RfaW5zdGFs bF9leGl0X2hhbmRsZXIoY29tbW9uX2V4aXRfaGFuZGxlcik7CiAKLQlpZiAoIXRlc3Rfd2l0aF9z dWJ0ZXN0cykKKwlpZiAoIXRlc3Rfd2l0aF9zdWJ0ZXN0cykgewogCQlnZXR0aW1lKCZzdWJ0ZXN0 X3RpbWUpOworCQlfaWd0X2ttc2dfcmVzZXQoKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyAob3B0aW5k ICsgaSkgPCAqYXJnYzsgaSsrKQogCQlhcmd2W2kgKyAxXSA9IGFyZ3Zbb3B0aW5kICsgaV07CkBA IC04MzIsOCArOTQ3LDkgQEAgYm9vbCBfX2lndF9ydW5fc3VidGVzdChjb25zdCBjaGFyICpzdWJ0 ZXN0X25hbWUpCiAJaWd0X2RlYnVnKCJTdGFydGluZyBzdWJ0ZXN0OiAlc1xuIiwgc3VidGVzdF9u YW1lKTsKIAogCV9pZ3RfbG9nX2J1ZmZlcl9yZXNldCgpOwotCisJX2lndF9rbXNnX3Jlc2V0KCk7 CiAJZ2V0dGltZSgmc3VidGVzdF90aW1lKTsKKwogCXJldHVybiAoaW5fc3VidGVzdCA9IHN1YnRl c3RfbmFtZSk7CiB9CiAKQEAgLTk2Myw2ICsxMDc5LDkgQEAgdm9pZCBfX2lndF9za2lwX2NoZWNr KGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludCBsaW5lLAogICovCiB2b2lkIGlndF9zdWNjZXNz KHZvaWQpCiB7CisJaWYgKF9pZ3Rfa21zZ19kdW1wKGZhbHNlLCBMT0dfV0FSTklORykpCisJCV9p Z3Rfa21zZ19kdW1wKHRydWUsIExPR19ERUJVRyk7CisKIAlzdWNjZWVkZWRfb25lID0gdHJ1ZTsK IAlpZiAoaW5fc3VidGVzdCkKIAkJZXhpdF9zdWJ0ZXN0KCJTVUNDRVNTIik7CkBAIC0xMDA1LDYg KzExMjQsMTEgQEAgdm9pZCBpZ3RfZmFpbChpbnQgZXhpdGNvZGUpCiAKIAlfaWd0X2xvZ19idWZm ZXJfZHVtcCgpOwogCisJLyogU2hvdyBrbXNnIGlmIG5vdCBhbHJlYWR5IHNob3duLiAqLworCWlm IChfaWd0X2ttc2dfZHVtcCh0cnVlLCBMT0dfREVCVUcpIDwgMSkKKwkJZnByaW50ZihzdGRlcnIs ICJObyBrbXNnLlxuIik7CisKKwogCWlmIChpbl9zdWJ0ZXN0KSB7CiAJCWlmIChleGl0Y29kZSA9 PSBJR1RfRVhJVF9USU1FT1VUKQogCQkJZXhpdF9zdWJ0ZXN0KCJUSU1FT1VUIik7CkBAIC0xMTEx LDcgKzEyMzUsNiBAQCB2b2lkIGlndF9leGl0KHZvaWQpCiAJCWV4aXQoSUdUX0VYSVRfSU5WQUxJ RCk7CiAJfQogCi0KIAlpZiAoaWd0X29ubHlfbGlzdF9zdWJ0ZXN0cygpKQogCQlleGl0KElHVF9F WElUX1NVQ0NFU1MpOwogCmRpZmYgLS1naXQgYS9saWIvdGVzdHMvLmdpdGlnbm9yZSBiL2xpYi90 ZXN0cy8uZ2l0aWdub3JlCmluZGV4IGE0ZjEwODAuLmM0OWMxNzggMTAwNjQ0Ci0tLSBhL2xpYi90 ZXN0cy8uZ2l0aWdub3JlCisrKyBiL2xpYi90ZXN0cy8uZ2l0aWdub3JlCkBAIC0xLDUgKzEsNiBA QAogIyBQbGVhc2Uga2VlcCBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkKIGlndF9hc3NlcnQKK2lndF9j YXB0dXJlCiBpZ3RfZm9ya19oZWxwZXIKIGlndF9pbnZhbGlkX3N1YnRlc3RfbmFtZQogaWd0X2xp c3Rfb25seQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvdGVz dHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA3NzdiOWMxLi42NTA2YmFmIDEwMDY0NAotLS0gYS9s aWIvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi9saWIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwpAQCAtMSw0ICsxLDUgQEAKIGNoZWNrX1BST0dSQU1TID0gXAorCWlndF9jYXB0dXJlIFwKIAlp Z3Rfbm9fZXhpdCBcCiAJaWd0X25vX2V4aXRfbGlzdF9vbmx5IFwKIAlpZ3RfZm9ya19oZWxwZXIg XApAQCAtMzIsNCArMzMsNSBAQCBYRkFJTF9URVNUUyA9IFwKIAlpZ3Rfc2ltcGxlX3Rlc3Rfc3Vi dGVzdHMgXAogCWlndF90aW1lb3V0IFwKIAlpZ3RfaW52YWxpZF9zdWJ0ZXN0X25hbWUgXAorCWln dF9jYXB0dXJlIFwKIAkkKE5VTEwpCmRpZmYgLS1naXQgYS9saWIvdGVzdHMvaWd0X2NhcHR1cmUu YyBiL2xpYi90ZXN0cy9pZ3RfY2FwdHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjI4ZmZjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdGVzdHMvaWd0X2NhcHR1cmUu YwpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9y YXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK KyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgor ICogQXV0aG9yczoKKyAqICAgIEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4 LmludGVsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgImlndF9jb3JlLmgiCisjaW5jbHVkZSA8 c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKworc3RhdGljIEZJTEUqIGttc2c7CisKK3N0 YXRpYyB2b2lkCit0ZXN0X2ttc2coYm9vbCBmYWlsKQoreworCWZwcmludGYoa21zZywgIjwlZD5U RVNUIChLTVNHKVxuIiwgTE9HX1dBUk5JTkcpOworCWZmbHVzaChrbXNnKTsKKwlpZiAoZmFpbCkK KwkJaWd0X2ZhaWwoSUdUX0VYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dh cm4odm9pZCkKK3sKKwlpZ3Rfd2FybigiVEVTVCAoV0FSTilcbiIpOworCWlndF9mYWlsKElHVF9F WElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9kZWJ1Zyh2b2lkKQoreworCWln dF9kZWJ1ZygiVEVTVCAoREVCVUcpXG4iKTsKKwlpZ3RfZmFpbChJR1RfRVhJVF9GQUlMVVJFKTsK K30KKworc3RhdGljIHZvaWQKK3Rlc3RfY29tYmluZWQodm9pZCkKK3sKKwlpZ3Rfd2FybigiVEVT VCAjMSAoV0FSTilcbiIpOworCWZwdXRzKCJURVNUICMxXG4iLCBrbXNnKTsKKwlpZ3Rfd2Fybigi VEVTVCAjMiAoV0FSTilcbiIpOworCWZwdXRzKCJURVNUICMyXG4iLCBrbXNnKTsKKwlmZmx1c2go a21zZyk7CisJaWd0X2ZhaWwoSUdUX0VYSVRfRkFJTFVSRSk7Cit9CisKK2lndF9tYWluCit7CisJ aWd0X2ZpeHR1cmUgeworCQlrbXNnID0gZm9wZW4oIi9kZXYva21zZyIsICJ3Iik7CisJCWlndF9y ZXF1aXJlKGttc2cgIT0gTlVMTCk7CisJfQorCisJaWd0X3N1YnRlc3QoImttc2ciKQorCQl0ZXN0 X2ttc2codHJ1ZSk7CisJaWd0X3N1YnRlc3QoImttc2ctc3VjY2VzcyIpCisJCXRlc3Rfa21zZyhm YWxzZSk7CisJaWd0X3N1YnRlc3QoIndhcm4iKQorCQl0ZXN0X3dhcm4oKTsKKwlpZ3Rfc3VidGVz dCgiZGVidWciKQorCQl0ZXN0X2RlYnVnKCk7CisJaWd0X3N1YnRlc3QoImNvbWJpbmVkIikKKwkJ dGVzdF9jb21iaW5lZCgpOworCisJaWd0X2ZpeHR1cmUgeworCQlmY2xvc2Uoa21zZyk7CisJfQor fQotLSAKMi40LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==