From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CC8B2C433DB for ; Thu, 21 Jan 2021 18:10:17 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6918423A57 for ; Thu, 21 Jan 2021 18:10:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6918423A57 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BE4556E086; Thu, 21 Jan 2021 18:10:16 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6D48B6E086; Thu, 21 Jan 2021 18:10:15 +0000 (UTC) IronPort-SDR: RDBybrtJo5n4u5tjetOoNgx2e0k+fDIT0ljgkP/0Izq2URMQN3MMPa4kPIpBv9/lPzMqACj1QH 5U7SrQSWUlIA== X-IronPort-AV: E=McAfee;i="6000,8403,9871"; a="240854623" X-IronPort-AV: E=Sophos;i="5.79,364,1602572400"; d="scan'208";a="240854623" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jan 2021 10:10:14 -0800 IronPort-SDR: 4MjGBHRazsf/u8YQNuIXKBjc5U1lPbyn/WbZoxOiESWVyI2rffxbl72bAzUphHwPaTHSDsbjsX yJTkr+5jlTiw== X-IronPort-AV: E=Sophos;i="5.79,364,1602572400"; d="scan'208";a="385402155" Received: from pscheper-mobl1.ger.corp.intel.com (HELO localhost.localdomain) ([10.252.50.106]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jan 2021 10:10:12 -0800 From: Tvrtko Ursulin To: igt-dev@lists.freedesktop.org Date: Thu, 21 Jan 2021 18:10:05 +0000 Message-Id: <20210121181005.762333-1-tvrtko.ursulin@linux.intel.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t] intel-gpu-top: Support for client stats X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Intel-gfx@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkFkZHMgc3Vw cG9ydCBmb3IgcGVyLWNsaWVudCBlbmdpbmUgYnVzeW5lc3Mgc3RhdHMgaTkxNSBleHBvcnRzIGlu IHN5c2ZzCmFuZCBwcm9kdWNlcyBvdXRwdXQgbGlrZSB0aGUgYmVsb3c6Cgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CmludGVsLWdwdS10b3A6IEludGVsIFNreWxha2UgKEdlbjkpIEAgL2Rldi9kcmkv Y2FyZDAgLSAgOTUxLyA5NTAgTUh6OwogICAgMCUgUkM2OyAxNC42MC8yMy42MiBXOyAgICAgMTQ4 MiBpcnFzL3MKCiAgICAgIElNQyByZWFkczogICAgIDEyODcgTWlCL3MKICAgICBJTUMgd3JpdGVz OiAgICAgIDExNSBNaUIvcwoKICAgICAgICAgRU5HSU5FUyAgICAgQlVTWSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1JX1NFTUEgTUlfV0FJVAogICAgICAgUmVuZGVyLzNE ICAgOTUuNDglIHzilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloji lojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloggIHwg ICAgICA1JSAgICAgIDAlCiAgICAgICAgIEJsaXR0ZXIgICAxNS45OCUgfOKWiOKWiOKWiOKWiOKW iCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDEwJSAgICAgIDAlCiAgICAgICAg ICAgVmlkZW8gICAzNS40MCUgfOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgMjYlICAgICAgMCUKICAgIFZpZGVvRW5oYW5jZSAg ICAwLjAwJSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgMCUgICAg ICAwJQoKICAgUElEICAgICAgICAgICAgICBOQU1FICAgUmVuZGVyLzNEICAgICBCbGl0dGVyICAg ICAgIFZpZGVvICAgIFZpZGVvRW5oYW5jZQogIDEwNTMgICAgICAgICAgZ2VtX3dzaW0gfOKWiOKW iOKWiCAgICAgICAgfHwgICAgICAgICAgIHx84paI4paI4paIICAgICAgICB8fCAgICAgICAgICAg fAogIDEwNTQgICAgICAgICAgZ2VtX3dzaW0gfOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAgICB8fOKW iCAgICAgICAgICB8fCAgICAgICAgICAgfHwgICAgICAgICAgIHwKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQoKQXBhcnQgZnJvbSB0aGUgZXhpc3RpbmcgcGh5c2ljYWwgZW5naW5lIHV0aWxpemF0aW9u IGl0IG5vdyBhbHNvIHNob3dzCnV0aWxpemF0aW9uIHBlciBjbGllbnQgYW5kIHBlciBlbmdpbmUg Y2xhc3MuCgp2MjoKICogVmVyc2lvbiB0byBtYXRjaCByZW1vdmFsIG9mIGdsb2JhbCBlbmFibGVf c3RhdHMgdG9nZ2xlLgogKiBQbHVzIHZhcmlvdXMgZml4ZXMuCgp2MzoKICogU3VwcG9ydCBicmll ZiBiYWNrd2FyZCBqdW1wcyBpbiBjbGllbnQgc3RhdHMuCgp2NDoKICogU3VwcG9ydCBkZXZpY2Ug c2VsZWN0aW9uLgoKdjU6CiAqIFJlYmFzZSBmb3IgY2xhc3MgYWdncmVnYXRpb24uCiAqIE9wdGlt aXNlIHN5c2ZzIHJlYWRzIGEgdGlueSBiaXQgYnkgb3BlbmF0KDIpIGFuZCBjYWNoaW5nIGNsaWVu dCByb290LgoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGlu dGVsLmNvbT4KLS0tCiB0b29scy9pbnRlbF9ncHVfdG9wLmMgfCA1NTcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgNTQ1IGluc2VydGlv bnMoKyksIDEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX2dwdV90b3Au YyBiL3Rvb2xzL2ludGVsX2dwdV90b3AuYwppbmRleCA3MmFkN2NiZTlhOGMuLmFiZDdkM2NmYzhk NCAxMDA2NDQKLS0tIGEvdG9vbHMvaW50ZWxfZ3B1X3RvcC5jCisrKyBiL3Rvb2xzL2ludGVsX2dw dV90b3AuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgwqkgMjAwNy0yMDE5IElu dGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgwqkgMjAwNy0yMDIxIEludGVsIENvcnBvcmF0 aW9uCiAgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCkBAIC02MjUs MjMgKzYyNSwzNTYgQEAgc3RhdGljIHZvaWQgcG11X3NhbXBsZShzdHJ1Y3QgZW5naW5lcyAqZW5n aW5lcykKIAl9CiB9CiAKK2VudW0gY2xpZW50X3N0YXR1cyB7CisJRlJFRSA9IDAsIC8qIG1ieiAq LworCUFMSVZFLAorCVBST0JFCit9OworCitzdHJ1Y3QgY2xpZW50czsKKworc3RydWN0IGNsaWVu dCB7CisJc3RydWN0IGNsaWVudHMgKmNsaWVudHM7CisKKwllbnVtIGNsaWVudF9zdGF0dXMgc3Rh dHVzOworCWludCBzeXNmc19yb290OworCXVuc2lnbmVkIGludCBpZDsKKwl1bnNpZ25lZCBpbnQg cGlkOworCWNoYXIgbmFtZVsxMjhdOworCXVuc2lnbmVkIGludCBzYW1wbGVzOworCXVuc2lnbmVk IGxvbmcgdG90YWw7CisJc3RydWN0IGVuZ2luZXMgKmVuZ2luZXM7CisJdW5zaWduZWQgbG9uZyAq dmFsOworCXVpbnQ2NF90ICpsYXN0OworfTsKKworc3RydWN0IGNsaWVudHMgeworCXVuc2lnbmVk IGludCBudW1fY2xpZW50czsKKworCXVuc2lnbmVkIGludCBudW1fY2xhc3NlczsKKwlzdHJ1Y3Qg ZW5naW5lX2NsYXNzICpjbGFzczsKKworCWNoYXIgc3lzZnNfcm9vdFs2NF07CisKKwlzdHJ1Y3Qg Y2xpZW50ICpjbGllbnQ7Cit9OworCisjZGVmaW5lIGZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBj LCB0bXApIFwKKwlmb3IgKCh0bXApID0gKGNsaWVudHMpLT5udW1fY2xpZW50cywgYyA9IChjbGll bnRzKS0+Y2xpZW50OyBcCisJICAgICAodG1wID4gMCk7ICh0bXApLS0sIChjKSsrKQorCitzdGF0 aWMgc3RydWN0IGNsaWVudHMgKmluaXRfY2xpZW50cyhjb25zdCBjaGFyICpkcm1fY2FyZCkKK3sK KwlzdHJ1Y3QgY2xpZW50cyAqY2xpZW50cyA9IG1hbGxvYyhzaXplb2YoKmNsaWVudHMpKTsKKwlj b25zdCBjaGFyICpzbGFzaDsKKwlzc2l6ZV90IHJldDsKKworCW1lbXNldChjbGllbnRzLCAwLCBz aXplb2YoKmNsaWVudHMpKTsKKworCWlmIChkcm1fY2FyZCkgeworCQlzbGFzaCA9IHJpbmRleChk cm1fY2FyZCwgJy8nKTsKKwkJYXNzZXJ0KHNsYXNoKTsKKwl9IGVsc2UgeworCQlzbGFzaCA9ICJj YXJkMCI7CisJfQorCisJcmV0ID0gc25wcmludGYoY2xpZW50cy0+c3lzZnNfcm9vdCwgc2l6ZW9m KGNsaWVudHMtPnN5c2ZzX3Jvb3QpLAorCQkgICAgICAgIi9zeXMvY2xhc3MvZHJtLyVzL2NsaWVu dHMvIiwgc2xhc2gpOworCWFzc2VydChyZXQgPiAwICYmIHJldCA8IHNpemVvZihjbGllbnRzLT5z eXNmc19yb290KSk7CisKKwlyZXR1cm4gY2xpZW50czsKK30KKworc3RhdGljIGludCBfX3JlYWRf dG9fYnVmKGludCBmZCwgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSkKK3sKKwlzc2l6 ZV90IHJldDsKKwlpbnQgZXJyOworCisJcmV0ID0gcmVhZChmZCwgYnVmLCBidWZzaXplIC0gMSk7 CisJZXJyID0gZXJybm87CisJaWYgKHJldCA8IDEpIHsKKwkJZXJybm8gPSByZXQgPCAwID8gZXJy IDogRU5PTVNHOworCisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocmV0ID4gMSAmJiBidWZbcmV0 IC0gMV0gPT0gJ1xuJykKKwkJYnVmW3JldCAtIDFdID0gJ1wwJzsKKwllbHNlCisJCWJ1ZltyZXRd ID0gJ1wwJzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfX3JlYWRfY2xpZW50X2Zp ZWxkKGludCByb290LCBjb25zdCBjaGFyICpmaWVsZCwgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQg YnVmc2l6ZSkKK3sKKwlpbnQgZmQsIHJldDsKKworCWZkID0gb3BlbmF0KHJvb3QsIGZpZWxkLCBP X1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0ID0gX19yZWFkX3Rv X2J1ZihmZCwgYnVmLCBidWZzaXplKTsKKworCWNsb3NlKGZkKTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB1aW50NjRfdAorcmVhZF9jbGllbnRfYnVzeShjb25zdCBzdHJ1Y3QgY2xpZW50 ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbGFzcykKK3sKKwljaGFyIGJ1ZlsyNTZdLCAqYjsKKwlp bnQgcmV0OworCisJYXNzZXJ0KGNsaWVudC0+c3lzZnNfcm9vdCA+PSAwKTsKKwlpZiAoY2xpZW50 LT5zeXNmc19yb290IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNp emVvZihidWYpLCAiYnVzeS8ldSIsIGNsYXNzKTsKKwlhc3NlcnQocmV0ID4gMCAmJiByZXQgPCBz aXplb2YoYnVmKSk7CisJaWYgKHJldCA8PSAwIHx8IHJldCA9PSBzaXplb2YoYnVmKSkKKwkJcmV0 dXJuIDA7CisKKwlyZXQgPSBfX3JlYWRfY2xpZW50X2ZpZWxkKGNsaWVudC0+c3lzZnNfcm9vdCwg YnVmLCBidWYsIHNpemVvZihidWYpKTsKKwlhc3NlcnQocmV0ID09IDApOworCWlmIChyZXQpCisJ CXJldHVybiAwOworCisJLyoKKwkgKiBIYW5kbGUgYm90aCBzaW5nbGUgaW50ZWdlciBhbmQga2V5 PXZhbHVlIGZvcm1hdHMgYnkgc2tpcHBpbmcKKwkgKiBsZWFkaW5nIG5vbi1kaWdpdHMuCisJICov CisJYiA9IGJ1ZjsKKwl3aGlsZSAoKmIgJiYgIWlzZGlnaXQoKmIpKQorCQliKys7CisKKwlyZXR1 cm4gc3RydG91bGwoYiwgTlVMTCwgMTApOworfQorCitzdGF0aWMgc3RydWN0IGNsaWVudCAqCitm aW5kX2NsaWVudChzdHJ1Y3QgY2xpZW50cyAqY2xpZW50cywgZW51bSBjbGllbnRfc3RhdHVzIHN0 YXR1cywgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBjbGllbnQgKmM7CisJaW50IHRtcDsK KworCWZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBjLCB0bXApIHsKKwkJaWYgKChzdGF0dXMgPT0g RlJFRSAmJiBjLT5zdGF0dXMgPT0gRlJFRSkgfHwKKwkJICAgIChzdGF0dXMgPT0gYy0+c3RhdHVz ICYmIGMtPmlkID09IGlkKSkKKwkJCXJldHVybiBjOworCX0KKworCXJldHVybiBOVUxMOworfQor CitzdGF0aWMgdm9pZCB1cGRhdGVfY2xpZW50KHN0cnVjdCBjbGllbnQgKmMsIHVuc2lnbmVkIGlu dCBwaWQsIGNoYXIgKm5hbWUpCit7CisJdWludDY0X3QgdmFsW2MtPmNsaWVudHMtPm51bV9jbGFz c2VzXTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChjLT5waWQgIT0gcGlkKQorCQljLT5waWQg PSBwaWQ7CisKKwlpZiAoc3RyY21wKGMtPm5hbWUsIG5hbWUpKQorCQlzdHJuY3B5KGMtPm5hbWUs IG5hbWUsIHNpemVvZihjLT5uYW1lKSAtIDEpOworCisJZm9yIChpID0gMDsgaSA8IGMtPmNsaWVu dHMtPm51bV9jbGFzc2VzOyBpKyspCisJCXZhbFtpXSA9IHJlYWRfY2xpZW50X2J1c3koYywgYy0+ Y2xpZW50cy0+Y2xhc3NbaV0uY2xhc3MpOworCisJYy0+dG90YWwgPSAwOworCisJZm9yIChpID0g MDsgaSA8IGMtPmNsaWVudHMtPm51bV9jbGFzc2VzOyBpKyspIHsKKwkJaWYgKHZhbFtpXSA8IGMt Pmxhc3RbaV0pCisJCQljb250aW51ZTsgLyogSXQgd2lsbCBjYXRjaCB1cCBzb29uLiAqLworCisJ CWMtPnZhbFtpXSA9IHZhbFtpXSAtIGMtPmxhc3RbaV07CisJCWMtPnRvdGFsICs9IGMtPnZhbFtp XTsKKwkJYy0+bGFzdFtpXSA9IHZhbFtpXTsKKwl9CisKKwljLT5zYW1wbGVzKys7CisJYy0+c3Rh dHVzID0gQUxJVkU7Cit9CisKK3N0YXRpYyB2b2lkCithZGRfY2xpZW50KHN0cnVjdCBjbGllbnRz ICpjbGllbnRzLCB1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBwaWQsCisJICAgY2hhciAq bmFtZSwgaW50IHN5c2ZzX3Jvb3QpCit7CisJc3RydWN0IGNsaWVudCAqYzsKKworCWlmIChmaW5k X2NsaWVudChjbGllbnRzLCBBTElWRSwgaWQpKQorCQlyZXR1cm47CisKKwljID0gZmluZF9jbGll bnQoY2xpZW50cywgRlJFRSwgMCk7CisJaWYgKCFjKSB7CisJCXVuc2lnbmVkIGludCBpZHggPSBj bGllbnRzLT5udW1fY2xpZW50czsKKworCQljbGllbnRzLT5udW1fY2xpZW50cyArPSAoY2xpZW50 cy0+bnVtX2NsaWVudHMgKyAyKSAvIDI7CisJCWNsaWVudHMtPmNsaWVudCA9IHJlYWxsb2MoY2xp ZW50cy0+Y2xpZW50LAorCQkJCQkgIGNsaWVudHMtPm51bV9jbGllbnRzICogc2l6ZW9mKCpjKSk7 CisJCWFzc2VydChjbGllbnRzLT5jbGllbnQpOworCisJCWMgPSAmY2xpZW50cy0+Y2xpZW50W2lk eF07CisJCW1lbXNldChjLCAwLCAoY2xpZW50cy0+bnVtX2NsaWVudHMgLSBpZHgpICogc2l6ZW9m KCpjKSk7CisJfQorCisJYy0+c3lzZnNfcm9vdCA9IHN5c2ZzX3Jvb3Q7CisJYy0+aWQgPSBpZDsK KwljLT5jbGllbnRzID0gY2xpZW50czsKKwljLT52YWwgPSBjYWxsb2MoY2xpZW50cy0+bnVtX2Ns YXNzZXMsIHNpemVvZihjLT52YWwpKTsKKwljLT5sYXN0ID0gY2FsbG9jKGNsaWVudHMtPm51bV9j bGFzc2VzLCBzaXplb2YoYy0+bGFzdCkpOworCWFzc2VydChjLT52YWwgJiYgYy0+bGFzdCk7CisK Kwl1cGRhdGVfY2xpZW50KGMsIHBpZCwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY2xp ZW50KHN0cnVjdCBjbGllbnQgKmMpCit7CisJaWYgKGMtPnN5c2ZzX3Jvb3QgPj0gMCkKKwkJY2xv c2UoYy0+c3lzZnNfcm9vdCk7CisJZnJlZShjLT52YWwpOworCWZyZWUoYy0+bGFzdCk7CisJbWVt c2V0KGMsIDAsIHNpemVvZigqYykpOworfQorCitzdGF0aWMgaW50CityZWFkX2NsaWVudF9zeXNm cyhjaGFyICpidWYsIGludCBidWZzaXplLCBjb25zdCBjaGFyICpzeXNmc19yb290LAorCQkgIHVu c2lnbmVkIGludCBpZCwgY29uc3QgY2hhciAqZmllbGQsIGludCAqY2xpZW50X3Jvb3QpCit7CisJ c3NpemVfdCByZXQ7CisKKwlpZiAoKmNsaWVudF9yb290IDwgMCkgeworCQljaGFyIG5hbWVidWZb MjU2XTsKKworCQlyZXQgPSBzbnByaW50ZihuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZiksICIlcy8l dSIsCisJCQkgICAgICAgc3lzZnNfcm9vdCwgaWQpOworCQlhc3NlcnQocmV0ID4gMCAmJiByZXQg PCBzaXplb2YobmFtZWJ1ZikpOworCQlpZiAocmV0IDw9IDAgfHwgcmV0ID09IHNpemVvZihuYW1l YnVmKSkKKwkJCXJldHVybiAtMTsKKworCQkqY2xpZW50X3Jvb3QgPSBvcGVuKG5hbWVidWYsIE9f UkRPTkxZIHwgT19ESVJFQ1RPUlkpOworCX0KKworCWlmICgqY2xpZW50X3Jvb3QgPCAwKQorCQly ZXR1cm4gLTE7CisKKwlyZXR1cm4gX19yZWFkX2NsaWVudF9maWVsZCgqY2xpZW50X3Jvb3QsIGZp ZWxkLCBidWYsIGJ1ZnNpemUpOworfQorCitzdGF0aWMgdm9pZCBzY2FuX2NsaWVudHMoc3RydWN0 IGNsaWVudHMgKmNsaWVudHMpCit7CisJc3RydWN0IGRpcmVudCAqZGVudDsKKwlzdHJ1Y3QgY2xp ZW50ICpjOworCXVuc2lnbmVkIGludCBpZDsKKwlpbnQgdG1wOworCURJUiAqZDsKKworCWlmICgh Y2xpZW50cykKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfY2xpZW50KGNsaWVudHMsIGMsIHRtcCkg eworCQlpZiAoYy0+c3RhdHVzID09IEFMSVZFKQorCQkJYy0+c3RhdHVzID0gUFJPQkU7CisJfQor CisJZCA9IG9wZW5kaXIoY2xpZW50cy0+c3lzZnNfcm9vdCk7CisJaWYgKCFkKQorCQlyZXR1cm47 CisKKwl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisJCWNoYXIgbmFtZVsy NTZdLCBwaWRbMjU2XTsKKwkJaW50IHJldCwgcm9vdCA9IC0xLCAqcHI7CisKKwkJaWYgKGRlbnQt PmRfdHlwZSAhPSBEVF9ESVIpCisJCQljb250aW51ZTsKKwkJaWYgKCFpc2RpZ2l0KGRlbnQtPmRf bmFtZVswXSkpCisJCQljb250aW51ZTsKKworCQlpZCA9IGF0b2koZGVudC0+ZF9uYW1lKTsKKwor CQljID0gZmluZF9jbGllbnQoY2xpZW50cywgUFJPQkUsIGlkKTsKKworCQlpZiAoYykKKwkJCXBy ID0gJmMtPnN5c2ZzX3Jvb3Q7CisJCWVsc2UKKwkJCXByID0gJnJvb3Q7CisKKwkJcmV0ID0gcmVh ZF9jbGllbnRfc3lzZnMobmFtZSwgc2l6ZW9mKG5hbWUpLCBjbGllbnRzLT5zeXNmc19yb290LAor CQkJCQlpZCwgIm5hbWUiLCBwcik7CisJCXJldCB8PSByZWFkX2NsaWVudF9zeXNmcyhwaWQsIHNp emVvZihwaWQpLCBjbGllbnRzLT5zeXNmc19yb290LAorCQkJCQlpZCwgInBpZCIsIHByKTsKKwkJ aWYgKCFyZXQpIHsKKwkJCWlmICghYykKKwkJCQlhZGRfY2xpZW50KGNsaWVudHMsIGlkLCBhdG9p KHBpZCksIG5hbWUsIHJvb3QpOworCQkJZWxzZQorCQkJCXVwZGF0ZV9jbGllbnQoYywgYXRvaShw aWQpLCBuYW1lKTsKKwkJfSBlbHNlIGlmIChjKSB7CisJCQljLT5zdGF0dXMgPSBQUk9CRTsgLyog V2lsbCBiZSBkZWxldGVkIGJlbG93LiAqLworCQl9CisJfQorCisJY2xvc2VkaXIoZCk7CisKKwlm b3JfZWFjaF9jbGllbnQoY2xpZW50cywgYywgdG1wKSB7CisJCWlmIChjLT5zdGF0dXMgPT0gUFJP QkUpCisJCQlmcmVlX2NsaWVudChjKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY21wKGNvbnN0IHZv aWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3QgY2xpZW50ICphID0gX2E7 CisJY29uc3Qgc3RydWN0IGNsaWVudCAqYiA9IF9iOworCWxvbmcgdG90X2EgPSBhLT50b3RhbDsK Kwlsb25nIHRvdF9iID0gYi0+dG90YWw7CisKKwl0b3RfYSAqPSBhLT5zdGF0dXMgPT0gQUxJVkUg JiYgYS0+c2FtcGxlcyA+IDE7CisJdG90X2IgKj0gYi0+c3RhdHVzID09IEFMSVZFICYmIGItPnNh bXBsZXMgPiAxOworCisJdG90X2IgLT0gdG90X2E7CisKKwlpZiAoIXRvdF9iKQorCQlyZXR1cm4g KGludCliLT5pZCAtIGEtPmlkOworCisJd2hpbGUgKHRvdF9iID4gSU5UX01BWCB8fCB0b3RfYiA8 IElOVF9NSU4pCisJCXRvdF9iIC89IDI7CisKKwlyZXR1cm4gdG90X2I7Cit9CisKIHN0YXRpYyBj b25zdCBjaGFyICpiYXJzW10gPSB7ICIgIiwgIuKWjyIsICLilo4iLCAi4paNIiwgIuKWjCIsICLi losiLCAi4paKIiwgIuKWiSIsICLilogiIH07CiAKK3N0YXRpYyB2b2lkIG5fc3BhY2VzKGNvbnN0 IHVuc2lnbmVkIGludCBuKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8 IG47IGkrKykKKwkJcHV0Y2hhcignICcpOworfQorCiBzdGF0aWMgdm9pZAogcHJpbnRfcGVyY2Vu dGFnZV9iYXIoZG91YmxlIHBlcmNlbnQsIGludCBtYXhfbGVuKQogewotCWludCBiYXJfbGVuID0g cGVyY2VudCAqICg4ICogKG1heF9sZW4gLSAyKSkgLyAxMDAuMDsKLQlpbnQgaTsKKwlpbnQgYmFy X2xlbiwgaSwgbGVuID0gbWF4X2xlbiAtIDI7CisJY29uc3QgaW50IHcgPSA4OworCisJYXNzZXJ0 KG1heF9sZW4gPiAwKTsKKworCWJhcl9sZW4gPSBwZXJjZW50ICogbGVuIC8gMTAwLjA7CisJaWYg KGJhcl9sZW4gPiBsZW4pCisJCWJhcl9sZW4gPSBsZW47CisJYmFyX2xlbiAqPSB3OwogCiAJcHV0 Y2hhcignfCcpOwogCi0JZm9yIChpID0gYmFyX2xlbjsgaSA+PSA4OyBpIC09IDgpCi0JCXByaW50 ZigiJXMiLCBiYXJzWzhdKTsKKwlmb3IgKGkgPSBiYXJfbGVuOyBpID49IHc7IGkgLT0gdykKKwkJ cHJpbnRmKCIlcyIsIGJhcnNbd10pOwogCWlmIChpKQogCQlwcmludGYoIiVzIiwgYmFyc1tpXSk7 CiAKLQlmb3IgKGkgPSAwOyBpIDwgKG1heF9sZW4gLSAyIC0gKGJhcl9sZW4gKyA3KSAvIDgpOyBp KyspCi0JCXB1dGNoYXIoJyAnKTsKKwlsZW4gLT0gKGJhcl9sZW4gKyAodyAtIDEpKSAvIHc7CisJ bl9zcGFjZXMobGVuKTsKIAogCXB1dGNoYXIoJ3wnKTsKIH0KQEAgLTc0NCw2ICsxMDc3LDE4IEBA IGpzb25fY2xvc2Vfc3RydWN0KHZvaWQpCiAJCWZmbHVzaChzdGRvdXQpOwogfQogCitzdGF0aWMg dm9pZAorX19qc29uX2FkZF9tZW1iZXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWwp Cit7CisJYXNzZXJ0KGpzb25faW5kZW50X2xldmVsIDwgQVJSQVlfU0laRShqc29uX2luZGVudCkp OworCisJZnByaW50ZihvdXQsICIlcyVzXCIlc1wiOiBcIiVzXCIiLAorCQlqc29uX3N0cnVjdF9t ZW1iZXJzID8gIixcbiIgOiAiIiwKKwkJanNvbl9pbmRlbnRbanNvbl9pbmRlbnRfbGV2ZWxdLCBr ZXksIHZhbCk7CisKKwlqc29uX3N0cnVjdF9tZW1iZXJzKys7Cit9CisKIHN0YXRpYyB1bnNpZ25l ZCBpbnQKIGpzb25fYWRkX21lbWJlcihjb25zdCBzdHJ1Y3QgY250X2dyb3VwICpwYXJlbnQsIHN0 cnVjdCBjbnRfaXRlbSAqaXRlbSwKIAkJdW5zaWduZWQgaW50IGhlYWRlcnMpCkBAIC0xMDQ2LDgg KzEzOTEsNiBAQCBwcmludF9oZWFkZXIoY29uc3Qgc3RydWN0IGlndF9kZXZpY2VfY2FyZCAqY2Fy ZCwKIAkJbWVtbW92ZSgmZ3JvdXBzWzBdLCAmZ3JvdXBzWzFdLAogCQkJc2l6ZW9mKGdyb3Vwcykg LSBzaXplb2YoZ3JvdXBzWzBdKSk7CiAKLQlwb3BzLT5vcGVuX3N0cnVjdChOVUxMKTsKLQogCSpj b25zdW1lZCA9IHByaW50X2dyb3Vwcyhncm91cHMpOwogCiAJaWYgKG91dHB1dF9tb2RlID09IElO VEVSQUNUSVZFKSB7CkBAIC0xMjA0LDcgKzE1NDcsNyBAQCBwcmludF9lbmdpbmUoc3RydWN0IGVu Z2luZXMgKmVuZ2luZXMsIHVuc2lnbmVkIGludCBpLCBkb3VibGUgdCwKIAkJCSAgICAgIGVuZ2lu ZS0+ZGlzcGxheV9uYW1lLCBlbmdpbmVfaXRlbXNbMF0uYnVmKTsKIAogCQl2YWwgPSBwbXVfY2Fs YygmZW5naW5lLT5idXN5LnZhbCwgMWU5LCB0LCAxMDApOwotCQlwcmludF9wZXJjZW50YWdlX2Jh cih2YWwsIG1heF93IC0gbGVuKTsKKwkJcHJpbnRfcGVyY2VudGFnZV9iYXIodmFsLCBtYXhfdyA+ IGxlbiA/IG1heF93IC0gbGVuIDogMCk7CiAKIAkJcHJpbnRmKCIlc1xuIiwgYnVmKTsKIApAQCAt MTIxOSw3ICsxNTYyLDYgQEAgcHJpbnRfZW5naW5lc19mb290ZXIoc3RydWN0IGVuZ2luZXMgKmVu Z2luZXMsIGRvdWJsZSB0LAogCQkgICAgIGludCBsaW5lcywgaW50IGNvbl93LCBpbnQgY29uX2gp CiB7CiAJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7Ci0JcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CiAKIAlp ZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKIAkJaWYgKGxpbmVzKysgPCBjb25faCkK QEAgLTEyNDMsNiArMTU4NSw5IEBAIHN0YXRpYyB2b2lkIGluaXRfZW5naW5lX2NsYXNzZXMoc3Ry dWN0IGVuZ2luZXMgKmVuZ2luZXMpCiAJdW5zaWduZWQgaW50IGksIG51bTsKIAlpbnQgbWF4ID0g LTE7CiAKKwlpZiAoZW5naW5lcy0+bnVtX2NsYXNzZXMpCisJCXJldHVybjsKKwogCWZvciAoaSA9 IDA7IGkgPCBlbmdpbmVzLT5udW1fZW5naW5lczsgaSsrKSB7CiAJCXN0cnVjdCBlbmdpbmUgKmVu Z2luZSA9IGVuZ2luZV9wdHIoZW5naW5lcywgaSk7CiAKQEAgLTE0MDQsNiArMTc0OSwxNDggQEAg cHJpbnRfZW5naW5lcyhzdHJ1Y3QgZW5naW5lcyAqZW5naW5lcywgZG91YmxlIHQsIGludCBsaW5l cywgaW50IHcsIGludCBoKQogCXJldHVybiBsaW5lczsKIH0KIAorc3RhdGljIGludAorcHJpbnRf Y2xpZW50c19oZWFkZXIoc3RydWN0IGNsaWVudHMgKmNsaWVudHMsIGludCBsaW5lcywKKwkJICAg ICBpbnQgY29uX3csIGludCBjb25faCwgaW50ICpjbGFzc193KQoreworCWlmIChvdXRwdXRfbW9k ZSA9PSBJTlRFUkFDVElWRSkgeworCQljb25zdCBjaGFyICpwaWRuYW1lID0gIiAgIFBJRCAgICAg ICAgICAgICAgTkFNRSAiOworCQl1bnNpZ25lZCBpbnQgbnVtX2FjdGl2ZSA9IDA7CisJCWludCBs ZW4gPSBzdHJsZW4ocGlkbmFtZSk7CisKKwkJaWYgKGxpbmVzKysgPj0gY29uX2gpCisJCQlyZXR1 cm4gbGluZXM7CisKKwkJcHJpbnRmKCJcMDMzWzdtIik7CisJCXByaW50ZigiJXMiLCBwaWRuYW1l KTsKKworCQlpZiAobGluZXMrKyA+PSBjb25faCB8fCBsZW4gPj0gY29uX3cpCisJCQlyZXR1cm4g bGluZXM7CisKKwkJaWYgKGNsaWVudHMtPm51bV9jbGFzc2VzKSB7CisJCQl1bnNpZ25lZCBpbnQg aTsKKwkJCWludCB3aWR0aDsKKworCQkJZm9yIChpID0gMDsgaSA8IGNsaWVudHMtPm51bV9jbGFz c2VzOyBpKyspIHsKKwkJCQlpZiAoY2xpZW50cy0+Y2xhc3NbaV0ubnVtX2VuZ2luZXMpCisJCQkJ CW51bV9hY3RpdmUrKzsKKwkJCX0KKworCQkJKmNsYXNzX3cgPSB3aWR0aCA9IChjb25fdyAtIGxl bikgLyBudW1fYWN0aXZlOworCisJCQlmb3IgKGkgPSAwOyBpIDwgY2xpZW50cy0+bnVtX2NsYXNz ZXM7IGkrKykgeworCQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBjbGllbnRzLT5jbGFzc1tpXS5uYW1l OworCQkJCWludCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwkJCQlpbnQgcGFkID0gKHdpZHRo IC0gbmFtZV9sZW4pIC8gMjsKKwkJCQlpbnQgc3BhY2VzID0gd2lkdGggLSBwYWQgLSBuYW1lX2xl bjsKKworCQkJCWlmICghY2xpZW50cy0+Y2xhc3NbaV0ubnVtX2VuZ2luZXMpCisJCQkJCWNvbnRp bnVlOyAvKiBBc3NlcnQgaW4gdGhlIGlkZWFsIHdvcmxkLiAqLworCisJCQkJaWYgKHBhZCA8IDAg fHwgc3BhY2VzIDwgMCkKKwkJCQkJY29udGludWU7CisKKwkJCQluX3NwYWNlcyhwYWQpOworCQkJ CXByaW50ZigiJXMiLCBuYW1lKTsKKwkJCQluX3NwYWNlcyhzcGFjZXMpOworCQkJCWxlbiArPSBw YWQgKyBuYW1lX2xlbiArIHNwYWNlczsKKwkJCX0KKwkJfQorCisJCW5fc3BhY2VzKGNvbl93IC0g bGVuKTsKKwkJcHJpbnRmKCJcMDMzWzBtXG4iKTsKKwl9IGVsc2UgeworCQlpZiAoY2xpZW50cy0+ bnVtX2NsYXNzZXMpCisJCQlwb3BzLT5vcGVuX3N0cnVjdCgiY2xpZW50cyIpOworCX0KKworCXJl dHVybiBsaW5lczsKK30KKworc3RhdGljIGludAorcHJpbnRfY2xpZW50KHN0cnVjdCBjbGllbnQg KmMsIHN0cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwgaW50IGxpbmVzLAorCSAgICAg aW50IGNvbl93LCBpbnQgY29uX2gsIHVuc2lnbmVkIGludCBwZXJpb2RfdXMsIGludCAqY2xhc3Nf dykKK3sKKwlzdHJ1Y3QgY2xpZW50cyAqY2xpZW50cyA9IGMtPmNsaWVudHM7CisJdW5zaWduZWQg aW50IGk7CisKKwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKKwkJcHJpbnRmKCIl NnUgJTE3cyAiLCBjLT5waWQsIGMtPm5hbWUpOworCisJCWZvciAoaSA9IDA7IGkgPCBjbGllbnRz LT5udW1fY2xhc3NlczsgaSsrKSB7CisJCQlkb3VibGUgcGN0OworCisJCQlpZiAoIWNsaWVudHMt PmNsYXNzW2ldLm51bV9lbmdpbmVzKQorCQkJCWNvbnRpbnVlOyAvKiBBc3NlcnQgaW4gdGhlIGlk ZWFsIHdvcmxkLiAqLworCisJCQlwY3QgPSAoZG91YmxlKWMtPnZhbFtpXSAvIHBlcmlvZF91cyAv IDFlMyAqIDEwMCAvCisJCQkgICAgICBjbGllbnRzLT5jbGFzc1tpXS5udW1fZW5naW5lczsKKwor CQkJLyoKKwkJCSAqIEd1YXJkIGFnYWluc3QgcG9zc2libGUgdGltZS1kcmlmdCBiZXR3ZWVuIHNh bXBsaW5nCisJCQkgKiBjbGllbnQgZGF0YSBhbmQgdGltZSB3ZSBvYnRhaW5lZCBvdXIgdGltZS1k ZWx0YSBmcm9tCisJCQkgKiBQTVUuCisJCQkgKi8KKwkJCWlmIChwY3QgPiAxMDAuMCkKKwkJCQlw Y3QgPSAxMDAuMDsKKworCQkJcHJpbnRfcGVyY2VudGFnZV9iYXIocGN0LCAqY2xhc3Nfdyk7CisK KwkJCWxpbmVzKys7CisJCX0KKworCQlwdXRjaGFyKCdcbicpOworCX0gZWxzZSBpZiAob3V0cHV0 X21vZGUgPT0gSlNPTikgeworCQljaGFyIGJ1Zls2NF07CisKKwkJc25wcmludGYoYnVmLCBzaXpl b2YoYnVmKSwgIiV1IiwgYy0+aWQpOworCQlwb3BzLT5vcGVuX3N0cnVjdChidWYpOworCisJCV9f anNvbl9hZGRfbWVtYmVyKCJuYW1lIiwgYy0+bmFtZSk7CisKKwkJc25wcmludGYoYnVmLCBzaXpl b2YoYnVmKSwgIiV1IiwgYy0+cGlkKTsKKwkJX19qc29uX2FkZF9tZW1iZXIoInBpZCIsIGJ1Zik7 CisKKwkJcG9wcy0+b3Blbl9zdHJ1Y3QoImVuZ2luZS1jbGFzc2VzIik7CisKKwkJZm9yIChpID0g MDsgaSA8IGNsaWVudHMtPm51bV9jbGFzc2VzOyBpKyspIHsKKwkJCWRvdWJsZSBwY3Q7CisKKwkJ CXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsCisJCQkJIGNsaWVudHMtPmNsYXNzW2ld Lm5hbWUpOworCQkJcG9wcy0+b3Blbl9zdHJ1Y3QoYnVmKTsKKworCQkJcGN0ID0gKGRvdWJsZSlj LT52YWxbaV0gLyBwZXJpb2RfdXMgLyAxZTMgKiAxMDA7CisJCQlzbnByaW50ZihidWYsIHNpemVv ZihidWYpLCAiJWYiLCBwY3QpOworCQkJX19qc29uX2FkZF9tZW1iZXIoImJ1c3kiLCBidWYpOwor CisJCQlfX2pzb25fYWRkX21lbWJlcigidW5pdCIsICIlIik7CisKKwkJCXBvcHMtPmNsb3NlX3N0 cnVjdCgpOworCQl9CisKKwkJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CisJCXBvcHMtPmNsb3NlX3N0 cnVjdCgpOworCX0KKworCXJldHVybiBsaW5lczsKK30KKworc3RhdGljIGludAorcHJpbnRfY2xp ZW50c19mb290ZXIoc3RydWN0IGNsaWVudHMgKmNsaWVudHMsIGRvdWJsZSB0LAorCQkgICAgIGlu dCBsaW5lcywgaW50IGNvbl93LCBpbnQgY29uX2gpCit7CisJaWYgKG91dHB1dF9tb2RlID09IElO VEVSQUNUSVZFKSB7CisJCWlmIChsaW5lcysrIDwgY29uX2gpCisJCQlwcmludGYoIlxuIik7CisJ fSBlbHNlIHsKKwkJaWYgKGNsaWVudHMtPm51bV9jbGFzc2VzKQorCQkJcG9wcy0+Y2xvc2Vfc3Ry dWN0KCk7CisJfQorCisJcmV0dXJuIGxpbmVzOworfQorCiBzdGF0aWMgYm9vbCBzdG9wX3RvcDsK IAogc3RhdGljIHZvaWQgc2lnaW50X2hhbmRsZXIoaW50ICBzaWcpCkBAIC0xNDkyLDYgKzE5Nzks NyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3N0ZGluKHVuc2lnbmVkIGludCB0aW1lb3V0X3VzKQog aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXVuc2lnbmVkIGludCBwZXJpb2Rf dXMgPSBERUZBVUxUX1BFUklPRF9NUyAqIDEwMDA7CisJc3RydWN0IGNsaWVudHMgKmNsaWVudHMg PSBOVUxMOwogCWludCBjb25fdyA9IC0xLCBjb25faCA9IC0xOwogCWNoYXIgKm91dHB1dF9wYXRo ID0gTlVMTDsKIAlzdHJ1Y3QgZW5naW5lcyAqZW5naW5lczsKQEAgLTE2MjUsMTMgKzIxMTMsMjAg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJcmV0ID0gRVhJVF9TVUNDRVNT OwogCisJY2xpZW50cyA9IGluaXRfY2xpZW50cyhjYXJkLnBjaV9zbG90X25hbWVbMF0gPyBjYXJk LmNhcmQgOiBOVUxMKTsKKwlpbml0X2VuZ2luZV9jbGFzc2VzKGVuZ2luZXMpOworCWNsaWVudHMt Pm51bV9jbGFzc2VzID0gZW5naW5lcy0+bnVtX2NsYXNzZXM7CisJY2xpZW50cy0+Y2xhc3MgPSBl bmdpbmVzLT5jbGFzczsKKwogCXBtdV9zYW1wbGUoZW5naW5lcyk7CisJc2Nhbl9jbGllbnRzKGNs aWVudHMpOwogCWNvZGVuYW1lID0gaWd0X2RldmljZV9nZXRfcHJldHR5X25hbWUoJmNhcmQsIGZh bHNlKTsKIAogCXdoaWxlICghc3RvcF90b3ApIHsKIAkJYm9vbCBjb25zdW1lZCA9IGZhbHNlOwot CQlpbnQgbGluZXMgPSAwOworCQlpbnQgaiwgbGluZXMgPSAwOwogCQlzdHJ1Y3Qgd2luc2l6ZSB3 czsKKwkJc3RydWN0IGNsaWVudCAqYzsKIAkJZG91YmxlIHQ7CiAKIAkJLyogVXBkYXRlIHRlcm1p bmFsIHNpemUuICovCkBAIC0xNjUwLDEwICsyMTQ1LDE4IEBAIGludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJcG11X3NhbXBsZShlbmdpbmVzKTsKIAkJdCA9IChkb3VibGUpKGVuZ2lu ZXMtPnRzLmN1ciAtIGVuZ2luZXMtPnRzLnByZXYpIC8gMWU5OwogCisJCXNjYW5fY2xpZW50cyhj bGllbnRzKTsKKwkJaWYgKGNsaWVudHMpIHsKKwkJCXFzb3J0KGNsaWVudHMtPmNsaWVudCwgY2xp ZW50cy0+bnVtX2NsaWVudHMsCisJCQkgICAgICBzaXplb2YoKmNsaWVudHMtPmNsaWVudCksIGNt cCk7CisJCX0KKwogCQlpZiAoc3RvcF90b3ApCiAJCQlicmVhazsKIAogCQl3aGlsZSAoIWNvbnN1 bWVkKSB7CisJCQlwb3BzLT5vcGVuX3N0cnVjdChOVUxMKTsKKwogCQkJbGluZXMgPSBwcmludF9o ZWFkZXIoJmNhcmQsIGNvZGVuYW1lLCBlbmdpbmVzLAogCQkJCQkgICAgIHQsIGxpbmVzLCBjb25f dywgY29uX2gsCiAJCQkJCSAgICAgJmNvbnN1bWVkKTsKQEAgLTE2NjEsNiArMjE2NCwzNiBAQCBp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlsaW5lcyA9IHByaW50X2ltYyhlbmdp bmVzLCB0LCBsaW5lcywgY29uX3csIGNvbl9oKTsKIAogCQkJbGluZXMgPSBwcmludF9lbmdpbmVz KGVuZ2luZXMsIHQsIGxpbmVzLCBjb25fdywgY29uX2gpOworCisJCQlpZiAoY2xpZW50cykgewor CQkJCWludCBjbGFzc193OworCisJCQkJbGluZXMgPSBwcmludF9jbGllbnRzX2hlYWRlcihjbGll bnRzLCBsaW5lcywKKwkJCQkJCQkgICAgIGNvbl93LCBjb25faCwKKwkJCQkJCQkgICAgICZjbGFz c193KTsKKworCQkJCWZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBjLCBqKSB7CisJCQkJCWlmIChs aW5lcysrID4gY29uX2gpCisJCQkJCQlicmVhazsKKworCQkJCQlhc3NlcnQoYy0+c3RhdHVzICE9 IFBST0JFKTsKKwkJCQkJaWYgKGMtPnN0YXR1cyAhPSBBTElWRSkKKwkJCQkJCWJyZWFrOworCisJ CQkJCWlmIChjLT5zYW1wbGVzIDwgMikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCWxpbmVzID0g cHJpbnRfY2xpZW50KGMsIGVuZ2luZXMsIHQsCisJCQkJCQkJICAgICBsaW5lcywgY29uX3csCisJ CQkJCQkJICAgICBjb25faCwgcGVyaW9kX3VzLAorCQkJCQkJCSAgICAgJmNsYXNzX3cpOworCQkJ CX0KKworCQkJCWxpbmVzID0gcHJpbnRfY2xpZW50c19mb290ZXIoY2xpZW50cywgdCwgbGluZXMs CisJCQkJCQkJICAgICBjb25fdywgY29uX2gpOworCQkJfQorCisJCQlwb3BzLT5jbG9zZV9zdHJ1 Y3QoKTsKIAkJfQogCiAJCWlmIChzdG9wX3RvcCkKLS0gCjIuMjcuMAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==