From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Tvrtko Ursulin Date: Fri, 4 Sep 2020 14:06:07 +0100 Message-Id: <20200904130607.133724-2-tvrtko.ursulin@linux.intel.com> In-Reply-To: <20200904130607.133724-1-tvrtko.ursulin@linux.intel.com> References: <20200904130607.133724-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH 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 Z3B1X3RvcC5jCmluZGV4IGNhZTAxYzI1YjkyMC4uOWVhYzU2OWU3NWRlIDEwMDY0NAotLS0gYS90 b29scy9pbnRlbF9ncHVfdG9wLmMKKysrIGIvdG9vbHMvaW50ZWxfZ3B1X3RvcC5jCkBAIC02Nzks MjMgKzY3OSwzNDcgQEAgc3RhdGljIHZvaWQgcG11X3NhbXBsZShzdHJ1Y3QgZW5naW5lcyAqZW5n 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 Nzk4LDYgKzExMjIsMTggQEAganNvbl9jbG9zZV9zdHJ1Y3Qodm9pZCkKIAkJZmZsdXNoKHN0ZG91 dCk7CiB9CiAKK3N0YXRpYyB2b2lkCitfX2pzb25fYWRkX21lbWJlcihjb25zdCBjaGFyICprZXks IGNvbnN0IGNoYXIgKnZhbCkKK3sKKwlhc3NlcnQoanNvbl9pbmRlbnRfbGV2ZWwgPCBBUlJBWV9T SVpFKGpzb25faW5kZW50KSk7CisKKwlmcHJpbnRmKG91dCwgIiVzJXNcIiVzXCI6IFwiJXNcIiIs CisJCWpzb25fc3RydWN0X21lbWJlcnMgPyAiLFxuIiA6ICIiLAorCQlqc29uX2luZGVudFtqc29u X2luZGVudF9sZXZlbF0sIGtleSwgdmFsKTsKKworCWpzb25fc3RydWN0X21lbWJlcnMrKzsKK30K Kwogc3RhdGljIHVuc2lnbmVkIGludAoganNvbl9hZGRfbWVtYmVyKGNvbnN0IHN0cnVjdCBjbnRf Z3JvdXAgKnBhcmVudCwgc3RydWN0IGNudF9pdGVtICppdGVtLAogCQl1bnNpZ25lZCBpbnQgaGVh ZGVycykKQEAgLTEwOTgsOCArMTQzNCw2IEBAIHByaW50X2hlYWRlcihzdHJ1Y3QgZW5naW5lcyAq ZW5naW5lcywgZG91YmxlIHQsCiAJCW1lbW1vdmUoJmdyb3Vwc1swXSwgJmdyb3Vwc1sxXSwKIAkJ CXNpemVvZihncm91cHMpIC0gc2l6ZW9mKGdyb3Vwc1swXSkpOwogCi0JcG9wcy0+b3Blbl9zdHJ1 Y3QoTlVMTCk7Ci0KIAkqY29uc3VtZWQgPSBwcmludF9ncm91cHMoZ3JvdXBzKTsKIAogCWlmIChv dXRwdXRfbW9kZSA9PSBJTlRFUkFDVElWRSkgewpAQCAtMTI0NSw3ICsxNTc5LDcgQEAgcHJpbnRf ZW5naW5lKHN0cnVjdCBlbmdpbmVzICplbmdpbmVzLCB1bnNpZ25lZCBpbnQgaSwgZG91YmxlIHQs CiAJCQkgICAgICBlbmdpbmUtPmRpc3BsYXlfbmFtZSwgZW5naW5lX2l0ZW1zWzBdLmJ1Zik7CiAK IAkJdmFsID0gcG11X2NhbGMoJmVuZ2luZS0+YnVzeS52YWwsIDFlOSwgdCwgMTAwKTsKLQkJcHJp bnRfcGVyY2VudGFnZV9iYXIodmFsLCBtYXhfdyAtIGxlbik7CisJCXByaW50X3BlcmNlbnRhZ2Vf YmFyKHZhbCwgbWF4X3cgPiBsZW4gPyBtYXhfdyAtIGxlbiA6IDApOwogCiAJCXByaW50ZigiJXNc biIsIGJ1Zik7CiAKQEAgLTEyNjAsNyArMTU5NCw2IEBAIHByaW50X2VuZ2luZXNfZm9vdGVyKHN0 cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwKIAkJICAgICBpbnQgbGluZXMsIGludCBj b25fdywgaW50IGNvbl9oKQogewogCXBvcHMtPmNsb3NlX3N0cnVjdCgpOwotCXBvcHMtPmNsb3Nl X3N0cnVjdCgpOwogCiAJaWYgKG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CiAJCWlmIChs aW5lcysrIDwgY29uX2gpCkBAIC0xMjcwLDYgKzE2MDMsMTQ3IEBAIHByaW50X2VuZ2luZXNfZm9v 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 IHNpZykKQEAgLTEzMDcsNiArMTc4MSw3IEBAIHN0YXRpYyBjaGFyICp0cl9wbXVfbmFtZShzdHJ1 Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogewogCXVuc2lnbmVkIGludCBwZXJpb2RfdXMgPSBERUZBVUxUX1BFUklPRF9NUyAqIDEwMDA7 CisJc3RydWN0IGNsaWVudHMgKmNsaWVudHMgPSBOVUxMOwogCWludCBjb25fdyA9IC0xLCBjb25f aCA9IC0xOwogCWNoYXIgKm91dHB1dF9wYXRoID0gTlVMTDsKIAlzdHJ1Y3QgZW5naW5lcyAqZW5n aW5lczsKQEAgLTE0MjksMTIgKzE5MDQsMTYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCiAJcmV0ID0gRVhJVF9TVUNDRVNTOwogCisJY2xpZW50cyA9IGluaXRfY2xpZW50cygp OworCiAJcG11X3NhbXBsZShlbmdpbmVzKTsKKwlzY2FuX2NsaWVudHMoY2xpZW50cyk7CiAKIAl3 aGlsZSAoIXN0b3BfdG9wKSB7CiAJCWJvb2wgY29uc3VtZWQgPSBmYWxzZTsKLQkJaW50IGxpbmVz ID0gMDsKKwkJaW50IGosIGxpbmVzID0gMDsKIAkJc3RydWN0IHdpbnNpemUgd3M7CisJCXN0cnVj dCBjbGllbnQgKmM7CiAJCWRvdWJsZSB0OwogCiAJCS8qIFVwZGF0ZSB0ZXJtaW5hbCBzaXplLiAq LwpAQCAtMTQ0OCwxMCArMTkyNywxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCXBtdV9zYW1wbGUoZW5naW5lcyk7CiAJCXQgPSAoZG91YmxlKShlbmdpbmVzLT50cy5jdXIg LSBlbmdpbmVzLT50cy5wcmV2KSAvIDFlOTsKIAorCQlzY2FuX2NsaWVudHMoY2xpZW50cyk7CisJ CWlmIChjbGllbnRzKSB7CisJCQlxc29ydChjbGllbnRzLT5jbGllbnQsIGNsaWVudHMtPm51bV9j bGllbnRzLAorCQkJICAgICAgc2l6ZW9mKCpjbGllbnRzLT5jbGllbnQpLCBjbXApOworCQl9CisK IAkJaWYgKHN0b3BfdG9wKQogCQkJYnJlYWs7CiAKIAkJd2hpbGUgKCFjb25zdW1lZCkgeworCQkJ cG9wcy0+b3Blbl9zdHJ1Y3QoTlVMTCk7CisKIAkJCWxpbmVzID0gcHJpbnRfaGVhZGVyKGVuZ2lu ZXMsIHQsIGxpbmVzLCBjb25fdywgY29uX2gsCiAJCQkJCSAgICAgJmNvbnN1bWVkKTsKIApAQCAt MTQ3MCw2ICsxOTU3LDM2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQkJ bGluZXMgPSBwcmludF9lbmdpbmVzX2Zvb3RlcihlbmdpbmVzLCB0LCBsaW5lcywgY29uX3csCiAJ CQkJCQkgICAgIGNvbl9oKTsKKworCQkJaWYgKGNsaWVudHMpIHsKKwkJCQlpbnQgY2xhc3NfdzsK KworCQkJCWxpbmVzID0gcHJpbnRfY2xpZW50c19oZWFkZXIoY2xpZW50cywgbGluZXMsCisJCQkJ CQkJICAgICBjb25fdywgY29uX2gsCisJCQkJCQkJICAgICAmY2xhc3Nfdyk7CisKKwkJCQlmb3Jf ZWFjaF9jbGllbnQoY2xpZW50cywgYywgaikgeworCQkJCQlpZiAobGluZXMrKyA+IGNvbl9oKQor CQkJCQkJYnJlYWs7CisKKwkJCQkJYXNzZXJ0KGMtPnN0YXR1cyAhPSBQUk9CRSk7CisJCQkJCWlm IChjLT5zdGF0dXMgIT0gQUxJVkUpCisJCQkJCQlicmVhazsKKworCQkJCQlpZiAoYy0+c2FtcGxl cyA8IDIpCisJCQkJCQljb250aW51ZTsKKworCQkJCQlsaW5lcyA9IHByaW50X2NsaWVudChjLCBl bmdpbmVzLCB0LAorCQkJCQkJCSAgICAgbGluZXMsIGNvbl93LAorCQkJCQkJCSAgICAgY29uX2gs IHBlcmlvZF91cywKKwkJCQkJCQkgICAgICZjbGFzc193KTsKKwkJCQl9CisKKwkJCQlsaW5lcyA9 IHByaW50X2NsaWVudHNfZm9vdGVyKGNsaWVudHMsIHQsIGxpbmVzLAorCQkJCQkJCSAgICAgY29u X3csIGNvbl9oKTsKKwkJCX0KKworCQkJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CiAJCX0KIAogCQlp ZiAoc3RvcF90b3ApCi0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aWd0LWRldgo=