From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8B2BF6E4E3 for ; Mon, 16 Dec 2019 12:09:28 +0000 (UTC) From: Tvrtko Ursulin Date: Mon, 16 Dec 2019 12:09:23 +0000 Message-Id: <20191216120923.2376-2-tvrtko.ursulin@linux.intel.com> In-Reply-To: <20191216120923.2376-1-tvrtko.ursulin@linux.intel.com> References: <20191216120923.2376-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: Brian Welty , 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 YW5kIHBlciBlbmdpbmUgY2xhc3MuCgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZy dGtvLnVyc3VsaW5AaW50ZWwuY29tPgotLS0KIHRvb2xzL2ludGVsX2dwdV90b3AuYyB8IDU5MCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2Vk LCA1ODQgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90b29scy9p bnRlbF9ncHVfdG9wLmMgYi90b29scy9pbnRlbF9ncHVfdG9wLmMKaW5kZXggY2M4ZGI3YzUzOWVk Li5hMTI1Mjk2YjNjZWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ludGVsX2dwdV90b3AuYworKysgYi90 b29scy9pbnRlbF9ncHVfdG9wLmMKQEAgLTY1OSw4ICs2NTksNDAzIEBAIHN0YXRpYyB2b2lkIHBt dV9zYW1wbGUoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMpCiAJfQogfQogCitlbnVtIGNsaWVudF9z dGF0dXMgeworCUZSRUUgPSAwLCAvKiBtYnogKi8KKwlBTElWRSwKKwlQUk9CRQorfTsKKworc3Ry dWN0IGNsaWVudHM7CisKK3N0cnVjdCBjbGllbnQgeworCXN0cnVjdCBjbGllbnRzICpjbGllbnRz OworCisJZW51bSBjbGllbnRfc3RhdHVzIHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJdW5z aWduZWQgaW50IHBpZDsKKwljaGFyIG5hbWVbMTI4XTsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlczsK Kwl1bnNpZ25lZCBsb25nIHRvdGFsOworCXN0cnVjdCBlbmdpbmVzICplbmdpbmVzOworCXVuc2ln bmVkIGxvbmcgKnZhbDsKKwl1aW50NjRfdCAqbGFzdDsKK307CisKK3N0cnVjdCBlbmdpbmVfY2xh c3MgeworCXVuc2lnbmVkIGludCBjbGFzczsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVk IGludCBudW1fZW5naW5lczsKK307CisKK3N0cnVjdCBjbGllbnRzIHsKKwl1bnNpZ25lZCBpbnQg bnVtX2NsYXNzZXM7CisJc3RydWN0IGVuZ2luZV9jbGFzcyAqY2xhc3M7CisKKwl1bnNpZ25lZCBp bnQgbnVtX2NsaWVudHM7CisJc3RydWN0IGNsaWVudCAqY2xpZW50OworfTsKKworI2RlZmluZSBm b3JfZWFjaF9jbGllbnQoY2xpZW50cywgYywgdG1wKSBcCisJZm9yICgodG1wKSA9IChjbGllbnRz KS0+bnVtX2NsaWVudHMsIGMgPSAoY2xpZW50cyktPmNsaWVudDsgXAorCSAgICAgKHRtcCA+IDAp OyAodG1wKS0tLCAoYykrKykKKworI2RlZmluZSBTWVNGU19FTkFCTEUgIi9zeXMvY2xhc3MvZHJt L2NhcmQwL2NsaWVudHMvZW5hYmxlX3N0YXRzIgorCitib29sIF9fc3RhdHNfZW5hYmxlZDsKKwor c3RhdGljIGludCBfX3NldF9zdGF0cyhib29sIHZhbCkKK3sKKwlpbnQgZmQsIHJldDsKKworCWZk ID0gb3BlbihTWVNGU19FTkFCTEUsIE9fV1JPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4g LWVycm5vOworCisJcmV0ID0gd3JpdGUoZmQsIHZhbCA/ICIxIiA6ICIwIiwgMik7CisJaWYgKHJl dCA8IDApCisJCXJldHVybiAtZXJybm87CisJZWxzZSBpZiAocmV0IDwgMikKKwkJcmV0dXJuIDE7 CisKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19yZXN0b3Jl X3N0YXRzKHZvaWQpCit7CisJaW50IHJldDsKKworCWlmIChfX3N0YXRzX2VuYWJsZWQpCisJCXJl dHVybjsKKworCXJldCA9IF9fc2V0X3N0YXRzKGZhbHNlKTsKKwlpZiAocmV0KQorCQlmcHJpbnRm KHN0ZGVyciwgIkZhaWxlZCB0byBkaXNhYmxlIHBlci1jbGllbnQgc3RhdHMhICglZClcbiIsCisJ CQlyZXQpOworfQorCitzdGF0aWMgdm9pZCBfX3Jlc3RvcmVfc3RhdHNfc2lnbmFsKGludCBzaWcp Cit7CisJZXhpdCgwKTsKK30KKworc3RhdGljIGludCBlbmFibGVfc3RhdHModm9pZCkKK3sKKwlp bnQgZmQsIHJldDsKKworCWZkID0gb3BlbihTWVNGU19FTkFCTEUsIE9fUkRPTkxZKTsKKwlpZiAo ZmQgPCAwKQorCQlyZXR1cm4gLWVycm5vOworCisJY2xvc2UoZmQpOworCisJX19zdGF0c19lbmFi bGVkID0gZmlsZW5hbWVfdG9fdTY0KFNZU0ZTX0VOQUJMRSwgMTApOworCWlmIChfX3N0YXRzX2Vu YWJsZWQpCisJCXJldHVybiAwOworCisJcmV0ID0gX19zZXRfc3RhdHModHJ1ZSk7CisJaWYgKCFy ZXQpIHsKKwkJaWYgKGF0ZXhpdChfX3Jlc3RvcmVfc3RhdHMpKQorCQkJZnByaW50ZihzdGRlcnIs ICJGYWlsZWQgdG8gcmVnaXN0ZXIgZXhpdCBoYW5kbGVyISIpOworCisJCWlmIChzaWduYWwoU0lH SU5ULCBfX3Jlc3RvcmVfc3RhdHNfc2lnbmFsKSkKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVk IHRvIHJlZ2lzdGVyIHNpZ25hbCBoYW5kbGVyISIpOworCX0gZWxzZSB7CisJCWZwcmludGYoc3Rk ZXJyLCAiRmFpbGVkIHRvIGVuYWJsZSBwZXItY2xpZW50IHN0YXRzISAoJWQpXG4iLAorCQkJcmV0 KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGNsaWVudHMgKmluaXRf Y2xpZW50cyh2b2lkKQoreworCXN0cnVjdCBjbGllbnRzICpjbGllbnRzID0gbWFsbG9jKHNpemVv ZigqY2xpZW50cykpOworCisJaWYgKGVuYWJsZV9zdGF0cygpKSB7CisJCWZyZWUoY2xpZW50cyk7 CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBtZW1zZXQoY2xpZW50cywgMCwgc2l6ZW9m KCpjbGllbnRzKSk7Cit9CisKKyNkZWZpbmUgU1lTRlNfQ0xJRU5UUyAiL3N5cy9jbGFzcy9kcm0v Y2FyZDAvY2xpZW50cyIKKworc3RhdGljIHVpbnQ2NF90IHJlYWRfY2xpZW50X2J1c3kodW5zaWdu ZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgY2xhc3MpCit7CisJY2hhciBidWZbMjU2XTsKKwlzc2l6 ZV90IHJldDsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCSAgICAgICBT WVNGU19DTElFTlRTICIvJXUvYnVzeS8ldSIsCisJCSAgICAgICBpZCwgY2xhc3MpOworCWFzc2Vy dChyZXQgPiAwICYmIHJldCA8IHNpemVvZihidWYpKTsKKwlpZiAocmV0IDw9IDAgfHwgcmV0ID09 IHNpemVvZihidWYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBmaWxlbmFtZV90b191NjQoYnVm LCAxMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xpZW50ICoKK2ZpbmRfY2xpZW50KHN0cnVjdCBj bGllbnRzICpjbGllbnRzLCBlbnVtIGNsaWVudF9zdGF0dXMgc3RhdHVzLCB1bnNpZ25lZCBpbnQg aWQpCit7CisJc3RydWN0IGNsaWVudCAqYzsKKwlpbnQgdG1wOworCisJZm9yX2VhY2hfY2xpZW50 KGNsaWVudHMsIGMsIHRtcCkgeworCQlpZiAoKHN0YXR1cyA9PSBGUkVFICYmIGMtPnN0YXR1cyA9 PSBGUkVFKSB8fAorCQkgICAgKHN0YXR1cyA9PSBjLT5zdGF0dXMgJiYgYy0+aWQgPT0gaWQpKQor CQkJcmV0dXJuIGM7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0 ZV9jbGllbnQoc3RydWN0IGNsaWVudCAqYywgdW5zaWduZWQgaW50IHBpZCwgY2hhciAqbmFtZSkK K3sKKwl1aW50NjRfdCB2YWxbYy0+Y2xpZW50cy0+bnVtX2NsYXNzZXNdOworCXVuc2lnbmVkIGlu dCBpOworCisJaWYgKGMtPnBpZCAhPSBwaWQpCisJCWMtPnBpZCA9IHBpZDsKKworCWlmIChzdHJu Y21wKGMtPm5hbWUsIG5hbWUsIHNpemVvZihjLT5uYW1lKSkpCisJCXN0cm5jcHkoYy0+bmFtZSwg bmFtZSwgc2l6ZW9mKGMtPm5hbWUpKTsKKworCWZvciAoaSA9IDA7IGkgPCBjLT5jbGllbnRzLT5u dW1fY2xhc3NlczsgaSsrKQorCQl2YWxbaV0gPSByZWFkX2NsaWVudF9idXN5KGMtPmlkLCBjLT5j bGllbnRzLT5jbGFzc1tpXS5jbGFzcyk7CisKKwljLT50b3RhbCA9IDA7CisKKwlmb3IgKGkgPSAw OyBpIDwgYy0+Y2xpZW50cy0+bnVtX2NsYXNzZXM7IGkrKykgeworCQlhc3NlcnQodmFsW2ldID49 IGMtPmxhc3RbaV0pOworCQljLT52YWxbaV0gPSB2YWxbaV0gLSBjLT5sYXN0W2ldOworCQljLT50 b3RhbCArPSBjLT52YWxbaV07CisJCWMtPmxhc3RbaV0gPSB2YWxbaV07CisJfQorCisJYy0+c2Ft cGxlcysrOworCWMtPnN0YXR1cyA9IEFMSVZFOworfQorCitzdGF0aWMgaW50IGNsYXNzX2NtcChj b25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IGVuZ2luZV9j bGFzcyAqYSA9IF9hOworCWNvbnN0IHN0cnVjdCBlbmdpbmVfY2xhc3MgKmIgPSBfYjsKKworCXJl dHVybiBhLT5jbGFzcyAtIGItPmNsYXNzOworfQorCitzdGF0aWMgdm9pZCBzY2FuX2NsYXNzZXMo c3RydWN0IGNsaWVudHMgKmNsaWVudHMsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgZW5n aW5lX2NsYXNzICpjbGFzc2VzOworCXVuc2lnbmVkIGludCBudW0sIGk7CisJc3RydWN0IGRpcmVu dCAqZGVudDsKKwljaGFyIGJ1ZlsyNTZdOworCWludCByZXQ7CisJRElSICpkOworCisJcmV0ID0g c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgU1lTRlNfQ0xJRU5UUyAiLyV1L2J1c3kiLCBpZCk7 CisJYXNzZXJ0KHJldCA+IDAgJiYgcmV0IDwgc2l6ZW9mKGJ1ZikpOworCWlmIChyZXQgPD0gMCB8 fCByZXQgPT0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybjsKKworCWQgPSBvcGVuZGlyKGJ1Zik7CisJ aWYgKCFkKQorCQlyZXR1cm47CisKK3Jlc3RhcnQ6CisJcmV3aW5kZGlyKGQpOworCisJbnVtID0g MDsKKwl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisJCWlmIChkZW50LT5k X3R5cGUgIT0gRFRfUkVHKQorCQkJY29udGludWU7CisKKwkJbnVtKys7CisJfQorCisJcmV3aW5k ZGlyKGQpOworCisJY2xhc3NlcyA9IGNhbGxvYyhudW0sIHNpemVvZigqY2xhc3NlcykpOworCWFz c2VydChjbGFzc2VzKTsKKworCWkgPSAwOworCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZCkpICE9 IE5VTEwpIHsKKwkJaWYgKGkgPiBudW0pIHsKKwkJCS8vIEZJWE1FOiBmcmVlIGluZGl2aWR1YWwg bmFtZXMKKwkJCWZyZWUoY2xhc3Nlcyk7CisJCQlnb3RvIHJlc3RhcnQ7CisJCX0KKworCQlpZiAo ZGVudC0+ZF90eXBlICE9IERUX1JFRykKKwkJCWNvbnRpbnVlOworCisJCWNsYXNzZXNbaV0uY2xh c3MgPSBhdG9pKGRlbnQtPmRfbmFtZSk7CisJCWNsYXNzZXNbaV0ubmFtZSA9IGNsYXNzX2Rpc3Bs YXlfbmFtZShjbGFzc2VzW2ldLmNsYXNzKTsKKwkJaSsrOworCX0KKworCWNsb3NlZGlyKGQpOwor CisJcXNvcnQoY2xhc3NlcywgbnVtLCBzaXplb2YoKmNsYXNzZXMpLCBjbGFzc19jbXApOworCisJ Y2xpZW50cy0+bnVtX2NsYXNzZXMgPSBudW07CisJY2xpZW50cy0+Y2xhc3MgPSBjbGFzc2VzOwor fQorCitzdGF0aWMgdm9pZAorYWRkX2NsaWVudChzdHJ1Y3QgY2xpZW50cyAqY2xpZW50cywgdW5z aWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgcGlkLAorCSAgIGNoYXIgKm5hbWUpCit7CisJc3Ry dWN0IGNsaWVudCAqYzsKKworCWFzc2VydCghZmluZF9jbGllbnQoY2xpZW50cywgQUxJVkUsIGlk KSk7CisKKwljID0gZmluZF9jbGllbnQoY2xpZW50cywgRlJFRSwgMCk7CisJaWYgKCFjKSB7CisJ CXVuc2lnbmVkIGludCBpZHggPSBjbGllbnRzLT5udW1fY2xpZW50czsKKworCQljbGllbnRzLT5u dW1fY2xpZW50cyArPSAoY2xpZW50cy0+bnVtX2NsaWVudHMgKyAyKSAvIDI7CisJCWNsaWVudHMt PmNsaWVudCA9IHJlYWxsb2MoY2xpZW50cy0+Y2xpZW50LAorCQkJCQkgIGNsaWVudHMtPm51bV9j bGllbnRzICogc2l6ZW9mKCpjKSk7CisJCWFzc2VydChjbGllbnRzLT5jbGllbnQpOworCisJCWMg PSAmY2xpZW50cy0+Y2xpZW50W2lkeF07CisJCW1lbXNldChjLCAwLCAoY2xpZW50cy0+bnVtX2Ns aWVudHMgLSBpZHgpICogc2l6ZW9mKCpjKSk7CisJfQorCisJaWYgKCFjbGllbnRzLT5udW1fY2xh c3NlcykKKwkJc2Nhbl9jbGFzc2VzKGNsaWVudHMsIGlkKTsKKworCWMtPmlkID0gaWQ7CisJYy0+ Y2xpZW50cyA9IGNsaWVudHM7CisJYy0+dmFsID0gY2FsbG9jKGNsaWVudHMtPm51bV9jbGFzc2Vz LCBzaXplb2YoYy0+dmFsKSk7CisJYy0+bGFzdCA9IGNhbGxvYyhjbGllbnRzLT5udW1fY2xhc3Nl cywgc2l6ZW9mKGMtPmxhc3QpKTsKKwlhc3NlcnQoYy0+dmFsICYmIGMtPmxhc3QpOworCisJdXBk YXRlX2NsaWVudChjLCBwaWQsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2NsaWVudChz dHJ1Y3QgY2xpZW50ICpjKQoreworCWZyZWUoYy0+dmFsKTsKKwlmcmVlKGMtPmxhc3QpOworCW1l bXNldChjLCAwLCBzaXplb2YoKmMpKTsKK30KKworc3RhdGljIGNoYXIgKnJlYWRfY2xpZW50X3N5 c2ZzKHVuc2lnbmVkIGludCBpZCwgY29uc3QgY2hhciAqZmllbGQpCit7CisJY2hhciBidWZbMjU2 XTsKKwlzc2l6ZV90IHJldDsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFNZ U0ZTX0NMSUVOVFMgIi8ldS8lcyIsIGlkLCBmaWVsZCk7CisJYXNzZXJ0KHJldCA+IDAgJiYgcmV0 IDwgc2l6ZW9mKGJ1ZikpOworCWlmIChyZXQgPD0gMCB8fCByZXQgPT0gc2l6ZW9mKGJ1ZikpCisJ CXJldHVybiBOVUxMOworCisJcmV0ID0gZmlsZW5hbWVfdG9fYnVmKGJ1ZiwgYnVmLCBzaXplb2Yo YnVmKSk7CisJYXNzZXJ0KHJldCA9PSAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gTlVMTDsKKwor CXJldHVybiBzdHJkdXAoYnVmKTsKK30KKworc3RhdGljIHZvaWQgc2Nhbl9jbGllbnRzKHN0cnVj dCBjbGllbnRzICpjbGllbnRzKQoreworCXN0cnVjdCBkaXJlbnQgKmRlbnQ7CisJc3RydWN0IGNs aWVudCAqYzsKKwljaGFyICpwaWQsICpuYW1lOworCXVuc2lnbmVkIGludCBpZDsKKwlpbnQgdG1w OworCURJUiAqZDsKKworCWlmICghY2xpZW50cykKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfY2xp ZW50KGNsaWVudHMsIGMsIHRtcCkgeworCQlpZiAoYy0+c3RhdHVzID09IEFMSVZFKQorCQkJYy0+ c3RhdHVzID0gUFJPQkU7CisJfQorCisJZCA9IG9wZW5kaXIoU1lTRlNfQ0xJRU5UUyk7CisJaWYg KCFkKQorCQlyZXR1cm47CisKKwl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7 CisJCWlmIChkZW50LT5kX3R5cGUgIT0gRFRfRElSKQorCQkJY29udGludWU7CisJCWlmICghaXNk aWdpdChkZW50LT5kX25hbWVbMF0pKQorCQkJY29udGludWU7CisKKwkJaWQgPSBhdG9pKGRlbnQt PmRfbmFtZSk7CisKKwkJbmFtZSA9IHJlYWRfY2xpZW50X3N5c2ZzKGlkLCAibmFtZSIpOworCQlh c3NlcnQobmFtZSk7CisJCWlmICghbmFtZSkKKwkJCWNvbnRpbnVlOworCisJCXBpZCA9IHJlYWRf Y2xpZW50X3N5c2ZzKGlkLCAicGlkIik7CisJCWFzc2VydChwaWQpOworCQlpZiAoIXBpZCkgewor CQkJZnJlZShuYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYyA9IGZpbmRfY2xpZW50KGNs aWVudHMsIFBST0JFLCBpZCk7CisJCWlmIChjKSB7CisJCQl1cGRhdGVfY2xpZW50KGMsIGF0b2ko cGlkKSwgbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWFkZF9jbGllbnQoY2xpZW50cywg aWQsIGF0b2kocGlkKSwgbmFtZSk7CisKKwkJZnJlZShuYW1lKTsKKwkJZnJlZShwaWQpOworCX0K KworCWNsb3NlZGlyKGQpOworCisJZm9yX2VhY2hfY2xpZW50KGNsaWVudHMsIGMsIHRtcCkgewor CQlpZiAoYy0+c3RhdHVzID09IFBST0JFKQorCQkJZnJlZV9jbGllbnQoYyk7CisJfQorfQorCitz dGF0aWMgaW50IGNtcChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qg c3RydWN0IGNsaWVudCAqYSA9IF9hOworCWNvbnN0IHN0cnVjdCBjbGllbnQgKmIgPSBfYjsKKwls b25nIHRvdF9hID0gYS0+dG90YWw7CisJbG9uZyB0b3RfYiA9IGItPnRvdGFsOworCisJdG90X2Eg Kj0gYS0+c3RhdHVzID09IEFMSVZFICYmIGEtPnNhbXBsZXMgPiAxOworCXRvdF9iICo9IGItPnN0 YXR1cyA9PSBBTElWRSAmJiBiLT5zYW1wbGVzID4gMTsKKworCXRvdF9iIC09IHRvdF9hOworCisJ aWYgKCF0b3RfYikKKwkJcmV0dXJuIChpbnQpYi0+aWQgLSBhLT5pZDsKKworCXdoaWxlICh0b3Rf YiA+IElOVF9NQVggfHwgdG90X2IgPCBJTlRfTUlOKQorCQl0b3RfYiAvPSAyOworCisJcmV0dXJu IHRvdF9iOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqYmFyc1tdID0geyAiICIsICLilo8iLCAi 4paOIiwgIuKWjSIsICLilowiLCAi4paLIiwgIuKWiiIsICLilokiLCAi4paIIiB9OwogCitzdGF0 aWMgdm9pZCBuX3NwYWNlcyhjb25zdCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQg aTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXB1dGNoYXIoJyAnKTsKK30KKwogc3Rh dGljIHZvaWQKIHByaW50X3BlcmNlbnRhZ2VfYmFyKGRvdWJsZSBwZXJjZW50LCBpbnQgbWF4X2xl bikKIHsKQEAgLTY3NCw4ICsxMDY5LDEwIEBAIHByaW50X3BlcmNlbnRhZ2VfYmFyKGRvdWJsZSBw ZXJjZW50LCBpbnQgbWF4X2xlbikKIAlpZiAoaSkKIAkJcHJpbnRmKCIlcyIsIGJhcnNbaV0pOwog Ci0JZm9yIChpID0gMDsgaSA8IChtYXhfbGVuIC0gMiAtIChiYXJfbGVuICsgNykgLyA4KTsgaSsr KQotCQlwdXRjaGFyKCcgJyk7CisJYmFyX2xlbiA9IG1heF9sZW4gLSAyIC0gKGJhcl9sZW4gKyA3 KSAvIDg7CisJaWYgKGJhcl9sZW4gPiBtYXhfbGVuKQorCQliYXJfbGVuID0gbWF4X2xlbjsKKwlu X3NwYWNlcyhiYXJfbGVuKTsKIAogCXB1dGNoYXIoJ3wnKTsKIH0KQEAgLTc3NSw2ICsxMTcyLDE4 IEBAIGpzb25fY2xvc2Vfc3RydWN0KHZvaWQpCiAJCWZmbHVzaChzdGRvdXQpOwogfQogCitzdGF0 aWMgdm9pZAorX19qc29uX2FkZF9tZW1iZXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2 YWwpCit7CisJYXNzZXJ0KGpzb25faW5kZW50X2xldmVsIDwgQVJSQVlfU0laRShqc29uX2luZGVu dCkpOworCisJZnByaW50ZihvdXQsICIlcyVzXCIlc1wiOiBcIiVzXCIiLAorCQlqc29uX3N0cnVj dF9tZW1iZXJzID8gIixcbiIgOiAiIiwKKwkJanNvbl9pbmRlbnRbanNvbl9pbmRlbnRfbGV2ZWxd LCBrZXksIHZhbCk7CisKKwlqc29uX3N0cnVjdF9tZW1iZXJzKys7Cit9CisKIHN0YXRpYyB1bnNp Z25lZCBpbnQKIGpzb25fYWRkX21lbWJlcihjb25zdCBzdHJ1Y3QgY250X2dyb3VwICpwYXJlbnQs IHN0cnVjdCBjbnRfaXRlbSAqaXRlbSwKIAkJdW5zaWduZWQgaW50IGhlYWRlcnMpCkBAIC0xMDc1 LDggKzE0ODQsNiBAQCBwcmludF9oZWFkZXIoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIGRvdWJs ZSB0LAogCQltZW1tb3ZlKCZncm91cHNbMF0sICZncm91cHNbMV0sCiAJCQlzaXplb2YoZ3JvdXBz KSAtIHNpemVvZihncm91cHNbMF0pKTsKIAotCXBvcHMtPm9wZW5fc3RydWN0KE5VTEwpOwotCiAJ KmNvbnN1bWVkID0gcHJpbnRfZ3JvdXBzKGdyb3Vwcyk7CiAKIAlpZiAob3V0cHV0X21vZGUgPT0g SU5URVJBQ1RJVkUpIHsKQEAgLTEyMzIsNyArMTYzOSw2IEBAIHByaW50X2VuZ2luZXNfZm9vdGVy KHN0cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwKIAkJICAgICBpbnQgbGluZXMsIGlu dCBjb25fdywgaW50IGNvbl9oKQogewogCXBvcHMtPmNsb3NlX3N0cnVjdCgpOwotCXBvcHMtPmNs b3NlX3N0cnVjdCgpOwogCiAJaWYgKG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CiAJCWlm IChsaW5lcysrIDwgY29uX2gpCkBAIC0xMjQyLDYgKzE2NDgsMTM2IEBAIHByaW50X2VuZ2luZXNf Zm9vdGVyKHN0cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwKIAlyZXR1cm4gbGluZXM7 CiB9CiAKK3N0YXRpYyBpbnQKK3ByaW50X2NsaWVudHNfaGVhZGVyKHN0cnVjdCBjbGllbnRzICpj bGllbnRzLCBpbnQgbGluZXMsCisJCSAgICAgaW50IGNvbl93LCBpbnQgY29uX2gsIHVuc2lnbmVk IGludCAqY2xhc3NfdykKK3sKKwlpbnQgbGVuOworCisJaWYgKG91dHB1dF9tb2RlID09IElOVEVS QUNUSVZFKSB7CisJCWlmIChsaW5lcysrID49IGNvbl9oKQorCQkJcmV0dXJuIGxpbmVzOworCisJ CXByaW50ZigiXDAzM1s3bSIpOworCQlsZW4gPSBwcmludGYoIiU1cyUxNnMiLCAiUElEIiwgIk5B TUUiKTsKKworCQlpZiAobGluZXMrKyA+PSBjb25faCkKKwkJCXJldHVybiBsaW5lczsKKworCQlp ZiAoY2xpZW50cy0+bnVtX2NsYXNzZXMpIHsKKwkJCXVuc2lnbmVkIGludCBpOworCisJCQkqY2xh c3NfdyA9IChjb25fdyAtIGxlbikgLyBjbGllbnRzLT5udW1fY2xhc3NlczsKKworCQkJZm9yIChp ID0gMDsgaSA8IGNsaWVudHMtPm51bV9jbGFzc2VzOyBpKyspIHsKKwkJCQljb25zdCBjaGFyICpu YW1lID0gY2xpZW50cy0+Y2xhc3NbaV0ubmFtZTsKKwkJCQl1bnNpZ25lZCBpbnQgbmFtZV9sZW4g PSBzdHJsZW4obmFtZSk7CisJCQkJdW5zaWduZWQgaW50IHBhZCA9ICgqY2xhc3NfdyAtIG5hbWVf bGVuKSAvIDI7CisJCQkJdW5zaWduZWQgaW50IHNwYWNlcyA9ICpjbGFzc193IC0gcGFkIC0gbmFt ZV9sZW47CisKKwkJCQluX3NwYWNlcyhwYWQpOworCQkJCXByaW50ZigiJXMiLCBuYW1lKTsKKwkJ CQluX3NwYWNlcyhzcGFjZXMpOworCQkJCWxlbiArPSBwYWQgKyBuYW1lX2xlbiArIHNwYWNlczsK KwkJCX0KKwkJfQorCisJCW5fc3BhY2VzKGNvbl93IC0gbGVuKTsKKwkJcHJpbnRmKCJcMDMzWzBt XG4iKTsKKwl9IGVsc2UgeworCQlpZiAoY2xpZW50cy0+bnVtX2NsYXNzZXMpCisJCQlwb3BzLT5v cGVuX3N0cnVjdCgiY2xpZW50cyIpOworCX0KKworCXJldHVybiBsaW5lczsKK30KKworc3RhdGlj IHZvaWQgY291bnRfZW5naW5lcyhzdHJ1Y3QgY2xpZW50cyAqY2xpZW50cywgc3RydWN0IGVuZ2lu ZXMgKmVuZ2luZXMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW5n aW5lcy0+bnVtX2VuZ2luZXM7IGkrKykgeworCQlzdHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdp bmVfcHRyKGVuZ2luZXMsIGkpOworCisJCWNsaWVudHMtPmNsYXNzW2VuZ2luZS0+Y2xhc3NdLm51 bV9lbmdpbmVzKys7CisJfQorfQorCitzdGF0aWMgaW50CitwcmludF9jbGllbnQoc3RydWN0IGNs aWVudCAqYywgc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIGRvdWJsZSB0LCBpbnQgbGluZXMsCisJ ICAgICBpbnQgY29uX3csIGludCBjb25faCwgdW5zaWduZWQgaW50IHBlcmlvZF91cywKKwkgICAg IHVuc2lnbmVkIGludCAqY2xhc3NfdykKK3sKKwlzdHJ1Y3QgY2xpZW50cyAqY2xpZW50cyA9IGMt PmNsaWVudHM7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJB Q1RJVkUpIHsKKwkJcHJpbnRmKCIlNXUlMTZzICIsIGMtPnBpZCwgYy0+bmFtZSk7CisKKwkJZm9y IChpID0gMDsgaSA8IGNsaWVudHMtPm51bV9jbGFzc2VzOyBpKyspIHsKKwkJCWRvdWJsZSBwY3Q7 CisKKwkJCWlmICghY2xpZW50cy0+Y2xhc3NbaV0ubnVtX2VuZ2luZXMpCisJCQkJY291bnRfZW5n aW5lcyhjbGllbnRzLCBlbmdpbmVzKTsKKworCQkJcGN0ID0gKGRvdWJsZSljLT52YWxbaV0gLyBw ZXJpb2RfdXMgLyAxZTMgKiAxMDAgLworCQkJICAgICAgY2xpZW50cy0+Y2xhc3NbaV0ubnVtX2Vu Z2luZXM7CisKKwkJCXByaW50X3BlcmNlbnRhZ2VfYmFyKHBjdCwgKmNsYXNzX3cpOworCQl9CisK KwkJcHV0Y2hhcignXG4nKTsKKwl9IGVsc2UgaWYgKG91dHB1dF9tb2RlID09IEpTT04pIHsKKwkJ Y2hhciBidWZbNjRdOworCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldSIsIGMtPmlk KTsKKwkJcG9wcy0+b3Blbl9zdHJ1Y3QoYnVmKTsKKworCQlfX2pzb25fYWRkX21lbWJlcigibmFt ZSIsIGMtPm5hbWUpOworCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldSIsIGMtPnBp ZCk7CisJCV9fanNvbl9hZGRfbWVtYmVyKCJwaWQiLCBidWYpOworCisJCXBvcHMtPm9wZW5fc3Ry dWN0KCJlbmdpbmUtY2xhc3NlcyIpOworCisJCWZvciAoaSA9IDA7IGkgPCBjbGllbnRzLT5udW1f Y2xhc3NlczsgaSsrKSB7CisJCQlkb3VibGUgcGN0OworCisJCQlzbnByaW50ZihidWYsIHNpemVv ZihidWYpLCAiJXMiLAorCQkJCSBjbGllbnRzLT5jbGFzc1tpXS5uYW1lKTsKKwkJCXBvcHMtPm9w ZW5fc3RydWN0KGJ1Zik7CisKKwkJCXBjdCA9IChkb3VibGUpYy0+dmFsW2ldIC8gcGVyaW9kX3Vz IC8gMWUzICogMTAwOworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVmIiwgcGN0KTsK KwkJCV9fanNvbl9hZGRfbWVtYmVyKCJidXN5IiwgYnVmKTsKKworCQkJX19qc29uX2FkZF9tZW1i ZXIoInVuaXQiLCAiJSIpOworCisJCQlwb3BzLT5jbG9zZV9zdHJ1Y3QoKTsKKwkJfQorCisJCXBv cHMtPmNsb3NlX3N0cnVjdCgpOworCQlwb3BzLT5jbG9zZV9zdHJ1Y3QoKTsKKwl9CisKKwlyZXR1 cm4gbGluZXM7Cit9CisKK3N0YXRpYyBpbnQKK3ByaW50X2NsaWVudHNfZm9vdGVyKHN0cnVjdCBj bGllbnRzICpjbGllbnRzLCBkb3VibGUgdCwKKwkJICAgICBpbnQgbGluZXMsIGludCBjb25fdywg aW50IGNvbl9oKQoreworCWlmIChvdXRwdXRfbW9kZSA9PSBJTlRFUkFDVElWRSkgeworCQlpZiAo bGluZXMrKyA8IGNvbl9oKQorCQkJcHJpbnRmKCJcbiIpOworCX0gZWxzZSB7CisJCWlmIChjbGll bnRzLT5udW1fY2xhc3NlcykKKwkJCXBvcHMtPmNsb3NlX3N0cnVjdCgpOworCX0KKworCXJldHVy biBsaW5lczsKK30KKwogc3RhdGljIGJvb2wgc3RvcF90b3A7CiAKIHN0YXRpYyB2b2lkIHNpZ2lu dF9oYW5kbGVyKGludCAgc2lnKQpAQCAtMTI1Miw2ICsxNzg4LDcgQEAgc3RhdGljIHZvaWQgc2ln aW50X2hhbmRsZXIoaW50ICBzaWcpCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7 CiAJdW5zaWduZWQgaW50IHBlcmlvZF91cyA9IERFRkFVTFRfUEVSSU9EX01TICogMTAwMDsKKwlz dHJ1Y3QgY2xpZW50cyAqY2xpZW50cyA9IE5VTEw7CiAJaW50IGNvbl93ID0gLTEsIGNvbl9oID0g LTE7CiAJY2hhciAqb3V0cHV0X3BhdGggPSBOVUxMOwogCXN0cnVjdCBlbmdpbmVzICplbmdpbmVz OwpAQCAtMTMzNSwxMiArMTg3MiwxNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCXJldHVybiAxOwogCX0KIAorCWNsaWVudHMgPSBpbml0X2NsaWVudHMoKTsKKwogCXBtdV9z YW1wbGUoZW5naW5lcyk7CisJc2Nhbl9jbGllbnRzKGNsaWVudHMpOwogCiAJd2hpbGUgKCFzdG9w X3RvcCkgewogCQlib29sIGNvbnN1bWVkID0gZmFsc2U7Ci0JCWludCBsaW5lcyA9IDA7CisJCWlu dCBqLCBsaW5lcyA9IDA7CisJCXVuc2lnbmVkIGludCBjbGFzc193OwogCQlzdHJ1Y3Qgd2luc2l6 ZSB3czsKKwkJc3RydWN0IGNsaWVudCAqYzsKIAkJZG91YmxlIHQ7CiAKIAkJLyogVXBkYXRlIHRl cm1pbmFsIHNpemUuICovCkBAIC0xMzU0LDEwICsxODk2LDE4IEBAIGludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAkJcG11X3NhbXBsZShlbmdpbmVzKTsKIAkJdCA9IChkb3VibGUpKGVu Z2luZXMtPnRzLmN1ciAtIGVuZ2luZXMtPnRzLnByZXYpIC8gMWU5OwogCisJCXNjYW5fY2xpZW50 cyhjbGllbnRzKTsKKwkJaWYgKGNsaWVudHMpIHsKKwkJCXFzb3J0KGNsaWVudHMtPmNsaWVudCwg Y2xpZW50cy0+bnVtX2NsaWVudHMsCisJCQkgICAgICBzaXplb2YoKmNsaWVudHMtPmNsaWVudCks IGNtcCk7CisJCX0KKwogCQlpZiAoc3RvcF90b3ApCiAJCQlicmVhazsKIAogCQl3aGlsZSAoIWNv bnN1bWVkKSB7CisJCQlwb3BzLT5vcGVuX3N0cnVjdChOVUxMKTsKKwogCQkJbGluZXMgPSBwcmlu dF9oZWFkZXIoZW5naW5lcywgdCwgbGluZXMsIGNvbl93LCBjb25faCwKIAkJCQkJICAgICAmY29u c3VtZWQpOwogCkBAIC0xMzc2LDYgKzE5MjYsMzQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCiAJCQlsaW5lcyA9IHByaW50X2VuZ2luZXNfZm9vdGVyKGVuZ2luZXMsIHQsIGxp bmVzLCBjb25fdywKIAkJCQkJCSAgICAgY29uX2gpOworCisJCQlpZiAoY2xpZW50cykgeworCQkJ CWxpbmVzID0gcHJpbnRfY2xpZW50c19oZWFkZXIoY2xpZW50cywgbGluZXMsCisJCQkJCQkJICAg ICBjb25fdywgY29uX2gsCisJCQkJCQkJICAgICAmY2xhc3Nfdyk7CisKKwkJCQlmb3JfZWFjaF9j bGllbnQoY2xpZW50cywgYywgaikgeworCQkJCQlpZiAobGluZXMrKyA+IGNvbl9oKQorCQkJCQkJ YnJlYWs7CisKKwkJCQkJYXNzZXJ0KGMtPnN0YXR1cyAhPSBQUk9CRSk7CisJCQkJCWlmIChjLT5z dGF0dXMgIT0gQUxJVkUpCisJCQkJCQlicmVhazsKKworCQkJCQlpZiAoYy0+c2FtcGxlcyA8IDIp CisJCQkJCQljb250aW51ZTsKKworCQkJCQlsaW5lcyA9IHByaW50X2NsaWVudChjLCBlbmdpbmVz LCB0LAorCQkJCQkJCSAgICAgbGluZXMsIGNvbl93LAorCQkJCQkJCSAgICAgY29uX2gsIHBlcmlv ZF91cywKKwkJCQkJCQkgICAgICZjbGFzc193KTsKKwkJCQl9CisKKwkJCQlsaW5lcyA9IHByaW50 X2NsaWVudHNfZm9vdGVyKGNsaWVudHMsIHQsIGxpbmVzLAorCQkJCQkJCSAgICAgY29uX3csIGNv bl9oKTsKKwkJCX0KKworCQkJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CiAJCX0KIAogCQlpZiAoc3Rv cF90b3ApCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRl dgo=