From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC i-g-t 2/3] intel-gpu-top: New version using PMU Date: Wed, 14 Feb 2018 18:52:06 +0000 Message-ID: <20180214185207.8111-3-tvrtko.ursulin@linux.intel.com> References: <20180214185207.8111-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9C73B6E2B4 for ; Wed, 14 Feb 2018 18:52:19 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id k87so6836985wmi.0 for ; Wed, 14 Feb 2018 10:52:19 -0800 (PST) In-Reply-To: <20180214185207.8111-1-tvrtko.ursulin@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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClNpZ25lZC1v ZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Ci0tLQogdG9v bHMvLmdpdGlnbm9yZSAgICAgICB8ICAgMSArCiB0b29scy9NYWtlZmlsZS5hbSAgICAgIHwgICAy ICsKIHRvb2xzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwogdG9vbHMvaW50ZWxfZ3B1X3RvcC5j ICB8IDU5MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiB0b29scy9tZXNvbi5idWlsZCAgICAgIHwgICAxICsKIDUgZmlsZXMgY2hhbmdlZCwgNTk4IGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9pbnRlbF9ncHVfdG9wLmMKCmRp ZmYgLS1naXQgYS90b29scy8uZ2l0aWdub3JlIGIvdG9vbHMvLmdpdGlnbm9yZQppbmRleCAxOWEx ZjdjYjhlNTAuLjZlMzA0MjgxMDE3NiAxMDA2NDQKLS0tIGEvdG9vbHMvLmdpdGlnbm9yZQorKysg Yi90b29scy8uZ2l0aWdub3JlCkBAIC0xNyw2ICsxNyw3IEBAIGludGVsX2ZyYW1lYnVmZmVyX2R1 bXAKIGludGVsX2dlbV9pbmZvCiBpbnRlbF9ncHVfZnJlcXVlbmN5CiBpbnRlbF9ncHVfdGltZQor aW50ZWxfZ3B1X3RvcAogaW50ZWxfbGVnYWN5X3RvcAogaW50ZWxfZ3R0CiBpbnRlbF9ndWNfbG9n Z2VyCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5hbSBiL3Rvb2xzL01ha2VmaWxlLmFtCmlu ZGV4IGRjZjI4MmVhZmY0ZS4uOGY2YzE1NzkxYTNiIDEwMDY0NAotLS0gYS90b29scy9NYWtlZmls ZS5hbQorKysgYi90b29scy9NYWtlZmlsZS5hbQpAQCAtMzAsNiArMzAsOCBAQCBpbnRlbF9hdWJk dW1wX2xhX0xERkxBR1MgPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uIC1uby11bmRlZmluZWQKIGlu dGVsX2F1YmR1bXBfbGFfU09VUkNFUyA9IGF1YmR1bXAuYwogaW50ZWxfYXViZHVtcF9sYV9MSUJB REQgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmludGVsX3Rvb2xzLmxhIC1sZGwKIAoraW50ZWxf Z3B1X3RvcF9MREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliaWd0X3BlcmYubGEgLWxtCisK IGJpbl9TQ1JJUFRTID0gaW50ZWxfYXViZHVtcAogQ0xFQU5GSUxFUyA9ICQoYmluX1NDUklQVFMp CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMgYi90b29scy9NYWtlZmlsZS5z b3VyY2VzCmluZGV4IDk2OTliN2QyZjczNy4uNmY4NjY4YmQ0ZDU2IDEwMDY0NAotLS0gYS90b29s cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTE3LDYg KzE3LDcgQEAgdG9vbHNfcHJvZ19saXN0cyA9CQlcCiAJaW50ZWxfZ3B1X2ZyZXF1ZW5jeQlcCiAJ aW50ZWxfZmlybXdhcmVfZGVjb2RlCVwKIAlpbnRlbF9ncHVfdGltZQkJXAorCWludGVsX2dwdV90 b3AJCVwKIAlpbnRlbF9sZWdhY3lfdG9wCVwKIAlpbnRlbF9ndHQJCVwKIAlpbnRlbF9ndWNfbG9n Z2VyICAgICAgICBcCmRpZmYgLS1naXQgYS90b29scy9pbnRlbF9ncHVfdG9wLmMgYi90b29scy9p bnRlbF9ncHVfdG9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41 OWExMTIyNDAwOTIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pbnRlbF9ncHVfdG9wLmMKQEAg LTAsMCArMSw1OTMgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o PgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGFz c2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVk ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4K KyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3lz L2lvY3RsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNs dWRlICJpZ3RfcGVyZi5oIgorCitzdHJ1Y3QgcG11X3BhaXIgeworCXVpbnQ2NF90IGN1cjsKKwl1 aW50NjRfdCBwcmV2OworfTsKKworc3RydWN0IHBtdV9jb3VudGVyIHsKKwl1aW50NjRfdCBjb25m aWc7CisJdW5zaWduZWQgaW50IGlkeDsKKwlzdHJ1Y3QgcG11X3BhaXIgdmFsOworfTsKKworI2Rl ZmluZSBOVU1fTE9BRFMgKDMpCisKK3N0cnVjdCBlbmdpbmUgeworCWNvbnN0IGNoYXIgKm5hbWU7 CisJZG91YmxlIHFkWzNdOworCWRvdWJsZSBsb2FkX2F2Z1tOVU1fTE9BRFNdOworCXN0cnVjdCBw bXVfY291bnRlciBidXN5OworCXN0cnVjdCBwbXVfY291bnRlciB3YWl0OworCXN0cnVjdCBwbXVf Y291bnRlciBzZW1hOworCXN0cnVjdCBwbXVfY291bnRlciBxdWV1ZWQ7CisJc3RydWN0IHBtdV9j b3VudGVyIHJ1bm5hYmxlOworCXN0cnVjdCBwbXVfY291bnRlciBydW5uaW5nOworfTsKKworc3Ry dWN0IGVuZ2luZXMgeworCXVuc2lnbmVkIGludCBudW1fZW5naW5lczsKKwl1bnNpZ25lZCBpbnQg bnVtX2NvdW50ZXJzOworCURJUiAqcm9vdDsKKwlpbnQgZmQ7CisJc3RydWN0IHBtdV9wYWlyIHRz OworCisJaW50IHJhcGxfZmQ7CisJZG91YmxlIHJhcGxfc2NhbGU7CisKKwlzdHJ1Y3QgcG11X2Nv dW50ZXIgZnJlcV9yZXE7CisJc3RydWN0IHBtdV9jb3VudGVyIGZyZXFfYWN0OworCXN0cnVjdCBw bXVfY291bnRlciBpcnE7CisJc3RydWN0IHBtdV9jb3VudGVyIHJjNjsKKwlzdHJ1Y3QgcG11X2Nv dW50ZXIgcmFwbDsKKworCWRvdWJsZSBxZF9zY2FsZTsKKworCWRvdWJsZSBsb2FkX2V4cFtOVU1f TE9BRFNdOworCWRvdWJsZSBsb2FkX2F2Z1tOVU1fTE9BRFNdOworCisJc3RydWN0IGVuZ2luZSBl bmdpbmU7Cit9OworCitzdGF0aWMgdWludDY0X3QKK2dldF9wbXVfY29uZmlnKGludCBkaXJmZCwg Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqY291bnRlcikKK3sKKwljaGFyIGJ1ZlsxMjhd LCAqcDsKKwlpbnQgZmQsIHJldDsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1Ziks ICIlcy0lcyIsIG5hbWUsIGNvdW50ZXIpOworCWlmIChyZXQgPCAwIHx8IHJldCA9PSBzaXplb2Yo YnVmKSkKKwkJcmV0dXJuIC0xOworCisJZmQgPSBvcGVuYXQoZGlyZmQsIGJ1ZiwgT19SRE9OTFkp OworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKworCXJldCA9IHJlYWQoZmQsIGJ1Ziwgc2l6 ZW9mKGJ1ZikpOworCWNsb3NlKGZkKTsKKwlpZiAocmV0IDw9IDApCisJCXJldHVybiAtMTsKKwor CXAgPSBpbmRleChidWYsICcwJyk7CisJaWYgKCFwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4g c3RydG91bChwLCBOVUxMLCAwKTsKK30KKworI2RlZmluZSBlbmdpbmVfcHRyKGVuZ2luZXMsIG4p IFwKKwkoKHN0cnVjdCBlbmdpbmUgKikoKHVuc2lnbmVkIGNoYXIgKikoJmVuZ2luZXMtPmVuZ2lu ZSkgKyAobikgKiBzaXplb2Yoc3RydWN0IGVuZ2luZSkpKQorCitzdGF0aWMgc3RydWN0IGVuZ2lu ZXMgKmRpc2NvdmVyX2VuZ2luZXModm9pZCkKK3sKKwljb25zdCBjaGFyICpzeXNmc19yb290ID0g Ii9zeXMvZGV2aWNlcy9pOTE1L2V2ZW50cyI7CisJc3RydWN0IGVuZ2luZXMgKmVuZ2luZXM7CisJ c3RydWN0IGRpcmVudCAqZGVudDsKKwlpbnQgcmV0ID0gMDsKKwlESVIgKmQ7CisKKwllbmdpbmVz ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW5naW5lcykpOworCWlmICghZW5naW5lcykKKwkJcmV0 dXJuIE5VTEw7CisJbWVtc2V0KGVuZ2luZXMsIDAsIHNpemVvZigqZW5naW5lcykpOworCisJZW5n aW5lcy0+bnVtX2VuZ2luZXMgPSAwOworCisJZCA9IG9wZW5kaXIoc3lzZnNfcm9vdCk7CisJaWYg KCFkKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZCkpICE9IE5V TEwpIHsKKwkJY29uc3QgY2hhciAqZW5kc3dpdGggPSAiLWJ1c3kiOworCQljb25zdCB1bnNpZ25l ZCBpbnQgZW5kbGVuID0gc3RybGVuKGVuZHN3aXRoKTsKKwkJc3RydWN0IGVuZ2luZSAqZW5naW5l ID0KKwkJCQllbmdpbmVfcHRyKGVuZ2luZXMsIGVuZ2luZXMtPm51bV9lbmdpbmVzKTsKKwkJY2hh ciBidWZbMjU2XTsKKworCQlpZiAoZGVudC0+ZF90eXBlICE9IERUX1JFRykKKwkJCWNvbnRpbnVl OworCisJCWlmIChzdHJsZW4oZGVudC0+ZF9uYW1lKSA+PSBzaXplb2YoYnVmKSkgeworCQkJcmV0 ID0gLTE7CisJCQlicmVhazsKKwkJfQorCisJCXN0cmNweShidWYsIGRlbnQtPmRfbmFtZSk7CisK KwkJLyogeHh4Ti1idXN5ICovCisJCWlmIChzdHJsZW4oYnVmKSA8IChlbmRsZW4gKyA0KSkKKwkJ CWNvbnRpbnVlOworCQlpZiAoc3RyY21wKCZidWZbc3RybGVuKGJ1ZikgLSBlbmRsZW5dLCBlbmRz d2l0aCkpCisJCQljb250aW51ZTsKKworCQltZW1zZXQoZW5naW5lLCAwLCBzaXplb2YoKmVuZ2lu ZSkpOworCisJCWJ1ZltzdHJsZW4oYnVmKSAtIGVuZGxlbl0gPSAwOworCQllbmdpbmUtPm5hbWUg PSBzdHJkdXAoYnVmKTsKKwkJaWYgKCFlbmdpbmUtPm5hbWUpIHsKKwkJCXJldCA9IC0xOworCQkJ YnJlYWs7CisJCX0KKworCQllbmdpbmUtPmJ1c3kuY29uZmlnID0gZ2V0X3BtdV9jb25maWcoZGly ZmQoZCksCisJCQkJCQkgICAgIGVuZ2luZS0+bmFtZSwKKwkJCQkJCSAgICAgImJ1c3kiKTsKKwkJ aWYgKGVuZ2luZS0+YnVzeS5jb25maWcgPT0gLTEpIHsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7 CisJCX0KKworCQllbmdpbmVzLT5udW1fZW5naW5lcysrOworCQllbmdpbmVzID0gcmVhbGxvYyhl bmdpbmVzLCBzaXplb2Yoc3RydWN0IGVuZ2luZXMpICsKKwkJCQkgIGVuZ2luZXMtPm51bV9lbmdp bmVzICogc2l6ZW9mKHN0cnVjdCBlbmdpbmUpKTsKKwkJaWYgKCFlbmdpbmVzKSB7CisJCQlyZXQg PSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmV0KQorCQlmcmVlKGVuZ2lu ZXMpOworCWVsc2UKKwkJZW5naW5lcy0+cm9vdCA9IGQ7CisKKwlyZXR1cm4gcmV0ID09IDAgPyBl bmdpbmVzIDogTlVMTDsKK30KKworc3RhdGljIGludAorZmlsZW5hbWVfdG9fYnVmKGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZzaXplKQoreworCWludCBm ZDsKKwlzc2l6ZV90IHJldDsKKworCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworCWlm IChmZCA8IDApCisJCXJldHVybiAtMTsKKworCXJldCA9IHJlYWQoZmQsIGJ1ZiwgYnVmc2l6ZSAt IDEpOworCWNsb3NlKGZkKTsKKwlpZiAocmV0IDwgMSkKKwkJcmV0dXJuIC0xOworCisJYnVmW3Jl dF0gPSAnXDAnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBmaWxlbmFtZV90 b191NjQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBiYXNlKQoreworCWNoYXIgYnVmWzY0XSwg KmI7CisKKwlpZiAoZmlsZW5hbWVfdG9fYnVmKGZpbGVuYW1lLCBidWYsIHNpemVvZihidWYpKSkK KwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEhhbmRsZSBib3RoIHNpbmdsZSBpbnRlZ2VyIGFuZCBr ZXk9dmFsdWUgZm9ybWF0cyBieSBza2lwcGluZworCSAqIGxlYWRpbmcgbm9uLWRpZ2l0cy4KKwkg Ki8KKwliID0gYnVmOworCXdoaWxlICgqYiAmJiAhaXNkaWdpdCgqYikpCisJCWIrKzsKKworCXJl dHVybiBzdHJ0b3VsbChiLCBOVUxMLCBiYXNlKTsKK30KKworc3RhdGljIHVpbnQ2NF90IHJhcGxf dHlwZV9pZCh2b2lkKQoreworCXJldHVybiBmaWxlbmFtZV90b191NjQoIi9zeXMvZGV2aWNlcy9w b3dlci90eXBlIiwgMTApOworfQorCitzdGF0aWMgdWludDY0X3QgcmFwbF9ncHVfcG93ZXIodm9p ZCkKK3sKKwlyZXR1cm4gZmlsZW5hbWVfdG9fdTY0KCIvc3lzL2RldmljZXMvcG93ZXIvZXZlbnRz L2VuZXJneS1ncHUiLCAwKTsKK30KKworc3RhdGljIGRvdWJsZSBmaWxlbmFtZV90b19kb3VibGUo Y29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY2hhciBidWZbNjRdOworCisJaWYgKGZpbGVuYW1l X3RvX2J1ZihmaWxlbmFtZSwgYnVmLCBzaXplb2YoYnVmKSkpCisJCXJldHVybiAwOworCisJcmV0 dXJuIHN0cnRvZChidWYsIE5VTEwpOworfQorCitzdGF0aWMgZG91YmxlIHJhcGxfZ3B1X3Bvd2Vy X3NjYWxlKHZvaWQpCit7CisJcmV0dXJuIGZpbGVuYW1lX3RvX2RvdWJsZSgiL3N5cy9kZXZpY2Vz L3Bvd2VyL2V2ZW50cy9lbmVyZ3ktZ3B1LnNjYWxlIik7Cit9CisKK3N0YXRpYyBkb3VibGUgaTkx NV9xZF9zY2FsZSh2b2lkKQoreworCXJldHVybiBmaWxlbmFtZV90b19kb3VibGUoIi9zeXMvZGV2 aWNlcy9pOTE1L2V2ZW50cy9yY3MwLXF1ZXVlZC5zY2FsZSIpOworfQorCisjZGVmaW5lIF9fb3Bl bl9wbXUoZW5naW5lcywgcG11LCBpZHgpIFwKKyh7IFwKKwlpbnQgZmRfXzsgXAorXAorCWZkX18g PSBwZXJmX2k5MTVfb3Blbl9ncm91cCgocG11KS0+Y29uZmlnLCAoZW5naW5lcyktPmZkKTsgXAor CWlmIChmZF9fID49IDApIHsgXAorCQlpZiAoKGVuZ2luZXMpLT5mZCA9PSAtMSkgXAorCQkJKGVu Z2luZXMpLT5mZCA9IGZkX187IFwKKwkJKHBtdSktPmlkeCA9IChpZHgpKys7IFwKKwkJKGVuZ2lu ZXMpLT5udW1fY291bnRlcnMrKzsgXAorCX0gXAorXAorCWZkX187IFwKK30pCisKK3N0YXRpYyBp bnQgcG11X2luaXQoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMpCit7CisJdW5zaWduZWQgaW50IGlk eCA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGZkOworCisJZW5naW5lcy0+ZmQgPSAtMTsK KwllbmdpbmVzLT5udW1fY291bnRlcnMgPSAwOworCisJZW5naW5lcy0+ZnJlcV9yZXEuY29uZmln ID0gSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWTsKKwlmZCA9IF9fb3Blbl9wbXUoZW5naW5l cywgJmVuZ2luZXMtPmZyZXFfcmVxLCBpZHgpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsK KworCWVuZ2luZXMtPmZyZXFfYWN0LmNvbmZpZyA9IEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1k7 CisJZmQgPSBfX29wZW5fcG11KGVuZ2luZXMsICZlbmdpbmVzLT5mcmVxX2FjdCwgaWR4KTsKKwlp ZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwllbmdpbmVzLT5pcnEuY29uZmlnID0gSTkxNV9Q TVVfSU5URVJSVVBUUzsKKwlmZCA9IF9fb3Blbl9wbXUoZW5naW5lcywgJmVuZ2luZXMtPmlycSwg aWR4KTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwllbmdpbmVzLT5yYzYuY29uZmln ID0gSTkxNV9QTVVfUkM2X1JFU0lERU5DWTsKKwlmZCA9IF9fb3Blbl9wbXUoZW5naW5lcywgJmVu Z2luZXMtPnJjNiwgaWR4KTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwllbmdpbmVz LT5xZF9zY2FsZSA9IGk5MTVfcWRfc2NhbGUoKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbmdpbmVz LT5udW1fZW5naW5lczsgaSsrKSB7CisJCXN0cnVjdCBlbmdpbmUgKmVuZ2luZSA9IGVuZ2luZV9w dHIoZW5naW5lcywgaSk7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgcG11X2NvdW50ZXIgKnBtdTsK KwkJCWNvbnN0IGNoYXIgKmNvdW50ZXI7CisJCX0gKmNudCwgY291bnRlcnNbXSA9IHsKKwkJCXsg LnBtdSA9ICZlbmdpbmUtPmJ1c3ksIC5jb3VudGVyID0gImJ1c3kiIH0sCisJCQl7IC5wbXUgPSAm ZW5naW5lLT53YWl0LCAuY291bnRlciA9ICJ3YWl0IiB9LAorCQkJeyAucG11ID0gJmVuZ2luZS0+ c2VtYSwgLmNvdW50ZXIgPSAic2VtYSIgfSwKKwkJCXsgLnBtdSA9ICZlbmdpbmUtPnF1ZXVlZCwg LmNvdW50ZXIgPSAicXVldWVkIiB9LAorCQkJeyAucG11ID0gJmVuZ2luZS0+cnVubmFibGUsIC5j b3VudGVyID0gInJ1bm5hYmxlIiB9LAorCQkJeyAucG11ID0gJmVuZ2luZS0+cnVubmluZywgLmNv dW50ZXIgPSAicnVubmluZyIgfSwKKwkJCXsgLnBtdSA9IE5VTEwsIC5jb3VudGVyID0gTlVMTCB9 LAorCQl9OworCisJCWZvciAoY250ID0gY291bnRlcnM7IGNudC0+cG11OyBjbnQrKykgeworCQkJ aWYgKCFjbnQtPnBtdS0+Y29uZmlnKQorCQkJCWNudC0+cG11LT5jb25maWcgPQorCQkJCQlnZXRf cG11X2NvbmZpZyhkaXJmZChlbmdpbmVzLT5yb290KSwKKwkJCQkJCSAgICAgICBlbmdpbmUtPm5h bWUsCisJCQkJCQkgICAgICAgY250LT5jb3VudGVyKTsKKwkJCWZkID0gX19vcGVuX3BtdShlbmdp bmVzLCBjbnQtPnBtdSwgaWR4KTsKKwkJCWlmIChmZCA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9 CisJfQorCisJZW5naW5lcy0+cmFwbF9zY2FsZSA9IHJhcGxfZ3B1X3Bvd2VyX3NjYWxlKCk7CisJ aWYgKGVuZ2luZXMtPnJhcGxfc2NhbGUgIT0gTkFOKQorCQllbmdpbmVzLT5yYXBsX3NjYWxlICo9 IDFlMzsgLyogZnJvbSBuYW5vIHRvIG1pY3JvICovCisJZW5naW5lcy0+cmFwbC5jb25maWcgPSBy YXBsX2dwdV9wb3dlcigpOworCWVuZ2luZXMtPnJhcGxfZmQgPSBpZ3RfcGVyZl9vcGVuKHJhcGxf dHlwZV9pZCgpLCBlbmdpbmVzLT5yYXBsLmNvbmZpZyk7CisJaWYgKGVuZ2luZXMtPnJhcGxfZmQg PCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQ2NF90IHBt dV9yZWFkX211bHRpKGludCBmZCwgdW5zaWduZWQgaW50IG51bSwgdWludDY0X3QgKnZhbCkKK3sK Kwl1aW50NjRfdCBidWZbMiArIG51bV07CisJdW5zaWduZWQgaW50IGk7CisKKwlhc3NlcnQocmVh ZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPT0gc2l6ZW9mKGJ1ZikpOworCisJZm9yIChpID0gMDsg aSA8IG51bTsgaSsrKQorCQl2YWxbaV0gPSBidWZbMiArIGldOworCisJcmV0dXJuIGJ1ZlsxXTsK K30KKworCitzdGF0aWMgZG91YmxlIHBtdV9jYWxjKHN0cnVjdCBwbXVfcGFpciAqcCwgZG91Ymxl IGQsIGRvdWJsZSB0LCBkb3VibGUgcykKK3sKKwlkb3VibGUgcGN0OworCisJcGN0ID0gcC0+Y3Vy IC0gcC0+cHJldjsKKwlwY3QgLz0gZDsKKwlwY3QgLz0gdDsKKwlwY3QgKj0gczsKKworCWlmIChz ID09IDEwMC4wICYmIHBjdCA+IDEwMC4wKQorCQlwY3QgPSAxMDAuMDsKKworCXJldHVybiBwY3Q7 Cit9CisKK3N0YXRpYyB1aW50NjRfdCBfX3BtdV9yZWFkX3NpbmdsZShpbnQgZmQsIHVpbnQ2NF90 ICp0cykKK3sKKwl1aW50NjRfdCBkYXRhWzJdOworCisJYXNzZXJ0KHJlYWQoZmQsIGRhdGEsIHNp emVvZihkYXRhKSkgPT0gc2l6ZW9mKGRhdGEpKTsKKworCWlmICh0cykKKwkJKnRzID0gZGF0YVsx XTsKKworCXJldHVybiBkYXRhWzBdOworfQorCitzdGF0aWMgdWludDY0X3QgcG11X3JlYWRfc2lu Z2xlKGludCBmZCkKK3sKKwlyZXR1cm4gX19wbXVfcmVhZF9zaW5nbGUoZmQsIE5VTEwpOworfQor CitzdGF0aWMgdm9pZCBfX3VwZGF0ZV9zYW1wbGUoc3RydWN0IHBtdV9jb3VudGVyICpjb3VudGVy LCB1aW50NjRfdCB2YWwpCit7CisJY291bnRlci0+dmFsLnByZXYgPSBjb3VudGVyLT52YWwuY3Vy OworCWNvdW50ZXItPnZhbC5jdXIgPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zYW1w bGUoc3RydWN0IHBtdV9jb3VudGVyICpjb3VudGVyLCB1aW50NjRfdCAqdmFsKQoreworCV9fdXBk YXRlX3NhbXBsZShjb3VudGVyLCB2YWxbY291bnRlci0+aWR4XSk7Cit9CisKK3N0YXRpYyB2b2lk IHBtdV9zYW1wbGUoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMpCit7CisJY29uc3QgaW50IG51bV92 YWwgPSBlbmdpbmVzLT5udW1fY291bnRlcnM7CisJdWludDY0X3QgdmFsW251bV92YWxdOworCXVu c2lnbmVkIGludCBpOworCisJZW5naW5lcy0+dHMucHJldiA9IGVuZ2luZXMtPnRzLmN1cjsKKwll bmdpbmVzLT50cy5jdXIgPSBwbXVfcmVhZF9tdWx0aShlbmdpbmVzLT5mZCwgbnVtX3ZhbCwgdmFs KTsKKworCV9fdXBkYXRlX3NhbXBsZSgmZW5naW5lcy0+cmFwbCwgcG11X3JlYWRfc2luZ2xlKGVu Z2luZXMtPnJhcGxfZmQpKTsKKworCXVwZGF0ZV9zYW1wbGUoJmVuZ2luZXMtPmZyZXFfcmVxLCB2 YWwpOworCXVwZGF0ZV9zYW1wbGUoJmVuZ2luZXMtPmZyZXFfYWN0LCB2YWwpOworCXVwZGF0ZV9z YW1wbGUoJmVuZ2luZXMtPmlycSwgdmFsKTsKKwl1cGRhdGVfc2FtcGxlKCZlbmdpbmVzLT5yYzYs IHZhbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW5naW5lcy0+bnVtX2VuZ2luZXM7IGkrKykgewor CQlzdHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdpbmVfcHRyKGVuZ2luZXMsIGkpOworCisJCXVw ZGF0ZV9zYW1wbGUoJmVuZ2luZS0+YnVzeSwgdmFsKTsKKwkJdXBkYXRlX3NhbXBsZSgmZW5naW5l LT5zZW1hLCB2YWwpOworCQl1cGRhdGVfc2FtcGxlKCZlbmdpbmUtPndhaXQsIHZhbCk7CisJCXVw ZGF0ZV9zYW1wbGUoJmVuZ2luZS0+cXVldWVkLCB2YWwpOworCQl1cGRhdGVfc2FtcGxlKCZlbmdp bmUtPnJ1bm5hYmxlLCB2YWwpOworCQl1cGRhdGVfc2FtcGxlKCZlbmdpbmUtPnJ1bm5pbmcsIHZh bCk7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqYmFyc1tdID0geyAiICIsICLilo8iLCAi 4paOIiwgIuKWjSIsICLilowiLCAi4paLIiwgIuKWiiIsICLilokiLCAi4paIIiB9OworCitzdGF0 aWMgdm9pZAorcHJpbnRfcGVyY2VudGFnZV9iYXIoZG91YmxlIHBlcmNlbnQsIGludCBtYXhfbGVu KQoreworCWludCBiYXJfbGVuID0gcGVyY2VudCAqICg4ICogKG1heF9sZW4gLSAyKSkgLyAxMDAu MDsKKwlpbnQgaTsKKworCXB1dGNoYXIoJ3wnKTsKKworCWZvciAoaSA9IGJhcl9sZW47IGkgPj0g ODsgaSAtPSA4KQorCQlwcmludGYoIiVzIiwgYmFyc1s4XSk7CisJaWYgKGkpCisJCXByaW50Zigi JXMiLCBiYXJzW2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCAobWF4X2xlbiAtIDIgLSAoYmFyX2xl biArIDcpIC8gOCk7IGkrKykKKwkJcHV0Y2hhcignICcpOworCisJcHV0Y2hhcignfCcpOworfQor CisjZGVmaW5lIERFRkFVTFRfUEVSSU9EX01TICgxMDAwKQorCitzdGF0aWMgdm9pZAordXNhZ2Uo Y29uc3QgY2hhciAqYXBwbmFtZSkKK3sKKwlwcmludGYoImludGVsX2dwdV90b3AgLSBEaXNwbGF5 IGEgdG9wLWxpa2Ugc3VtbWFyeSBvZiBJbnRlbCBHUFUgdXNhZ2VcbiIKKwkJIlxuIgorCQkiVXNh Z2U6ICVzIFtwYXJhbWV0ZXJzXVxuIgorCQkiXG4iCisJCSJcdFRoZSBmb2xsb3dpbmcgcGFyYW1l dGVycyBhcmUgb3B0aW9uYWw6XG4iCisJCSJcdFstcyA8c2FtcGxlcz5dICAgICAgIHJlZnJlc2gg cGVyaW9kIGluIG1zIChkZWZhdWx0ICV1bXMpXG4iCisJCSJcdFstaF0gICAgICAgICAgICAgICAg IHNob3cgdGhpcyBoZWxwIHRleHRcbiIKKwkJIlxuIiwKKwkJYXBwbmFtZSwgREVGQVVMVF9QRVJJ T0RfTVMpOworfQorCitzdGF0aWMgZG91YmxlIHVwZGF0ZV9sb2FkKGRvdWJsZSBsb2FkLCBkb3Vi bGUgZXhwLCBkb3VibGUgdmFsKQoreworCXJldHVybiB2YWwgKyBleHAgKiAobG9hZCAtIHZhbCk7 Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQg cGVyaW9kX3VzID0gREVGQVVMVF9QRVJJT0RfTVMgKiAxMDAwOworCWNvbnN0IGRvdWJsZSBsb2Fk X3BlcmlvZFtOVU1fTE9BRFNdID0geyAxLjAsIDMwLjAsIDkwMC4wIH07CisJc3RydWN0IGVuZ2lu ZXMgKmVuZ2luZXM7CisJaW50IGNvbl93ID0gLTEsIGNvbl9oID0gLTE7CisJc3RydWN0IHdpbnNp emUgd3M7CisJdW5zaWduZWQgaW50IGk7CisJZG91YmxlIHBlcmlvZDsKKwlpbnQgcmV0LCBjaDsK KworCS8qIFBhcnNlIG9wdGlvbnMgKi8KKwl3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3Ys ICJzOmgiKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChjaCkgeworCQljYXNlICdzJzoKKwkJCXBlcmlv ZF91cyA9IGF0b2kob3B0YXJnKSAqIDEwMDA7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCQl1 c2FnZShhcmd2WzBdKTsKKwkJCWV4aXQoMCk7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVy ciwgIkludmFsaWQgb3B0aW9uICVjIVxuIiwgKGNoYXIpb3B0b3B0KTsKKwkJCXVzYWdlKGFyZ3Zb MF0pOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCS8qIEdldCB0ZXJtaW5hbCBzaXplLiAqLwor CWlmIChpb2N0bCgwLCBUSU9DR1dJTlNaLCAmd3MpICE9IC0xKSB7CisJCWNvbl93ID0gd3Mud3Nf Y29sOworCQljb25faCA9IHdzLndzX3JvdzsKKwl9CisKKwllbmdpbmVzID0gZGlzY292ZXJfZW5n aW5lcygpOworCWlmICghZW5naW5lcykgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBk ZXRlY3QgZW5naW5lcyFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXQgPSBwbXVfaW5pdChl bmdpbmVzKTsKKwlpZiAocmV0KSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGluaXRp YWxpemUgUE1VIVxuIik7CisJCXJldHVybiAxOworCX0KKworCS8qIExvYWQgYXZlcmFnZSBzZXR1 cC4gKi8KKwlwZXJpb2QgPSAoZG91YmxlKXBlcmlvZF91cyAvIDFlNjsKKwlmb3IgKGkgPSAwOyBp IDwgTlVNX0xPQURTOyBpKyspCisJCWVuZ2luZXMtPmxvYWRfZXhwW2ldID0gZXhwKC1wZXJpb2Qg LyBsb2FkX3BlcmlvZFtpXSk7CisKKwlwbXVfc2FtcGxlKGVuZ2luZXMpOworCisJZm9yICg7Oykg eworCQlkb3VibGUgdCwgZnJlcVsyXSwgaXJxLCByYzYsIHBvd2VyOworCQlkb3VibGUgcWQgPSAw OworCQlpbnQgbGluZXMgPSAwOworCQl1bnNpZ25lZCBpbnQgajsKKworCQl1c2xlZXAocGVyaW9k X3VzKTsKKworCQlwbXVfc2FtcGxlKGVuZ2luZXMpOworCQl0ID0gKGRvdWJsZSkoZW5naW5lcy0+ dHMuY3VyIC0gZW5naW5lcy0+dHMucHJldikgLyAxZTk7CisKKwkJcHJpbnRmKCJcMDMzW0hcMDMz W0oiKTsKKworCQlmcmVxWzBdID0gcG11X2NhbGMoJmVuZ2luZXMtPmZyZXFfcmVxLnZhbCwgMS4w LCB0LCAxKTsKKwkJZnJlcVsxXSA9IHBtdV9jYWxjKCZlbmdpbmVzLT5mcmVxX2FjdC52YWwsIDEu MCwgdCwgMSk7CisJCWlycSA9IHBtdV9jYWxjKCZlbmdpbmVzLT5pcnEudmFsLCAxLjAsIHQsIDEp OworCQlyYzYgPSBwbXVfY2FsYygmZW5naW5lcy0+cmM2LnZhbCwgMWU5LCB0LCAxMDApOworCQlw b3dlciA9IHBtdV9jYWxjKCZlbmdpbmVzLT5yYXBsLnZhbCwgMS4wLCB0LCBlbmdpbmVzLT5yYXBs X3NjYWxlKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZW5naW5lcy0+bnVtX2VuZ2luZXM7IGkrKykg eworCQkJc3RydWN0IGVuZ2luZSAqZW5naW5lID0gZW5naW5lX3B0cihlbmdpbmVzLCBpKTsKKwor CQkJZW5naW5lLT5xZFswXSA9IHBtdV9jYWxjKCZlbmdpbmUtPnF1ZXVlZC52YWwsIDEsIHQsCisJ CQkJCQkgZW5naW5lcy0+cWRfc2NhbGUpOworCQkJZW5naW5lLT5xZFsxXSA9IHBtdV9jYWxjKCZl bmdpbmUtPnJ1bm5hYmxlLnZhbCwgMSwgdCwKKwkJCQkJCSBlbmdpbmVzLT5xZF9zY2FsZSk7CisJ CQllbmdpbmUtPnFkWzJdID0gcG11X2NhbGMoJmVuZ2luZS0+cnVubmluZy52YWwsIDEsIHQsCisJ CQkJCQkgZW5naW5lcy0+cWRfc2NhbGUpOworCisJCQlxZCArPSBlbmdpbmUtPnFkWzFdICsgZW5n aW5lLT5xZFsyXTsKKworCQkJZm9yIChqID0gMDsgaiA8IE5VTV9MT0FEUzsgaisrKSB7CisJCQkJ ZW5naW5lLT5sb2FkX2F2Z1tqXSA9CisJCQkJCXVwZGF0ZV9sb2FkKGVuZ2luZS0+bG9hZF9hdmdb al0sCisJCQkJCQkgICAgZW5naW5lcy0+bG9hZF9leHBbal0sCisJCQkJCQkgICAgZW5naW5lLT5x ZFsxXSArCisJCQkJCQkgICAgZW5naW5lLT5xZFsyXSk7CisJCQl9CisJCX0KKworCQlmb3IgKGog PSAwOyBqIDwgTlVNX0xPQURTOyBqKyspIHsKKwkJCWVuZ2luZXMtPmxvYWRfYXZnW2pdID0KKwkJ CQl1cGRhdGVfbG9hZChlbmdpbmVzLT5sb2FkX2F2Z1tqXSwKKwkJCQkJICAgIGVuZ2luZXMtPmxv YWRfZXhwW2pdLAorCQkJCQkgICAgcWQpOworCQl9CisKKwkJcHJpbnRmKCJpbnRlbC1ncHUtdG9w IC0gbG9hZCBhdmcgJTUuMmYsICU1LjJmLCAlNS4yZjsgJTQuMGYvJTQuMGYgTUh6OyAgJTMuMGYl JSBSQzY7ICU2LjBmbVc7ICU4LjBmIGlycXMvc1xuIiwKKwkJICAgICAgIGVuZ2luZXMtPmxvYWRf YXZnWzBdLAorCQkgICAgICAgZW5naW5lcy0+bG9hZF9hdmdbMV0sCisJCSAgICAgICBlbmdpbmVz LT5sb2FkX2F2Z1syXSwKKwkJICAgICAgIGZyZXFbMF0sIGZyZXFbMV0sCisJCSAgICAgICByYzYs IHBvd2VyLCBpcnEpOworCQlsaW5lcysrOworCisJCXByaW50ZigiXG4iKTsKKwkJbGluZXMrKzsK KworCQlmb3IgKGkgPSAwOyBpIDwgZW5naW5lcy0+bnVtX2VuZ2luZXMgJiYgbGluZXMgPCBjb25f aDsgaSsrKSB7CisJCQlzdHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdpbmVfcHRyKGVuZ2luZXMs IGkpOworCQkJdW5zaWduZWQgaW50IG1heF93ID0gY29uX3cgLSAxOworCQkJdW5zaWduZWQgaW50 IGxlbjsKKwkJCWRvdWJsZSB2YWxbMl07CisJCQljaGFyIGJ1ZlsxMjhdOworCisJCQl2YWxbMF0g PSBwbXVfY2FsYygmZW5naW5lLT53YWl0LnZhbCwgMWU5LCB0LCAxMDApOworCQkJdmFsWzFdID0g cG11X2NhbGMoJmVuZ2luZS0+c2VtYS52YWwsIDFlOSwgdCwgMTAwKTsKKwkJCWxlbiA9IHNucHJp bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCQkJICAgICAgICIlNi4yZiUlIHdhaXQsICU2LjJmJSUg c2VtYSIsCisJCQkJICAgICAgIHZhbFswXSwgdmFsWzFdKTsKKworCQkJdmFsWzBdID0gcG11X2Nh bGMoJmVuZ2luZS0+YnVzeS52YWwsIDFlOSwgdCwgMTAwKTsKKwkJCWxlbiArPSBwcmludGYoIiU4 cyAlNi4yZiUlICglNS4yZi8lNS4yZi8lNS4yZikgIiwKKwkJCQkgICAgICBlbmdpbmUtPm5hbWUs CisJCQkJICAgICAgdmFsWzBdLAorCQkJCSAgICAgIGVuZ2luZS0+cWRbMF0sCisJCQkJICAgICAg ZW5naW5lLT5xZFsxXSwKKwkJCQkgICAgICBlbmdpbmUtPnFkWzJdKTsKKwkJCXByaW50X3BlcmNl bnRhZ2VfYmFyKHZhbFswXSwgbWF4X3cgLSBsZW4pOworCisJCQlwcmludGYoIiVzXG4iLCBidWYp OworCisJCQlsaW5lcysrOworCQl9CisKKwkJcHJpbnRmKCJcbiIpOworCX0KKworCXJldHVybiAw OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWVzb24uYnVpbGQgYi90b29scy9tZXNvbi5idWlsZApp bmRleCBlYmNlNGUzMDVkMDAuLjM2MDM4ZjdhOWQyMiAxMDA2NDQKLS0tIGEvdG9vbHMvbWVzb24u YnVpbGQKKysrIGIvdG9vbHMvbWVzb24uYnVpbGQKQEAgLTIzLDYgKzIzLDcgQEAgdG9vbHNfcHJv Z3MgPSBbCiAJJ2ludGVsX2dwdV9mcmVxdWVuY3knLAogCSdpbnRlbF9maXJtd2FyZV9kZWNvZGUn LAogCSdpbnRlbF9ncHVfdGltZScsCisJJ2ludGVsX2dwdS10b3AnLAogCSdpbnRlbF9sZWdhY3lf dG9wJywKIAknaW50ZWxfZ3R0JywKIAknaW50ZWxfZ3VjX2xvZ2dlcicsCi0tIAoyLjE0LjEKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=