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 C1935C433E0 for ; Fri, 22 Jan 2021 11:55:40 +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 5C1982376F for ; Fri, 22 Jan 2021 11:55:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5C1982376F 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 9136A6E8C1; Fri, 22 Jan 2021 11:55:39 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0C6476E848; Fri, 22 Jan 2021 11:55:37 +0000 (UTC) IronPort-SDR: MQoB6A+LwvDkbOa25nfyFEXFjpDzidlOkOsw1T6ain/GC1dTv4ybqRC7AuD5TGA+MP3s4i3Tt3 0NXONetTZasg== X-IronPort-AV: E=McAfee;i="6000,8403,9871"; a="176861340" X-IronPort-AV: E=Sophos;i="5.79,366,1602572400"; d="scan'208";a="176861340" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jan 2021 03:55:37 -0800 IronPort-SDR: 4s1SLU+JEQkUdG3uxCtykdeUkxUz0WaCtnMYGOcHoo2qlfRfakoJw9lLl7eOuVX4TtaXemTQ8T NCC419jiAKEA== X-IronPort-AV: E=Sophos;i="5.79,366,1602572400"; d="scan'208";a="385732453" Received: from gtidhar-mobl.ger.corp.intel.com (HELO localhost.localdomain) ([10.214.206.196]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jan 2021 03:55:34 -0800 From: Tvrtko Ursulin To: igt-dev@lists.freedesktop.org Date: Fri, 22 Jan 2021 11:55:24 +0000 Message-Id: <20210122115524.768221-1-tvrtko.ursulin@linux.intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210121181005.762333-1-tvrtko.ursulin@linux.intel.com> References: <20210121181005.762333-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t v6] 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 dCByb290LgoKdjY6CiAqIFNob3cgY2xpZW50cyBhcyBzb29uIGFzIGRldGVjdGVkLCBqdXN0IGRl bGF5IGJ1c3luZXNzIGRhdGEgb25lIHBlcmlvZC4KICogQWRkIG9wdGlvbiB0byBzaG93IG51bWVy aWMgYnVzeW5lc3MuCiAqIEZ1cnRoZXIgb3B0aW1pemUgc3lzZnMgcmVhZHMuCiAqIFRyaW0gb3Zl cmdyb3duIGFycmF5LiAoQ2hyaXMpCiAqIFNpbXBsaWZ5IGNsaWVudCBzb3J0IGNhbGxiYWNrIGFu ZCBmaW5kIGNsaWVudCBsb29wLiAoQ2hyaXMpCiAqIFphcCBub24tcHJpbnRhYmxlIGNoYXJzIHdo ZW4gZGlzcGxheWluZyBjbGllbnQgbmFtZXMuIChDaHJpcykKClNpZ25lZC1vZmYtYnk6IFR2cnRr byBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Ci0tLQogdG9vbHMvaW50ZWxfZ3B1 X3RvcC5jIHwgNjQwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQog MSBmaWxlIGNoYW5nZWQsIDYyNSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS90b29scy9pbnRlbF9ncHVfdG9wLmMgYi90b29scy9pbnRlbF9ncHVfdG9wLmMKaW5k ZXggNzJhZDdjYmU5YThjLi41OTQ1Y2NiMDU3Y2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ludGVsX2dw dV90b3AuYworKysgYi90b29scy9pbnRlbF9ncHVfdG9wLmMKQEAgLTEsNSArMSw1IEBACiAvKgot ICogQ29weXJpZ2h0IMKpIDIwMDctMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0 IMKpIDIwMDctMjAyMSBJbnRlbCBDb3Jwb3JhdGlvbgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLApAQCAtNDYsNiArNDYsOCBAQAogCiAjaW5jbHVkZSAiaWd0X3Bl cmYuaCIKIAorI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpL3NpemVvZihhcnJb MF0pKQorCiBzdHJ1Y3QgcG11X3BhaXIgewogCXVpbnQ2NF90IGN1cjsKIAl1aW50NjRfdCBwcmV2 OwpAQCAtNjI1LDI1ICs2MjcsNDMzIEBAIHN0YXRpYyB2b2lkIHBtdV9zYW1wbGUoc3RydWN0IGVu Z2luZXMgKmVuZ2luZXMpCiAJfQogfQogCitlbnVtIGNsaWVudF9zdGF0dXMgeworCUZSRUUgPSAw LCAvKiBtYnogKi8KKwlBTElWRSwKKwlQUk9CRQorfTsKKworc3RydWN0IGNsaWVudHM7CisKK3N0 cnVjdCBjbGllbnQgeworCXN0cnVjdCBjbGllbnRzICpjbGllbnRzOworCisJZW51bSBjbGllbnRf c3RhdHVzIHN0YXR1czsKKwlpbnQgc3lzZnNfcm9vdDsKKwlpbnQgYnVzeV9yb290OworCXVuc2ln bmVkIGludCBpZDsKKwl1bnNpZ25lZCBpbnQgcGlkOworCWNoYXIgbmFtZVsyNF07CisJY2hhciBw cmludF9uYW1lWzI0XTsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlczsKKwl1bnNpZ25lZCBsb25nIHRv dGFsOworCXN0cnVjdCBlbmdpbmVzICplbmdpbmVzOworCXVuc2lnbmVkIGxvbmcgKnZhbDsKKwl1 aW50NjRfdCAqbGFzdDsKK307CisKK3N0cnVjdCBjbGllbnRzIHsKKwl1bnNpZ25lZCBpbnQgbnVt X2NsaWVudHM7CisKKwl1bnNpZ25lZCBpbnQgbnVtX2NsYXNzZXM7CisJc3RydWN0IGVuZ2luZV9j bGFzcyAqY2xhc3M7CisKKwljaGFyIHN5c2ZzX3Jvb3RbMTI4XTsKKworCXN0cnVjdCBjbGllbnQg KmNsaWVudDsKK307CisKKyNkZWZpbmUgZm9yX2VhY2hfY2xpZW50KGNsaWVudHMsIGMsIHRtcCkg XAorCWZvciAoKHRtcCkgPSAoY2xpZW50cyktPm51bV9jbGllbnRzLCBjID0gKGNsaWVudHMpLT5j bGllbnQ7IFwKKwkgICAgICh0bXAgPiAwKTsgKHRtcCktLSwgKGMpKyspCisKK3N0YXRpYyBzdHJ1 Y3QgY2xpZW50cyAqaW5pdF9jbGllbnRzKGNvbnN0IGNoYXIgKmRybV9jYXJkKQoreworCXN0cnVj dCBjbGllbnRzICpjbGllbnRzID0gbWFsbG9jKHNpemVvZigqY2xpZW50cykpOworCWNvbnN0IGNo YXIgKnNsYXNoOworCXNzaXplX3QgcmV0OworCisJbWVtc2V0KGNsaWVudHMsIDAsIHNpemVvZigq Y2xpZW50cykpOworCisJaWYgKGRybV9jYXJkKSB7CisJCXNsYXNoID0gcmluZGV4KGRybV9jYXJk LCAnLycpOworCQlhc3NlcnQoc2xhc2gpOworCX0gZWxzZSB7CisJCXNsYXNoID0gImNhcmQwIjsK Kwl9CisKKwlyZXQgPSBzbnByaW50ZihjbGllbnRzLT5zeXNmc19yb290LCBzaXplb2YoY2xpZW50 cy0+c3lzZnNfcm9vdCksCisJCSAgICAgICAiL3N5cy9jbGFzcy9kcm0vJXMvY2xpZW50cy8iLCBz bGFzaCk7CisJYXNzZXJ0KHJldCA+IDAgJiYgcmV0IDwgc2l6ZW9mKGNsaWVudHMtPnN5c2ZzX3Jv b3QpKTsKKworCXJldHVybiBjbGllbnRzOworfQorCitzdGF0aWMgaW50IF9fcmVhZF90b19idWYo aW50IGZkLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZzaXplKQoreworCXNzaXplX3QgcmV0 OworCWludCBlcnI7CisKKwlyZXQgPSByZWFkKGZkLCBidWYsIGJ1ZnNpemUgLSAxKTsKKwllcnIg PSBlcnJubzsKKwlpZiAocmV0IDwgMSkgeworCQllcnJubyA9IHJldCA8IDAgPyBlcnIgOiBFTk9N U0c7CisKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChyZXQgPiAxICYmIGJ1ZltyZXQgLSAxXSA9 PSAnXG4nKQorCQlidWZbcmV0IC0gMV0gPSAnXDAnOworCWVsc2UKKwkJYnVmW3JldF0gPSAnXDAn OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19fcmVhZF9jbGllbnRfZmllbGQoaW50 IHJvb3QsIGNvbnN0IGNoYXIgKmZpZWxkLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZzaXpl KQoreworCWludCBmZCwgcmV0OworCisJZmQgPSBvcGVuYXQocm9vdCwgZmllbGQsIE9fUkRPTkxZ KTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSBfX3JlYWRfdG9fYnVmKGZk LCBidWYsIGJ1ZnNpemUpOworCisJY2xvc2UoZmQpOworCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIHVpbnQ2NF90CityZWFkX2NsaWVudF9idXN5KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5z aWduZWQgaW50IGNsYXNzKQoreworCWNvbnN0IGNoYXIgKmNsYXNzX3N0cltdID0geyAiMCIsICIx IiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiB9OworCWNoYXIgYnVmWzI1Nl0sICpiOwor CWludCByZXQ7CisKKwlhc3NlcnQoY2xhc3MgPCBBUlJBWV9TSVpFKGNsYXNzX3N0cikpOworCWlm IChjbGFzcyA+PSBBUlJBWV9TSVpFKGNsYXNzX3N0cikpCisJCXJldHVybiAwOworCisJYXNzZXJ0 KGNsaWVudC0+c3lzZnNfcm9vdCA+PSAwKTsKKwlpZiAoY2xpZW50LT5zeXNmc19yb290IDwgMCkK KwkJcmV0dXJuIDA7CisKKwlpZiAoY2xpZW50LT5idXN5X3Jvb3QgPCAwKQorCQljbGllbnQtPmJ1 c3lfcm9vdCA9IG9wZW5hdChjbGllbnQtPnN5c2ZzX3Jvb3QsICJidXN5IiwKKwkJCQkJICAgT19S RE9OTFkgfCBPX0RJUkVDVE9SWSk7CisKKwlhc3NlcnQoY2xpZW50LT5idXN5X3Jvb3QpOworCWlm IChjbGllbnQtPmJ1c3lfcm9vdCA8IDApCisJCXJldHVybiAwOworCisJcmV0ID0gX19yZWFkX2Ns aWVudF9maWVsZChjbGllbnQtPmJ1c3lfcm9vdCwgY2xhc3Nfc3RyW2NsYXNzXSwgYnVmLAorCQkJ CSAgc2l6ZW9mKGJ1ZikpOworCWFzc2VydChyZXQgPT0gMCk7CisJaWYgKHJldCkKKwkJcmV0dXJu IDA7CisKKwkvKgorCSAqIEhhbmRsZSBib3RoIHNpbmdsZSBpbnRlZ2VyIGFuZCBrZXk9dmFsdWUg Zm9ybWF0cyBieSBza2lwcGluZworCSAqIGxlYWRpbmcgbm9uLWRpZ2l0cy4KKwkgKi8KKwliID0g YnVmOworCXdoaWxlICgqYiAmJiAhaXNkaWdpdCgqYikpCisJCWIrKzsKKworCXJldHVybiBzdHJ0 b3VsbChiLCBOVUxMLCAxMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xpZW50ICoKK2ZpbmRfY2xp ZW50KHN0cnVjdCBjbGllbnRzICpjbGllbnRzLCBlbnVtIGNsaWVudF9zdGF0dXMgc3RhdHVzLCB1 bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IGNsaWVudCAqYzsKKwlpbnQgdG1wOworCisJZm9y X2VhY2hfY2xpZW50KGNsaWVudHMsIGMsIHRtcCkgeworCQlpZiAoc3RhdHVzICE9IGMtPnN0YXR1 cykKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdGF0dXMgPT0gRlJFRSB8fCBjLT5pZCA9PSBpZCkK KwkJCXJldHVybiBjOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB1cGRh dGVfY2xpZW50KHN0cnVjdCBjbGllbnQgKmMsIHVuc2lnbmVkIGludCBwaWQsIGNoYXIgKm5hbWUp Cit7CisJdWludDY0X3QgdmFsW2MtPmNsaWVudHMtPm51bV9jbGFzc2VzXTsKKwl1bnNpZ25lZCBp bnQgaTsKKworCWlmIChjLT5waWQgIT0gcGlkKQorCQljLT5waWQgPSBwaWQ7CisKKwlpZiAoc3Ry Y21wKGMtPm5hbWUsIG5hbWUpKSB7CisJCWNoYXIgKnA7CisKKwkJc3RybmNweShjLT5uYW1lLCBu YW1lLCBzaXplb2YoYy0+bmFtZSkgLSAxKTsKKwkJc3RybmNweShjLT5wcmludF9uYW1lLCBuYW1l LCBzaXplb2YoYy0+cHJpbnRfbmFtZSkgLSAxKTsKKworCQlwID0gYy0+cHJpbnRfbmFtZTsKKwkJ d2hpbGUgKCpwKSB7CisJCQlpZiAoIWlzcHJpbnQoKnApKQorCQkJCSpwID0gJyonOworCQkJcCsr OworCQl9OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjLT5jbGllbnRzLT5udW1fY2xhc3Nlczsg aSsrKQorCQl2YWxbaV0gPSByZWFkX2NsaWVudF9idXN5KGMsIGMtPmNsaWVudHMtPmNsYXNzW2ld LmNsYXNzKTsKKworCWMtPnRvdGFsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjLT5jbGllbnRz LT5udW1fY2xhc3NlczsgaSsrKSB7CisJCWlmICh2YWxbaV0gPCBjLT5sYXN0W2ldKQorCQkJY29u dGludWU7IC8qIEl0IHdpbGwgY2F0Y2ggdXAgc29vbi4gKi8KKworCQljLT52YWxbaV0gPSB2YWxb aV0gLSBjLT5sYXN0W2ldOworCQljLT50b3RhbCArPSBjLT52YWxbaV07CisJCWMtPmxhc3RbaV0g PSB2YWxbaV07CisJfQorCisJYy0+c2FtcGxlcysrOworCWMtPnN0YXR1cyA9IEFMSVZFOworfQor CitzdGF0aWMgdm9pZAorYWRkX2NsaWVudChzdHJ1Y3QgY2xpZW50cyAqY2xpZW50cywgdW5zaWdu ZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgcGlkLAorCSAgIGNoYXIgKm5hbWUsIGludCBzeXNmc19y b290KQoreworCXN0cnVjdCBjbGllbnQgKmM7CisKKwlpZiAoZmluZF9jbGllbnQoY2xpZW50cywg QUxJVkUsIGlkKSkKKwkJcmV0dXJuOworCisJYyA9IGZpbmRfY2xpZW50KGNsaWVudHMsIEZSRUUs IDApOworCWlmICghYykgeworCQl1bnNpZ25lZCBpbnQgaWR4ID0gY2xpZW50cy0+bnVtX2NsaWVu dHM7CisKKwkJY2xpZW50cy0+bnVtX2NsaWVudHMgKz0gKGNsaWVudHMtPm51bV9jbGllbnRzICsg MikgLyAyOworCQljbGllbnRzLT5jbGllbnQgPSByZWFsbG9jKGNsaWVudHMtPmNsaWVudCwKKwkJ CQkJICBjbGllbnRzLT5udW1fY2xpZW50cyAqIHNpemVvZigqYykpOworCQlhc3NlcnQoY2xpZW50 cy0+Y2xpZW50KTsKKworCQljID0gJmNsaWVudHMtPmNsaWVudFtpZHhdOworCQltZW1zZXQoYywg MCwgKGNsaWVudHMtPm51bV9jbGllbnRzIC0gaWR4KSAqIHNpemVvZigqYykpOworCX0KKworCWMt PnN5c2ZzX3Jvb3QgPSBzeXNmc19yb290OworCWMtPmJ1c3lfcm9vdCA9IC0xOworCWMtPmlkID0g aWQ7CisJYy0+Y2xpZW50cyA9IGNsaWVudHM7CisJYy0+dmFsID0gY2FsbG9jKGNsaWVudHMtPm51 bV9jbGFzc2VzLCBzaXplb2YoYy0+dmFsKSk7CisJYy0+bGFzdCA9IGNhbGxvYyhjbGllbnRzLT5u dW1fY2xhc3Nlcywgc2l6ZW9mKGMtPmxhc3QpKTsKKwlhc3NlcnQoYy0+dmFsICYmIGMtPmxhc3Qp OworCisJdXBkYXRlX2NsaWVudChjLCBwaWQsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBmcmVl X2NsaWVudChzdHJ1Y3QgY2xpZW50ICpjKQoreworCWlmIChjLT5zeXNmc19yb290ID49IDApCisJ CWNsb3NlKGMtPnN5c2ZzX3Jvb3QpOworCWlmIChjLT5idXN5X3Jvb3QgPj0gMCkKKwkJY2xvc2Uo Yy0+YnVzeV9yb290KTsKKwlmcmVlKGMtPnZhbCk7CisJZnJlZShjLT5sYXN0KTsKKwltZW1zZXQo YywgMCwgc2l6ZW9mKCpjKSk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfY2xpZW50X3N5c2ZzKGNo YXIgKmJ1ZiwgaW50IGJ1ZnNpemUsIGNvbnN0IGNoYXIgKnN5c2ZzX3Jvb3QsCisJCSAgdW5zaWdu ZWQgaW50IGlkLCBjb25zdCBjaGFyICpmaWVsZCwgaW50ICpjbGllbnRfcm9vdCkKK3sKKwlzc2l6 ZV90IHJldDsKKworCWlmICgqY2xpZW50X3Jvb3QgPCAwKSB7CisJCWNoYXIgbmFtZWJ1ZlsyNTZd OworCisJCXJldCA9IHNucHJpbnRmKG5hbWVidWYsIHNpemVvZihuYW1lYnVmKSwgIiVzLyV1IiwK KwkJCSAgICAgICBzeXNmc19yb290LCBpZCk7CisJCWFzc2VydChyZXQgPiAwICYmIHJldCA8IHNp emVvZihuYW1lYnVmKSk7CisJCWlmIChyZXQgPD0gMCB8fCByZXQgPT0gc2l6ZW9mKG5hbWVidWYp KQorCQkJcmV0dXJuIC0xOworCisJCSpjbGllbnRfcm9vdCA9IG9wZW4obmFtZWJ1ZiwgT19SRE9O TFkgfCBPX0RJUkVDVE9SWSk7CisJfQorCisJaWYgKCpjbGllbnRfcm9vdCA8IDApCisJCXJldHVy biAtMTsKKworCXJldHVybiBfX3JlYWRfY2xpZW50X2ZpZWxkKCpjbGllbnRfcm9vdCwgZmllbGQs IGJ1ZiwgYnVmc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNjYW5fY2xpZW50cyhzdHJ1Y3QgY2xp ZW50cyAqY2xpZW50cykKK3sKKwlzdHJ1Y3QgZGlyZW50ICpkZW50OworCXN0cnVjdCBjbGllbnQg KmM7CisJdW5zaWduZWQgaW50IGlkOworCWludCB0bXA7CisJRElSICpkOworCisJaWYgKCFjbGll bnRzKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9jbGllbnQoY2xpZW50cywgYywgdG1wKSB7CisJ CWlmIChjLT5zdGF0dXMgPT0gQUxJVkUpCisJCQljLT5zdGF0dXMgPSBQUk9CRTsKKwl9CisKKwlk ID0gb3BlbmRpcihjbGllbnRzLT5zeXNmc19yb290KTsKKwlpZiAoIWQpCisJCXJldHVybjsKKwor CXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKwkJY2hhciBuYW1lWzI0XSwg cGlkWzI0XTsKKwkJaW50IHJldCwgcm9vdCA9IC0xLCAqcHI7CisKKwkJaWYgKGRlbnQtPmRfdHlw ZSAhPSBEVF9ESVIpCisJCQljb250aW51ZTsKKwkJaWYgKCFpc2RpZ2l0KGRlbnQtPmRfbmFtZVsw XSkpCisJCQljb250aW51ZTsKKworCQlpZCA9IGF0b2koZGVudC0+ZF9uYW1lKTsKKworCQljID0g ZmluZF9jbGllbnQoY2xpZW50cywgUFJPQkUsIGlkKTsKKworCQlpZiAoYykKKwkJCXByID0gJmMt PnN5c2ZzX3Jvb3Q7CisJCWVsc2UKKwkJCXByID0gJnJvb3Q7CisKKwkJcmV0ID0gcmVhZF9jbGll bnRfc3lzZnMobmFtZSwgc2l6ZW9mKG5hbWUpLCBjbGllbnRzLT5zeXNmc19yb290LAorCQkJCQlp ZCwgIm5hbWUiLCBwcik7CisJCXJldCB8PSByZWFkX2NsaWVudF9zeXNmcyhwaWQsIHNpemVvZihw aWQpLCBjbGllbnRzLT5zeXNmc19yb290LAorCQkJCQlpZCwgInBpZCIsIHByKTsKKwkJaWYgKCFy ZXQpIHsKKwkJCWlmICghYykKKwkJCQlhZGRfY2xpZW50KGNsaWVudHMsIGlkLCBhdG9pKHBpZCks IG5hbWUsIHJvb3QpOworCQkJZWxzZQorCQkJCXVwZGF0ZV9jbGllbnQoYywgYXRvaShwaWQpLCBu YW1lKTsKKwkJfSBlbHNlIGlmIChjKSB7CisJCQljLT5zdGF0dXMgPSBQUk9CRTsgLyogV2lsbCBi ZSBkZWxldGVkIGJlbG93LiAqLworCQl9CisJfQorCisJY2xvc2VkaXIoZCk7CisKKwlmb3JfZWFj aF9jbGllbnQoY2xpZW50cywgYywgdG1wKSB7CisJCWlmIChjLT5zdGF0dXMgPT0gUFJPQkUpCisJ CQlmcmVlX2NsaWVudChjKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2xpZW50X2NtcChjb25zdCB2 b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IGNsaWVudCAqYSA9IF9h OworCWNvbnN0IHN0cnVjdCBjbGllbnQgKmIgPSBfYjsKKwlsb25nIHRvdF9hLCB0b3RfYjsKKwor CS8qCisJICogU29ydCBjbGllbnRzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgcnVudGltZSBpbiB0 aGUgcHJldmlvdXMgc2FtcGxpbmcKKwkgKiBwZXJpb2QgZm9yIGFjdGl2ZSBvbmVzLCBmb2xsb3dl ZCBieSBpbmFjdGl2ZS4gVGllLWJyZWFrZXIgaXMgY2xpZW50CisJICogaWQuCisJICovCisKKwl0 b3RfYSA9IGEtPnN0YXR1cyA9PSBBTElWRSA/IGEtPnRvdGFsIDogLTE7CisJdG90X2IgPSBiLT5z dGF0dXMgPT0gQUxJVkUgPyBiLT50b3RhbCA6IC0xOworCisJdG90X2IgLT0gdG90X2E7CisJaWYg KCF0b3RfYikKKwkJcmV0dXJuIChpbnQpYi0+aWQgLSBhLT5pZDsKKworCWlmICh0b3RfYiA+IDAp CisJCXJldHVybiAxOworCWlmICh0b3RfYiA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgc29ydF9jbGllbnRzKHN0cnVjdCBjbGllbnRzICpjbGllbnRzKQor eworCXVuc2lnbmVkIGludCBhY3RpdmUsIGZyZWU7CisJc3RydWN0IGNsaWVudCAqYzsKKwlpbnQg dG1wOworCisJaWYgKCFjbGllbnRzKQorCQlyZXR1cm47CisKKwlxc29ydChjbGllbnRzLT5jbGll bnQsIGNsaWVudHMtPm51bV9jbGllbnRzLCBzaXplb2YoKmNsaWVudHMtPmNsaWVudCksCisJICAg ICAgY2xpZW50X2NtcCk7CisKKwkvKiBUcmltIGV4Y2Vzc2l2ZSBhcnJheSBzcGFjZS4gKi8KKwlh Y3RpdmUgPSAwOworCWZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBjLCB0bXApIHsKKwkJaWYgKGMt PnN0YXR1cyAhPSBBTElWRSkKKwkJCWJyZWFrOyAvKiBBY3RpdmUgY2xpZW50cyBhcmUgZmlyc3Qg aW4gdGhlIGFycmF5LiAqLworCQlhY3RpdmUrKzsKKwl9CisKKwlmcmVlID0gY2xpZW50cy0+bnVt X2NsaWVudHMgLSBhY3RpdmU7CisJaWYgKGZyZWUgPiBjbGllbnRzLT5udW1fY2xpZW50cyAvIDIp IHsKKwkJYWN0aXZlID0gY2xpZW50cy0+bnVtX2NsaWVudHMgLSBmcmVlIC8gMjsKKwkJaWYgKGFj dGl2ZSAhPSBjbGllbnRzLT5udW1fY2xpZW50cykgeworCQkJY2xpZW50cy0+bnVtX2NsaWVudHMg PSBhY3RpdmU7CisJCQljbGllbnRzLT5jbGllbnQgPSByZWFsbG9jKGNsaWVudHMtPmNsaWVudCwK KwkJCQkJCSAgY2xpZW50cy0+bnVtX2NsaWVudHMgKgorCQkJCQkJICBzaXplb2YoKmMpKTsKKwkJ fQorCX0KK30KKworCiBzdGF0aWMgY29uc3QgY2hhciAqYmFyc1tdID0geyAiICIsICLilo8iLCAi 4paOIiwgIuKWjSIsICLilowiLCAi4paLIiwgIuKWiiIsICLilokiLCAi4paIIiB9OwogCitzdGF0 aWMgdm9pZCBuX3NwYWNlcyhjb25zdCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQg aTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXB1dGNoYXIoJyAnKTsKK30KKwogc3Rh dGljIHZvaWQKLXByaW50X3BlcmNlbnRhZ2VfYmFyKGRvdWJsZSBwZXJjZW50LCBpbnQgbWF4X2xl bikKK3ByaW50X3BlcmNlbnRhZ2VfYmFyKGRvdWJsZSBwZXJjZW50LCBpbnQgbWF4X2xlbiwgYm9v bCBudW1lcmljKQogewotCWludCBiYXJfbGVuID0gcGVyY2VudCAqICg4ICogKG1heF9sZW4gLSAy KSkgLyAxMDAuMDsKLQlpbnQgaTsKKwlpbnQgYmFyX2xlbiwgaSwgbGVuID0gbWF4X2xlbiAtIDI7 CisJY29uc3QgaW50IHcgPSA4OworCisJYXNzZXJ0KG1heF9sZW4gPiAwKTsKKworCWJhcl9sZW4g PSBwZXJjZW50ICogbGVuIC8gMTAwLjA7CisJaWYgKGJhcl9sZW4gPiBsZW4pCisJCWJhcl9sZW4g PSBsZW47CisJYmFyX2xlbiAqPSB3OwogCiAJcHV0Y2hhcignfCcpOwogCi0JZm9yIChpID0gYmFy X2xlbjsgaSA+PSA4OyBpIC09IDgpCi0JCXByaW50ZigiJXMiLCBiYXJzWzhdKTsKKwlmb3IgKGkg PSBiYXJfbGVuOyBpID49IHc7IGkgLT0gdykKKwkJcHJpbnRmKCIlcyIsIGJhcnNbd10pOwogCWlm IChpKQogCQlwcmludGYoIiVzIiwgYmFyc1tpXSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgKG1heF9s ZW4gLSAyIC0gKGJhcl9sZW4gKyA3KSAvIDgpOyBpKyspCi0JCXB1dGNoYXIoJyAnKTsKKwlsZW4g LT0gKGJhcl9sZW4gKyAodyAtIDEpKSAvIHc7CisJbl9zcGFjZXMobGVuKTsKIAogCXB1dGNoYXIo J3wnKTsKKworCWlmIChudW1lcmljKSB7CisJCS8qCisJCSAqIFRPRE86IEZpbmVyIGdyYWluZWQg cmV2ZXJzZSBjb250cm9sIHRvIGJldHRlciBwcmVzZXJ2ZQorCQkgKiBiYXIgdW5kZXIgbnVtZXJp Y2FsIHBlcmNlbnRhZ2UuCisJCSAqLworCQlwcmludGYoIlwwMzNbJXVEXDAzM1s3bSIsIG1heF9s ZW4gLSAxKTsKKwkJaSA9IHByaW50ZigiJTMuZiUlIiwgcGVyY2VudCk7CisJCXByaW50ZigiXDAz M1sldUNcMDMzWzBtIiwgbWF4X2xlbiAtIGkgLSAxKTsKKwl9CiB9CiAKICNkZWZpbmUgREVGQVVM VF9QRVJJT0RfTVMgKDEwMDApCkBAIC03MDUsOCArMTExNSw2IEBAIHN0YXRpYyBjb25zdCBjaGFy ICpqc29uX2luZGVudFtdID0gewogCSJcdFx0XHRcdFx0IiwKIH07CiAKLSNkZWZpbmUgQVJSQVlf U0laRShhcnIpIChzaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKSkKLQogc3RhdGljIHVuc2lnbmVk IGludCBqc29uX3ByZXZfc3RydWN0X21lbWJlcnM7CiBzdGF0aWMgdW5zaWduZWQgaW50IGpzb25f c3RydWN0X21lbWJlcnM7CiAKQEAgLTc0NCw2ICsxMTUyLDE4IEBAIGpzb25fY2xvc2Vfc3RydWN0 KHZvaWQpCiAJCWZmbHVzaChzdGRvdXQpOwogfQogCitzdGF0aWMgdm9pZAorX19qc29uX2FkZF9t ZW1iZXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWwpCit7CisJYXNzZXJ0KGpzb25f aW5kZW50X2xldmVsIDwgQVJSQVlfU0laRShqc29uX2luZGVudCkpOworCisJZnByaW50ZihvdXQs ICIlcyVzXCIlc1wiOiBcIiVzXCIiLAorCQlqc29uX3N0cnVjdF9tZW1iZXJzID8gIixcbiIgOiAi IiwKKwkJanNvbl9pbmRlbnRbanNvbl9pbmRlbnRfbGV2ZWxdLCBrZXksIHZhbCk7CisKKwlqc29u X3N0cnVjdF9tZW1iZXJzKys7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQKIGpzb25fYWRkX21l bWJlcihjb25zdCBzdHJ1Y3QgY250X2dyb3VwICpwYXJlbnQsIHN0cnVjdCBjbnRfaXRlbSAqaXRl bSwKIAkJdW5zaWduZWQgaW50IGhlYWRlcnMpCkBAIC0xMDQ2LDggKzE0NjYsNiBAQCBwcmludF9o ZWFkZXIoY29uc3Qgc3RydWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCwKIAkJbWVtbW92ZSgmZ3Jv dXBzWzBdLCAmZ3JvdXBzWzFdLAogCQkJc2l6ZW9mKGdyb3VwcykgLSBzaXplb2YoZ3JvdXBzWzBd KSk7CiAKLQlwb3BzLT5vcGVuX3N0cnVjdChOVUxMKTsKLQogCSpjb25zdW1lZCA9IHByaW50X2dy b3Vwcyhncm91cHMpOwogCiAJaWYgKG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CkBAIC0x MjA0LDcgKzE2MjIsNyBAQCBwcmludF9lbmdpbmUoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIHVu c2lnbmVkIGludCBpLCBkb3VibGUgdCwKIAkJCSAgICAgIGVuZ2luZS0+ZGlzcGxheV9uYW1lLCBl bmdpbmVfaXRlbXNbMF0uYnVmKTsKIAogCQl2YWwgPSBwbXVfY2FsYygmZW5naW5lLT5idXN5LnZh bCwgMWU5LCB0LCAxMDApOwotCQlwcmludF9wZXJjZW50YWdlX2Jhcih2YWwsIG1heF93IC0gbGVu KTsKKwkJcHJpbnRfcGVyY2VudGFnZV9iYXIodmFsLCBtYXhfdyA+IGxlbiA/IG1heF93IC0gbGVu IDogMCwgZmFsc2UpOwogCiAJCXByaW50ZigiJXNcbiIsIGJ1Zik7CiAKQEAgLTEyMTksNyArMTYz Nyw2IEBAIHByaW50X2VuZ2luZXNfZm9vdGVyKHN0cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3Vi bGUgdCwKIAkJICAgICBpbnQgbGluZXMsIGludCBjb25fdywgaW50IGNvbl9oKQogewogCXBvcHMt PmNsb3NlX3N0cnVjdCgpOwotCXBvcHMtPmNsb3NlX3N0cnVjdCgpOwogCiAJaWYgKG91dHB1dF9t b2RlID09IElOVEVSQUNUSVZFKSB7CiAJCWlmIChsaW5lcysrIDwgY29uX2gpCkBAIC0xMjQzLDYg KzE2NjAsOSBAQCBzdGF0aWMgdm9pZCBpbml0X2VuZ2luZV9jbGFzc2VzKHN0cnVjdCBlbmdpbmVz ICplbmdpbmVzKQogCXVuc2lnbmVkIGludCBpLCBudW07CiAJaW50IG1heCA9IC0xOwogCisJaWYg KGVuZ2luZXMtPm51bV9jbGFzc2VzKQorCQlyZXR1cm47CisKIAlmb3IgKGkgPSAwOyBpIDwgZW5n aW5lcy0+bnVtX2VuZ2luZXM7IGkrKykgewogCQlzdHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdp bmVfcHRyKGVuZ2luZXMsIGkpOwogCkBAIC0xNDA0LDYgKzE4MjQsMTUzIEBAIHByaW50X2VuZ2lu ZXMoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIGRvdWJsZSB0LCBpbnQgbGluZXMsIGludCB3LCBp bnQgaCkKIAlyZXR1cm4gbGluZXM7CiB9CiAKK3N0YXRpYyBpbnQKK3ByaW50X2NsaWVudHNfaGVh ZGVyKHN0cnVjdCBjbGllbnRzICpjbGllbnRzLCBpbnQgbGluZXMsCisJCSAgICAgaW50IGNvbl93 LCBpbnQgY29uX2gsIGludCAqY2xhc3NfdykKK3sKKwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJB Q1RJVkUpIHsKKwkJY29uc3QgY2hhciAqcGlkbmFtZSA9ICIgICBQSUQgICAgICAgICAgICAgIE5B TUUgIjsKKwkJdW5zaWduZWQgaW50IG51bV9hY3RpdmUgPSAwOworCQlpbnQgbGVuID0gc3RybGVu KHBpZG5hbWUpOworCisJCWlmIChsaW5lcysrID49IGNvbl9oKQorCQkJcmV0dXJuIGxpbmVzOwor CisJCXByaW50ZigiXDAzM1s3bSIpOworCQlwcmludGYoIiVzIiwgcGlkbmFtZSk7CisKKwkJaWYg KGxpbmVzKysgPj0gY29uX2ggfHwgbGVuID49IGNvbl93KQorCQkJcmV0dXJuIGxpbmVzOworCisJ CWlmIChjbGllbnRzLT5udW1fY2xhc3NlcykgeworCQkJdW5zaWduZWQgaW50IGk7CisJCQlpbnQg d2lkdGg7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBjbGllbnRzLT5udW1fY2xhc3NlczsgaSsrKSB7 CisJCQkJaWYgKGNsaWVudHMtPmNsYXNzW2ldLm51bV9lbmdpbmVzKQorCQkJCQludW1fYWN0aXZl Kys7CisJCQl9CisKKwkJCSpjbGFzc193ID0gd2lkdGggPSAoY29uX3cgLSBsZW4pIC8gbnVtX2Fj dGl2ZTsKKworCQkJZm9yIChpID0gMDsgaSA8IGNsaWVudHMtPm51bV9jbGFzc2VzOyBpKyspIHsK KwkJCQljb25zdCBjaGFyICpuYW1lID0gY2xpZW50cy0+Y2xhc3NbaV0ubmFtZTsKKwkJCQlpbnQg bmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJCQkJaW50IHBhZCA9ICh3aWR0aCAtIG5hbWVfbGVu KSAvIDI7CisJCQkJaW50IHNwYWNlcyA9IHdpZHRoIC0gcGFkIC0gbmFtZV9sZW47CisKKwkJCQlp ZiAoIWNsaWVudHMtPmNsYXNzW2ldLm51bV9lbmdpbmVzKQorCQkJCQljb250aW51ZTsgLyogQXNz ZXJ0IGluIHRoZSBpZGVhbCB3b3JsZC4gKi8KKworCQkJCWlmIChwYWQgPCAwIHx8IHNwYWNlcyA8 IDApCisJCQkJCWNvbnRpbnVlOworCisJCQkJbl9zcGFjZXMocGFkKTsKKwkJCQlwcmludGYoIiVz IiwgbmFtZSk7CisJCQkJbl9zcGFjZXMoc3BhY2VzKTsKKwkJCQlsZW4gKz0gcGFkICsgbmFtZV9s ZW4gKyBzcGFjZXM7CisJCQl9CisJCX0KKworCQluX3NwYWNlcyhjb25fdyAtIGxlbik7CisJCXBy aW50ZigiXDAzM1swbVxuIik7CisJfSBlbHNlIHsKKwkJaWYgKGNsaWVudHMtPm51bV9jbGFzc2Vz KQorCQkJcG9wcy0+b3Blbl9zdHJ1Y3QoImNsaWVudHMiKTsKKwl9CisKKwlyZXR1cm4gbGluZXM7 Cit9CisKK3N0YXRpYyBib29sIG51bWVyaWNfY2xpZW50czsKKworc3RhdGljIGludAorcHJpbnRf Y2xpZW50KHN0cnVjdCBjbGllbnQgKmMsIHN0cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUg dCwgaW50IGxpbmVzLAorCSAgICAgaW50IGNvbl93LCBpbnQgY29uX2gsIHVuc2lnbmVkIGludCBw ZXJpb2RfdXMsIGludCAqY2xhc3NfdykKK3sKKwlzdHJ1Y3QgY2xpZW50cyAqY2xpZW50cyA9IGMt PmNsaWVudHM7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJB Q1RJVkUpIHsKKwkJcHJpbnRmKCIlNnUgJTE3cyAiLCBjLT5waWQsIGMtPnByaW50X25hbWUpOwor CisJCWZvciAoaSA9IDA7IGMtPnNhbXBsZXMgPiAxICYmIGkgPCBjbGllbnRzLT5udW1fY2xhc3Nl czsgaSsrKSB7CisJCQlkb3VibGUgcGN0OworCisJCQlpZiAoIWNsaWVudHMtPmNsYXNzW2ldLm51 bV9lbmdpbmVzKQorCQkJCWNvbnRpbnVlOyAvKiBBc3NlcnQgaW4gdGhlIGlkZWFsIHdvcmxkLiAq LworCisJCQlwY3QgPSAoZG91YmxlKWMtPnZhbFtpXSAvIHBlcmlvZF91cyAvIDFlMyAqIDEwMCAv CisJCQkgICAgICBjbGllbnRzLT5jbGFzc1tpXS5udW1fZW5naW5lczsKKworCQkJLyoKKwkJCSAq IEd1YXJkIGFnYWluc3QgcG9zc2libGUgdGltZS1kcmlmdCBiZXR3ZWVuIHNhbXBsaW5nCisJCQkg KiBjbGllbnQgZGF0YSBhbmQgdGltZSB3ZSBvYnRhaW5lZCBvdXIgdGltZS1kZWx0YSBmcm9tCisJ CQkgKiBQTVUuCisJCQkgKi8KKwkJCWlmIChwY3QgPiAxMDAuMCkKKwkJCQlwY3QgPSAxMDAuMDsK KworCQkJcHJpbnRfcGVyY2VudGFnZV9iYXIocGN0LCAqY2xhc3NfdywgbnVtZXJpY19jbGllbnRz KTsKKworCQkJbGluZXMrKzsKKwkJfQorCisJCXB1dGNoYXIoJ1xuJyk7CisJfSBlbHNlIGlmIChv dXRwdXRfbW9kZSA9PSBKU09OKSB7CisJCWNoYXIgYnVmWzY0XTsKKworCQlzbnByaW50ZihidWYs IHNpemVvZihidWYpLCAiJXUiLCBjLT5pZCk7CisJCXBvcHMtPm9wZW5fc3RydWN0KGJ1Zik7CisK KwkJX19qc29uX2FkZF9tZW1iZXIoIm5hbWUiLCBjLT5wcmludF9uYW1lKTsKKworCQlzbnByaW50 ZihidWYsIHNpemVvZihidWYpLCAiJXUiLCBjLT5waWQpOworCQlfX2pzb25fYWRkX21lbWJlcigi cGlkIiwgYnVmKTsKKworCQlpZiAoYy0+c2FtcGxlcyA+IDEpIHsKKwkJCXBvcHMtPm9wZW5fc3Ry dWN0KCJlbmdpbmUtY2xhc3NlcyIpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgY2xpZW50cy0+bnVt X2NsYXNzZXM7IGkrKykgeworCQkJCWRvdWJsZSBwY3Q7CisKKwkJCQlzbnByaW50ZihidWYsIHNp emVvZihidWYpLCAiJXMiLAorCQkJCQljbGllbnRzLT5jbGFzc1tpXS5uYW1lKTsKKwkJCQlwb3Bz LT5vcGVuX3N0cnVjdChidWYpOworCisJCQkJcGN0ID0gKGRvdWJsZSljLT52YWxbaV0gLyBwZXJp b2RfdXMgLyAxZTMgKiAxMDA7CisJCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVmIiwg cGN0KTsKKwkJCQlfX2pzb25fYWRkX21lbWJlcigiYnVzeSIsIGJ1Zik7CisKKwkJCQlfX2pzb25f YWRkX21lbWJlcigidW5pdCIsICIlIik7CisKKwkJCQlwb3BzLT5jbG9zZV9zdHJ1Y3QoKTsKKwkJ CX0KKworCQkJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CisJCX0KKworCQlwb3BzLT5jbG9zZV9zdHJ1 Y3QoKTsKKwl9CisKKwlyZXR1cm4gbGluZXM7Cit9CisKK3N0YXRpYyBpbnQKK3ByaW50X2NsaWVu dHNfZm9vdGVyKHN0cnVjdCBjbGllbnRzICpjbGllbnRzLCBkb3VibGUgdCwKKwkJICAgICBpbnQg bGluZXMsIGludCBjb25fdywgaW50IGNvbl9oKQoreworCWlmIChvdXRwdXRfbW9kZSA9PSBJTlRF UkFDVElWRSkgeworCQlpZiAobGluZXMrKyA8IGNvbl9oKQorCQkJcHJpbnRmKCJcbiIpOworCX0g ZWxzZSB7CisJCWlmIChjbGllbnRzLT5udW1fY2xhc3NlcykKKwkJCXBvcHMtPmNsb3NlX3N0cnVj dCgpOworCX0KKworCXJldHVybiBsaW5lczsKK30KKwogc3RhdGljIGJvb2wgc3RvcF90b3A7CiAK IHN0YXRpYyB2b2lkIHNpZ2ludF9oYW5kbGVyKGludCAgc2lnKQpAQCAtMTQ4NSw2ICsyMDUyLDkg QEAgc3RhdGljIHZvaWQgcHJvY2Vzc19zdGRpbih1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIAkJ Y2FzZSAnMSc6CiAJCQljbGFzc192aWV3IF49IHRydWU7CiAJCQlicmVhazsKKwkJY2FzZSAnbic6 CisJCQludW1lcmljX2NsaWVudHMgXj0gdHJ1ZTsKKwkJCWJyZWFrOwogCQl9OwogCX0KIH0KQEAg LTE0OTIsNiArMjA2Miw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3RkaW4odW5zaWduZWQgaW50 IHRpbWVvdXRfdXMpCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJdW5zaWdu ZWQgaW50IHBlcmlvZF91cyA9IERFRkFVTFRfUEVSSU9EX01TICogMTAwMDsKKwlzdHJ1Y3QgY2xp ZW50cyAqY2xpZW50cyA9IE5VTEw7CiAJaW50IGNvbl93ID0gLTEsIGNvbl9oID0gLTE7CiAJY2hh ciAqb3V0cHV0X3BhdGggPSBOVUxMOwogCXN0cnVjdCBlbmdpbmVzICplbmdpbmVzOwpAQCAtMTYy NSwxMyArMjE5NiwyMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAlyZXQg PSBFWElUX1NVQ0NFU1M7CiAKKwljbGllbnRzID0gaW5pdF9jbGllbnRzKGNhcmQucGNpX3Nsb3Rf bmFtZVswXSA/IGNhcmQuY2FyZCA6IE5VTEwpOworCWluaXRfZW5naW5lX2NsYXNzZXMoZW5naW5l cyk7CisJY2xpZW50cy0+bnVtX2NsYXNzZXMgPSBlbmdpbmVzLT5udW1fY2xhc3NlczsKKwljbGll bnRzLT5jbGFzcyA9IGVuZ2luZXMtPmNsYXNzOworCiAJcG11X3NhbXBsZShlbmdpbmVzKTsKKwlz Y2FuX2NsaWVudHMoY2xpZW50cyk7CiAJY29kZW5hbWUgPSBpZ3RfZGV2aWNlX2dldF9wcmV0dHlf bmFtZSgmY2FyZCwgZmFsc2UpOwogCiAJd2hpbGUgKCFzdG9wX3RvcCkgewogCQlib29sIGNvbnN1 bWVkID0gZmFsc2U7Ci0JCWludCBsaW5lcyA9IDA7CisJCWludCBqLCBsaW5lcyA9IDA7CiAJCXN0 cnVjdCB3aW5zaXplIHdzOworCQlzdHJ1Y3QgY2xpZW50ICpjOwogCQlkb3VibGUgdDsKIAogCQkv KiBVcGRhdGUgdGVybWluYWwgc2l6ZS4gKi8KQEAgLTE2NTAsMTAgKzIyMjgsMTUgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlwbXVfc2FtcGxlKGVuZ2luZXMpOwogCQl0ID0g KGRvdWJsZSkoZW5naW5lcy0+dHMuY3VyIC0gZW5naW5lcy0+dHMucHJldikgLyAxZTk7CiAKKwkJ c2Nhbl9jbGllbnRzKGNsaWVudHMpOworCQlzb3J0X2NsaWVudHMoY2xpZW50cyk7CisKIAkJaWYg KHN0b3BfdG9wKQogCQkJYnJlYWs7CiAKIAkJd2hpbGUgKCFjb25zdW1lZCkgeworCQkJcG9wcy0+ b3Blbl9zdHJ1Y3QoTlVMTCk7CisKIAkJCWxpbmVzID0gcHJpbnRfaGVhZGVyKCZjYXJkLCBjb2Rl bmFtZSwgZW5naW5lcywKIAkJCQkJICAgICB0LCBsaW5lcywgY29uX3csIGNvbl9oLAogCQkJCQkg ICAgICZjb25zdW1lZCk7CkBAIC0xNjYxLDYgKzIyNDQsMzMgQEAgaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCQkJbGluZXMgPSBwcmludF9pbWMoZW5naW5lcywgdCwgbGluZXMsIGNv bl93LCBjb25faCk7CiAKIAkJCWxpbmVzID0gcHJpbnRfZW5naW5lcyhlbmdpbmVzLCB0LCBsaW5l cywgY29uX3csIGNvbl9oKTsKKworCQkJaWYgKGNsaWVudHMpIHsKKwkJCQlpbnQgY2xhc3NfdzsK KworCQkJCWxpbmVzID0gcHJpbnRfY2xpZW50c19oZWFkZXIoY2xpZW50cywgbGluZXMsCisJCQkJ CQkJICAgICBjb25fdywgY29uX2gsCisJCQkJCQkJICAgICAmY2xhc3Nfdyk7CisKKwkJCQlmb3Jf ZWFjaF9jbGllbnQoY2xpZW50cywgYywgaikgeworCQkJCQlhc3NlcnQoYy0+c3RhdHVzICE9IFBS T0JFKTsKKwkJCQkJaWYgKGMtPnN0YXR1cyAhPSBBTElWRSkKKwkJCQkJCWJyZWFrOyAvKiBBY3Rp dmUgY2xpZW50cyBhcmUgZmlyc3QgaW4gdGhlIGFycmF5LiAqLworCisJCQkJCWlmIChsaW5lcysr ID4gY29uX2gpCisJCQkJCQlicmVhazsKKworCQkJCQlsaW5lcyA9IHByaW50X2NsaWVudChjLCBl bmdpbmVzLCB0LAorCQkJCQkJCSAgICAgbGluZXMsIGNvbl93LAorCQkJCQkJCSAgICAgY29uX2gs IHBlcmlvZF91cywKKwkJCQkJCQkgICAgICZjbGFzc193KTsKKwkJCQl9CisKKwkJCQlsaW5lcyA9 IHByaW50X2NsaWVudHNfZm9vdGVyKGNsaWVudHMsIHQsIGxpbmVzLAorCQkJCQkJCSAgICAgY29u X3csIGNvbl9oKTsKKwkJCX0KKworCQkJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CiAJCX0KIAogCQlp ZiAoc3RvcF90b3ApCi0tIAoyLjI3LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=