From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0B1966E478 for ; Wed, 3 Oct 2018 12:07:32 +0000 (UTC) Received: by mail-wr1-x430.google.com with SMTP id 61-v6so5103098wrb.6 for ; Wed, 03 Oct 2018 05:07:31 -0700 (PDT) From: Tvrtko Ursulin Date: Wed, 3 Oct 2018 13:07:18 +0100 Message-Id: <20181003120718.6898-7-tvrtko.ursulin@linux.intel.com> In-Reply-To: <20181003120718.6898-1-tvrtko.ursulin@linux.intel.com> References: <20181003120718.6898-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [RFC i-g-t 6/6] intel-gpu-top: Support for client stats List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Tvrtko Ursulin List-ID: RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClNpZ25lZC1v ZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Ci0tLQogdG9v bHMvaW50ZWxfZ3B1X3RvcC5jIHwgMzYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDM1MSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX2dwdV90b3AuYyBiL3Rvb2xzL2ludGVsX2dw dV90b3AuYwppbmRleCA4OTkwZWYxN2I3NzEuLjAyYzVhN2Q3NzYxNCAxMDA2NDQKLS0tIGEvdG9v bHMvaW50ZWxfZ3B1X3RvcC5jCisrKyBiL3Rvb2xzL2ludGVsX2dwdV90b3AuYwpAQCAtMjAsOSAr MjAsNiBAQAogICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUgogICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICoK LSAqIEF1dGhvcnM6Ci0gKiAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotICogICAg RXVnZW5pIERvZG9ub3YgPGV1Z2VuaS5kb2Rvbm92QGludGVsLmNvbT4KICAqLwogCiAjaW5jbHVk ZSA8c3RkaW8uaD4KQEAgLTQxLDYgKzM4LDggQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1 ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNp bmNsdWRlIDxzaWduYWwuaD4KIAogI2luY2x1ZGUgImlndF9wZXJmLmgiCiAKQEAgLTcwMSw4ICs3 MDAsMzAwIEBAIHN0YXRpYyB2b2lkIHBtdV9zYW1wbGUoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMp CiAJfQogfQogCitlbnVtIGNsaWVudF9zdGF0dXMgeworCUZSRUUgPSAwLCAvKiBtYnogKi8KKwlB TElWRSwKKwlQUk9CRQorfTsKKworc3RydWN0IGNsaWVudCB7CisJZW51bSBjbGllbnRfc3RhdHVz IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJdW5zaWduZWQgaW50IHBpZDsKKwljaGFyIG5h bWVbMTI4XTsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlczsKKwl1bnNpZ25lZCBsb25nIHRvdGFsOwor CXN0cnVjdCBlbmdpbmVzICplbmdpbmVzOworCXVuc2lnbmVkIGxvbmcgKnZhbDsKKwl1aW50NjRf dCAqbGFzdDsKK307CisKKyNkZWZpbmUgU1lTRlNfRU5BQkxFICIvc3lzL2NsYXNzL2RybS9jYXJk MC9jbGllbnRzL2VuYWJsZV9zdGF0cyIKKworYm9vbCBfX3N0YXRzX2VuYWJsZWQ7CisKK3N0YXRp YyBpbnQgX19zZXRfc3RhdHMoYm9vbCB2YWwpCit7CisJaW50IGZkLCByZXQ7CisKKwlmZCA9IG9w ZW4oU1lTRlNfRU5BQkxFLCBPX1dST05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC1lcnJu bzsKKworCXJldCA9IHdyaXRlKGZkLCB2YWwgPyAiMSIgOiAiMCIsIDIpOworCWlmIChyZXQgPCAw KQorCQlyZXR1cm4gLWVycm5vOworCWVsc2UgaWYgKHJldCA8IDIpCisJCXJldHVybiAxOworCisJ Y2xvc2UoZmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fcmVzdG9yZV9zdGF0 cyh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoX19zdGF0c19lbmFibGVkKQorCQlyZXR1cm47 CisKKwlyZXQgPSBfX3NldF9zdGF0cyhmYWxzZSk7CisJaWYgKHJldCkKKwkJZnByaW50ZihzdGRl cnIsICJGYWlsZWQgdG8gZGlzYWJsZSBwZXItY2xpZW50IHN0YXRzISAoJWQpXG4iLAorCQkJcmV0 KTsKK30KKworc3RhdGljIHZvaWQgX19yZXN0b3JlX3N0YXRzX3NpZ25hbChpbnQgc2lnKQorewor CWV4aXQoMCk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9zdGF0cyh2b2lkKQoreworCWludCBm ZCwgcmV0OworCisJZmQgPSBvcGVuKFNZU0ZTX0VOQUJMRSwgT19SRE9OTFkpOworCWlmIChmZCA8 IDApCisJCXJldHVybjsKKworCWNsb3NlKGZkKTsKKworCV9fc3RhdHNfZW5hYmxlZCA9IGZpbGVu YW1lX3RvX3U2NChTWVNGU19FTkFCTEUsIDEwKTsKKwlpZiAoX19zdGF0c19lbmFibGVkKQorCQly ZXR1cm47CisKKwlyZXQgPSBfX3NldF9zdGF0cyh0cnVlKTsKKwlpZiAoIXJldCkgeworCQlpZiAo YXRleGl0KF9fcmVzdG9yZV9zdGF0cykpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBy ZWdpc3RlciBleGl0IGhhbmRsZXIhIik7CisKKwkJaWYgKHNpZ25hbChTSUdJTlQsIF9fcmVzdG9y ZV9zdGF0c19zaWduYWwpKQorCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVnaXN0ZXIg c2lnbmFsIGhhbmRsZXIhIik7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQg dG8gZW5hYmxlIHBlci1jbGllbnQgc3RhdHMhICglZClcbiIsCisJCQlyZXQpOworCX0KK30KKwor I2RlZmluZSBTWVNGU19DTElFTlRTICIvc3lzL2NsYXNzL2RybS9jYXJkMC9jbGllbnRzLyIKKwor c3RhdGljIHN0cnVjdCBjbGllbnQgKmNsaWVudHM7CitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9j bGllbnRzOworCisjZGVmaW5lIGZvcl9lYWNoX2NsaWVudChjLCB0bXApIFwKKwlmb3IgKHRtcCA9 IG51bV9jbGllbnRzLCBjID0gY2xpZW50czsgdG1wID4gMDsgdG1wLS0sIGMrKykKKworc3RhdGlj IHVpbnQ2NF90IHJlYWRfY2xpZW50X2J1c3kodW5zaWduZWQgaW50IGlkLCBjb25zdCBjaGFyICpl bmdpbmUpCit7CisJY2hhciBidWZbMjU2XTsKKwlzc2l6ZV90IHJldDsKKworCXJldCA9IHNucHJp bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFNZU0ZTX0NMSUVOVFMgIi8ldS9idXN5LyVzIiwKKwkJICAg ICAgIGlkLCBlbmdpbmUpOworCWFzc2VydChyZXQgPiAwICYmIHJldCA8IHNpemVvZihidWYpKTsK KwlpZiAocmV0IDw9IDAgfHwgcmV0ID09IHNpemVvZihidWYpKQorCQlyZXR1cm4gMDsKKworCXJl dHVybiBmaWxlbmFtZV90b191NjQoYnVmLCAxMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xpZW50 ICpmaW5kX2NsaWVudChlbnVtIGNsaWVudF9zdGF0dXMgc3RhdHVzLCB1bnNpZ25lZCBpbnQgaWQp Cit7CisJc3RydWN0IGNsaWVudCAqYzsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJZm9yX2VhY2hf Y2xpZW50KGMsIHRtcCkgeworCQlpZiAoKHN0YXR1cyA9PSBGUkVFICYmIGMtPnN0YXR1cyA9PSBG UkVFKSB8fAorCQkgICAgKHN0YXR1cyA9PSBjLT5zdGF0dXMgJiYgYy0+aWQgPT0gaWQpKQorCQkJ cmV0dXJuIGM7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9j bGllbnQoc3RydWN0IGNsaWVudCAqYywgdW5zaWduZWQgaW50IHBpZCwgY2hhciAqbmFtZSkKK3sK Kwl1aW50NjRfdCB2YWxbYy0+ZW5naW5lcy0+bnVtX2VuZ2luZXNdOworCXVuc2lnbmVkIGludCBp OworCisJaWYgKGMtPnBpZCAhPSBwaWQpCisJCWMtPnBpZCA9IHBpZDsKKworCWlmIChzdHJuY21w KGMtPm5hbWUsIG5hbWUsIHNpemVvZihjLT5uYW1lKSkpCisJCXN0cm5jcHkoYy0+bmFtZSwgbmFt ZSwgc2l6ZW9mKGMtPm5hbWUpKTsKKworCWZvciAoaSA9IDA7IGkgPCBjLT5lbmdpbmVzLT5udW1f ZW5naW5lczsgaSsrKSB7CisJCXN0cnVjdCBlbmdpbmUgKmVuZ2luZSA9IGVuZ2luZV9wdHIoYy0+ ZW5naW5lcywgaSk7CisKKwkJdmFsW2ldID0gcmVhZF9jbGllbnRfYnVzeShjLT5pZCwgZW5naW5l LT5uYW1lKTsKKwl9CisKKwljLT50b3RhbCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYy0+ZW5n aW5lcy0+bnVtX2VuZ2luZXM7IGkrKykgeworCQlhc3NlcnQodmFsW2ldID49IGMtPmxhc3RbaV0p OworCQljLT52YWxbaV0gPSB2YWxbaV0gLSBjLT5sYXN0W2ldOworCQljLT50b3RhbCArPSBjLT52 YWxbaV07CisJCWMtPmxhc3RbaV0gPSB2YWxbaV07CisJfQorCisJYy0+c2FtcGxlcysrOworCWMt PnN0YXR1cyA9IEFMSVZFOworfQorCitzdGF0aWMgdm9pZAorYWRkX2NsaWVudCh1bnNpZ25lZCBp bnQgaWQsIHVuc2lnbmVkIGludCBwaWQsIGNoYXIgKm5hbWUsCisJICAgc3RydWN0IGVuZ2luZXMg KmVuZ2luZXMpCit7CisJc3RydWN0IGNsaWVudCAqYzsKKworCWFzc2VydCghZmluZF9jbGllbnQo QUxJVkUsIGlkKSk7CisKKwljID0gZmluZF9jbGllbnQoRlJFRSwgMCk7CisJaWYgKCFjKSB7CisJ CXVuc2lnbmVkIGludCBpZHggPSBudW1fY2xpZW50czsKKworCQludW1fY2xpZW50cyArPSAobnVt X2NsaWVudHMgKyAyKSAvIDI7CisJCWNsaWVudHMgPSByZWFsbG9jKGNsaWVudHMsIG51bV9jbGll bnRzICogc2l6ZW9mKCpjKSk7CisJCWFzc2VydChjbGllbnRzKTsKKwkJYyA9ICZjbGllbnRzW2lk eF07CisJCW1lbXNldChjLCAwLCAobnVtX2NsaWVudHMgLSBpZHgpICogc2l6ZW9mKCpjKSk7CisJ fQorCisJYy0+aWQgPSBpZDsKKwljLT5lbmdpbmVzID0gZW5naW5lczsKKwljLT52YWwgPSBjYWxs b2MoZW5naW5lcy0+bnVtX2VuZ2luZXMsIHNpemVvZihjLT52YWwpKTsKKwljLT5sYXN0ID0gY2Fs bG9jKGVuZ2luZXMtPm51bV9lbmdpbmVzLCBzaXplb2YoYy0+bGFzdCkpOworCWFzc2VydChjLT52 YWwgJiYgYy0+bGFzdCk7CisKKwl1cGRhdGVfY2xpZW50KGMsIHBpZCwgbmFtZSk7Cit9CisKK3N0 YXRpYyB2b2lkIGZyZWVfY2xpZW50KHN0cnVjdCBjbGllbnQgKmMpCit7CisJZnJlZShjLT52YWwp OworCWZyZWUoYy0+bGFzdCk7CisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworfQorCitzdGF0 aWMgY2hhciAqcmVhZF9jbGllbnRfc3lzZnModW5zaWduZWQgaW50IGlkLCBjb25zdCBjaGFyICpm aWVsZCkKK3sKKwljaGFyIGJ1ZlsyNTZdOworCXNzaXplX3QgcmV0OworCisJcmV0ID0gc25wcmlu dGYoYnVmLCBzaXplb2YoYnVmKSwgU1lTRlNfQ0xJRU5UUyAiLyV1LyVzIiwgaWQsIGZpZWxkKTsK Kwlhc3NlcnQocmV0ID4gMCAmJiByZXQgPCBzaXplb2YoYnVmKSk7CisJaWYgKHJldCA8PSAwIHx8 IHJldCA9PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSBmaWxlbmFtZV90 b19idWYoYnVmLCBidWYsIHNpemVvZihidWYpKTsKKwlhc3NlcnQocmV0ID09IDApOworCWlmIChy ZXQpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHN0cmR1cChidWYpOworfQorCitzdGF0aWMg dm9pZCBzY2FuKHN0cnVjdCBlbmdpbmVzICplbmdpbmVzKQoreworCXN0cnVjdCBkaXJlbnQgKmRl bnQ7CisJc3RydWN0IGNsaWVudCAqYzsKKwljaGFyICpwaWQsICpuYW1lOworCXVuc2lnbmVkIGlu dCB0bXA7CisJdW5zaWduZWQgaW50IGlkOworCURJUiAqZDsKKworCWZvcl9lYWNoX2NsaWVudChj LCB0bXApIHsKKwkJaWYgKGMtPnN0YXR1cyA9PSBBTElWRSkKKwkJCWMtPnN0YXR1cyA9IFBST0JF OworCX0KKworCWQgPSBvcGVuZGlyKFNZU0ZTX0NMSUVOVFMpOworCWlmICghZCkKKwkJcmV0dXJu OworCisJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgeworCQlpZiAoZGVudC0+ ZF90eXBlICE9IERUX0RJUikKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzZGlnaXQoZGVudC0+ZF9u YW1lWzBdKSkKKwkJCWNvbnRpbnVlOworCisJCWlkID0gYXRvaShkZW50LT5kX25hbWUpOworCisJ CW5hbWUgPSByZWFkX2NsaWVudF9zeXNmcyhpZCwgIm5hbWUiKTsKKwkJYXNzZXJ0KG5hbWUpOwor CQlpZiAoIW5hbWUpCisJCQljb250aW51ZTsKKworCQlwaWQgPSByZWFkX2NsaWVudF9zeXNmcyhp ZCwgInBpZCIpOworCQlhc3NlcnQocGlkKTsKKwkJaWYgKCFwaWQpIHsKKwkJCWZyZWUobmFtZSk7 CisJCQljb250aW51ZTsKKwkJfQorCisJCWMgPSBmaW5kX2NsaWVudChQUk9CRSwgaWQpOworCQlp ZiAoYykgeworCQkJdXBkYXRlX2NsaWVudChjLCBhdG9pKHBpZCksIG5hbWUpOworCQkJY29udGlu dWU7CisJCX0KKworCQlhZGRfY2xpZW50KGlkLCBhdG9pKHBpZCksIG5hbWUsIGVuZ2luZXMpOwor CisJCWZyZWUobmFtZSk7CisJCWZyZWUocGlkKTsKKwl9CisKKwljbG9zZWRpcihkKTsKKworCWZv cl9lYWNoX2NsaWVudChjLCB0bXApIHsKKwkJaWYgKGMtPnN0YXR1cyA9PSBQUk9CRSkKKwkJCWZy ZWVfY2xpZW50KGMpOworCX0KK30KKworc3RhdGljIGludCBjbXAoY29uc3Qgdm9pZCAqX2EsIGNv bnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBjbGllbnQgKmEgPSBfYTsKKwljb25zdCBz dHJ1Y3QgY2xpZW50ICpiID0gX2I7CisJbG9uZyB0b3RfYSA9IGEtPnRvdGFsOworCWxvbmcgdG90 X2IgPSBiLT50b3RhbDsKKworCXRvdF9hICo9IGEtPnN0YXR1cyA9PSBBTElWRSAmJiBhLT5zYW1w bGVzID4gMTsKKwl0b3RfYiAqPSBiLT5zdGF0dXMgPT0gQUxJVkUgJiYgYi0+c2FtcGxlcyA+IDE7 CisKKwl0b3RfYiAtPSB0b3RfYTsKKworCWlmICghdG90X2IpCisJCXJldHVybiAoaW50KWItPmlk IC0gYS0+aWQ7CisKKwl3aGlsZSAodG90X2IgPiBJTlRfTUFYIHx8IHRvdF9iIDwgSU5UX01JTikK KwkJdG90X2IgLz0gMjsKKworCXJldHVybiB0b3RfYjsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIg KmJhcnNbXSA9IHsgIiAiLCAi4paPIiwgIuKWjiIsICLilo0iLCAi4paMIiwgIuKWiyIsICLilooi LCAi4paJIiwgIuKWiCIgfTsKIAorc3RhdGljIHZvaWQgbl9zcGFjZXMoY29uc3QgdW5zaWduZWQg aW50IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQor CQlwdXRjaGFyKCcgJyk7Cit9CisKIHN0YXRpYyB2b2lkCiBwcmludF9wZXJjZW50YWdlX2Jhcihk b3VibGUgcGVyY2VudCwgaW50IG1heF9sZW4pCiB7CkBAIC03MTYsOCArMTAwNywxMCBAQCBwcmlu dF9wZXJjZW50YWdlX2Jhcihkb3VibGUgcGVyY2VudCwgaW50IG1heF9sZW4pCiAJaWYgKGkpCiAJ CXByaW50ZigiJXMiLCBiYXJzW2ldKTsKIAotCWZvciAoaSA9IDA7IGkgPCAobWF4X2xlbiAtIDIg LSAoYmFyX2xlbiArIDcpIC8gOCk7IGkrKykKLQkJcHV0Y2hhcignICcpOworCWJhcl9sZW4gPSBt YXhfbGVuIC0gMiAtIChiYXJfbGVuICsgNykgLyA4OworCWlmIChiYXJfbGVuID4gbWF4X2xlbikK KwkJYmFyX2xlbiA9IG1heF9sZW47CisJbl9zcGFjZXMoYmFyX2xlbik7CiAKIAlwdXRjaGFyKCd8 Jyk7CiB9CkBAIC03ODQsMTIgKzEwNzcsMTUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCQlyZXR1cm4gMTsKIAl9CiAKKwllbmFibGVfc3RhdHMoKTsKKwogCS8qIExvYWQgYXZl cmFnZSBzZXR1cC4gKi8KIAlwZXJpb2QgPSAoZG91YmxlKXBlcmlvZF91cyAvIDFlNjsKIAlmb3Ig KGkgPSAwOyBpIDwgTlVNX0xPQURTOyBpKyspCiAJCWVuZ2luZXMtPmxvYWRfZXhwW2ldID0gZXhw KC1wZXJpb2QgLyBsb2FkX3BlcmlvZFtpXSk7CiAKIAlwbXVfc2FtcGxlKGVuZ2luZXMpOworCXNj YW4oZW5naW5lcyk7CiAKIAlmb3IgKDs7KSB7CiAJCWRvdWJsZSB0LCBxZCA9IDA7CkBAIC04MDIs NyArMTA5OCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJY2hhciByZWFk c1tCVUZTWl07CiAJCWNoYXIgd3JpdGVzW0JVRlNaXTsKIAkJc3RydWN0IHdpbnNpemUgd3M7Ci0J CXVuc2lnbmVkIGludCBqOworCQl1bnNpZ25lZCBpbnQgbGVuLCBlbmdpbmVfdywgajsKKwkJc3Ry dWN0IGNsaWVudCAqYzsKIAkJaW50IGxpbmVzID0gMDsKIAogCQkvKiBVcGRhdGUgdGVybWluYWwg c2l6ZS4gKi8KQEAgLTgxMiw5ICsxMTA5LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJfQogCiAJCXBtdV9zYW1wbGUoZW5naW5lcyk7Ci0JCXQgPSAoZG91YmxlKShlbmdp bmVzLT50cy5jdXIgLSBlbmdpbmVzLT50cy5wcmV2KSAvIDFlOTsKKwkJc2NhbihlbmdpbmVzKTsK KwkJcXNvcnQoY2xpZW50cywgbnVtX2NsaWVudHMsIHNpemVvZigqYyksIGNtcCk7CiAKLQkJcHJp bnRmKCJcMDMzW0hcMDMzW0oiKTsKKwkJdCA9IChkb3VibGUpKGVuZ2luZXMtPnRzLmN1ciAtIGVu Z2luZXMtPnRzLnByZXYpIC8gMWU5OwogCiAJCXBtdV9jYWxjKCZlbmdpbmVzLT5mcmVxX3JlcSwg ZnJlcSwgQlVGU1osIDQsIDAsIDEuMCwgdCwgMSk7CiAJCXBtdV9jYWxjKCZlbmdpbmVzLT5mcmVx X2FjdCwgZmFjdCwgQlVGU1osIDQsIDAsIDEuMCwgdCwgMSk7CkBAIC04NjAsNiArMTE1OCw4IEBA IGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJICAgIHFkKTsKIAkJfQogCisJ CXByaW50ZigiXDAzM1tIXDAzM1tKIik7CisKIAkJaWYgKGxpbmVzKysgPCBjb25faCkKIAkJCXBy aW50ZigiaW50ZWwtZ3B1LXRvcCAtIGxvYWQgYXZnICU1LjJmLCAlNS4yZiwgJTUuMmY7ICVzLyVz IE1IejsgICVzJSUgUkM2OyAlcyAlczsgJXMgaXJxcy9zXG4iLAogCQkJICAgICAgIGVuZ2luZXMt PmxvYWRfYXZnWzBdLApAQCAtOTAzLDcgKzEyMDMsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJCQlzdHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdpbmVfcHRyKGVuZ2luZXMs IGkpOwogCQkJdW5zaWduZWQgaW50IG1heF93ID0gY29uX3cgLSAxOwogCQkJY2hhciBxZGJ1ZltO VU1fTE9BRFNdW0JVRlNaXTsKLQkJCXVuc2lnbmVkIGludCBsZW47CiAJCQljaGFyIHNlbWFbQlVG U1pdOwogCQkJY2hhciB3YWl0W0JVRlNaXTsKIAkJCWNoYXIgYnVzeVtCVUZTWl07CkBAIC05NDEs NiArMTI0MCw0OSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWlmIChsaW5l cysrIDwgY29uX2gpCiAJCQlwcmludGYoIlxuIik7CiAKKwkJaWYgKGxpbmVzKysgPCBjb25faCkg eworCQkJcHJpbnRmKCJcMDMzWzdtIik7CisJCQlsZW4gPSBwcmludGYoIiU1cyUxNnMiLCAiUElE IiwgIk5BTUUiKTsKKworCQkJZW5naW5lX3cgPSAoY29uX3cgLSBsZW4pIC8gZW5naW5lcy0+bnVt X2VuZ2luZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgZW5naW5lcy0+bnVtX2VuZ2luZXM7IGkrKykg eworCQkJCXN0cnVjdCBlbmdpbmUgKmVuZ2luZSA9IGVuZ2luZV9wdHIoZW5naW5lcywgaSk7CisJ CQkJdW5zaWduZWQgaW50IG5hbWVfbGVuID0KKwkJCQkJc3RybGVuKGVuZ2luZS0+ZGlzcGxheV9u YW1lKTsKKwkJCQl1bnNpZ25lZCBpbnQgcGFkID0gKGVuZ2luZV93IC0gbmFtZV9sZW4pIC8gMjsK KworCisJCQkJbl9zcGFjZXMocGFkKTsKKwkJCQlwcmludGYoIiVzIiwgZW5naW5lLT5kaXNwbGF5 X25hbWUpOworCQkJCW5fc3BhY2VzKGVuZ2luZV93IC0gcGFkIC0gbmFtZV9sZW4pOworCQkJCWxl biArPSBwYWQgKyBuYW1lX2xlbiArIChlbmdpbmVfdyAtIHBhZCAtCisJCQkJICAgICAgIG5hbWVf bGVuKTsKKwkJCX0KKwkJCW5fc3BhY2VzKGNvbl93IC0gbGVuKTsKKwkJCXByaW50ZigiXDAzM1sw bVxuIik7CisJCX0KKworCQlmb3JfZWFjaF9jbGllbnQoYywgaSkgeworCQkJaWYgKGxpbmVzKysg PiBjb25faCkKKwkJCQlicmVhazsKKworCQkJYXNzZXJ0KGMtPnN0YXR1cyAhPSBQUk9CRSk7CisJ CQlpZiAoYy0+c3RhdHVzICE9IEFMSVZFIHx8IGMtPnNhbXBsZXMgPCAyKQorCQkJCWJyZWFrOwor CisJCQlwcmludGYoIiU1dSUxNnMgIiwgYy0+cGlkLCBjLT5uYW1lKTsKKworCQkJZm9yIChqID0g MDsgaiA8IGVuZ2luZXMtPm51bV9lbmdpbmVzOyBqKyspIHsKKwkJCQlkb3VibGUgcGN0OworCisJ CQkJcGN0ID0gKGRvdWJsZSljLT52YWxbal0gLyBwZXJpb2RfdXMgLyAxZTMgKiAxMDA7CisKKwkJ CQlwcmludF9wZXJjZW50YWdlX2JhcihwY3QsIGVuZ2luZV93KTsKKwkJCX0KKworCQkJcHV0Y2hh cignXG4nKTsKKwkJfQorCiAJCXVzbGVlcChwZXJpb2RfdXMpOwogCX0KIAotLSAKMi4xNy4xCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1h aWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK