From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Tvrtko Ursulin Date: Mon, 9 Mar 2020 18:32:56 +0000 Message-Id: <20200309183256.2590-2-tvrtko.ursulin@linux.intel.com> In-Reply-To: <20200309183256.2590-1-tvrtko.ursulin@linux.intel.com> References: <20200309183256.2590-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [RFC i-g-t 1/1] 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: RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkFkZHMgc3Vw cG9ydCBmb3IgcGVyLWNsaWVudCBlbmdpbmUgYnVzeW5lc3Mgc3RhdHMgaTkxNSBleHBvcnRzIGlu IHN5c2ZzCmFuZCBwcm9kdWNlcyBvdXRwdXQgbGlrZSB0aGUgYmVsb3c6Cgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQppbnRlbC1ncHUtdG9wIC0gIDkzNS8gOTM1IE1IejsgICAgMCUgUkM2OyAxNC43MyBXYXR0 czsgICAgIDEwOTcgaXJxcy9zCgogICAgICBJTUMgcmVhZHM6ICAgICAxNDAxIE1pQi9zCiAgICAg SU1DIHdyaXRlczogICAgICAgIDQgTWlCL3MKCiAgICAgICAgICBFTkdJTkUgICAgICBCVVNZICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlfU0VNQSBNSV9XQUlUCiAgICAgUmVuZGVy LzNELzAgICA2My43MyUgfOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKW iOKWiOKWiOKWiOKWiOKWiCAgICAgICAgICAgfCAgICAgIDMlICAgICAgMCUKICAgICAgIEJsaXR0 ZXIvMCAgICA5LjUzJSB84paI4paI4paKICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg IDYlICAgICAgMCUKICAgICAgICAgVmlkZW8vMCAgIDM5LjMyJSB84paI4paI4paI4paI4paI4paI 4paI4paI4paI4paI4paI4paKICAgICAgICAgICAgICAgICAgfCAgICAgMTYlICAgICAgMCUKICAg ICAgICAgVmlkZW8vMSAgIDE1LjYyJSB84paI4paI4paI4paI4paLICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgICAwJSAgICAgIDAlCiAgVmlkZW9FbmhhbmNlLzAgICAgMC4wMCUgfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAwJSAgICAgIDAlCgogIFBJRCAgICAgICAg ICAgIE5BTUUgICAgIFJDUyAgICAgICAgICBCQ1MgICAgICAgICAgVkNTICAgICAgICAgVkVDUwog NDA4NCAgICAgICAgZ2VtX3dzaW0gfOKWiOKWiOKWiOKWiOKWiOKWjCAgICAgfHziloggICAgICAg ICAgfHwgICAgICAgICAgIHx8ICAgICAgICAgICB8CiA0MDg2ICAgICAgICBnZW1fd3NpbSB84paI 4paMICAgICAgICAgfHwgICAgICAgICAgIHx84paI4paI4paIICAgICAgICB8fCAgICAgICAgICAg fAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoKQXBhcnQgZnJvbSB0aGUgZXhpc3RpbmcgcGh5c2ljYWwgZW5n aW5lIHV0aWxpemF0aW9uIGl0IG5vdyBhbHNvIHNob3dzCnV0aWxpemF0aW9uIHBlciBjbGllbnQg YW5kIHBlciBlbmdpbmUgY2xhc3MuCgp2MjoKICogVmVyc2lvbiB0byBtYXRjaCByZW1vdmFsIG9m IGdsb2JhbCBlbmFibGVfc3RhdHMgdG9nZ2xlLgogKiBQbHVzIHZhcmlvdXMgZml4ZXMuCgp2MzoK ICogU3VwcG9ydCBicmllZiBiYWNrd2FyZCBqdW1wcyBpbiBjbGllbnQgc3RhdHMuCgpTaWduZWQt b2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgotLS0KIHRv b2xzL2ludGVsX2dwdV90b3AuYyB8IDUzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA1MjggaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvdG9vbHMvaW50ZWxfZ3B1X3RvcC5jIGIvdG9vbHMvaW50ZWxf Z3B1X3RvcC5jCmluZGV4IDgxOTc0ODJkZDZjMi4uM2Y4ZTE0ZjRlOGE5IDEwMDY0NAotLS0gYS90 b29scy9pbnRlbF9ncHVfdG9wLmMKKysrIGIvdG9vbHMvaW50ZWxfZ3B1X3RvcC5jCkBAIC02NTks MjMgKzY1OSwzNDcgQEAgc3RhdGljIHZvaWQgcG11X3NhbXBsZShzdHJ1Y3QgZW5naW5lcyAqZW5n aW5lcykKIAl9CiB9CiAKK2VudW0gY2xpZW50X3N0YXR1cyB7CisJRlJFRSA9IDAsIC8qIG1ieiAq LworCUFMSVZFLAorCVBST0JFCit9OworCitzdHJ1Y3QgY2xpZW50czsKKworc3RydWN0IGNsaWVu dCB7CisJc3RydWN0IGNsaWVudHMgKmNsaWVudHM7CisKKwllbnVtIGNsaWVudF9zdGF0dXMgc3Rh dHVzOworCXVuc2lnbmVkIGludCBpZDsKKwl1bnNpZ25lZCBpbnQgcGlkOworCWNoYXIgbmFtZVsx MjhdOworCXVuc2lnbmVkIGludCBzYW1wbGVzOworCXVuc2lnbmVkIGxvbmcgdG90YWw7CisJc3Ry dWN0IGVuZ2luZXMgKmVuZ2luZXM7CisJdW5zaWduZWQgbG9uZyAqdmFsOworCXVpbnQ2NF90ICps YXN0OworfTsKKworc3RydWN0IGVuZ2luZV9jbGFzcyB7CisJdW5zaWduZWQgaW50IGNsYXNzOwor CWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IG51bV9lbmdpbmVzOworfTsKKworc3Ry dWN0IGNsaWVudHMgeworCXVuc2lnbmVkIGludCBudW1fY2xhc3NlczsKKwlzdHJ1Y3QgZW5naW5l X2NsYXNzICpjbGFzczsKKworCXVuc2lnbmVkIGludCBudW1fY2xpZW50czsKKwlzdHJ1Y3QgY2xp ZW50ICpjbGllbnQ7Cit9OworCisjZGVmaW5lIGZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBjLCB0 bXApIFwKKwlmb3IgKCh0bXApID0gKGNsaWVudHMpLT5udW1fY2xpZW50cywgYyA9IChjbGllbnRz KS0+Y2xpZW50OyBcCisJICAgICAodG1wID4gMCk7ICh0bXApLS0sIChjKSsrKQorCitzdGF0aWMg c3RydWN0IGNsaWVudHMgKmluaXRfY2xpZW50cyh2b2lkKQoreworCXN0cnVjdCBjbGllbnRzICpj bGllbnRzID0gbWFsbG9jKHNpemVvZigqY2xpZW50cykpOworCisJcmV0dXJuIG1lbXNldChjbGll bnRzLCAwLCBzaXplb2YoKmNsaWVudHMpKTsKK30KKworI2RlZmluZSBTWVNGU19DTElFTlRTICIv c3lzL2NsYXNzL2RybS9jYXJkMC9jbGllbnRzIgorCitzdGF0aWMgdWludDY0X3QgcmVhZF9jbGll bnRfYnVzeSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBjbGFzcykKK3sKKwljaGFyIGJ1 ZlsyNTZdOworCXNzaXplX3QgcmV0OworCisJcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVm KSwKKwkJICAgICAgIFNZU0ZTX0NMSUVOVFMgIi8ldS9idXN5LyV1IiwKKwkJICAgICAgIGlkLCBj bGFzcyk7CisJYXNzZXJ0KHJldCA+IDAgJiYgcmV0IDwgc2l6ZW9mKGJ1ZikpOworCWlmIChyZXQg PD0gMCB8fCByZXQgPT0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybiAwOworCisJcmV0dXJuIGZpbGVu YW1lX3RvX3U2NChidWYsIDEwKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGllbnQgKgorZmluZF9j bGllbnQoc3RydWN0IGNsaWVudHMgKmNsaWVudHMsIGVudW0gY2xpZW50X3N0YXR1cyBzdGF0dXMs IHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjOworCWludCB0bXA7CisKKwlm b3JfZWFjaF9jbGllbnQoY2xpZW50cywgYywgdG1wKSB7CisJCWlmICgoc3RhdHVzID09IEZSRUUg JiYgYy0+c3RhdHVzID09IEZSRUUpIHx8CisJCSAgICAoc3RhdHVzID09IGMtPnN0YXR1cyAmJiBj LT5pZCA9PSBpZCkpCisJCQlyZXR1cm4gYzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3Rh dGljIHZvaWQgdXBkYXRlX2NsaWVudChzdHJ1Y3QgY2xpZW50ICpjLCB1bnNpZ25lZCBpbnQgcGlk LCBjaGFyICpuYW1lKQoreworCXVpbnQ2NF90IHZhbFtjLT5jbGllbnRzLT5udW1fY2xhc3Nlc107 CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoYy0+cGlkICE9IHBpZCkKKwkJYy0+cGlkID0gcGlk OworCisJaWYgKHN0cmNtcChjLT5uYW1lLCBuYW1lKSkKKwkJc3RybmNweShjLT5uYW1lLCBuYW1l LCBzaXplb2YoYy0+bmFtZSkgLSAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBjLT5jbGllbnRzLT5u dW1fY2xhc3NlczsgaSsrKQorCQl2YWxbaV0gPSByZWFkX2NsaWVudF9idXN5KGMtPmlkLCBjLT5j bGllbnRzLT5jbGFzc1tpXS5jbGFzcyk7CisKKwljLT50b3RhbCA9IDA7CisKKwlmb3IgKGkgPSAw OyBpIDwgYy0+Y2xpZW50cy0+bnVtX2NsYXNzZXM7IGkrKykgeworCQlpZiAodmFsW2ldIDwgYy0+ bGFzdFtpXSkKKwkJCWNvbnRpbnVlOyAvKiBJdCB3aWxsIGNhdGNoIHVwIHNvb24uICovCisKKwkJ Yy0+dmFsW2ldID0gdmFsW2ldIC0gYy0+bGFzdFtpXTsKKwkJYy0+dG90YWwgKz0gYy0+dmFsW2ld OworCQljLT5sYXN0W2ldID0gdmFsW2ldOworCX0KKworCWMtPnNhbXBsZXMrKzsKKwljLT5zdGF0 dXMgPSBBTElWRTsKK30KKworc3RhdGljIGludCBjbGFzc19jbXAoY29uc3Qgdm9pZCAqX2EsIGNv bnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBlbmdpbmVfY2xhc3MgKmEgPSBfYTsKKwlj b25zdCBzdHJ1Y3QgZW5naW5lX2NsYXNzICpiID0gX2I7CisKKwlyZXR1cm4gYS0+Y2xhc3MgLSBi LT5jbGFzczsKK30KKworc3RhdGljIHZvaWQgc2Nhbl9jbGFzc2VzKHN0cnVjdCBjbGllbnRzICpj bGllbnRzLCB1bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IGVuZ2luZV9jbGFzcyAqY2xhc3Nl czsKKwl1bnNpZ25lZCBpbnQgbnVtLCBpOworCXN0cnVjdCBkaXJlbnQgKmRlbnQ7CisJY2hhciBi dWZbMjU2XTsKKwlpbnQgcmV0OworCURJUiAqZDsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6 ZW9mKGJ1ZiksIFNZU0ZTX0NMSUVOVFMgIi8ldS9idXN5IiwgaWQpOworCWFzc2VydChyZXQgPiAw ICYmIHJldCA8IHNpemVvZihidWYpKTsKKwlpZiAocmV0IDw9IDAgfHwgcmV0ID09IHNpemVvZihi dWYpKQorCQlyZXR1cm47CisKKwlkID0gb3BlbmRpcihidWYpOworCWlmICghZCkKKwkJcmV0dXJu OworCityZXN0YXJ0OgorCXJld2luZGRpcihkKTsKKworCW51bSA9IDA7CisJd2hpbGUgKChkZW50 ID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgeworCQlpZiAoZGVudC0+ZF90eXBlICE9IERUX1JFRykK KwkJCWNvbnRpbnVlOworCisJCW51bSsrOworCX0KKworCXJld2luZGRpcihkKTsKKworCWNsYXNz ZXMgPSBjYWxsb2MobnVtLCBzaXplb2YoKmNsYXNzZXMpKTsKKwlhc3NlcnQoY2xhc3Nlcyk7CisK KwlpID0gMDsKKwl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisJCWlmIChp ID4gbnVtKSB7CisJCQkvLyBGSVhNRTogZnJlZSBpbmRpdmlkdWFsIG5hbWVzCisJCQlmcmVlKGNs YXNzZXMpOworCQkJZ290byByZXN0YXJ0OworCQl9CisKKwkJaWYgKGRlbnQtPmRfdHlwZSAhPSBE VF9SRUcpCisJCQljb250aW51ZTsKKworCQljbGFzc2VzW2ldLmNsYXNzID0gYXRvaShkZW50LT5k X25hbWUpOworCQljbGFzc2VzW2ldLm5hbWUgPSBjbGFzc19kaXNwbGF5X25hbWUoY2xhc3Nlc1tp XS5jbGFzcyk7CisJCWkrKzsKKwl9CisKKwljbG9zZWRpcihkKTsKKworCXFzb3J0KGNsYXNzZXMs IG51bSwgc2l6ZW9mKCpjbGFzc2VzKSwgY2xhc3NfY21wKTsKKworCWNsaWVudHMtPm51bV9jbGFz c2VzID0gbnVtOworCWNsaWVudHMtPmNsYXNzID0gY2xhc3NlczsKK30KKworc3RhdGljIHZvaWQK K2FkZF9jbGllbnQoc3RydWN0IGNsaWVudHMgKmNsaWVudHMsIHVuc2lnbmVkIGludCBpZCwgdW5z aWduZWQgaW50IHBpZCwKKwkgICBjaGFyICpuYW1lKQoreworCXN0cnVjdCBjbGllbnQgKmM7CisK KwlpZiAoZmluZF9jbGllbnQoY2xpZW50cywgQUxJVkUsIGlkKSkKKwkJcmV0dXJuOworCisJYyA9 IGZpbmRfY2xpZW50KGNsaWVudHMsIEZSRUUsIDApOworCWlmICghYykgeworCQl1bnNpZ25lZCBp bnQgaWR4ID0gY2xpZW50cy0+bnVtX2NsaWVudHM7CisKKwkJY2xpZW50cy0+bnVtX2NsaWVudHMg Kz0gKGNsaWVudHMtPm51bV9jbGllbnRzICsgMikgLyAyOworCQljbGllbnRzLT5jbGllbnQgPSBy ZWFsbG9jKGNsaWVudHMtPmNsaWVudCwKKwkJCQkJICBjbGllbnRzLT5udW1fY2xpZW50cyAqIHNp emVvZigqYykpOworCQlhc3NlcnQoY2xpZW50cy0+Y2xpZW50KTsKKworCQljID0gJmNsaWVudHMt PmNsaWVudFtpZHhdOworCQltZW1zZXQoYywgMCwgKGNsaWVudHMtPm51bV9jbGllbnRzIC0gaWR4 KSAqIHNpemVvZigqYykpOworCX0KKworCWlmICghY2xpZW50cy0+bnVtX2NsYXNzZXMpCisJCXNj YW5fY2xhc3NlcyhjbGllbnRzLCBpZCk7CisKKwljLT5pZCA9IGlkOworCWMtPmNsaWVudHMgPSBj bGllbnRzOworCWMtPnZhbCA9IGNhbGxvYyhjbGllbnRzLT5udW1fY2xhc3Nlcywgc2l6ZW9mKGMt PnZhbCkpOworCWMtPmxhc3QgPSBjYWxsb2MoY2xpZW50cy0+bnVtX2NsYXNzZXMsIHNpemVvZihj LT5sYXN0KSk7CisJYXNzZXJ0KGMtPnZhbCAmJiBjLT5sYXN0KTsKKworCXVwZGF0ZV9jbGllbnQo YywgcGlkLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jbGllbnQoc3RydWN0IGNsaWVu dCAqYykKK3sKKwlmcmVlKGMtPnZhbCk7CisJZnJlZShjLT5sYXN0KTsKKwltZW1zZXQoYywgMCwg c2l6ZW9mKCpjKSk7Cit9CisKK3N0YXRpYyBjaGFyICpyZWFkX2NsaWVudF9zeXNmcyh1bnNpZ25l ZCBpbnQgaWQsIGNvbnN0IGNoYXIgKmZpZWxkKQoreworCWNoYXIgYnVmWzI1Nl07CisJc3NpemVf dCByZXQ7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBTWVNGU19DTElFTlRT ICIvJXUvJXMiLCBpZCwgZmllbGQpOworCWFzc2VydChyZXQgPiAwICYmIHJldCA8IHNpemVvZihi dWYpKTsKKwlpZiAocmV0IDw9IDAgfHwgcmV0ID09IHNpemVvZihidWYpKQorCQlyZXR1cm4gTlVM TDsKKworCXJldCA9IGZpbGVuYW1lX3RvX2J1ZihidWYsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlm IChyZXQpCisJCXJldHVybiBOVUxMOyAvKiBDbGllbnQgZXhpdGVkLiAqLworCisJcmV0dXJuIHN0 cmR1cChidWYpOworfQorCitzdGF0aWMgdm9pZCBzY2FuX2NsaWVudHMoc3RydWN0IGNsaWVudHMg KmNsaWVudHMpCit7CisJc3RydWN0IGRpcmVudCAqZGVudDsKKwlzdHJ1Y3QgY2xpZW50ICpjOwor CWNoYXIgKnBpZCwgKm5hbWU7CisJdW5zaWduZWQgaW50IGlkOworCWludCB0bXA7CisJRElSICpk OworCisJaWYgKCFjbGllbnRzKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9jbGllbnQoY2xpZW50 cywgYywgdG1wKSB7CisJCWlmIChjLT5zdGF0dXMgPT0gQUxJVkUpCisJCQljLT5zdGF0dXMgPSBQ Uk9CRTsKKwl9CisKKwlkID0gb3BlbmRpcihTWVNGU19DTElFTlRTKTsKKwlpZiAoIWQpCisJCXJl dHVybjsKKworCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKwkJaWYgKGRl bnQtPmRfdHlwZSAhPSBEVF9ESVIpCisJCQljb250aW51ZTsKKwkJaWYgKCFpc2RpZ2l0KGRlbnQt PmRfbmFtZVswXSkpCisJCQljb250aW51ZTsKKworCQlpZCA9IGF0b2koZGVudC0+ZF9uYW1lKTsK KworCQljID0gZmluZF9jbGllbnQoY2xpZW50cywgUFJPQkUsIGlkKTsKKworCQluYW1lID0gcmVh ZF9jbGllbnRfc3lzZnMoaWQsICJuYW1lIik7CisJCXBpZCA9IHJlYWRfY2xpZW50X3N5c2ZzKGlk LCAicGlkIik7CisKKwkJaWYgKG5hbWUgJiYgcGlkKSB7CisJCQlpZiAoIWMpCisJCQkJYWRkX2Ns aWVudChjbGllbnRzLCBpZCwgYXRvaShwaWQpLCBuYW1lKTsKKwkJCWVsc2UKKwkJCQl1cGRhdGVf Y2xpZW50KGMsIGF0b2kocGlkKSwgbmFtZSk7CisJCX0gZWxzZSBpZiAoYykgeworCQkJYy0+c3Rh dHVzID0gUFJPQkU7IC8qIFdpbGwgYmUgZGVsZXRlZCBiZWxvdy4gKi8KKwkJfQorCisJCWlmIChu YW1lKQorCQkJZnJlZShuYW1lKTsKKwkJaWYgKHBpZCkKKwkJCWZyZWUocGlkKTsKKwl9CisKKwlj bG9zZWRpcihkKTsKKworCWZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBjLCB0bXApIHsKKwkJaWYg KGMtPnN0YXR1cyA9PSBQUk9CRSkKKwkJCWZyZWVfY2xpZW50KGMpOworCX0KK30KKworc3RhdGlj IGludCBjbXAoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVj dCBjbGllbnQgKmEgPSBfYTsKKwljb25zdCBzdHJ1Y3QgY2xpZW50ICpiID0gX2I7CisJbG9uZyB0 b3RfYSA9IGEtPnRvdGFsOworCWxvbmcgdG90X2IgPSBiLT50b3RhbDsKKworCXRvdF9hICo9IGEt PnN0YXR1cyA9PSBBTElWRSAmJiBhLT5zYW1wbGVzID4gMTsKKwl0b3RfYiAqPSBiLT5zdGF0dXMg PT0gQUxJVkUgJiYgYi0+c2FtcGxlcyA+IDE7CisKKwl0b3RfYiAtPSB0b3RfYTsKKworCWlmICgh dG90X2IpCisJCXJldHVybiAoaW50KWItPmlkIC0gYS0+aWQ7CisKKwl3aGlsZSAodG90X2IgPiBJ TlRfTUFYIHx8IHRvdF9iIDwgSU5UX01JTikKKwkJdG90X2IgLz0gMjsKKworCXJldHVybiB0b3Rf YjsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKmJhcnNbXSA9IHsgIiAiLCAi4paPIiwgIuKWjiIs ICLilo0iLCAi4paMIiwgIuKWiyIsICLilooiLCAi4paJIiwgIuKWiCIgfTsKIAorc3RhdGljIHZv aWQgbl9zcGFjZXMoY29uc3QgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlwdXRjaGFyKCcgJyk7Cit9CisKIHN0YXRpYyB2 b2lkCiBwcmludF9wZXJjZW50YWdlX2Jhcihkb3VibGUgcGVyY2VudCwgaW50IG1heF9sZW4pCiB7 Ci0JaW50IGJhcl9sZW4gPSBwZXJjZW50ICogKDggKiAobWF4X2xlbiAtIDIpKSAvIDEwMC4wOwot CWludCBpOworCWludCBiYXJfbGVuLCBpLCBsZW4gPSBtYXhfbGVuIC0gMjsKKwljb25zdCBpbnQg dyA9IDg7CisKKwlhc3NlcnQobWF4X2xlbiA+IDApOworCisJYmFyX2xlbiA9IHBlcmNlbnQgKiAo dyAqIGxlbikgLyAxMDAuMDsKKwlpZiAoYmFyX2xlbiA+IChsZW4gKiB3KSkKKwkJYmFyX2xlbiA9 IGxlbiAqIHc7CiAKIAlwdXRjaGFyKCd8Jyk7CiAKLQlmb3IgKGkgPSBiYXJfbGVuOyBpID49IDg7 IGkgLT0gOCkKLQkJcHJpbnRmKCIlcyIsIGJhcnNbOF0pOworCWZvciAoaSA9IGJhcl9sZW47IGkg Pj0gdzsgaSAtPSB3KQorCQlwcmludGYoIiVzIiwgYmFyc1t3XSk7CiAJaWYgKGkpCiAJCXByaW50 ZigiJXMiLCBiYXJzW2ldKTsKIAotCWZvciAoaSA9IDA7IGkgPCAobWF4X2xlbiAtIDIgLSAoYmFy X2xlbiArIDcpIC8gOCk7IGkrKykKLQkJcHV0Y2hhcignICcpOworCWxlbiAtPSAoYmFyX2xlbiAr ICh3IC0gMSkpIC8gdzsKKwluX3NwYWNlcyhsZW4pOwogCiAJcHV0Y2hhcignfCcpOwogfQpAQCAt Nzc1LDYgKzEwOTksMTggQEAganNvbl9jbG9zZV9zdHJ1Y3Qodm9pZCkKIAkJZmZsdXNoKHN0ZG91 dCk7CiB9CiAKK3N0YXRpYyB2b2lkCitfX2pzb25fYWRkX21lbWJlcihjb25zdCBjaGFyICprZXks IGNvbnN0IGNoYXIgKnZhbCkKK3sKKwlhc3NlcnQoanNvbl9pbmRlbnRfbGV2ZWwgPCBBUlJBWV9T SVpFKGpzb25faW5kZW50KSk7CisKKwlmcHJpbnRmKG91dCwgIiVzJXNcIiVzXCI6IFwiJXNcIiIs CisJCWpzb25fc3RydWN0X21lbWJlcnMgPyAiLFxuIiA6ICIiLAorCQlqc29uX2luZGVudFtqc29u X2luZGVudF9sZXZlbF0sIGtleSwgdmFsKTsKKworCWpzb25fc3RydWN0X21lbWJlcnMrKzsKK30K Kwogc3RhdGljIHVuc2lnbmVkIGludAoganNvbl9hZGRfbWVtYmVyKGNvbnN0IHN0cnVjdCBjbnRf Z3JvdXAgKnBhcmVudCwgc3RydWN0IGNudF9pdGVtICppdGVtLAogCQl1bnNpZ25lZCBpbnQgaGVh ZGVycykKQEAgLTEwNzUsOCArMTQxMSw2IEBAIHByaW50X2hlYWRlcihzdHJ1Y3QgZW5naW5lcyAq ZW5naW5lcywgZG91YmxlIHQsCiAJCW1lbW1vdmUoJmdyb3Vwc1swXSwgJmdyb3Vwc1sxXSwKIAkJ CXNpemVvZihncm91cHMpIC0gc2l6ZW9mKGdyb3Vwc1swXSkpOwogCi0JcG9wcy0+b3Blbl9zdHJ1 Y3QoTlVMTCk7Ci0KIAkqY29uc3VtZWQgPSBwcmludF9ncm91cHMoZ3JvdXBzKTsKIAogCWlmIChv dXRwdXRfbW9kZSA9PSBJTlRFUkFDVElWRSkgewpAQCAtMTIxNyw3ICsxNTUxLDcgQEAgcHJpbnRf ZW5naW5lKHN0cnVjdCBlbmdpbmVzICplbmdpbmVzLCB1bnNpZ25lZCBpbnQgaSwgZG91YmxlIHQs CiAJCQkgICAgICBlbmdpbmUtPmRpc3BsYXlfbmFtZSwgZW5naW5lX2l0ZW1zWzBdLmJ1Zik7CiAK IAkJdmFsID0gcG11X2NhbGMoJmVuZ2luZS0+YnVzeS52YWwsIDFlOSwgdCwgMTAwKTsKLQkJcHJp bnRfcGVyY2VudGFnZV9iYXIodmFsLCBtYXhfdyAtIGxlbik7CisJCXByaW50X3BlcmNlbnRhZ2Vf YmFyKHZhbCwgbWF4X3cgPiBsZW4gPyBtYXhfdyAtIGxlbiA6IDApOwogCiAJCXByaW50ZigiJXNc biIsIGJ1Zik7CiAKQEAgLTEyMzIsNyArMTU2Niw2IEBAIHByaW50X2VuZ2luZXNfZm9vdGVyKHN0 cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwKIAkJICAgICBpbnQgbGluZXMsIGludCBj b25fdywgaW50IGNvbl9oKQogewogCXBvcHMtPmNsb3NlX3N0cnVjdCgpOwotCXBvcHMtPmNsb3Nl X3N0cnVjdCgpOwogCiAJaWYgKG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CiAJCWlmIChs aW5lcysrIDwgY29uX2gpCkBAIC0xMjQyLDYgKzE1NzUsMTQ3IEBAIHByaW50X2VuZ2luZXNfZm9v dGVyKHN0cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwKIAlyZXR1cm4gbGluZXM7CiB9 CiAKK3N0YXRpYyBpbnQKK3ByaW50X2NsaWVudHNfaGVhZGVyKHN0cnVjdCBjbGllbnRzICpjbGll bnRzLCBpbnQgbGluZXMsCisJCSAgICAgaW50IGNvbl93LCBpbnQgY29uX2gsIGludCAqY2xhc3Nf dykKK3sKKwlpbnQgbGVuOworCisJaWYgKG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CisJ CWlmIChsaW5lcysrID49IGNvbl9oKQorCQkJcmV0dXJuIGxpbmVzOworCisJCXByaW50ZigiXDAz M1s3bSIpOworCQlsZW4gPSBwcmludGYoIiU1cyUxNnMiLCAiUElEIiwgIk5BTUUiKTsKKworCQlp ZiAobGluZXMrKyA+PSBjb25faCB8fCBsZW4gPj0gY29uX3cpCisJCQlyZXR1cm4gbGluZXM7CisK KwkJaWYgKGNsaWVudHMtPm51bV9jbGFzc2VzKSB7CisJCQl1bnNpZ25lZCBpbnQgaTsKKwkJCWlu dCB3aWR0aDsKKworCQkJKmNsYXNzX3cgPSB3aWR0aCA9IChjb25fdyAtIGxlbikgLyBjbGllbnRz LT5udW1fY2xhc3NlczsKKworCQkJZm9yIChpID0gMDsgaSA8IGNsaWVudHMtPm51bV9jbGFzc2Vz OyBpKyspIHsKKwkJCQljb25zdCBjaGFyICpuYW1lID0gY2xpZW50cy0+Y2xhc3NbaV0ubmFtZTsK KwkJCQlpbnQgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJCQkJaW50IHBhZCA9ICh3aWR0aCAt IG5hbWVfbGVuKSAvIDI7CisJCQkJaW50IHNwYWNlcyA9IHdpZHRoIC0gcGFkIC0gbmFtZV9sZW47 CisKKwkJCQlpZiAocGFkIDwgMCB8fCBzcGFjZXMgPCAwKQorCQkJCQljb250aW51ZTsKKworCQkJ CW5fc3BhY2VzKHBhZCk7CisJCQkJcHJpbnRmKCIlcyIsIG5hbWUpOworCQkJCW5fc3BhY2VzKHNw YWNlcyk7CisJCQkJbGVuICs9IHBhZCArIG5hbWVfbGVuICsgc3BhY2VzOworCQkJfQorCQl9CisK KwkJbl9zcGFjZXMoY29uX3cgLSBsZW4pOworCQlwcmludGYoIlwwMzNbMG1cbiIpOworCX0gZWxz ZSB7CisJCWlmIChjbGllbnRzLT5udW1fY2xhc3NlcykKKwkJCXBvcHMtPm9wZW5fc3RydWN0KCJj bGllbnRzIik7CisJfQorCisJcmV0dXJuIGxpbmVzOworfQorCitzdGF0aWMgdm9pZCBjb3VudF9l bmdpbmVzKHN0cnVjdCBjbGllbnRzICpjbGllbnRzLCBzdHJ1Y3QgZW5naW5lcyAqZW5naW5lcykK K3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBlbmdpbmVzLT5udW1fZW5n aW5lczsgaSsrKSB7CisJCXN0cnVjdCBlbmdpbmUgKmVuZ2luZSA9IGVuZ2luZV9wdHIoZW5naW5l cywgaSk7CisKKwkJY2xpZW50cy0+Y2xhc3NbZW5naW5lLT5jbGFzc10ubnVtX2VuZ2luZXMrKzsK Kwl9Cit9CisKK3N0YXRpYyBpbnQKK3ByaW50X2NsaWVudChzdHJ1Y3QgY2xpZW50ICpjLCBzdHJ1 Y3QgZW5naW5lcyAqZW5naW5lcywgZG91YmxlIHQsIGludCBsaW5lcywKKwkgICAgIGludCBjb25f dywgaW50IGNvbl9oLCB1bnNpZ25lZCBpbnQgcGVyaW9kX3VzLCBpbnQgKmNsYXNzX3cpCit7CisJ c3RydWN0IGNsaWVudHMgKmNsaWVudHMgPSBjLT5jbGllbnRzOworCXVuc2lnbmVkIGludCBpOwor CisJaWYgKG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CisJCXByaW50ZigiJTV1JTE2cyAi LCBjLT5waWQsIGMtPm5hbWUpOworCisJCWZvciAoaSA9IDA7IGkgPCBjbGllbnRzLT5udW1fY2xh c3NlczsgaSsrKSB7CisJCQlkb3VibGUgcGN0OworCisJCQlpZiAoIWNsaWVudHMtPmNsYXNzW2ld Lm51bV9lbmdpbmVzKQorCQkJCWNvdW50X2VuZ2luZXMoY2xpZW50cywgZW5naW5lcyk7CisKKwkJ CXBjdCA9IChkb3VibGUpYy0+dmFsW2ldIC8gcGVyaW9kX3VzIC8gMWUzICogMTAwIC8KKwkJCSAg ICAgIGNsaWVudHMtPmNsYXNzW2ldLm51bV9lbmdpbmVzOworCisJCQkvKgorCQkJICogR3VhcmQg YWdhaW5zdCBwb3NzaWJsZSB0aW1lLWRyaWZ0IGJldHdlZW4gc2FtcGxpbmcKKwkJCSAqIGNsaWVu dCBkYXRhIGFuZCB0aW1lIHdlIG9idGFpbmVkIG91ciB0aW1lLWRlbHRhIGZyb20KKwkJCSAqIFBN VS4KKwkJCSAqLworCQkJaWYgKHBjdCA+IDEwMC4wKQorCQkJCXBjdCA9IDEwMC4wOworCisJCQlw cmludF9wZXJjZW50YWdlX2JhcihwY3QsICpjbGFzc193KTsKKwkJfQorCisJCXB1dGNoYXIoJ1xu Jyk7CisJfSBlbHNlIGlmIChvdXRwdXRfbW9kZSA9PSBKU09OKSB7CisJCWNoYXIgYnVmWzY0XTsK KworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUiLCBjLT5pZCk7CisJCXBvcHMtPm9w ZW5fc3RydWN0KGJ1Zik7CisKKwkJX19qc29uX2FkZF9tZW1iZXIoIm5hbWUiLCBjLT5uYW1lKTsK KworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUiLCBjLT5waWQpOworCQlfX2pzb25f YWRkX21lbWJlcigicGlkIiwgYnVmKTsKKworCQlwb3BzLT5vcGVuX3N0cnVjdCgiZW5naW5lLWNs YXNzZXMiKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY2xpZW50cy0+bnVtX2NsYXNzZXM7IGkrKykg eworCQkJZG91YmxlIHBjdDsKKworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwK KwkJCQkgY2xpZW50cy0+Y2xhc3NbaV0ubmFtZSk7CisJCQlwb3BzLT5vcGVuX3N0cnVjdChidWYp OworCisJCQlwY3QgPSAoZG91YmxlKWMtPnZhbFtpXSAvIHBlcmlvZF91cyAvIDFlMyAqIDEwMDsK KwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZiIsIHBjdCk7CisJCQlfX2pzb25fYWRk X21lbWJlcigiYnVzeSIsIGJ1Zik7CisKKwkJCV9fanNvbl9hZGRfbWVtYmVyKCJ1bml0IiwgIiUi KTsKKworCQkJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CisJCX0KKworCQlwb3BzLT5jbG9zZV9zdHJ1 Y3QoKTsKKwkJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CisJfQorCisJcmV0dXJuIGxpbmVzOworfQor CitzdGF0aWMgaW50CitwcmludF9jbGllbnRzX2Zvb3RlcihzdHJ1Y3QgY2xpZW50cyAqY2xpZW50 cywgZG91YmxlIHQsCisJCSAgICAgaW50IGxpbmVzLCBpbnQgY29uX3csIGludCBjb25faCkKK3sK KwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKKwkJaWYgKGxpbmVzKysgPCBjb25f aCkKKwkJCXByaW50ZigiXG4iKTsKKwl9IGVsc2UgeworCQlpZiAoY2xpZW50cy0+bnVtX2NsYXNz ZXMpCisJCQlwb3BzLT5jbG9zZV9zdHJ1Y3QoKTsKKwl9CisKKwlyZXR1cm4gbGluZXM7Cit9CisK IHN0YXRpYyBib29sIHN0b3BfdG9wOwogCiBzdGF0aWMgdm9pZCBzaWdpbnRfaGFuZGxlcihpbnQg IHNpZykKQEAgLTEyNTIsNiArMTcyNiw3IEBAIHN0YXRpYyB2b2lkIHNpZ2ludF9oYW5kbGVyKGlu dCAgc2lnKQogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXVuc2lnbmVkIGlu dCBwZXJpb2RfdXMgPSBERUZBVUxUX1BFUklPRF9NUyAqIDEwMDA7CisJc3RydWN0IGNsaWVudHMg KmNsaWVudHMgPSBOVUxMOwogCWludCBjb25fdyA9IC0xLCBjb25faCA9IC0xOwogCWNoYXIgKm91 dHB1dF9wYXRoID0gTlVMTDsKIAlzdHJ1Y3QgZW5naW5lcyAqZW5naW5lczsKQEAgLTEzMzUsMTIg KzE4MTAsMTYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlyZXR1cm4gMTsK IAl9CiAKKwljbGllbnRzID0gaW5pdF9jbGllbnRzKCk7CisKIAlwbXVfc2FtcGxlKGVuZ2luZXMp OworCXNjYW5fY2xpZW50cyhjbGllbnRzKTsKIAogCXdoaWxlICghc3RvcF90b3ApIHsKIAkJYm9v bCBjb25zdW1lZCA9IGZhbHNlOwotCQlpbnQgbGluZXMgPSAwOworCQlpbnQgaiwgbGluZXMgPSAw OwogCQlzdHJ1Y3Qgd2luc2l6ZSB3czsKKwkJc3RydWN0IGNsaWVudCAqYzsKIAkJZG91YmxlIHQ7 CiAKIAkJLyogVXBkYXRlIHRlcm1pbmFsIHNpemUuICovCkBAIC0xMzU0LDEwICsxODMzLDE4IEBA IGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcG11X3NhbXBsZShlbmdpbmVzKTsK IAkJdCA9IChkb3VibGUpKGVuZ2luZXMtPnRzLmN1ciAtIGVuZ2luZXMtPnRzLnByZXYpIC8gMWU5 OwogCisJCXNjYW5fY2xpZW50cyhjbGllbnRzKTsKKwkJaWYgKGNsaWVudHMpIHsKKwkJCXFzb3J0 KGNsaWVudHMtPmNsaWVudCwgY2xpZW50cy0+bnVtX2NsaWVudHMsCisJCQkgICAgICBzaXplb2Yo KmNsaWVudHMtPmNsaWVudCksIGNtcCk7CisJCX0KKwogCQlpZiAoc3RvcF90b3ApCiAJCQlicmVh azsKIAogCQl3aGlsZSAoIWNvbnN1bWVkKSB7CisJCQlwb3BzLT5vcGVuX3N0cnVjdChOVUxMKTsK KwogCQkJbGluZXMgPSBwcmludF9oZWFkZXIoZW5naW5lcywgdCwgbGluZXMsIGNvbl93LCBjb25f aCwKIAkJCQkJICAgICAmY29uc3VtZWQpOwogCkBAIC0xMzc2LDYgKzE4NjMsMzYgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJCQlsaW5lcyA9IHByaW50X2VuZ2luZXNfZm9v dGVyKGVuZ2luZXMsIHQsIGxpbmVzLCBjb25fdywKIAkJCQkJCSAgICAgY29uX2gpOworCisJCQlp ZiAoY2xpZW50cykgeworCQkJCWludCBjbGFzc193OworCisJCQkJbGluZXMgPSBwcmludF9jbGll bnRzX2hlYWRlcihjbGllbnRzLCBsaW5lcywKKwkJCQkJCQkgICAgIGNvbl93LCBjb25faCwKKwkJ CQkJCQkgICAgICZjbGFzc193KTsKKworCQkJCWZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBjLCBq KSB7CisJCQkJCWlmIChsaW5lcysrID4gY29uX2gpCisJCQkJCQlicmVhazsKKworCQkJCQlhc3Nl cnQoYy0+c3RhdHVzICE9IFBST0JFKTsKKwkJCQkJaWYgKGMtPnN0YXR1cyAhPSBBTElWRSkKKwkJ CQkJCWJyZWFrOworCisJCQkJCWlmIChjLT5zYW1wbGVzIDwgMikKKwkJCQkJCWNvbnRpbnVlOwor CisJCQkJCWxpbmVzID0gcHJpbnRfY2xpZW50KGMsIGVuZ2luZXMsIHQsCisJCQkJCQkJICAgICBs aW5lcywgY29uX3csCisJCQkJCQkJICAgICBjb25faCwgcGVyaW9kX3VzLAorCQkJCQkJCSAgICAg JmNsYXNzX3cpOworCQkJCX0KKworCQkJCWxpbmVzID0gcHJpbnRfY2xpZW50c19mb290ZXIoY2xp ZW50cywgdCwgbGluZXMsCisJCQkJCQkJICAgICBjb25fdywgY29uX2gpOworCQkJfQorCisJCQlw b3BzLT5jbG9zZV9zdHJ1Y3QoKTsKIAkJfQogCiAJCWlmIChzdG9wX3RvcCkKLS0gCjIuMjAuMQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBt YWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==