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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 B0DF3C47095 for ; Wed, 9 Jun 2021 06:35:11 +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 8589561181 for ; Wed, 9 Jun 2021 06:35:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8589561181 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 DDD196E235; Wed, 9 Jun 2021 06:35:04 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 281606E212; Wed, 9 Jun 2021 06:35:02 +0000 (UTC) IronPort-SDR: T6UYHeithRGmwm75uuJhlCstpSbFvssdr37t8LVKuUzmD1ZUnXoZbIeaJKfhdR6eHD/QE4ud97 OhaXMkktgboQ== X-IronPort-AV: E=McAfee;i="6200,9189,10009"; a="268868907" X-IronPort-AV: E=Sophos;i="5.83,260,1616482800"; d="scan'208";a="268868907" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 23:35:01 -0700 IronPort-SDR: 19dPAPIKm6JiCEhqV887FPrdtc9DgeWVTRQrEWjLCIEIEj/WfDoOo6qVtPwsbiavU2vGXKSK6L QAqszx6CVPIg== X-IronPort-AV: E=Sophos;i="5.83,260,1616482800"; d="scan'208";a="482265833" Received: from ekolpasx-mobl.ccr.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.109]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 23:34:59 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Wed, 9 Jun 2021 08:34:34 +0200 Message-Id: <20210609063436.284332-8-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210609063436.284332-1-thomas.hellstrom@linux.intel.com> References: <20210609063436.284332-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 7/9] drm/i915/gt: Pipelined page migration 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: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , matthew.auld@intel.com, Chris Wilson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpJZiB3ZSBwaXBl bGluZSB0aGUgUFRFIHVwZGF0ZXMgYW5kIHRoZW4gZG8gdGhlIGNvcHkgb2YgdGhvc2UgcGFnZXMK d2l0aGluIGEgc2luZ2xlIHVucHJlZW1wdGlibGUgY29tbWFuZCBwYWNrZXQsIHdlIGNhbiBzdWJt aXQgdGhlIGNvcGllcwphbmQgbGVhdmUgdGhlbSB0byBiZSBzY2hlZHVsZWQgd2l0aG91dCBoYXZp bmcgdG8gc3luY2hyb25vdXNseSB3YWl0CnVuZGVyIGEgZ2xvYmFsIGxvY2suIEluIG9yZGVyIHRv IG1hbmFnZSBtaWdyYXRpb24sIHdlIG5lZWQgdG8KcHJlYWxsb2NhdGUgdGhlIHBhZ2UgdGFibGVz IChhbmQga2VlcCB0aGVtIHBpbm5lZCBhbmQgYXZhaWxhYmxlIGZvciB1c2UKYXQgYW55IHRpbWUp LCBjYXVzaW5nIGEgYm90dGxlbmVjayBmb3IgbWlncmF0aW9ucyBhcyBhbGwgY2xpZW50cyBtdXN0 CmNvbnRlbmQgb24gdGhlIGxpbWl0ZWQgcmVzb3VyY2VzLiBCeSBpbmxpbmluZyB0aGUgcHBHVFQg dXBkYXRlcyBhbmQKcGVyZm9ybWluZyB0aGUgYmxpdCBhdG9taWNhbGx5LCBlYWNoIGNsaWVudCBv bmx5IG93bnMgdGhlIFBURSB3aGlsZSBpbgp1c2UsIGFuZCBzbyB3ZSBjYW4gcmVzY2hlZHVsZSBp bmRpdmlkdWFsIG9wZXJhdGlvbnMgaG93ZXZlciB3ZSBzZWUgZml0LgpBbmQgbW9zdCBpbXBvcnRh bnRseSwgd2UgZG8gbm90IG5lZWQgdG8gdGFrZSBhIGdsb2JhbCBsb2NrIG9uIHRoZSBzaGFyZWQK dm0sIGFuZCB3YWl0IHVudGlsIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGUgYmVmb3JlIHJlbGVh c2luZyB0aGUgbG9jawpmb3Igb3RoZXJzIHRvIGNsYWltIHRoZSBQVEUgZm9yIHRoZW1zZWx2ZXMu CgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K Q28tZGV2ZWxvcGVkLWJ5OiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLmhlbGxzdHJvbUBsaW51 eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVs bHN0cm9tQGxpbnV4LmludGVsLmNvbT4KLS0tCnYyOgotIEFkZCBhIFRPRE8gZm9yIGh1Z2UgTE1F TSBwdGVzIChQb2ludGVkIG91dCBieSBNYXR0aGV3IEF1bGQpCi0gVXNlIGludGVsX2VuZ2luZV9k ZXN0cm95X3Bpbm5lZF9jb250ZXh0KCkgdG8gcHJvcGVybHkgdGFrZSB0aGUgcGlubmVkCiAgY29u dGV4dCB0aW1lbGluZSBvZmYgdGhlIGVuZ2luZSBsaXN0LiAoQ0kgd2FybmluZykuCi0tLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZS5oICAgICAgICB8ICAgMSArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29tbWFuZHMuaCAgfCAgIDIgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfbWlncmF0ZS5jICAgICAgIHwgNTQ0ICsrKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbWlncmF0ZS5oICAgICAgIHwgIDQ1 ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9taWdyYXRlX3R5cGVzLmggfCAgMTUg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZy5oICAgICAgICAgIHwgICAxICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X21pZ3JhdGUuYyAgICB8IDI5MSArKysr KysrKysrCiAuLi4vZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaCAgfCAg IDEgKwogOSBmaWxlcyBjaGFuZ2VkLCA5MDEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21pZ3JhdGUuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21pZ3JhdGUuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21pZ3JhdGVfdHlwZXMuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X21pZ3Jh dGUuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggMTZhNWEwMDZjZjdjLi45NWJkMzhlODQ2MjUg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0xMDgsNiArMTA4LDcgQEAgZ3QteSArPSBcCiAJZ3Qv aW50ZWxfZ3R0Lm8gXAogCWd0L2ludGVsX2xsYy5vIFwKIAlndC9pbnRlbF9scmMubyBcCisJZ3Qv aW50ZWxfbWlncmF0ZS5vIFwKIAlndC9pbnRlbF9tb2NzLm8gXAogCWd0L2ludGVsX3BwZ3R0Lm8g XAogCWd0L2ludGVsX3JjNi5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2VuZ2luZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmgK aW5kZXggMzZlYTllYjUyYmI1Li42MmY3NDQwYmMxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2VuZ2luZS5oCkBAIC0xODgsNiArMTg4LDcgQEAgaW50ZWxfd3JpdGVfc3RhdHVzX3Bh Z2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQgcmVnLCB1MzIgdmFsdWUpCiAj ZGVmaW5lIEk5MTVfR0VNX0hXU19QUkVFTVBUX0FERFIJKEk5MTVfR0VNX0hXU19QUkVFTVBUICog c2l6ZW9mKHUzMikpCiAjZGVmaW5lIEk5MTVfR0VNX0hXU19TRVFOTwkJMHg0MAogI2RlZmluZSBJ OTE1X0dFTV9IV1NfU0VRTk9fQUREUgkJKEk5MTVfR0VNX0hXU19TRVFOTyAqIHNpemVvZih1MzIp KQorI2RlZmluZSBJOTE1X0dFTV9IV1NfTUlHUkFURQkJKDB4NDIgKiBzaXplb2YodTMyKSkKICNk ZWZpbmUgSTkxNV9HRU1fSFdTX1NDUkFUQ0gJCTB4ODAKIAogI2RlZmluZSBJOTE1X0hXU19DU0Jf QlVGMF9JTkRFWAkJMHgxMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3B1X2NvbW1hbmRzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29t bWFuZHMuaAppbmRleCAyNjk0ZGJiOTk2N2UuLjFjM2FmMGZjMDQ1NiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmgKQEAgLTEyMyw4ICsxMjMsMTAgQEAK ICNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FEX05FUV9TREQJKDUgPDwgMTIpCiAjZGVmaW5lICAg TUlfU0VNQVBIT1JFX1RPS0VOX01BU0sJUkVHX0dFTk1BU0soOSwgNSkKICNkZWZpbmUgICBNSV9T RU1BUEhPUkVfVE9LRU5fU0hJRlQJNQorI2RlZmluZSBNSV9TVE9SRV9EQVRBX0lNTQlNSV9JTlNU UigweDIwLCAwKQogI2RlZmluZSBNSV9TVE9SRV9EV09SRF9JTU0JTUlfSU5TVFIoMHgyMCwgMSkK ICNkZWZpbmUgTUlfU1RPUkVfRFdPUkRfSU1NX0dFTjQJTUlfSU5TVFIoMHgyMCwgMikKKyNkZWZp bmUgTUlfU1RPUkVfUVdPUkRfSU1NX0dFTjggKE1JX0lOU1RSKDB4MjAsIDMpIHwgUkVHX0JJVCgy MSkpCiAjZGVmaW5lICAgTUlfTUVNX1ZJUlRVQUwJKDEgPDwgMjIpIC8qIDk0NSxnMzMsOTY1ICov CiAjZGVmaW5lICAgTUlfVVNFX0dHVFQJCSgxIDw8IDIyKSAvKiBnNHgrICovCiAjZGVmaW5lIE1J X1NUT1JFX0RXT1JEX0lOREVYCU1JX0lOU1RSKDB4MjEsIDEpCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9taWdyYXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9taWdyYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li43MDc3NjMxNjg2M2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9taWdyYXRlLmMKQEAgLTAsMCArMSw1NDQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgor ICovCisKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX2NvbnRleHQuaCIK KyNpbmNsdWRlICJpbnRlbF9ncHVfY29tbWFuZHMuaCIKKyNpbmNsdWRlICJpbnRlbF9ndC5oIgor I2luY2x1ZGUgImludGVsX2d0dC5oIgorI2luY2x1ZGUgImludGVsX21pZ3JhdGUuaCIKKyNpbmNs dWRlICJpbnRlbF9yaW5nLmgiCisKK3N0cnVjdCBpbnNlcnRfcHRlX2RhdGEgeworCXU2NCBvZmZz ZXQ7CisJYm9vbCBpc19sbWVtOworfTsKKworI2RlZmluZSBDSFVOS19TWiBTWl84TSAvKiB+MW1z IGF0IDhHaUIvcyBwcmVlbXB0aW9uIGRlbGF5ICovCisKK3N0YXRpYyBib29sIGVuZ2luZV9zdXBw b3J0c19taWdyYXRpb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCWlmICgh ZW5naW5lKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFdlIG5lZWQgdGhlIGFiaWxpdHkg dG8gcHJldmVudCBhcmlidHJhdGlvbiAoTUlfQVJCX09OX09GRiksCisJICogdGhlIGFiaWxpdHkg dG8gd3JpdGUgUFRFIHVzaW5nIGlubGluZSBkYXRhIChNSV9TVE9SRV9EQVRBKQorCSAqIGFuZCBv ZiBjb3Vyc2UgdGhlIGFiaWxpdHkgdG8gZG8gdGhlIGJsb2NrIHRyYW5zZmVyIChibGl0cykuCisJ ICovCisJR0VNX0JVR19PTihlbmdpbmUtPmNsYXNzICE9IENPUFlfRU5HSU5FX0NMQVNTKTsKKwor CXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfcHRlKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtLAorCQkgICAgICAgc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqcHQsCisJ CSAgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpbnNlcnRfcHRlX2RhdGEgKmQgPSBkYXRh OworCisJdm0tPmluc2VydF9wYWdlKHZtLCBweF9kbWEocHQpLCBkLT5vZmZzZXQsIEk5MTVfQ0FD SEVfTk9ORSwKKwkJCWQtPmlzX2xtZW0gPyBQVEVfTE0gOiAwKTsKKwlkLT5vZmZzZXQgKz0gUEFH RV9TSVpFOworfQorCitzdGF0aWMgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqbWlncmF0ZV92 bShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQoreworCXN0cnVjdCBpOTE1X3ZtX3B0X3N0YXNoIHN0YXNo ID0ge307CisJc3RydWN0IGk5MTVfcHBndHQgKnZtOworCWludCBlcnI7CisJaW50IGk7CisKKwkv KgorCSAqIFdlIGNvbnN0cnVjdCBhIHZlcnkgc3BlY2lhbCBWTSBmb3IgdXNlIGJ5IGFsbCBtaWdy YXRpb24gY29udGV4dHMsCisJICogaXQgaXMga2VwdCBwaW5uZWQgc28gdGhhdCBpdCBjYW4gYmUg dXNlZCBhdCBhbnkgdGltZS4gQXMgd2UgbmVlZAorCSAqIHRvIHByZS1hbGxvY2F0ZSB0aGUgcGFn ZSBkaXJlY3RvcmllcyBmb3IgdGhlIG1pZ3JhdGlvbiBWTSwgdGhpcworCSAqIGxpbWl0cyB1cyB0 byBvbmx5IHVzaW5nIGEgc21hbGwgbnVtYmVyIG9mIHByZXBhcmVkIHZtYS4KKwkgKgorCSAqIFRv IGJlIGFibGUgdG8gcGlwZWxpbmUgYW5kIHJlc2NoZWR1bGUgbWlncmF0aW9uIG9wZXJhdGlvbnMg d2hpbGUKKwkgKiBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjb250ZW50aW9uIG9uIHRoZSB2bSBpdHNl bGYsIHRoZSBQVEUgdXBkYXRlcworCSAqIGFyZSBpbmxpbmUgd2l0aCB0aGUgYmxpdHMuIEFsbCB0 aGUgYmxpdHMgdXNlIHRoZSBzYW1lIGZpeGVkCisJICogYWRkcmVzc2VzLCB3aXRoIHRoZSBiYWNr aW5nIHN0b3JlIHJlZGlyZWN0aW9uIGJlaW5nIHVwZGF0ZWQgb24gdGhlCisJICogZmx5LiBPbmx5 IDIgaW1wbGljaXQgdm1hIGFyZSB1c2VkIGZvciBhbGwgbWlncmF0aW9uIG9wZXJhdGlvbnMuCisJ ICoKKwkgKiBXZSBsYXkgdGhlIHBwR1RUIG91dCBhczoKKwkgKgorCSAqCVswLCBDSFVOS19TWikg LT4gZmlyc3Qgb2JqZWN0CisJICoJW0NIVU5LX1NaLCAyICogQ0hVTktfU1opIC0+IHNlY29uZCBv YmplY3QKKwkgKglbMiAqIENIVU5LX1NaLCAyICogQ0hVTktfU1ogKyAyICogQ0hVTktfU1ogPj4g OV0gLT4gUFRFCisJICoKKwkgKiBCeSBleHBvc2luZyB0aGUgZG1hIGFkZHJlc3NlcyBvZiB0aGUg cGFnZSBkaXJlY3RvcmllcyB0aGVtc2VsdmVzCisJICogd2l0aGluIHRoZSBwcEdUVCwgd2UgYXJl IHRoZW4gYWJsZSB0byByZXdyaXRlIHRoZSBQVEUgcHJpb3IgdG8gdXNlLgorCSAqIEJ1dCB0aGUg UFRFIHVwZGF0ZSBhbmQgc3Vic2VxdWVudCBtaWdyYXRpb24gb3BlcmF0aW9uIG11c3QgYmUgYXRv bWljLAorCSAqIGkuZS4gd2l0aGluIHRoZSBzYW1lIG5vbi1wcmVlbXB0aWJsZSB3aW5kb3cgc28g dGhhdCB3ZSBkbyBub3Qgc3dpdGNoCisJICogdG8gYW5vdGhlciBtaWdyYXRpb24gY29udGV4dCB0 aGF0IG92ZXJ3cml0ZXMgdGhlIFBURS4KKwkgKgorCSAqIFRPRE86IEFkZCBzdXBwb3J0IGZvciBo dWdlIExNRU0gUFRFcworCSAqLworCisJdm0gPSBpOTE1X3BwZ3R0X2NyZWF0ZShndCk7CisJaWYg KElTX0VSUih2bSkpCisJCXJldHVybiBFUlJfQ0FTVCh2bSk7CisKKwlpZiAoIXZtLT52bS5hbGxv Y2F0ZV92YV9yYW5nZSB8fCAhdm0tPnZtLmZvcmVhY2gpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJ Z290byBlcnJfdm07CisJfQorCisJLyoKKwkgKiBFYWNoIGVuZ2luZSBpbnN0YW5jZSBpcyBhc3Np Z25lZCBpdHMgb3duIGNodW5rIGluIHRoZSBWTSwgc28KKwkgKiB0aGF0IHdlIGNhbiBydW4gbXVs dGlwbGUgaW5zdGFuY2VzIGNvbmN1cnJlbnRseQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGd0LT5lbmdpbmVfY2xhc3NbQ09QWV9FTkdJTkVfQ0xBU1NdKTsgaSsrKSB7CisJCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwkJdTY0IGJhc2UgPSAodTY0KWkgPDwgMzI7 CisJCXN0cnVjdCBpbnNlcnRfcHRlX2RhdGEgZCA9IHt9OworCQlzdHJ1Y3QgaTkxNV9nZW1fd3df Y3R4IHd3OworCQl1NjQgc3o7CisKKwkJZW5naW5lID0gZ3QtPmVuZ2luZV9jbGFzc1tDT1BZX0VO R0lORV9DTEFTU11baV07CisJCWlmICghZW5naW5lX3N1cHBvcnRzX21pZ3JhdGlvbihlbmdpbmUp KQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogV2UgY29weSBpbiA4TWlCIGNodW5rcy4gRWFj aCBQREUgY292ZXJzIDJNaUIsIHNvIHdlIG5lZWQKKwkJICogNHgyIHBhZ2UgZGlyZWN0b3JpZXMg Zm9yIHNvdXJjZS9kZXN0aW5hdGlvbi4KKwkJICovCisJCXN6ID0gMiAqIENIVU5LX1NaOworCQlk Lm9mZnNldCA9IGJhc2UgKyBzejsKKworCQkvKgorCQkgKiBXZSBuZWVkIGFub3RoZXIgcGFnZSBk aXJlY3Rvcnkgc2V0dXAgc28gdGhhdCB3ZSBjYW4gd3JpdGUKKwkJICogdGhlIDh4NTEyIFBURSBp biBlYWNoIGNodW5rLgorCQkgKi8KKwkJc3ogKz0gKHN6ID4+IDEyKSAqIHNpemVvZih1NjQpOwor CisJCWVyciA9IGk5MTVfdm1fYWxsb2NfcHRfc3Rhc2goJnZtLT52bSwgJnN0YXNoLCBzeik7CisJ CWlmIChlcnIpCisJCQlnb3RvIGVycl92bTsKKworCQlmb3JfaTkxNV9nZW1fd3coJnd3LCBlcnIs IHRydWUpIHsKKwkJCWVyciA9IGk5MTVfdm1fbG9ja19vYmplY3RzKCZ2bS0+dm0sICZ3dyk7CisJ CQlpZiAoZXJyKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gaTkxNV92bV9tYXBfcHRfc3Rhc2go JnZtLT52bSwgJnN0YXNoKTsKKwkJCWlmIChlcnIpCisJCQkJY29udGludWU7CisKKwkJCXZtLT52 bS5hbGxvY2F0ZV92YV9yYW5nZSgmdm0tPnZtLCAmc3Rhc2gsIGJhc2UsIGJhc2UgKyBzeik7CisJ CX0KKwkJaTkxNV92bV9mcmVlX3B0X3N0YXNoKCZ2bS0+dm0sICZzdGFzaCk7CisJCWlmIChlcnIp CisJCQlnb3RvIGVycl92bTsKKworCQkvKiBOb3cgYWxsb3cgdGhlIEdQVSB0byByZXdyaXRlIHRo ZSBQVEUgdmlhIGl0cyBvd24gcHBHVFQgKi8KKwkJZC5pc19sbWVtID0gaTkxNV9nZW1fb2JqZWN0 X2lzX2xtZW0odm0tPnZtLnNjcmF0Y2hbMF0pOworCQl2bS0+dm0uZm9yZWFjaCgmdm0tPnZtLCBi YXNlLCBiYXNlICsgc3osIGluc2VydF9wdGUsICZkKTsKKwl9CisKKwlyZXR1cm4gJnZtLT52bTsK KworZXJyX3ZtOgorCWk5MTVfdm1fcHV0KCZ2bS0+dm0pOworCXJldHVybiBFUlJfUFRSKGVycik7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpmaXJzdF9jb3B5X2VuZ2luZShz dHJ1Y3QgaW50ZWxfZ3QgKmd0KQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsK KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGd0LT5lbmdpbmVfY2xhc3Nb Q09QWV9FTkdJTkVfQ0xBU1NdKTsgaSsrKSB7CisJCWVuZ2luZSA9IGd0LT5lbmdpbmVfY2xhc3Nb Q09QWV9FTkdJTkVfQ0xBU1NdW2ldOworCQlpZiAoZW5naW5lX3N1cHBvcnRzX21pZ3JhdGlvbihl bmdpbmUpKQorCQkJcmV0dXJuIGVuZ2luZTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3Rh dGljIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpwaW5uZWRfY29udGV4dChzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KQoreworCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkga2V5OworCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZTsKKwlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsKKwlz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7CisKKwllbmdpbmUgPSBmaXJzdF9jb3B5X2VuZ2luZShn dCk7CisJaWYgKCFlbmdpbmUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCisJdm0gPSBt aWdyYXRlX3ZtKGd0KTsKKwlpZiAoSVNfRVJSKHZtKSkKKwkJcmV0dXJuIEVSUl9DQVNUKHZtKTsK KworCWNlID0gaW50ZWxfZW5naW5lX2NyZWF0ZV9waW5uZWRfY29udGV4dChlbmdpbmUsIHZtLCBT Wl81MTJLLAorCQkJCQkJSTkxNV9HRU1fSFdTX01JR1JBVEUsCisJCQkJCQkma2V5LCAibWlncmF0 ZSIpOworCWk5MTVfdm1fcHV0KGNlLT52bSk7CisJcmV0dXJuIGNlOworfQorCitpbnQgaW50ZWxf bWlncmF0ZV9pbml0KHN0cnVjdCBpbnRlbF9taWdyYXRlICptLCBzdHJ1Y3QgaW50ZWxfZ3QgKmd0 KQoreworCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKKworCW1lbXNldChtLCAwLCBzaXplb2Yo Km0pKTsKKworCWNlID0gcGlubmVkX2NvbnRleHQoZ3QpOworCWlmIChJU19FUlIoY2UpKQorCQly ZXR1cm4gUFRSX0VSUihjZSk7CisKKwltLT5jb250ZXh0ID0gY2U7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgcmFuZG9tX2luZGV4KHVuc2lnbmVkIGludCBtYXgpCit7CisJcmV0dXJuIHVw cGVyXzMyX2JpdHMobXVsX3UzMl91MzIoZ2V0X3JhbmRvbV91MzIoKSwgbWF4KSk7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqX19taWdyYXRlX2VuZ2luZXMoc3RydWN0IGludGVs X2d0ICpndCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmVzW01BWF9FTkdJTkVf SU5TVEFOQ0VdOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwl1bnNpZ25lZCBp bnQgY291bnQsIGk7CisKKwljb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Z3QtPmVuZ2luZV9jbGFzc1tDT1BZX0VOR0lORV9DTEFTU10pOyBpKyspIHsKKwkJZW5naW5lID0g Z3QtPmVuZ2luZV9jbGFzc1tDT1BZX0VOR0lORV9DTEFTU11baV07CisJCWlmIChlbmdpbmVfc3Vw cG9ydHNfbWlncmF0aW9uKGVuZ2luZSkpCisJCQllbmdpbmVzW2NvdW50KytdID0gZW5naW5lOwor CX0KKworCXJldHVybiBpbnRlbF9jb250ZXh0X2NyZWF0ZShlbmdpbmVzW3JhbmRvbV9pbmRleChj b3VudCldKTsKK30KKworc3RydWN0IGludGVsX2NvbnRleHQgKmludGVsX21pZ3JhdGVfY3JlYXRl X2NvbnRleHQoc3RydWN0IGludGVsX21pZ3JhdGUgKm0pCit7CisJc3RydWN0IGludGVsX2NvbnRl eHQgKmNlOworCisJLyoKKwkgKiBXZSByYW5kb21seSBkaXN0cmlidXRlIGNvbnRleHRzIGFjcm9z cyB0aGUgZW5naW5lcyB1cG9uIGNvbnN0cmN0aW9uLAorCSAqIGFzIHRoZXkgYWxsIHNoYXJlIHRo ZSBzYW1lIHBpbm5lZCB2bSwgYW5kIHNvIGluIG9yZGVyIHRvIGFsbG93CisJICogbXVsdGlwbGUg YmxpdHMgdG8gcnVuIGluIHBhcmFsbGVsLCB3ZSBtdXN0IGNvbnN0cnVjdCBlYWNoIGJsaXQKKwkg KiB0byB1c2UgYSBkaWZmZXJlbnQgcmFuZ2Ugb2YgdGhlIHZtIGZvciBpdHMgR1RULiBUaGlzIGhh cyB0byBiZQorCSAqIGtub3duIGF0IGNvbnN0cnVjdGlvbiwgc28gd2UgY2FuIG5vdCB1c2UgdGhl IGxhdGUgZ3JlZWR5IGxvYWQKKwkgKiBiYWxhbmNpbmcgb2YgdGhlIHZpcnR1YWwtZW5naW5lLgor CSAqLworCWNlID0gX19taWdyYXRlX2VuZ2luZXMobS0+Y29udGV4dC0+ZW5naW5lLT5ndCk7CisJ aWYgKElTX0VSUihjZSkpCisJCXJldHVybiBjZTsKKworCWNlLT5yaW5nID0gX19pbnRlbF9jb250 ZXh0X3Jpbmdfc2l6ZShTWl8yNTZLKTsKKworCWk5MTVfdm1fcHV0KGNlLT52bSk7CisJY2UtPnZt ID0gaTkxNV92bV9nZXQobS0+Y29udGV4dC0+dm0pOworCisJcmV0dXJuIGNlOworfQorCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBzZ3RfZG1hIHNnX3NndChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQor eworCWRtYV9hZGRyX3QgYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKworCXJldHVybiAoc3Ry dWN0IHNndF9kbWEpeyBzZywgYWRkciwgYWRkciArIHNnX2RtYV9sZW4oc2cpIH07Cit9CisKK3N0 YXRpYyBpbnQgZW1pdF9ub19hcmJpdHJhdGlvbihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKK3sK Kwl1MzIgKmNzOworCisJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAyKTsKKwlpZiAoSVNfRVJS KGNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3MpOworCisJLyogRXhwbGljaXRseSBkaXNhYmxlIHBy ZWVtcHRpb24gZm9yIHRoaXMgcmVxdWVzdC4gKi8KKwkqY3MrKyA9IE1JX0FSQl9PTl9PRkY7CisJ KmNzKysgPSBNSV9OT09QOworCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgZW1pdF9wdGUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCisJ CSAgICBzdHJ1Y3Qgc2d0X2RtYSAqaXQsCisJCSAgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2Fj aGVfbGV2ZWwsCisJCSAgICBib29sIGlzX2xtZW0sCisJCSAgICB1NjQgb2Zmc2V0LAorCQkgICAg aW50IGxlbmd0aCkKK3sKKwljb25zdCB1NjQgZW5jb2RlID0gcnEtPmNvbnRleHQtPnZtLT5wdGVf ZW5jb2RlKDAsIGNhY2hlX2xldmVsLAorCQkJCQkJICAgICAgIGlzX2xtZW0gPyBQVEVfTE0gOiAw KTsKKwlzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9IHJxLT5yaW5nOworCWludCB0b3RhbCA9IDA7 CisJdTMyICpoZHIsICpjczsKKwlpbnQgcGt0OworCisJR0VNX0JVR19PTihJTlRFTF9HRU4ocnEt PmVuZ2luZS0+aTkxNSkgPCA4KTsKKworCS8qIENvbXB1dGUgdGhlIHBhZ2UgZGlyZWN0b3J5IG9m ZnNldCBmb3IgdGhlIHRhcmdldCBhZGRyZXNzIHJhbmdlICovCisJb2Zmc2V0ICs9ICh1NjQpcnEt PmVuZ2luZS0+aW5zdGFuY2UgPDwgMzI7CisJb2Zmc2V0ID4+PSAxMjsKKwlvZmZzZXQgKj0gc2l6 ZW9mKHU2NCk7CisJb2Zmc2V0ICs9IDIgKiBDSFVOS19TWjsKKworCWNzID0gaW50ZWxfcmluZ19i ZWdpbihycSwgNik7CisJaWYgKElTX0VSUihjcykpCisJCXJldHVybiBQVFJfRVJSKGNzKTsKKwor CS8qIFBhY2sgYXMgbWFueSBQVEUgdXBkYXRlcyBhcyBwb3NzaWJsZSBpbnRvIGEgc2luZ2xlIE1J IGNvbW1hbmQgKi8KKwlwa3QgPSBtaW5fdChpbnQsIDB4NDAwLCByaW5nLT5zcGFjZSAvIHNpemVv Zih1MzIpICsgNSk7CisJcGt0ID0gbWluX3QoaW50LCBwa3QsIChyaW5nLT5zaXplIC0gcmluZy0+ ZW1pdCkgLyBzaXplb2YodTMyKSArIDUpOworCisJaGRyID0gY3M7CisJKmNzKysgPSBNSV9TVE9S RV9EQVRBX0lNTSB8IFJFR19CSVQoMjEpOyAvKiBhcyBxd29yZCBlbGVtZW50cyAqLworCSpjcysr ID0gbG93ZXJfMzJfYml0cyhvZmZzZXQpOworCSpjcysrID0gdXBwZXJfMzJfYml0cyhvZmZzZXQp OworCisJZG8geworCQlpZiAoY3MgLSBoZHIgPj0gcGt0KSB7CisJCQkqaGRyICs9IGNzIC0gaGRy IC0gMjsKKwkJCSpjcysrID0gTUlfTk9PUDsKKworCQkJcmluZy0+ZW1pdCA9ICh2b2lkICopY3Mg LSByaW5nLT52YWRkcjsKKwkJCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOworCQkJaW50ZWxf cmluZ191cGRhdGVfc3BhY2UocmluZyk7CisKKwkJCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwg Nik7CisJCQlpZiAoSVNfRVJSKGNzKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihjcyk7CisKKwkJCXBr dCA9IG1pbl90KGludCwgMHg0MDAsIHJpbmctPnNwYWNlIC8gc2l6ZW9mKHUzMikgKyA1KTsKKwkJ CXBrdCA9IG1pbl90KGludCwgcGt0LCAocmluZy0+c2l6ZSAtIHJpbmctPmVtaXQpIC8gc2l6ZW9m KHUzMikgKyA1KTsKKworCQkJaGRyID0gY3M7CisJCQkqY3MrKyA9IE1JX1NUT1JFX0RBVEFfSU1N IHwgUkVHX0JJVCgyMSk7CisJCQkqY3MrKyA9IGxvd2VyXzMyX2JpdHMob2Zmc2V0KTsKKwkJCSpj cysrID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpOworCQl9CisKKwkJKmNzKysgPSBsb3dlcl8zMl9i aXRzKGVuY29kZSB8IGl0LT5kbWEpOworCQkqY3MrKyA9IHVwcGVyXzMyX2JpdHMoZW5jb2RlIHwg aXQtPmRtYSk7CisKKwkJb2Zmc2V0ICs9IDg7CisJCXRvdGFsICs9IEk5MTVfR1RUX1BBR0VfU0la RTsKKworCQlpdC0+ZG1hICs9IEk5MTVfR1RUX1BBR0VfU0laRTsKKwkJaWYgKGl0LT5kbWEgPj0g aXQtPm1heCkgeworCQkJaXQtPnNnID0gX19zZ19uZXh0KGl0LT5zZyk7CisJCQlpZiAoIWl0LT5z ZyB8fCBzZ19kbWFfbGVuKGl0LT5zZykgPT0gMCkKKwkJCQlicmVhazsKKworCQkJaXQtPmRtYSA9 IHNnX2RtYV9hZGRyZXNzKGl0LT5zZyk7CisJCQlpdC0+bWF4ID0gaXQtPmRtYSArIHNnX2RtYV9s ZW4oaXQtPnNnKTsKKwkJfQorCX0gd2hpbGUgKHRvdGFsIDwgbGVuZ3RoKTsKKworCSpoZHIgKz0g Y3MgLSBoZHIgLSAyOworCSpjcysrID0gTUlfTk9PUDsKKworCXJpbmctPmVtaXQgPSAodm9pZCAq KWNzIC0gcmluZy0+dmFkZHI7CisJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7CisJaW50ZWxf cmluZ191cGRhdGVfc3BhY2UocmluZyk7CisKKwlyZXR1cm4gdG90YWw7Cit9CisKK3N0YXRpYyBi b29sIHdhXzEyMDk2NDQ2MTFfYXBwbGllcyhpbnQgZ2VuLCB1MzIgc2l6ZSkKK3sKKwl1MzIgaGVp Z2h0ID0gc2l6ZSA+PiBQQUdFX1NISUZUOworCisJaWYgKGdlbiAhPSAxMSkKKwkJcmV0dXJuIGZh bHNlOworCisJcmV0dXJuIGhlaWdodCAlIDQgPT0gMyAmJiBoZWlnaHQgPD0gODsKK30KKworc3Rh dGljIGludCBlbWl0X2NvcHkoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIGludCBzaXplKQorewor CWNvbnN0IGludCBnZW4gPSBJTlRFTF9HRU4ocnEtPmVuZ2luZS0+aTkxNSk7CisJdTMyIGluc3Rh bmNlID0gcnEtPmVuZ2luZS0+aW5zdGFuY2U7CisJdTMyICpjczsKKworCWNzID0gaW50ZWxfcmlu Z19iZWdpbihycSwgZ2VuID49IDggPyAxMCA6IDYpOworCWlmIChJU19FUlIoY3MpKQorCQlyZXR1 cm4gUFRSX0VSUihjcyk7CisKKwlpZiAoZ2VuID49IDkgJiYgIXdhXzEyMDk2NDQ2MTFfYXBwbGll cyhnZW4sIHNpemUpKSB7CisJCSpjcysrID0gR0VOOV9YWV9GQVNUX0NPUFlfQkxUX0NNRCB8ICgx MCAtIDIpOworCQkqY3MrKyA9IEJMVF9ERVBUSF8zMiB8IFBBR0VfU0laRTsKKwkJKmNzKysgPSAw OworCQkqY3MrKyA9IHNpemUgPj4gUEFHRV9TSElGVCA8PCAxNiB8IFBBR0VfU0laRSAvIDQ7CisJ CSpjcysrID0gQ0hVTktfU1o7IC8qIGRzdCBvZmZzZXQgKi8KKwkJKmNzKysgPSBpbnN0YW5jZTsK KwkJKmNzKysgPSAwOworCQkqY3MrKyA9IFBBR0VfU0laRTsKKwkJKmNzKysgPSAwOyAvKiBzcmMg b2Zmc2V0ICovCisJCSpjcysrID0gaW5zdGFuY2U7CisJfSBlbHNlIGlmIChnZW4gPj0gOCkgewor CQkqY3MrKyA9IFhZX1NSQ19DT1BZX0JMVF9DTUQgfCBCTFRfV1JJVEVfUkdCQSB8ICgxMCAtIDIp OworCQkqY3MrKyA9IEJMVF9ERVBUSF8zMiB8IEJMVF9ST1BfU1JDX0NPUFkgfCBQQUdFX1NJWkU7 CisJCSpjcysrID0gMDsKKwkJKmNzKysgPSBzaXplID4+IFBBR0VfU0hJRlQgPDwgMTYgfCBQQUdF X1NJWkUgLyA0OworCQkqY3MrKyA9IENIVU5LX1NaOyAvKiBkc3Qgb2Zmc2V0ICovCisJCSpjcysr ID0gaW5zdGFuY2U7CisJCSpjcysrID0gMDsKKwkJKmNzKysgPSBQQUdFX1NJWkU7CisJCSpjcysr ID0gMDsgLyogc3JjIG9mZnNldCAqLworCQkqY3MrKyA9IGluc3RhbmNlOworCX0gZWxzZSB7CisJ CUdFTV9CVUdfT04oaW5zdGFuY2UpOworCQkqY3MrKyA9IFNSQ19DT1BZX0JMVF9DTUQgfCBCTFRf V1JJVEVfUkdCQSB8ICg2IC0gMik7CisJCSpjcysrID0gQkxUX0RFUFRIXzMyIHwgQkxUX1JPUF9T UkNfQ09QWSB8IFBBR0VfU0laRTsKKwkJKmNzKysgPSBzaXplID4+IFBBR0VfU0hJRlQgPDwgMTYg fCBQQUdFX1NJWkU7CisJCSpjcysrID0gQ0hVTktfU1o7IC8qIGRzdCBvZmZzZXQgKi8KKwkJKmNz KysgPSBQQUdFX1NJWkU7CisJCSpjcysrID0gMDsgLyogc3JjIG9mZnNldCAqLworCX0KKworCWlu dGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOworCXJldHVybiAwOworfQorCitpbnQKK2ludGVsX2Nv bnRleHRfbWlncmF0ZV9jb3B5KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCSAgIHN0cnVj dCBkbWFfZmVuY2UgKmF3YWl0LAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkg ICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgc3JjX2NhY2hlX2xldmVsLAorCQkJICAgYm9vbCBzcmNf aXNfbG1lbSwKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJICAgZW51bSBpOTE1 X2NhY2hlX2xldmVsIGRzdF9jYWNoZV9sZXZlbCwKKwkJCSAgIGJvb2wgZHN0X2lzX2xtZW0sCisJ CQkgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoqb3V0KQoreworCXN0cnVjdCBzZ3RfZG1hIGl0X3Ny YyA9IHNnX3NndChzcmMpLCBpdF9kc3QgPSBzZ19zZ3QoZHN0KTsKKwlzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycTsKKwlpbnQgZXJyOworCisJKm91dCA9IE5VTEw7CisKKwkvKiBHRU1fQlVHX09OKGNl LT52bSAhPSBtaWdyYXRlX3ZtKTsgKi8KKworCUdFTV9CVUdfT04oY2UtPnJpbmctPnNpemUgPCBT Wl82NEspOworCisJZG8geworCQlpbnQgbGVuOworCisJCXJxID0gaTkxNV9yZXF1ZXN0X2NyZWF0 ZShjZSk7CisJCWlmIChJU19FUlIocnEpKSB7CisJCQllcnIgPSBQVFJfRVJSKHJxKTsKKwkJCWdv dG8gb3V0X2NlOworCQl9CisKKwkJaWYgKGF3YWl0KSB7CisJCQllcnIgPSBpOTE1X3JlcXVlc3Rf YXdhaXRfZG1hX2ZlbmNlKHJxLCBhd2FpdCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0X3Jx OworCisJCQlpZiAocnEtPmVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIpIHsKKwkJCQllcnIg PSBycS0+ZW5naW5lLT5lbWl0X2luaXRfYnJlYWRjcnVtYihycSk7CisJCQkJaWYgKGVycikKKwkJ CQkJZ290byBvdXRfcnE7CisJCQl9CisKKwkJCWF3YWl0ID0gTlVMTDsKKwkJfQorCisJCS8qIFRo ZSBQVEUgdXBkYXRlcyArIGNvcHkgbXVzdCBub3QgYmUgaW50ZXJydXB0ZWQuICovCisJCWVyciA9 IGVtaXRfbm9fYXJiaXRyYXRpb24ocnEpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcnE7CisK KwkJbGVuID0gZW1pdF9wdGUocnEsICZpdF9zcmMsIHNyY19jYWNoZV9sZXZlbCwgc3JjX2lzX2xt ZW0sIDAsCisJCQkgICAgICAgQ0hVTktfU1opOworCQlpZiAobGVuIDw9IDApIHsKKwkJCWVyciA9 IGxlbjsKKwkJCWdvdG8gb3V0X3JxOworCQl9CisKKwkJZXJyID0gZW1pdF9wdGUocnEsICZpdF9k c3QsIGRzdF9jYWNoZV9sZXZlbCwgZHN0X2lzX2xtZW0sCisJCQkgICAgICAgQ0hVTktfU1osIGxl bik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXRfcnE7CisJCWlmIChlcnIgPCBsZW4pIHsK KwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dF9ycTsKKwkJfQorCisJCWVyciA9IHJxLT5l bmdpbmUtPmVtaXRfZmx1c2gocnEsIEVNSVRfSU5WQUxJREFURSk7CisJCWlmIChlcnIpCisJCQln b3RvIG91dF9ycTsKKworCQllcnIgPSBlbWl0X2NvcHkocnEsIGxlbik7CisKKwkJLyogQXJiaXRy YXRpb24gaXMgcmUtZW5hYmxlZCBiZXR3ZWVuIHJlcXVlc3RzLiAqLworb3V0X3JxOgorCQlpZiAo Km91dCkKKwkJCWk5MTVfcmVxdWVzdF9wdXQoKm91dCk7CisJCSpvdXQgPSBpOTE1X3JlcXVlc3Rf Z2V0KHJxKTsKKwkJaTkxNV9yZXF1ZXN0X2FkZChycSk7CisJCWlmIChlcnIgfHwgIWl0X3NyYy5z ZyB8fCAhc2dfZG1hX2xlbihpdF9zcmMuc2cpKQorCQkJYnJlYWs7CisKKwkJY29uZF9yZXNjaGVk KCk7CisJfSB3aGlsZSAoMSk7CisKK291dF9jZToKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaW50 ZWxfbWlncmF0ZV9jb3B5KHN0cnVjdCBpbnRlbF9taWdyYXRlICptLAorCQkgICAgICAgc3RydWN0 IGk5MTVfZ2VtX3d3X2N0eCAqd3csCisJCSAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICphd2FpdCwK KwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgZW51bSBpOTE1X2Nh Y2hlX2xldmVsIHNyY19jYWNoZV9sZXZlbCwKKwkJICAgICAgIGJvb2wgc3JjX2lzX2xtZW0sCisJ CSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJICAgICAgIGVudW0gaTkxNV9jYWNo ZV9sZXZlbCBkc3RfY2FjaGVfbGV2ZWwsCisJCSAgICAgICBib29sIGRzdF9pc19sbWVtLAorCQkg ICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqKm91dCkKK3sKKwlzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2U7CisJaW50IGVycjsKKworCSpvdXQgPSBOVUxMOworCWlmICghbS0+Y29udGV4dCkKKwkJ cmV0dXJuIC1FTk9ERVY7CisKKwljZSA9IGludGVsX21pZ3JhdGVfY3JlYXRlX2NvbnRleHQobSk7 CisJaWYgKElTX0VSUihjZSkpCisJCWNlID0gaW50ZWxfY29udGV4dF9nZXQobS0+Y29udGV4dCk7 CisJR0VNX0JVR19PTihJU19FUlIoY2UpKTsKKworCWVyciA9IGludGVsX2NvbnRleHRfcGluX3d3 KGNlLCB3dyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBpbnRlbF9jb250ZXh0 X21pZ3JhdGVfY29weShjZSwgYXdhaXQsCisJCQkJCSBzcmMsIHNyY19jYWNoZV9sZXZlbCwgc3Jj X2lzX2xtZW0sCisJCQkJCSBkc3QsIGRzdF9jYWNoZV9sZXZlbCwgZHN0X2lzX2xtZW0sCisJCQkJ CSBvdXQpOworCisJaW50ZWxfY29udGV4dF91bnBpbihjZSk7CitvdXQ6CisJaW50ZWxfY29udGV4 dF9wdXQoY2UpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgaW50ZWxfbWlncmF0ZV9maW5pKHN0 cnVjdCBpbnRlbF9taWdyYXRlICptKQoreworCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKKwor CWNlID0gZmV0Y2hfYW5kX3plcm8oJm0tPmNvbnRleHQpOworCWlmICghY2UpCisJCXJldHVybjsK KworCWludGVsX2VuZ2luZV9kZXN0cm95X3Bpbm5lZF9jb250ZXh0KGNlKTsKK30KKworI2lmIElT X0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQorI2luY2x1ZGUgInNlbGZ0ZXN0X21p Z3JhdGUuYyIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfbWlncmF0ZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbWlncmF0ZS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzJjNjExOTBlZDczCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbWlncmF0ZS5oCkBA IC0wLDAgKzEsNDUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisg KiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19J TlRFTF9NSUdSQVRFX18KKyNkZWZpbmUgX19JTlRFTF9NSUdSQVRFX18KKworI2luY2x1ZGUgImlu dGVsX21pZ3JhdGVfdHlwZXMuaCIKKworc3RydWN0IGRtYV9mZW5jZTsKK3N0cnVjdCBpOTE1X3Jl cXVlc3Q7CitzdHJ1Y3QgaTkxNV9nZW1fd3dfY3R4Oworc3RydWN0IGludGVsX2d0Oworc3RydWN0 IHNjYXR0ZXJsaXN0OworZW51bSBpOTE1X2NhY2hlX2xldmVsOworCitpbnQgaW50ZWxfbWlncmF0 ZV9pbml0KHN0cnVjdCBpbnRlbF9taWdyYXRlICptLCBzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKKwor c3RydWN0IGludGVsX2NvbnRleHQgKmludGVsX21pZ3JhdGVfY3JlYXRlX2NvbnRleHQoc3RydWN0 IGludGVsX21pZ3JhdGUgKm0pOworCitpbnQgaW50ZWxfbWlncmF0ZV9jb3B5KHN0cnVjdCBpbnRl bF9taWdyYXRlICptLAorCQkgICAgICAgc3RydWN0IGk5MTVfZ2VtX3d3X2N0eCAqd3csCisJCSAg ICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICphd2FpdCwKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlz dCAqc3JjLAorCQkgICAgICAgZW51bSBpOTE1X2NhY2hlX2xldmVsIHNyY19jYWNoZV9sZXZlbCwK KwkJICAgICAgIGJvb2wgc3JjX2lzX2xtZW0sCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3Qg KmRzdCwKKwkJICAgICAgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBkc3RfY2FjaGVfbGV2ZWwsCisJ CSAgICAgICBib29sIGRzdF9pc19sbWVtLAorCQkgICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAq Km91dCk7CisKK2ludCBpbnRlbF9jb250ZXh0X21pZ3JhdGVfY29weShzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY2UsCisJCQkgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqYXdhaXQsCisJCQkgICAgICAg c3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICAgICAgZW51bSBpOTE1X2NhY2hlX2xldmVs IHNyY19jYWNoZV9sZXZlbCwKKwkJCSAgICAgICBib29sIHNyY19pc19sbWVtLAorCQkJICAgICAg IHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJICAgICAgIGVudW0gaTkxNV9jYWNoZV9sZXZl bCBkc3RfY2FjaGVfbGV2ZWwsCisJCQkgICAgICAgYm9vbCBkc3RfaXNfbG1lbSwKKwkJCSAgICAg ICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoqb3V0KTsKKwordm9pZCBpbnRlbF9taWdyYXRlX2Zpbmko c3RydWN0IGludGVsX21pZ3JhdGUgKm0pOworCisjZW5kaWYgLyogX19JTlRFTF9NSUdSQVRFX18g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21pZ3JhdGVfdHlw ZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21pZ3JhdGVfdHlwZXMuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQ5ODIzMDU5N2Y0MgotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21pZ3JhdGVfdHlwZXMu aApAQCAtMCwwICsxLDE1IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisv KgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVm IF9fSU5URUxfTUlHUkFURV9UWVBFU19fCisjZGVmaW5lIF9fSU5URUxfTUlHUkFURV9UWVBFU19f CisKK3N0cnVjdCBpbnRlbF9jb250ZXh0OworCitzdHJ1Y3QgaW50ZWxfbWlncmF0ZSB7CisJc3Ry dWN0IGludGVsX2NvbnRleHQgKmNvbnRleHQ7Cit9OworCisjZW5kaWYgLyogX19JTlRFTF9NSUdS QVRFX1RZUEVTX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X3JpbmcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JpbmcuaAppbmRleCBkYmY1 ZjE0YTEzNmYuLjFiMzJkYWRmYjhjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfcmluZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmcu aApAQCAtNDksNiArNDksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcmluZ19hZHZhbmNl KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKQogCSAqIGludGVsX3JpbmdfYmVnaW4o KSkuCiAJICovCiAJR0VNX0JVR19PTigocnEtPnJpbmctPnZhZGRyICsgcnEtPnJpbmctPmVtaXQp ICE9IGNzKTsKKwlHRU1fQlVHX09OKCFJU19BTElHTkVEKHJxLT5yaW5nLT5lbWl0LCA4KSk7IC8q IFJJTkdfVEFJTCBxd29yZCBhbGlnbiAqLwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBpbnRlbF9y aW5nX3dyYXAoY29uc3Qgc3RydWN0IGludGVsX3JpbmcgKnJpbmcsIHUzMiBwb3MpCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9taWdyYXRlLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9taWdyYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi45Nzg0ZDE0OWViZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9taWdyYXRlLmMKQEAgLTAsMCArMSwyOTEgQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAy MCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9yYW5k b20uaCIKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzaXplc1tdID0geworCVNaXzRLLAor CVNaXzY0SywKKwlTWl8yTSwKKwlDSFVOS19TWiAtIFNaXzRLLAorCUNIVU5LX1NaLAorCUNIVU5L X1NaICsgU1pfNEssCisJU1pfNjRNLAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICoKK2NyZWF0ZV9sbWVtX29yX2ludGVybmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoSEFTX0xNRU0oaTkxNSkpIHsKKwkJc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKworCQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3Jl YXRlX2xtZW0oaTkxNSwgc2l6ZSwgMCk7CisJCWlmICghSVNfRVJSKG9iaikpCisJCQlyZXR1cm4g b2JqOworCX0KKworCXJldHVybiBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKGk5MTUs IHNpemUpOworfQorCitzdGF0aWMgaW50IGNvcHkoc3RydWN0IGludGVsX21pZ3JhdGUgKm1pZ3Jh dGUsCisJCWludCAoKmZuKShzdHJ1Y3QgaW50ZWxfbWlncmF0ZSAqbWlncmF0ZSwKKwkJCSAgc3Ry dWN0IGk5MTVfZ2VtX3d3X2N0eCAqd3csCisJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpzcmMsCisJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpkc3QsCisJCQkgIHN0cnVj dCBpOTE1X3JlcXVlc3QgKipvdXQpLAorCQl1MzIgc3osIHN0cnVjdCBybmRfc3RhdGUgKnBybmcp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBtaWdyYXRlLT5jb250ZXh0LT5l bmdpbmUtPmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnNyYywgKmRzdDsKKwlz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKwlzdHJ1Y3QgaTkxNV9nZW1fd3dfY3R4IHd3OworCXUz MiAqdmFkZHI7CisJaW50IGVyciA9IDA7CisJaW50IGk7CisKKwlzcmMgPSBjcmVhdGVfbG1lbV9v cl9pbnRlcm5hbChpOTE1LCBzeik7CisJaWYgKElTX0VSUihzcmMpKQorCQlyZXR1cm4gMDsKKwor CWRzdCA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoaTkxNSwgc3opOworCWlmIChJ U19FUlIoZHN0KSkKKwkJZ290byBlcnJfZnJlZV9zcmM7CisKKwlmb3JfaTkxNV9nZW1fd3coJnd3 LCBlcnIsIHRydWUpIHsKKwkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X2xvY2soc3JjLCAmd3cpOwor CQlpZiAoZXJyKQorCQkJY29udGludWU7CisKKwkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X2xvY2so ZHN0LCAmd3cpOworCQlpZiAoZXJyKQorCQkJY29udGludWU7CisKKwkJdmFkZHIgPSBpOTE1X2dl bV9vYmplY3RfcGluX21hcChzcmMsIEk5MTVfTUFQX1dDKTsKKwkJaWYgKElTX0VSUih2YWRkcikp IHsKKwkJCWVyciA9IFBUUl9FUlIodmFkZHIpOworCQkJY29udGludWU7CisJCX0KKworCQlmb3Ig KGkgPSAwOyBpIDwgc3ogLyBzaXplb2YodTMyKTsgaSsrKQorCQkJdmFkZHJbaV0gPSBpOworCQlp OTE1X2dlbV9vYmplY3RfZmx1c2hfbWFwKHNyYyk7CisKKwkJdmFkZHIgPSBpOTE1X2dlbV9vYmpl Y3RfcGluX21hcChkc3QsIEk5MTVfTUFQX1dDKTsKKwkJaWYgKElTX0VSUih2YWRkcikpIHsKKwkJ CWVyciA9IFBUUl9FUlIodmFkZHIpOworCQkJZ290byB1bnBpbl9zcmM7CisJCX0KKworCQlmb3Ig KGkgPSAwOyBpIDwgc3ogLyBzaXplb2YodTMyKTsgaSsrKQorCQkJdmFkZHJbaV0gPSB+aTsKKwkJ aTkxNV9nZW1fb2JqZWN0X2ZsdXNoX21hcChkc3QpOworCisJCWVyciA9IGZuKG1pZ3JhdGUsICZ3 dywgc3JjLCBkc3QsICZycSk7CisJCWlmICghZXJyKQorCQkJY29udGludWU7CisKKwkJaWYgKGVy ciAhPSAtRURFQURMSyAmJiBlcnIgIT0gLUVJTlRSICYmIGVyciAhPSAtRVJFU1RBUlRTWVMpCisJ CQlwcl9lcnIoIiVwcyBmYWlsZWQsIHNpemU6ICV1XG4iLCBmbiwgc3opOworCQlpZiAocnEpIHsK KwkJCWk5MTVfcmVxdWVzdF93YWl0KHJxLCAwLCBIWik7CisJCQlpOTE1X3JlcXVlc3RfcHV0KHJx KTsKKwkJfQorCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGRzdCk7Cit1bnBpbl9zcmM6CisJ CWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoc3JjKTsKKwl9CisJaWYgKGVycikKKwkJZ290byBl cnJfb3V0OworCisJaWYgKHJxKSB7CisJCWlmIChpOTE1X3JlcXVlc3Rfd2FpdChycSwgMCwgSFop IDwgMCkgeworCQkJcHJfZXJyKCIlcHMgdGltZWQgb3V0LCBzaXplOiAldVxuIiwgZm4sIHN6KTsK KwkJCWVyciA9IC1FVElNRTsKKwkJfQorCQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKKwl9CisKKwlm b3IgKGkgPSAwOyAhZXJyICYmIGkgPCBzeiAvIFBBR0VfU0laRTsgaSsrKSB7CisJCWludCB4ID0g aSAqIDEwMjQgKyBpOTE1X3ByYW5kb21fdTMyX21heF9zdGF0ZSgxMDI0LCBwcm5nKTsKKworCQlp ZiAodmFkZHJbeF0gIT0geCkgeworCQkJcHJfZXJyKCIlcHMgZmFpbGVkLCBzaXplOiAldSwgb2Zm c2V0OiAlenVcbiIsCisJCQkgICAgICAgZm4sIHN6LCB4ICogc2l6ZW9mKHUzMikpOworCQkJaWd0 X2hleGR1bXAodmFkZHIgKyBpICogMTAyNCwgNDA5Nik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9 CisJfQorCisJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChkc3QpOworCWk5MTVfZ2VtX29iamVj dF91bnBpbl9tYXAoc3JjKTsKKworZXJyX291dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KGRzdCk7 CitlcnJfZnJlZV9zcmM6CisJaTkxNV9nZW1fb2JqZWN0X3B1dChzcmMpOworCisJcmV0dXJuIGVy cjsKK30KKworc3RhdGljIGludCBfX21pZ3JhdGVfY29weShzdHJ1Y3QgaW50ZWxfbWlncmF0ZSAq bWlncmF0ZSwKKwkJCSAgc3RydWN0IGk5MTVfZ2VtX3d3X2N0eCAqd3csCisJCQkgIHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpzcmMsCisJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpkc3QsCisJCQkgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKipvdXQpCit7CisJcmV0dXJuIGludGVs X21pZ3JhdGVfY29weShtaWdyYXRlLCB3dywgTlVMTCwKKwkJCQkgIHNyYy0+bW0ucGFnZXMtPnNn bCwgc3JjLT5jYWNoZV9sZXZlbCwKKwkJCQkgIGk5MTVfZ2VtX29iamVjdF9pc19sbWVtKHNyYyks CisJCQkJICBkc3QtPm1tLnBhZ2VzLT5zZ2wsIGRzdC0+Y2FjaGVfbGV2ZWwsCisJCQkJICBpOTE1 X2dlbV9vYmplY3RfaXNfbG1lbShkc3QpLAorCQkJCSAgb3V0KTsKK30KKworc3RhdGljIGludCBf X2dsb2JhbF9jb3B5KHN0cnVjdCBpbnRlbF9taWdyYXRlICptaWdyYXRlLAorCQkJIHN0cnVjdCBp OTE1X2dlbV93d19jdHggKnd3LAorCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpzcmMs CisJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmRzdCwKKwkJCSBzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICoqb3V0KQoreworCXJldHVybiBpbnRlbF9jb250ZXh0X21pZ3JhdGVfY29weShtaWdy YXRlLT5jb250ZXh0LCBOVUxMLAorCQkJCQkgIHNyYy0+bW0ucGFnZXMtPnNnbCwgc3JjLT5jYWNo ZV9sZXZlbCwKKwkJCQkJICBpOTE1X2dlbV9vYmplY3RfaXNfbG1lbShzcmMpLAorCQkJCQkgIGRz dC0+bW0ucGFnZXMtPnNnbCwgZHN0LT5jYWNoZV9sZXZlbCwKKwkJCQkJICBpOTE1X2dlbV9vYmpl Y3RfaXNfbG1lbShkc3QpLAorCQkJCQkgIG91dCk7Cit9CisKK3N0YXRpYyBpbnQKK21pZ3JhdGVf Y29weShzdHJ1Y3QgaW50ZWxfbWlncmF0ZSAqbWlncmF0ZSwgdTMyIHN6LCBzdHJ1Y3Qgcm5kX3N0 YXRlICpwcm5nKQoreworCXJldHVybiBjb3B5KG1pZ3JhdGUsIF9fbWlncmF0ZV9jb3B5LCBzeiwg cHJuZyk7Cit9CisKK3N0YXRpYyBpbnQKK2dsb2JhbF9jb3B5KHN0cnVjdCBpbnRlbF9taWdyYXRl ICptaWdyYXRlLCB1MzIgc3osIHN0cnVjdCBybmRfc3RhdGUgKnBybmcpCit7CisJcmV0dXJuIGNv cHkobWlncmF0ZSwgX19nbG9iYWxfY29weSwgc3osIHBybmcpOworfQorCitzdGF0aWMgaW50IGxp dmVfbWlncmF0ZV9jb3B5KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaW50ZWxfbWlncmF0ZSAqbWln cmF0ZSA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IG1pZ3JhdGUtPmNv bnRleHQtPmVuZ2luZS0+aTkxNTsKKwlJOTE1X1JORF9TVEFURShwcm5nKTsKKwlpbnQgaTsKKwor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNpemVzKTsgaSsrKSB7CisJCWludCBlcnI7CisK KwkJZXJyID0gbWlncmF0ZV9jb3B5KG1pZ3JhdGUsIHNpemVzW2ldLCAmcHJuZyk7CisJCWlmIChl cnIgPT0gMCkKKwkJCWVyciA9IGdsb2JhbF9jb3B5KG1pZ3JhdGUsIHNpemVzW2ldLCAmcHJuZyk7 CisJCWk5MTVfZ2VtX2RyYWluX2ZyZWVkX29iamVjdHMoaTkxNSk7CisJCWlmIChlcnIpCisJCQly ZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdGhyZWFkZWRfbWlncmF0 ZSB7CisJc3RydWN0IGludGVsX21pZ3JhdGUgKm1pZ3JhdGU7CisJc3RydWN0IHRhc2tfc3RydWN0 ICp0c2s7CisJc3RydWN0IHJuZF9zdGF0ZSBwcm5nOworfTsKKworc3RhdGljIGludCB0aHJlYWRl ZF9taWdyYXRlKHN0cnVjdCBpbnRlbF9taWdyYXRlICptaWdyYXRlLAorCQkJICAgIGludCAoKmZu KSh2b2lkICphcmcpLAorCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwljb25zdCB1bnNp Z25lZCBpbnQgbl9jcHVzID0gbnVtX29ubGluZV9jcHVzKCkgKyAxOworCXN0cnVjdCB0aHJlYWRl ZF9taWdyYXRlICp0aHJlYWQ7CisJSTkxNV9STkRfU1RBVEUocHJuZyk7CisJdW5zaWduZWQgaW50 IGk7CisJaW50IGVyciA9IDA7CisKKwl0aHJlYWQgPSBrY2FsbG9jKG5fY3B1cywgc2l6ZW9mKCp0 aHJlYWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRocmVhZCkKKwkJcmV0dXJuIDA7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbl9jcHVzOyArK2kpIHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisK KwkJdGhyZWFkW2ldLm1pZ3JhdGUgPSBtaWdyYXRlOworCQl0aHJlYWRbaV0ucHJuZyA9CisJCQlJ OTE1X1JORF9TVEFURV9JTklUSUFMSVpFUihwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZykpOworCisJ CXRzayA9IGt0aHJlYWRfcnVuKGZuLCAmdGhyZWFkW2ldLCAiaWd0LSVkIiwgaSk7CisJCWlmIChJ U19FUlIodHNrKSkgeworCQkJZXJyID0gUFRSX0VSUih0c2spOworCQkJYnJlYWs7CisJCX0KKwor CQlnZXRfdGFza19zdHJ1Y3QodHNrKTsKKwkJdGhyZWFkW2ldLnRzayA9IHRzazsKKwl9CisKKwlt c2xlZXAoMTApOyAvKiBzdGFydCBhbGwgdGhyZWFkcyBiZWZvcmUgd2Uga3RocmVhZF9zdG9wKCkg Ki8KKworCWZvciAoaSA9IDA7IGkgPCBuX2NwdXM7ICsraSkgeworCQlzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRzayA9IHRocmVhZFtpXS50c2s7CisJCWludCBzdGF0dXM7CisKKwkJaWYgKElTX0VSUl9P Ul9OVUxMKHRzaykpCisJCQljb250aW51ZTsKKworCQlzdGF0dXMgPSBrdGhyZWFkX3N0b3AodHNr KTsKKwkJaWYgKHN0YXR1cyAmJiAhZXJyKQorCQkJZXJyID0gc3RhdHVzOworCisJCXB1dF90YXNr X3N0cnVjdCh0c2spOworCX0KKworCWtmcmVlKHRocmVhZCk7CisJcmV0dXJuIGVycjsKK30KKwor c3RhdGljIGludCBfX3RocmVhZF9taWdyYXRlX2NvcHkodm9pZCAqYXJnKQoreworCXN0cnVjdCB0 aHJlYWRlZF9taWdyYXRlICp0bSA9IGFyZzsKKworCXJldHVybiBtaWdyYXRlX2NvcHkodG0tPm1p Z3JhdGUsIDIgKiBDSFVOS19TWiwgJnRtLT5wcm5nKTsKK30KKworc3RhdGljIGludCB0aHJlYWRf bWlncmF0ZV9jb3B5KHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gdGhyZWFkZWRfbWlncmF0ZShhcmcs IF9fdGhyZWFkX21pZ3JhdGVfY29weSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX190aHJlYWRfZ2xv YmFsX2NvcHkodm9pZCAqYXJnKQoreworCXN0cnVjdCB0aHJlYWRlZF9taWdyYXRlICp0bSA9IGFy ZzsKKworCXJldHVybiBnbG9iYWxfY29weSh0bS0+bWlncmF0ZSwgMiAqIENIVU5LX1NaLCAmdG0t PnBybmcpOworfQorCitzdGF0aWMgaW50IHRocmVhZF9nbG9iYWxfY29weSh2b2lkICphcmcpCit7 CisJcmV0dXJuIHRocmVhZGVkX21pZ3JhdGUoYXJnLCBfX3RocmVhZF9nbG9iYWxfY29weSwgMCk7 Cit9CisKK2ludCBpbnRlbF9taWdyYXRlX2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3Rz W10gPSB7CisJCVNVQlRFU1QobGl2ZV9taWdyYXRlX2NvcHkpLAorCQlTVUJURVNUKHRocmVhZF9t aWdyYXRlX2NvcHkpLAorCQlTVUJURVNUKHRocmVhZF9nbG9iYWxfY29weSksCisJfTsKKwlzdHJ1 Y3QgaW50ZWxfbWlncmF0ZSBtOworCWludCBlcnI7CisKKwlpZiAoaW50ZWxfbWlncmF0ZV9pbml0 KCZtLCAmaTkxNS0+Z3QpKQorCQlyZXR1cm4gMDsKKworCWVyciA9IGk5MTVfc3VidGVzdHModGVz dHMsICZtKTsKKwlpbnRlbF9taWdyYXRlX2ZpbmkoJm0pOworCisJcmV0dXJuIGVycjsKK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRl c3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0 cy5oCmluZGV4IGE5MmMwZTliN2U2Yi4uYmU1ZTAxOTFlYWVhIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKQEAgLTI2LDYg KzI2LDcgQEAgc2VsZnRlc3QoZ3RfbW9jcywgaW50ZWxfbW9jc19saXZlX3NlbGZ0ZXN0cykKIHNl bGZ0ZXN0KGd0X3BtLCBpbnRlbF9ndF9wbV9saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGd0X2hl YXJ0YmVhdCwgaW50ZWxfaGVhcnRiZWF0X2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QocmVxdWVz dHMsIGk5MTVfcmVxdWVzdF9saXZlX3NlbGZ0ZXN0cykKK3NlbGZ0ZXN0KG1pZ3JhdGUsIGludGVs X21pZ3JhdGVfbGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChhY3RpdmUsIGk5MTVfYWN0aXZlX2xp dmVfc2VsZnRlc3RzKQogc2VsZnRlc3Qob2JqZWN0cywgaTkxNV9nZW1fb2JqZWN0X2xpdmVfc2Vs ZnRlc3RzKQogc2VsZnRlc3QobW1hbiwgaTkxNV9nZW1fbW1hbl9saXZlX3NlbGZ0ZXN0cykKLS0g CjIuMzEuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==