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=-12.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, 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 35D22C4363D for ; Thu, 24 Sep 2020 18:49:13 +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 F03862311E for ; Thu, 24 Sep 2020 18:49:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F03862311E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=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 941BE6EB4C; Thu, 24 Sep 2020 18:49:12 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7CF436EB4C for ; Thu, 24 Sep 2020 18:49:11 +0000 (UTC) IronPort-SDR: 5qKADKgzz03vSumTftnO8Z18jrBe77szuOQy+u/oRABOLF0emq2mPBmpFgCeeEHTY9e3oOHbTU FhMoHa+XxuvA== X-IronPort-AV: E=McAfee;i="6000,8403,9754"; a="222906042" X-IronPort-AV: E=Sophos;i="5.77,298,1596524400"; d="scan'208";a="222906042" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Sep 2020 11:49:11 -0700 IronPort-SDR: PTNL8V+rWJv6W0PHmgIAP3JuFLTuAmZ5jdoZ3F6pZWKRn3WL6ufbwJ3tY16cNCKA4s7KUiseJV ZtdPFFJ74R5w== X-IronPort-AV: E=Sophos;i="5.77,298,1596524400"; d="scan'208";a="455469395" Received: from ideak-desk.fi.intel.com (HELO localhost) ([10.237.68.141]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Sep 2020 11:49:09 -0700 From: Imre Deak To: intel-gfx@lists.freedesktop.org Date: Thu, 24 Sep 2020 21:48:05 +0300 Message-Id: <20200924184805.294493-7-imre.deak@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200924184805.294493-1-imre.deak@intel.com> References: <20200924184805.294493-1-imre.deak@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 6/6] drm/i915: Switch to LTTPR non-transparent mode link training 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" VGhlIERQIFN0YW5kYXJkJ3MgcmVjb21tZW5kYXRpb24gaXMgdG8gdXNlIHRoZSBMVFRQUiBub24t dHJhbnNwYXJlbnQKbW9kZSBsaW5rIHRyYWluaW5nIGlmIExUVFBScyBhcmUgZGV0ZWN0ZWQsIHNv IGxldCdzIGRvIHRoaXMuCgpCZXNpZGVzIHBvd2VyLXNhdmluZywgdGhlIGFkdmFudGFnZXMgb2Yg dGhpcyBhcmUgdGhhdCB0aGUgbWF4aW11bSBudW1iZXIKb2YgTFRUUFJzIGNhbiBvbmx5IGJlIHVz ZWQgaW4gbm9uLXRyYW5zcGFyZW50IG1vZGUgKHRoZSBsaW1pdCBpcyA1LTggaW4KdHJhbnNwYXJl bnQgbW9kZSksIGFuZCBpdCBwcm92aWRlcyBhIHdheSB0byBuYXJyb3cgZG93biB0aGUgcmVhc29u IGZvciBhCmxpbmsgdHJhaW5pbmcgZmFpbHVyZSB0byBhIGdpdmVuIGxpbmsgc2VnbWVudC4gTm9u LXRyYW5zcGFyZW50IG1vZGUgaXMKcHJvYmFibHkgYWxzbyB0aGUgbW9kZSB0aGF0IHdhcyB0ZXN0 ZWQgdGhlIG1vc3QgYnkgdGhlIGluZHVzdHJ5LgoKVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaHNl dDoKLSBQYXNzIHRoZSBEUCBQSFkgdGhhdCBpcyBjdXJyZW50bHkgbGluayB0cmFpbmVkIHRvIGFs bCBMVCBoZWxwZXJzLCBzbwogIHRoYXQgdGhlc2UgY2FuIGFjY2VzcyB0aGUgY29ycmVjdCBMVFRQ Ui9EUFJYIERQQ0QgcmVnaXN0ZXJzLgotIER1cmluZyBMVCB0YWtlIGludG8gYWNjb3VudCB0aGUg TFRUUFIgY29tbW9uIGxhbmUgcmF0ZS9jb3VudCBhbmQgdGhlCiAgcGVyIExUVFBSLVBIWSB2c3dp bmcvcHJlLWVtcGggbGltaXRzLgotIFN3aXRjaCB0byBMVFRQUiBub24tdHJhbnNwYXJlbnQgTFQg bW9kZSBhbmQgdHJhaW4gZWFjaCBsaW5rIHNlZ21lbnQKICBhY2NvcmRpbmcgdG8gdGhlIHNlcXVl bmNlIGluIERQIFN0YW5kYXJkIHYyLjAgKGNvbXBsZXRlIENSL0VRIGZvcgogIGVhY2ggc2VnbWVu dCBiZWZvcmUgY29udGludWluZyB3aXRoIHRoZSBuZXh0IHNlZ21lbnQpLgoKdjI6Ci0gU3dpdGNo IHRvIG5vbi10cmFuc3BhcmVudCBtb2RlIGR1cmluZyBjb25uZWN0b3IgZGV0ZWN0aW9uLCB3aGlj aCBpcwogIHJlcXVpcmVkIGJlZm9yZSByZWFkaW5nIHRoZSBwZXItUEhZIExUVFBSIGNhcGFiaWxp dGllcy4KLSBNb3ZlIHRoZSBEUF9QSFlfTFRUUFIoKSBtYWNybyB0byBkcm1fZHBfaGVscGVyLmgg KFZpbGxlKQotIFVzZSB0aGUgbmV3IGRybV9kcF9kcGNkX3JlYWRfcGh5X2xpbmtfc3RhdHVzKCkg aW5zdGVhZCBvZiBhZGRpbmcgdGhlCiAgc2FtZSBsb2dpYyB0byBpbnRlbF9kcF9nZXRfbGlua19z dGF0dXMoKS4gKFZpbGxlKQotIE1ha2UgaW50ZWxfZHBfbHR0cHJfcGh5X2NhcHMoKSByZXR1cm4g YSBwb2ludGVyIHRvIHRoZSB3aG9sZSBhcnJheQogIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIGl0 cyBmaXJzdCBlbGVtZW50LiAoVmlsbGUpCi0gQWRkIHRoZSBpbnRlbF9kcF9waHlfaXNfZG93bnN0 cmVhbV9vZl9zb3VyY2UoKSBoZWxwZXIuIChWaWxsZSkKLSBBZGQgYSBjb2RlIGNvbW1lbnQgYWJv dXQgdGhlIGRpc2FibGUtPmVuYWJsZSBxdWlyayBvZgogIG5vbi10cmFuc3BhcmVudCBtb2RlLgot IEFkZCB0aGUgaW50ZWxfZHBfdHJhaW5pbmdfcGF0dGVybl9zZXRfcmVnKCkgaGVscGVyLgotIEZp eCBjaGVja3BhdGNoL3NwYXJzZSB3YXJucy4KCkNjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5 cmphbGFAbGludXguaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxs ZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogSW1yZSBEZWFrIDxpbXJl LmRlYWtAaW50ZWwuY29tPgotLS0KIC4uLi9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlf dHlwZXMuaCAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rw LmMgICAgICAgfCAgMjcgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAu aCAgICAgICB8ICAgMiAtCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX3RyYWlu aW5nLmMgfCAzNTggKysrKysrKysrKysrKysrLS0tCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kcF9saW5rX3RyYWluaW5nLmggfCAgIDUgKy0KIDUgZmlsZXMgY2hhbmdlZCwgMzE1IGluc2Vy dGlvbnMoKyksIDc4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKaW5kZXggYjA0OTIxZWJhNzNiLi4yZmI0ZTlh NmEzMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheV90eXBlcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheV90eXBlcy5oCkBAIC0xMjgxLDYgKzEyODEsNyBAQCBzdHJ1Y3QgaW50ZWxfZHAgewogCXU4 IGVkcF9kcGNkW0VEUF9ESVNQTEFZX0NUTF9DQVBfU0laRV07CiAJdTggZHNjX2RwY2RbRFBfRFND X1JFQ0VJVkVSX0NBUF9TSVpFXTsKIAl1OCBsdHRwcl9jb21tb25fY2Fwc1tEUF9MVFRQUl9DT01N T05fQ0FQX1NJWkVdOworCXU4IGx0dHByX3BoeV9jYXBzW0RQX01BWF9MVFRQUl9DT1VOVF1bRFBf TFRUUFJfUEhZX0NBUF9TSVpFXTsKIAl1OCBmZWNfY2FwYWJsZTsKIAkvKiBzb3VyY2UgcmF0ZXMg Ki8KIAlpbnQgbnVtX3NvdXJjZV9yYXRlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZHAuYwppbmRleCA2NGJmNGFhMzg0ZDMuLmJiZjVhMDJlZjBjMSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwpAQCAtMTYxLDYgKzE2MSw3IEBAIHN0YXRpYyB2b2lk IGludGVsX2RwX3NldF9zaW5rX3JhdGVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiAJCTE2 MjAwMCwgMjcwMDAwLCA1NDAwMDAsIDgxMDAwMAogCX07CiAJaW50IGksIG1heF9yYXRlOworCWlu dCBtYXhfbHR0cHJfcmF0ZTsKIAogCWlmIChkcm1fZHBfaGFzX3F1aXJrKCZpbnRlbF9kcC0+ZGVz YywgMCwKIAkJCSAgICAgRFBfRFBDRF9RVUlSS19DQU5fRE9fTUFYX0xJTktfUkFURV8zXzI0X0dC UFMpKSB7CkBAIC0xNzQsNiArMTc1LDkgQEAgc3RhdGljIHZvaWQgaW50ZWxfZHBfc2V0X3Npbmtf cmF0ZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIAl9CiAKIAltYXhfcmF0ZSA9IGRybV9k cF9id19jb2RlX3RvX2xpbmtfcmF0ZShpbnRlbF9kcC0+ZHBjZFtEUF9NQVhfTElOS19SQVRFXSk7 CisJbWF4X2x0dHByX3JhdGUgPSBkcm1fZHBfbHR0cHJfbWF4X2xpbmtfcmF0ZShpbnRlbF9kcC0+ bHR0cHJfY29tbW9uX2NhcHMpOworCWlmIChtYXhfbHR0cHJfcmF0ZSkKKwkJbWF4X3JhdGUgPSBt aW4obWF4X3JhdGUsIG1heF9sdHRwcl9yYXRlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGRwX3JhdGVzKTsgaSsrKSB7CiAJCWlmIChkcF9yYXRlc1tpXSA+IG1heF9yYXRlKQpAQCAt MjE5LDYgKzIyMywxMCBAQCBzdGF0aWMgaW50IGludGVsX2RwX21heF9jb21tb25fbGFuZV9jb3Vu dChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogCWludCBzb3VyY2VfbWF4ID0gZGlnX3BvcnQt Pm1heF9sYW5lczsKIAlpbnQgc2lua19tYXggPSBkcm1fZHBfbWF4X2xhbmVfY291bnQoaW50ZWxf ZHAtPmRwY2QpOwogCWludCBmaWFfbWF4ID0gaW50ZWxfdGNfcG9ydF9maWFfbWF4X2xhbmVfY291 bnQoZGlnX3BvcnQpOworCWludCBsdHRwcl9tYXggPSBkcm1fZHBfbHR0cHJfbWF4X2xhbmVfY291 bnQoaW50ZWxfZHAtPmx0dHByX2NvbW1vbl9jYXBzKTsKKworCWlmIChsdHRwcl9tYXgpCisJCXNp bmtfbWF4ID0gbWluKHNpbmtfbWF4LCBsdHRwcl9tYXgpOwogCiAJcmV0dXJuIG1pbjMoc291cmNl X21heCwgc2lua19tYXgsIGZpYV9tYXgpOwogfQpAQCAtNDEyNiwxNyArNDEzNCw2IEBAIHN0YXRp YyB2b2lkIGNodl9kcF9wb3N0X3BsbF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KnN0YXRlLAogCWNodl9waHlfcG9zdF9wbGxfZGlzYWJsZShlbmNvZGVyLCBvbGRfY3J0Y19zdGF0 ZSk7CiB9CiAKLS8qCi0gKiBGZXRjaCBBVVggQ0ggcmVnaXN0ZXJzIDB4MjAyIC0gMHgyMDcgd2hp Y2ggY29udGFpbgotICogbGluayBzdGF0dXMgaW5mb3JtYXRpb24KLSAqLwotYm9vbAotaW50ZWxf ZHBfZ2V0X2xpbmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHU4IGxpbmtfc3Rh dHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdKQotewotCXJldHVybiBkcm1fZHBfZHBjZF9yZWFkKCZp bnRlbF9kcC0+YXV4LCBEUF9MQU5FMF8xX1NUQVRVUywgbGlua19zdGF0dXMsCi0JCQkJRFBfTElO S19TVEFUVVNfU0laRSkgPT0gRFBfTElOS19TVEFUVVNfU0laRTsKLX0KLQogc3RhdGljIHU4IGlu dGVsX2RwX3ZvbHRhZ2VfbWF4XzIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIHsKIAlyZXR1 cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOwpAQCAtNTU0NSwxMyArNTU0MiwxNCBA QCB2b2lkIGludGVsX2RwX3Byb2Nlc3NfcGh5X3JlcXVlc3Qoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKIAkJJmludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfZGF0YS5waHl0ZXN0OwogCXU4IGxp bmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwogCi0JaWYgKCFpbnRlbF9kcF9nZXRfbGlu a19zdGF0dXMoaW50ZWxfZHAsIGxpbmtfc3RhdHVzKSkgeworCWlmIChkcm1fZHBfZHBjZF9yZWFk X3BoeV9saW5rX3N0YXR1cygmaW50ZWxfZHAtPmF1eCwgRFBfUEhZX0RQUlgsCisJCQkJCSAgICAg bGlua19zdGF0dXMpIDwgMCkgewogCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgdG8gZ2V0IGxpbmsg c3RhdHVzXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIHJldHJpZXZlIHZzd2luZyAmIHByZS1l bXBoYXNpcyBzZXR0aW5nICovCi0JaW50ZWxfZHBfZ2V0X2FkanVzdF90cmFpbihpbnRlbF9kcCwg bGlua19zdGF0dXMpOworCWludGVsX2RwX2dldF9hZGp1c3RfdHJhaW4oaW50ZWxfZHAsIERQX1BI WV9EUFJYLCBsaW5rX3N0YXR1cyk7CiAKIAlpbnRlbF9kcF9hdXRvdGVzdF9waHlfZGRpX2Rpc2Fi bGUoaW50ZWxfZHApOwogCkBAIC01NzA2LDcgKzU3MDQsOCBAQCBpbnRlbF9kcF9uZWVkc19saW5r X3JldHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIAlpZiAoaW50ZWxfcHNyX2VuYWJs ZWQoaW50ZWxfZHApKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoIWludGVsX2RwX2dldF9saW5r X3N0YXR1cyhpbnRlbF9kcCwgbGlua19zdGF0dXMpKQorCWlmIChkcm1fZHBfZHBjZF9yZWFkX3Bo eV9saW5rX3N0YXR1cygmaW50ZWxfZHAtPmF1eCwgRFBfUEhZX0RQUlgsCisJCQkJCSAgICAgbGlu a19zdGF0dXMpIDwgMCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZHAuaAppbmRleCBjYTgzMTlkNmM2M2MuLjE4MzI0MjRjZDA1NyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaApAQCAtOTksOCArOTksNiBAQCB2 b2lkIGludGVsX2RwX2NvbXB1dGVfcmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQg cG9ydF9jbG9jaywKIAkJCSAgIHU4ICpsaW5rX2J3LCB1OCAqcmF0ZV9zZWxlY3QpOwogYm9vbCBp bnRlbF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJyMihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsK IGJvb2wgaW50ZWxfZHBfc291cmNlX3N1cHBvcnRzX2hicjMoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCk7Ci1ib29sCi1pbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwgdTggKmxpbmtfc3RhdHVzKTsKIAogYm9vbCBpbnRlbF9kcF9nZXRfY29sb3JpbWV0 cnlfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwogaW50IGludGVsX2RwX2xpbmtf cmVxdWlyZWQoaW50IHBpeGVsX2Nsb2NrLCBpbnQgYnBwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua190cmFpbmluZy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMKaW5kZXggNGY4ZjQy Y2MyNWZhLi5hZjA1ODFlNWZjMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZHBfbGlua190cmFpbmluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZHBfbGlua190cmFpbmluZy5jCkBAIC0zNCw2ICszNCw2MyBAQCBpbnRl bF9kcF9kdW1wX2xpbmtfc3RhdHVzKGNvbnN0IHU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVT X1NJWkVdKQogCQkgICAgICBsaW5rX3N0YXR1c1szXSwgbGlua19zdGF0dXNbNF0sIGxpbmtfc3Rh dHVzWzVdKTsKIH0KIAorc3RhdGljIGludCBpbnRlbF9kcF9sdHRwcl9jb3VudChzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKQoreworCWludCBjb3VudCA9IGRybV9kcF9sdHRwcl9jb3VudChpbnRl bF9kcC0+bHR0cHJfY29tbW9uX2NhcHMpOworCisJLyoKKwkgKiBQcmV0ZW5kIG5vIExUVFBScyBp biBjYXNlIG9mIExUVFBSIGRldGVjdGlvbiBlcnJvciwgb3IKKwkgKiBpZiB0b28gbWFueSAoPjgp IExUVFBScyBhcmUgZGV0ZWN0ZWQuIFRoaXMgdHJhbnNsYXRlcyB0byBsaW5rCisJICogdHJhaW5p bmcgaW4gdHJhbnNwYXJlbnQgbW9kZS4KKwkgKi8KKwlyZXR1cm4gY291bnQgPD0gMCA/IDAgOiBj b3VudDsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZHBfcmVzZXRfbHR0cHJfY291bnQoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlpbnRlbF9kcC0+bHR0cHJfY29tbW9uX2NhcHNbRFBf UEhZX1JFUEVBVEVSX0NOVCAtCisJCQkJICAgIERQX0xUX1RVTkFCTEVfUEhZX1JFUEVBVEVSX0ZJ RUxEX0RBVEFfU1RSVUNUVVJFX1JFVl0gPSAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqaW50 ZWxfZHBfcGh5X25hbWUoZW51bSBkcm1fZHBfcGh5IGRwX3BoeSwKKwkJCQkgICAgIGNoYXIgKmJ1 Ziwgc2l6ZV90IGJ1Zl9zaXplKQoreworCWlmIChkcF9waHkgPT0gRFBfUEhZX0RQUlgpCisJCXNu cHJpbnRmKGJ1ZiwgYnVmX3NpemUsICJEUFJYIik7CisJZWxzZQorCQlzbnByaW50ZihidWYsIGJ1 Zl9zaXplLCAiTFRUUFIgJWQiLCBkcF9waHkgLSBEUF9QSFlfTFRUUFIxICsgMSk7CisKKwlyZXR1 cm4gYnVmOworfQorCitzdGF0aWMgdTggKmludGVsX2RwX2x0dHByX3BoeV9jYXBzKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHAsCisJCQkJICAgZW51bSBkcm1fZHBfcGh5IGRwX3BoeSkKK3sKKwly ZXR1cm4gaW50ZWxfZHAtPmx0dHByX3BoeV9jYXBzW2RwX3BoeSAtIERQX1BIWV9MVFRQUjFdOwor fQorCitzdGF0aWMgdm9pZCBpbnRlbF9kcF9yZWFkX2x0dHByX3BoeV9jYXBzKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsCisJCQkJCSBlbnVtIGRybV9kcF9waHkgZHBfcGh5KQoreworCXU4ICpw aHlfY2FwcyA9IGludGVsX2RwX2x0dHByX3BoeV9jYXBzKGludGVsX2RwLCBkcF9waHkpOworCWNo YXIgcGh5X25hbWVbMTBdOworCisJaW50ZWxfZHBfcGh5X25hbWUoZHBfcGh5LCBwaHlfbmFtZSwg c2l6ZW9mKHBoeV9uYW1lKSk7CisKKwlpZiAoZHJtX2RwX3JlYWRfbHR0cHJfcGh5X2NhcHMoJmlu dGVsX2RwLT5hdXgsIGRwX3BoeSwgcGh5X2NhcHMpIDwgMCkgeworCQlkcm1fZGJnX2ttcygmZHBf dG9faTkxNShpbnRlbF9kcCktPmRybSwKKwkJCSAgICAiZmFpbGVkIHRvIHJlYWQgdGhlIFBIWSBj YXBzIGZvciAlc1xuIiwKKwkJCSAgICBwaHlfbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlkcm1f ZGJnX2ttcygmZHBfdG9faTkxNShpbnRlbF9kcCktPmRybSwKKwkJICAgICIlcyBQSFkgY2FwYWJp bGl0aWVzOiAlKnBoXG4iLAorCQkgICAgcGh5X25hbWUsCisJCSAgICAoaW50KXNpemVvZihpbnRl bF9kcC0+bHR0cHJfcGh5X2NhcHNbMF0pLAorCQkgICAgcGh5X2NhcHMpOworfQorCiBzdGF0aWMg Ym9vbCBpbnRlbF9kcF9yZWFkX2x0dHByX2NvbW1vbl9jYXBzKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCiB7CiAJaWYgKGRybV9kcF9yZWFkX2x0dHByX2NvbW1vbl9jYXBzKCZpbnRlbF9kcC0+ YXV4LApAQCAtNjQsMjEgKzEyMSw2MSBAQCBpbnRlbF9kcF9zZXRfbHR0cHJfdHJhbnNwYXJlbnRf bW9kZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBib29sIGVuYWJsZSkKICAqIGludGVsX2Rw X2x0dHByX2luaXQgLSBkZXRlY3QgTFRUUFJzIGFuZCBpbml0IHRoZSBMVFRQUiBsaW5rIHRyYWlu aW5nIG1vZGUKICAqIEBpbnRlbF9kcDogSW50ZWwgRFAgc3RydWN0CiAgKgotICogUmVhZCB0aGUg TFRUUFIgY29tbW9uIGNhcGFiaWxpdGllcyBhbmQgc3dpdGNoIHRvIHRyYW5zcGFyZW50IGxpbmsg dHJhaW5pbmcKLSAqIG1vZGUuCisgKiBSZWFkIHRoZSBMVFRQUiBjb21tb24gY2FwYWJpbGl0aWVz LCBzd2l0Y2ggdG8gbm9uLXRyYW5zcGFyZW50IGxpbmsgdHJhaW5pbmcKKyAqIG1vZGUgaWYgYW55 IGlzIGRldGVjdGVkIGFuZCByZWFkIHRoZSBQSFkgY2FwYWJpbGl0aWVzIGZvciBhbGwgZGV0ZWN0 ZWQKKyAqIExUVFBScy4gSW4gY2FzZSBvZiBhbiBMVFRQUiBkZXRlY3Rpb24gZXJyb3Igb3IgaWYg dGhlIG51bWJlciBvZgorICogTFRUUFJzIGlzIG1vcmUgdGhhbiBpcyBzdXBwb3J0ZWQgKDgpLCBm YWxsIGJhY2sgdG8gdGhlIG5vLUxUVFBSLAorICogdHJhbnNwYXJlbnQgbW9kZSBsaW5rIHRyYWlu aW5nIG1vZGUuCisgKgorICogUmV0dXJuczoKKyAqICAgPjAgIGlmIExUVFBScyB3ZXJlIGRldGVj dGVkIGFuZCB0aGUgbm9uLXRyYW5zcGFyZW50IExUIG1vZGUgd2FzIHNldAorICogICAgMCAgaWYg bm8gTFRUUFJzIG9yIG1vcmUgdGhhbiA4IExUVFBScyB3ZXJlIGRldGVjdGVkIG9yIGluIGNhc2Ug b2YgYQorICogICAgICAgZGV0ZWN0aW9uIGZhaWx1cmUgYW5kIHRoZSB0cmFuc3BhcmVudCBMVCBt b2RlIHdhcyBzZXQKICAqLwogaW50IGludGVsX2RwX2x0dHByX2luaXQoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKIHsKLQlpbnRlbF9kcF9yZWFkX2x0dHByX2NvbW1vbl9jYXBzKGludGVsX2Rw KTsKKwlpbnQgbHR0cHJfY291bnQ7CisJYm9vbCByZXQ7CisJaW50IGk7CisKKwlyZXQgPSBpbnRl bF9kcF9yZWFkX2x0dHByX2NvbW1vbl9jYXBzKGludGVsX2RwKTsKIAogCS8qCiAJICogU2VlIERQ IFN0YW5kYXJkIHYyLjAgMy42LjYuMS4gYWJvdXQgdGhlIGV4cGxpY2l0IGRpc2FibGluZyBvZgot CSAqIG5vbi10cmFuc3BhcmVudCBtb2RlLgorCSAqIG5vbi10cmFuc3BhcmVudCBtb2RlIGFuZCB0 aGUgZGlzYWJsZS0+ZW5hYmxlIG5vbi10cmFuc3BhcmVudCBtb2RlCisJICogc2VxdWVuY2UuCiAJ ICovCiAJaW50ZWxfZHBfc2V0X2x0dHByX3RyYW5zcGFyZW50X21vZGUoaW50ZWxfZHAsIHRydWUp OwogCi0JcmV0dXJuIDA7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJbHR0cHJfY291bnQg PSBpbnRlbF9kcF9sdHRwcl9jb3VudChpbnRlbF9kcCk7CisKKwkvKgorCSAqIEluIGNhc2Ugb2Yg dW5zdXBwb3J0ZWQgbnVtYmVyIG9mIExUVFBScyBvciBmYWlsaW5nIHRvIHN3aXRjaCB0bworCSAq IG5vbi10cmFuc3BhcmVudCBtb2RlIGZhbGwtYmFjayB0byB0cmFuc3BhcmVudCBsaW5rIHRyYWlu aW5nIG1vZGUsCisJICogc3RpbGwgdGFraW5nIGludG8gYWNjb3VudCBhbnkgTFRUUFIgY29tbW9u IGxhbmUtIHJhdGUvY291bnQgbGltaXRzLgorCSAqLworCWlmIChsdHRwcl9jb3VudCA9PSAwKQor CQlyZXR1cm4gMDsKKworCWlmICghaW50ZWxfZHBfc2V0X2x0dHByX3RyYW5zcGFyZW50X21vZGUo aW50ZWxfZHAsIGZhbHNlKSkgeworCQlkcm1fZGJnX2ttcygmZHBfdG9faTkxNShpbnRlbF9kcCkt PmRybSwKKwkJCSAgICAiU3dpdGNoaW5nIHRvIExUVFBSIG5vbi10cmFuc3BhcmVudCBMVCBtb2Rl IGZhaWxlZCwgZmFsbC1iYWNrIHRvIHRyYW5zcGFyZW50IG1vZGVcbiIpOworCisJCWludGVsX2Rw X3NldF9sdHRwcl90cmFuc3BhcmVudF9tb2RlKGludGVsX2RwLCB0cnVlKTsKKwkJaW50ZWxfZHBf cmVzZXRfbHR0cHJfY291bnQoaW50ZWxfZHApOworCisJCXJldHVybiAwOworCX0KKworCWZvciAo aSA9IDA7IGkgPCBsdHRwcl9jb3VudDsgaSsrKQorCQlpbnRlbF9kcF9yZWFkX2x0dHByX3BoeV9j YXBzKGludGVsX2RwLCBEUF9QSFlfTFRUUFIoaSkpOworCisJcmV0dXJuIGx0dHByX2NvdW50Owog fQorRVhQT1JUX1NZTUJPTChpbnRlbF9kcF9sdHRwcl9pbml0KTsKIAogc3RhdGljIHU4IGRwX3Zv bHRhZ2VfbWF4KHU4IHByZWVtcGgpCiB7CkBAIC05NSwxMCArMTkyLDg4IEBAIHN0YXRpYyB1OCBk cF92b2x0YWdlX21heCh1OCBwcmVlbXBoKQogCX0KIH0KIAorc3RhdGljIHU4IGludGVsX2RwX2x0 dHByX3ZvbHRhZ2VfbWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkJICAgICBlbnVt IGRybV9kcF9waHkgZHBfcGh5KQoreworCWNvbnN0IHU4ICpwaHlfY2FwcyA9IGludGVsX2RwX2x0 dHByX3BoeV9jYXBzKGludGVsX2RwLCBkcF9waHkpOworCisJaWYgKGRybV9kcF9sdHRwcl92b2x0 YWdlX3N3aW5nX2xldmVsXzNfc3VwcG9ydGVkKHBoeV9jYXBzKSkKKwkJcmV0dXJuIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzsKKwllbHNlCisJCXJldHVybiBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzI7Cit9CisKK3N0YXRpYyB1OCBpbnRlbF9kcF9sdHRwcl9wcmVlbXBoX21h eChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAorCQkJCSAgICAgZW51bSBkcm1fZHBfcGh5IGRw X3BoeSkKK3sKKwljb25zdCB1OCAqcGh5X2NhcHMgPSBpbnRlbF9kcF9sdHRwcl9waHlfY2Fwcyhp bnRlbF9kcCwgZHBfcGh5KTsKKworCWlmIChkcm1fZHBfbHR0cHJfcHJlX2VtcGhhc2lzX2xldmVs XzNfc3VwcG9ydGVkKHBoeV9jYXBzKSkKKwkJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVM XzM7CisJZWxzZQorCQlyZXR1cm4gRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMjsKK30KKworc3Rh dGljIGJvb2wKK2ludGVsX2RwX3BoeV9pc19kb3duc3RyZWFtX29mX3NvdXJjZShzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwLAorCQkJCSAgICAgZW51bSBkcm1fZHBfcGh5IGRwX3BoeSkKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOworCWlu dCBsdHRwcl9jb3VudCA9IGludGVsX2RwX2x0dHByX2NvdW50KGludGVsX2RwKTsKKworCWRybV9X QVJOX09OX09OQ0UoJmk5MTUtPmRybSwgbHR0cHJfY291bnQgPT0gMCAmJiBkcF9waHkgIT0gRFBf UEhZX0RQUlgpOworCisJcmV0dXJuIGx0dHByX2NvdW50ID09IDAgfHwgZHBfcGh5ID09IERQX1BI WV9MVFRQUihsdHRwcl9jb3VudCAtIDEpOworfQorCitzdGF0aWMgdTggaW50ZWxfZHBfcGh5X3Zv bHRhZ2VfbWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkJICAgZW51bSBkcm1fZHBf cGh5IGRwX3BoeSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5 MTUoaW50ZWxfZHApOworCXU4IHZvbHRhZ2VfbWF4OworCisJLyoKKwkgKiBHZXQgdm9sdGFnZV9t YXggZnJvbSB0aGUgRFBUWF9QSFkgKHNvdXJjZSBvciBMVFRQUikgdXBzdHJlYW0gZnJvbQorCSAq IHRoZSBEUFJYX1BIWSB3ZSB0cmFpbi4KKwkgKi8KKwlpZiAoaW50ZWxfZHBfcGh5X2lzX2Rvd25z dHJlYW1fb2Zfc291cmNlKGludGVsX2RwLCBkcF9waHkpKQorCQl2b2x0YWdlX21heCA9IGludGVs X2RwLT52b2x0YWdlX21heChpbnRlbF9kcCk7CisJZWxzZQorCQl2b2x0YWdlX21heCA9IGludGVs X2RwX2x0dHByX3ZvbHRhZ2VfbWF4KGludGVsX2RwLCBkcF9waHkgKyAxKTsKKworCWRybV9XQVJO X09OX09OQ0UoJmk5MTUtPmRybSwKKwkJCSB2b2x0YWdlX21heCAhPSBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzIgJiYKKwkJCSB2b2x0YWdlX21heCAhPSBEUF9UUkFJTl9WT0xUQUdFX1NX SU5HX0xFVkVMXzMpOworCisJcmV0dXJuIHZvbHRhZ2VfbWF4OworfQorCitzdGF0aWMgdTggaW50 ZWxfZHBfcGh5X3ByZWVtcGhfbWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkJICAg ZW51bSBkcm1fZHBfcGh5IGRwX3BoeSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOworCXU4IHByZWVtcGhfbWF4OworCisJLyoKKwkgKiBH ZXQgcHJlZW1waF9tYXggZnJvbSB0aGUgRFBUWF9QSFkgKHNvdXJjZSBvciBMVFRQUikgdXBzdHJl YW0gZnJvbQorCSAqIHRoZSBEUFJYX1BIWSB3ZSB0cmFpbi4KKwkgKi8KKwlpZiAoaW50ZWxfZHBf cGh5X2lzX2Rvd25zdHJlYW1fb2Zfc291cmNlKGludGVsX2RwLCBkcF9waHkpKQorCQlwcmVlbXBo X21heCA9IGludGVsX2RwLT5wcmVlbXBoX21heChpbnRlbF9kcCk7CisJZWxzZQorCQlwcmVlbXBo X21heCA9IGludGVsX2RwX2x0dHByX3ByZWVtcGhfbWF4KGludGVsX2RwLCBkcF9waHkgKyAxKTsK KworCWRybV9XQVJOX09OX09OQ0UoJmk5MTUtPmRybSwKKwkJCSBwcmVlbXBoX21heCAhPSBEUF9U UkFJTl9QUkVfRU1QSF9MRVZFTF8yICYmCisJCQkgcHJlZW1waF9tYXggIT0gRFBfVFJBSU5fUFJF X0VNUEhfTEVWRUxfMyk7CisKKwlyZXR1cm4gcHJlZW1waF9tYXg7Cit9CisKIHZvaWQgaW50ZWxf ZHBfZ2V0X2FkanVzdF90cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAorCQkJICAgICAg IGVudW0gZHJtX2RwX3BoeSBkcF9waHksCiAJCQkgICAgICAgY29uc3QgdTggbGlua19zdGF0dXNb RFBfTElOS19TVEFUVVNfU0laRV0pCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSBkcF90b19pOTE1KGludGVsX2RwKTsKIAl1OCB2ID0gMDsKIAl1OCBwID0gMDsKIAlpbnQgbGFu ZTsKQEAgLTExMCwyMSArMjg1LDEzIEBAIHZvaWQgaW50ZWxfZHBfZ2V0X2FkanVzdF90cmFpbihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAogCQlwID0gbWF4KHAsIGRybV9kcF9nZXRfYWRqdXN0 X3JlcXVlc3RfcHJlX2VtcGhhc2lzKGxpbmtfc3RhdHVzLCBsYW5lKSk7CiAJfQogCi0JcHJlZW1w aF9tYXggPSBpbnRlbF9kcC0+cHJlZW1waF9tYXgoaW50ZWxfZHApOwotCWRybV9XQVJOX09OX09O Q0UoJmk5MTUtPmRybSwKLQkJCSBwcmVlbXBoX21heCAhPSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZF TF8yICYmCi0JCQkgcHJlZW1waF9tYXggIT0gRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMyk7Ci0K KwlwcmVlbXBoX21heCA9IGludGVsX2RwX3BoeV9wcmVlbXBoX21heChpbnRlbF9kcCwgZHBfcGh5 KTsKIAlpZiAocCA+PSBwcmVlbXBoX21heCkKIAkJcCA9IHByZWVtcGhfbWF4IHwgRFBfVFJBSU5f TUFYX1BSRV9FTVBIQVNJU19SRUFDSEVEOwogCiAJdiA9IG1pbih2LCBkcF92b2x0YWdlX21heChw KSk7CiAKLQl2b2x0YWdlX21heCA9IGludGVsX2RwLT52b2x0YWdlX21heChpbnRlbF9kcCk7Ci0J ZHJtX1dBUk5fT05fT05DRSgmaTkxNS0+ZHJtLAotCQkJIHZvbHRhZ2VfbWF4ICE9IERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMiAmJgotCQkJIHZvbHRhZ2VfbWF4ICE9IERQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfTEVWRUxfMyk7Ci0KKwl2b2x0YWdlX21heCA9IGludGVsX2RwX3BoeV92b2x0 YWdlX21heChpbnRlbF9kcCwgZHBfcGh5KTsKIAlpZiAodiA+PSB2b2x0YWdlX21heCkKIAkJdiA9 IHZvbHRhZ2VfbWF4IHwgRFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQ7CiAKQEAgLTEzMiwxMCAr Mjk5LDE5IEBAIHZvaWQgaW50ZWxfZHBfZ2V0X2FkanVzdF90cmFpbihzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwLAogCQlpbnRlbF9kcC0+dHJhaW5fc2V0W2xhbmVdID0gdiB8IHA7CiB9CiAKK3N0 YXRpYyBpbnQgaW50ZWxfZHBfdHJhaW5pbmdfcGF0dGVybl9zZXRfcmVnKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsCisJCQkJCSAgICAgZW51bSBkcm1fZHBfcGh5IGRwX3BoeSkKK3sKKwlyZXR1 cm4gZHBfcGh5ID09IERQX1BIWV9EUFJYID8KKwkJRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQgOgor CQlEUF9UUkFJTklOR19QQVRURVJOX1NFVF9QSFlfUkVQRUFURVIoZHBfcGh5KTsKK30KKwogc3Rh dGljIGJvb2wKLWludGVsX2RwX3NldF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsCitpbnRlbF9kcF9zZXRfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBl bnVtIGRybV9kcF9waHkgZHBfcGh5LAogCQkJdTggZHBfdHJhaW5fcGF0KQogeworCWludCByZWcg PSBpbnRlbF9kcF90cmFpbmluZ19wYXR0ZXJuX3NldF9yZWcoaW50ZWxfZHAsIGRwX3BoeSk7CiAJ dTggYnVmW3NpemVvZihpbnRlbF9kcC0+dHJhaW5fc2V0KSArIDFdOwogCWludCBsZW47CiAKQEAg LTE0NiwyNyArMzIyLDI5IEBAIGludGVsX2RwX3NldF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsCiAJbWVtY3B5KGJ1ZiArIDEsIGludGVsX2RwLT50cmFpbl9zZXQsIGludGVs X2RwLT5sYW5lX2NvdW50KTsKIAlsZW4gPSBpbnRlbF9kcC0+bGFuZV9jb3VudCArIDE7CiAKLQly ZXR1cm4gZHJtX2RwX2RwY2Rfd3JpdGUoJmludGVsX2RwLT5hdXgsIERQX1RSQUlOSU5HX1BBVFRF Uk5fU0VULAotCQkJCSBidWYsIGxlbikgPT0gbGVuOworCXJldHVybiBkcm1fZHBfZHBjZF93cml0 ZSgmaW50ZWxfZHAtPmF1eCwgcmVnLCBidWYsIGxlbikgPT0gbGVuOwogfQogCiBzdGF0aWMgYm9v bAotaW50ZWxfZHBfcmVzZXRfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAot CQkJdTggZHBfdHJhaW5fcGF0KQoraW50ZWxfZHBfcmVzZXRfbGlua190cmFpbihzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwLCBlbnVtIGRybV9kcF9waHkgZHBfcGh5LAorCQkJICB1OCBkcF90cmFp bl9wYXQpCiB7CiAJbWVtc2V0KGludGVsX2RwLT50cmFpbl9zZXQsIDAsIHNpemVvZihpbnRlbF9k cC0+dHJhaW5fc2V0KSk7CiAJaW50ZWxfZHBfc2V0X3NpZ25hbF9sZXZlbHMoaW50ZWxfZHApOwot CXJldHVybiBpbnRlbF9kcF9zZXRfbGlua190cmFpbihpbnRlbF9kcCwgZHBfdHJhaW5fcGF0KTsK KwlyZXR1cm4gaW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsIGRwX3BoeSwgZHBfdHJh aW5fcGF0KTsKIH0KIAogc3RhdGljIGJvb2wKLWludGVsX2RwX3VwZGF0ZV9saW5rX3RyYWluKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCitpbnRlbF9kcF91cGRhdGVfbGlua190cmFpbihzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBlbnVtIGRybV9kcF9waHkgZHBfcGh5KQogeworCWludCBy ZWcgPSBkcF9waHkgPT0gRFBfUEhZX0RQUlggPworCQkJICAgIERQX1RSQUlOSU5HX0xBTkUwX1NF VCA6CisJCQkgICAgRFBfVFJBSU5JTkdfTEFORTBfU0VUX1BIWV9SRVBFQVRFUihkcF9waHkpOwog CWludCByZXQ7CiAKIAlpbnRlbF9kcF9zZXRfc2lnbmFsX2xldmVscyhpbnRlbF9kcCk7CiAKLQly ZXQgPSBkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBfVFJBSU5JTkdfTEFORTBf U0VULAorCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlKCZpbnRlbF9kcC0+YXV4LCByZWcsCiAJCQkJ aW50ZWxfZHAtPnRyYWluX3NldCwgaW50ZWxfZHAtPmxhbmVfY291bnQpOwogCiAJcmV0dXJuIHJl dCA9PSBpbnRlbF9kcC0+bGFuZV9jb3VudDsKQEAgLTIyNiw5ICs0MDQsMjIgQEAgc3RhdGljIHZv aWQgaW50ZWxfZHBfcHJlcGFyZV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp CiAJaW50ZWxfZHAtPkRQIHw9IERQX1BPUlRfRU47CiB9CiAKLS8qIFBlcmZvcm0gdGhlIGxpbmsg dHJhaW5pbmcgY2xvY2sgcmVjb3ZlcnkgcGhhc2UgdXNpbmcgdHJhaW5pbmcgcGF0dGVybiAxLiAq Lworc3RhdGljIHZvaWQgaW50ZWxfZHBfbGlua190cmFpbmluZ19jbG9ja19yZWNvdmVyeV9kZWxh eShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAorCQkJCQkJCWVudW0gZHJtX2RwX3BoeSBkcF9w aHkpCit7CisJaWYgKGRwX3BoeSA9PSBEUF9QSFlfRFBSWCkKKwkJZHJtX2RwX2xpbmtfdHJhaW5f Y2xvY2tfcmVjb3ZlcnlfZGVsYXkoaW50ZWxfZHAtPmRwY2QpOworCWVsc2UKKwkJZHJtX2RwX2x0 dHByX2xpbmtfdHJhaW5fY2xvY2tfcmVjb3ZlcnlfZGVsYXkoKTsKK30KKworLyoKKyAqIFBlcmZv cm0gdGhlIGxpbmsgdHJhaW5pbmcgY2xvY2sgcmVjb3ZlcnkgcGhhc2Ugb24gdGhlIGdpdmVuIERQ IFBIWSB1c2luZworICogdHJhaW5pbmcgcGF0dGVybiAxLgorICovCiBzdGF0aWMgYm9vbAotaW50 ZWxfZHBfbGlua190cmFpbmluZ19jbG9ja19yZWNvdmVyeShzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQoraW50ZWxfZHBfbGlua190cmFpbmluZ19jbG9ja19yZWNvdmVyeShzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwLAorCQkJCSAgICAgIGVudW0gZHJtX2RwX3BoeSBkcF9waHkpCiB7CiAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVsX2RwKTsKIAl1OCB2 b2x0YWdlOwpAQCAtMjM2LDcgKzQyNyw3IEBAIGludGVsX2RwX2xpbmtfdHJhaW5pbmdfY2xvY2tf cmVjb3Zlcnkoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIAlib29sIG1heF92c3dpbmdfcmVh Y2hlZCA9IGZhbHNlOwogCiAJLyogY2xvY2sgcmVjb3ZlcnkgKi8KLQlpZiAoIWludGVsX2RwX3Jl c2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsCisJaWYgKCFpbnRlbF9kcF9yZXNldF9saW5rX3RyYWlu KGludGVsX2RwLCBkcF9waHksCiAJCQkJICAgICAgIERQX1RSQUlOSU5HX1BBVFRFUk5fMSB8CiAJ CQkJICAgICAgIERQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFKSkgewogCQlkcm1fZXJyKCZpOTE1 LT5kcm0sICJmYWlsZWQgdG8gZW5hYmxlIGxpbmsgdHJhaW5pbmdcbiIpOwpAQCAtMjYwLDkgKzQ1 MSwxMCBAQCBpbnRlbF9kcF9saW5rX3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5KHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCiAJZm9yIChjcl90cmllcyA9IDA7IGNyX3RyaWVzIDwgbWF4X2NyX3Ry aWVzOyArK2NyX3RyaWVzKSB7CiAJCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVd OwogCi0JCWRybV9kcF9saW5rX3RyYWluX2Nsb2NrX3JlY292ZXJ5X2RlbGF5KGludGVsX2RwLT5k cGNkKTsKKwkJaW50ZWxfZHBfbGlua190cmFpbmluZ19jbG9ja19yZWNvdmVyeV9kZWxheShpbnRl bF9kcCwgZHBfcGh5KTsKIAotCQlpZiAoIWludGVsX2RwX2dldF9saW5rX3N0YXR1cyhpbnRlbF9k cCwgbGlua19zdGF0dXMpKSB7CisJCWlmIChkcm1fZHBfZHBjZF9yZWFkX3BoeV9saW5rX3N0YXR1 cygmaW50ZWxfZHAtPmF1eCwgZHBfcGh5LAorCQkJCQkJICAgICBsaW5rX3N0YXR1cykgPCAwKSB7 CiAJCQlkcm1fZXJyKCZpOTE1LT5kcm0sICJmYWlsZWQgdG8gZ2V0IGxpbmsgc3RhdHVzXG4iKTsK IAkJCXJldHVybiBmYWxzZTsKIAkJfQpAQCAtMjg2LDggKzQ3OCw4IEBAIGludGVsX2RwX2xpbmtf dHJhaW5pbmdfY2xvY2tfcmVjb3Zlcnkoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIAkJdm9s dGFnZSA9IGludGVsX2RwLT50cmFpbl9zZXRbMF0gJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01B U0s7CiAKIAkJLyogVXBkYXRlIHRyYWluaW5nIHNldCBhcyByZXF1ZXN0ZWQgYnkgdGFyZ2V0ICov Ci0JCWludGVsX2RwX2dldF9hZGp1c3RfdHJhaW4oaW50ZWxfZHAsIGxpbmtfc3RhdHVzKTsKLQkJ aWYgKCFpbnRlbF9kcF91cGRhdGVfbGlua190cmFpbihpbnRlbF9kcCkpIHsKKwkJaW50ZWxfZHBf Z2V0X2FkanVzdF90cmFpbihpbnRlbF9kcCwgZHBfcGh5LCBsaW5rX3N0YXR1cyk7CisJCWlmICgh aW50ZWxfZHBfdXBkYXRlX2xpbmtfdHJhaW4oaW50ZWxfZHAsIGRwX3BoeSkpIHsKIAkJCWRybV9l cnIoJmk5MTUtPmRybSwKIAkJCQkiZmFpbGVkIHRvIHVwZGF0ZSBsaW5rIHRyYWluaW5nXG4iKTsK IAkJCXJldHVybiBmYWxzZTsKQEAgLTMxMyw3ICs1MDUsOCBAQCBpbnRlbF9kcF9saW5rX3RyYWlu aW5nX2Nsb2NrX3JlY292ZXJ5KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiAgKiBvciBmb3Ig MS40IGRldmljZXMgdGhhdCBzdXBwb3J0IGl0LCB0cmFpbmluZyBQYXR0ZXJuIDMgZm9yIEhCUjIK ICAqIG9yIDEuMiBkZXZpY2VzIHRoYXQgc3VwcG9ydCBpdCwgVHJhaW5pbmcgUGF0dGVybiAyIG90 aGVyd2lzZS4KICAqLwotc3RhdGljIHUzMiBpbnRlbF9kcF90cmFpbmluZ19wYXR0ZXJuKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApCitzdGF0aWMgdTMyIGludGVsX2RwX3RyYWluaW5nX3BhdHRl cm4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKKwkJCQkgICAgIGVudW0gZHJtX2RwX3BoeSBk cF9waHkpCiB7CiAJYm9vbCBzb3VyY2VfdHBzMywgc2lua190cHMzLCBzb3VyY2VfdHBzNCwgc2lu a190cHM0OwogCkBAIC0zMjIsOSArNTE1LDExIEBAIHN0YXRpYyB1MzIgaW50ZWxfZHBfdHJhaW5p bmdfcGF0dGVybihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogCSAqIGZvciBhbGwgZG93bnN0 cmVhbSBkZXZpY2VzIHRoYXQgc3VwcG9ydCBIQlIzLiBUaGVyZSBhcmUgbm8ga25vd24gZURQCiAJ ICogcGFuZWxzIHRoYXQgc3VwcG9ydCBUUFM0IGFzIG9mIEZlYiAyMDE4IGFzIHBlciBWRVNBIGVE UF92MS40Yl9FMQogCSAqIHNwZWNpZmljYXRpb24uCisJICogTFRUUFJzIG11c3Qgc3VwcG9ydCBU UFM0LgogCSAqLwogCXNvdXJjZV90cHM0ID0gaW50ZWxfZHBfc291cmNlX3N1cHBvcnRzX2hicjMo aW50ZWxfZHApOwotCXNpbmtfdHBzNCA9IGRybV9kcF90cHM0X3N1cHBvcnRlZChpbnRlbF9kcC0+ ZHBjZCk7CisJc2lua190cHM0ID0gZHBfcGh5ICE9IERQX1BIWV9EUFJYIHx8CisJCSAgICBkcm1f ZHBfdHBzNF9zdXBwb3J0ZWQoaW50ZWxfZHAtPmRwY2QpOwogCWlmIChzb3VyY2VfdHBzNCAmJiBz aW5rX3RwczQpIHsKIAkJcmV0dXJuIERQX1RSQUlOSU5HX1BBVFRFUk5fNDsKIAl9IGVsc2UgaWYg KGludGVsX2RwLT5saW5rX3JhdGUgPT0gODEwMDAwKSB7CkBAIC0zNDEsNyArNTM2LDggQEAgc3Rh dGljIHUzMiBpbnRlbF9kcF90cmFpbmluZ19wYXR0ZXJuKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCiAJICogYWxsIHNpbmtzIGZvbGxvdyB0aGUgc3BlYy4KIAkgKi8KIAlzb3VyY2VfdHBzMyA9 IGludGVsX2RwX3NvdXJjZV9zdXBwb3J0c19oYnIyKGludGVsX2RwKTsKLQlzaW5rX3RwczMgPSBk cm1fZHBfdHBzM19zdXBwb3J0ZWQoaW50ZWxfZHAtPmRwY2QpOworCXNpbmtfdHBzMyA9IGRwX3Bo eSAhPSBEUF9QSFlfRFBSWCB8fAorCQkgICAgZHJtX2RwX3RwczNfc3VwcG9ydGVkKGludGVsX2Rw LT5kcGNkKTsKIAlpZiAoc291cmNlX3RwczMgJiYgc2lua190cHMzKSB7CiAJCXJldHVybiAgRFBf VFJBSU5JTkdfUEFUVEVSTl8zOwogCX0gZWxzZSBpZiAoaW50ZWxfZHAtPmxpbmtfcmF0ZSA+PSA1 NDAwMDApIHsKQEAgLTM1NiwxMiArNTUyLDI3IEBAIHN0YXRpYyB1MzIgaW50ZWxfZHBfdHJhaW5p bmdfcGF0dGVybihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogCXJldHVybiBEUF9UUkFJTklO R19QQVRURVJOXzI7CiB9CiAKK3N0YXRpYyB2b2lkCitpbnRlbF9kcF9saW5rX3RyYWluaW5nX2No YW5uZWxfZXF1YWxpemF0aW9uX2RlbGF5KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkJ CQkgIGVudW0gZHJtX2RwX3BoeSBkcF9waHkpCit7CisJaWYgKGRwX3BoeSA9PSBEUF9QSFlfRFBS WCkgeworCQlkcm1fZHBfbGlua190cmFpbl9jaGFubmVsX2VxX2RlbGF5KGludGVsX2RwLT5kcGNk KTsKKwl9IGVsc2UgeworCQljb25zdCB1OCAqcGh5X2NhcHMgPSBpbnRlbF9kcF9sdHRwcl9waHlf Y2FwcyhpbnRlbF9kcCwgZHBfcGh5KTsKKworCQlkcm1fZHBfbHR0cHJfbGlua190cmFpbl9jaGFu bmVsX2VxX2RlbGF5KHBoeV9jYXBzKTsKKwl9Cit9CisKIC8qCi0gKiBQZXJmb3JtIHRoZSBsaW5r IHRyYWluaW5nIGNoYW5uZWwgZXF1YWxpemF0aW9uIHBoYXNlIHVzaW5nIG9uZSBvZiB0cmFpbmlu ZwotICogcGF0dGVybiAyLCAzIG9yIDQgZGVwZW5kaW5nIG9uIHRoZSBzb3VyY2UgYW5kIHNpbmsg Y2FwYWJpbGl0aWVzLgorICogUGVyZm9ybSB0aGUgbGluayB0cmFpbmluZyBjaGFubmVsIGVxdWFs aXphdGlvbiBwaGFzZSBvbiB0aGUgZ2l2ZW4gRFAgUEhZCisgKiB1c2luZyBvbmUgb2YgdHJhaW5p bmcgcGF0dGVybiAyLCAzIG9yIDQgZGVwZW5kaW5nIG9uIHRoZSBzb3VyY2UgYW5kCisgKiBzaW5r IGNhcGFiaWxpdGllcy4KICAqLwogc3RhdGljIGJvb2wKLWludGVsX2RwX2xpbmtfdHJhaW5pbmdf Y2hhbm5lbF9lcXVhbGl6YXRpb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK2ludGVsX2Rw X2xpbmtfdHJhaW5pbmdfY2hhbm5lbF9lcXVhbGl6YXRpb24oc3RydWN0IGludGVsX2RwICppbnRl bF9kcCwKKwkJCQkJICAgIGVudW0gZHJtX2RwX3BoeSBkcF9waHkpCiB7CiAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVsX2RwKTsKIAlpbnQgdHJpZXM7CkBA IC0zNjksMjIgKzU4MCwyMiBAQCBpbnRlbF9kcF9saW5rX3RyYWluaW5nX2NoYW5uZWxfZXF1YWxp emF0aW9uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiAJdTggbGlua19zdGF0dXNbRFBfTElO S19TVEFUVVNfU0laRV07CiAJYm9vbCBjaGFubmVsX2VxID0gZmFsc2U7CiAKLQl0cmFpbmluZ19w YXR0ZXJuID0gaW50ZWxfZHBfdHJhaW5pbmdfcGF0dGVybihpbnRlbF9kcCk7CisJdHJhaW5pbmdf cGF0dGVybiA9IGludGVsX2RwX3RyYWluaW5nX3BhdHRlcm4oaW50ZWxfZHAsIGRwX3BoeSk7CiAJ LyogU2NyYW1ibGluZyBpcyBkaXNhYmxlZCBmb3IgVFBTMi8zIGFuZCBlbmFibGVkIGZvciBUUFM0 ICovCiAJaWYgKHRyYWluaW5nX3BhdHRlcm4gIT0gRFBfVFJBSU5JTkdfUEFUVEVSTl80KQogCQl0 cmFpbmluZ19wYXR0ZXJuIHw9IERQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFOwogCiAJLyogY2hh bm5lbCBlcXVhbGl6YXRpb24gKi8KLQlpZiAoIWludGVsX2RwX3NldF9saW5rX3RyYWluKGludGVs X2RwLAotCQkJCSAgICAgdHJhaW5pbmdfcGF0dGVybikpIHsKKwlpZiAoIWludGVsX2RwX3NldF9s aW5rX3RyYWluKGludGVsX2RwLCBkcF9waHksIHRyYWluaW5nX3BhdHRlcm4pKSB7CiAJCWRybV9l cnIoJmk5MTUtPmRybSwgImZhaWxlZCB0byBzdGFydCBjaGFubmVsIGVxdWFsaXphdGlvblxuIik7 CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA1OyB0cmll cysrKSB7Ci0KLQkJZHJtX2RwX2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShpbnRlbF9kcC0+ ZHBjZCk7Ci0JCWlmICghaW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKGludGVsX2RwLCBsaW5rX3N0 YXR1cykpIHsKKwkJaW50ZWxfZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbl9k ZWxheShpbnRlbF9kcCwKKwkJCQkJCQkJICBkcF9waHkpOworCQlpZiAoZHJtX2RwX2RwY2RfcmVh ZF9waHlfbGlua19zdGF0dXMoJmludGVsX2RwLT5hdXgsIGRwX3BoeSwKKwkJCQkJCSAgICAgbGlu a19zdGF0dXMpIDwgMCkgewogCQkJZHJtX2VycigmaTkxNS0+ZHJtLAogCQkJCSJmYWlsZWQgdG8g Z2V0IGxpbmsgc3RhdHVzXG4iKTsKIAkJCWJyZWFrOwpAQCAtNDA5LDggKzYyMCw4IEBAIGludGVs X2RwX2xpbmtfdHJhaW5pbmdfY2hhbm5lbF9lcXVhbGl6YXRpb24oc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCkKIAkJfQogCiAJCS8qIFVwZGF0ZSB0cmFpbmluZyBzZXQgYXMgcmVxdWVzdGVkIGJ5 IHRhcmdldCAqLwotCQlpbnRlbF9kcF9nZXRfYWRqdXN0X3RyYWluKGludGVsX2RwLCBsaW5rX3N0 YXR1cyk7Ci0JCWlmICghaW50ZWxfZHBfdXBkYXRlX2xpbmtfdHJhaW4oaW50ZWxfZHApKSB7CisJ CWludGVsX2RwX2dldF9hZGp1c3RfdHJhaW4oaW50ZWxfZHAsIGRwX3BoeSwgbGlua19zdGF0dXMp OworCQlpZiAoIWludGVsX2RwX3VwZGF0ZV9saW5rX3RyYWluKGludGVsX2RwLCBkcF9waHkpKSB7 CiAJCQlkcm1fZXJyKCZpOTE1LT5kcm0sCiAJCQkJImZhaWxlZCB0byB1cGRhdGUgbGluayB0cmFp bmluZ1xuIik7CiAJCQlicmVhazsKQEAgLTQyNCwxNyArNjM1LDE2IEBAIGludGVsX2RwX2xpbmtf dHJhaW5pbmdfY2hhbm5lbF9lcXVhbGl6YXRpb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK IAkJCSAgICAiQ2hhbm5lbCBlcXVhbGl6YXRpb24gZmFpbGVkIDUgdGltZXNcbiIpOwogCX0KIAot CWlmIChpbnRlbF9kcC0+c2V0X2lkbGVfbGlua190cmFpbikKLQkJaW50ZWxfZHAtPnNldF9pZGxl X2xpbmtfdHJhaW4oaW50ZWxfZHApOwotCiAJcmV0dXJuIGNoYW5uZWxfZXE7CiB9CiAKLXN0YXRp YyBib29sIGludGVsX2RwX2Rpc2FibGVfZHBjZF90cmFpbmluZ19wYXR0ZXJuKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCitzdGF0aWMgYm9vbCBpbnRlbF9kcF9kaXNhYmxlX2RwY2RfdHJhaW5p bmdfcGF0dGVybihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAorCQkJCQkJICAgZW51bSBkcm1f ZHBfcGh5IGRwX3BoeSkKIHsKKwlpbnQgcmVnID0gaW50ZWxfZHBfdHJhaW5pbmdfcGF0dGVybl9z ZXRfcmVnKGludGVsX2RwLCBkcF9waHkpOwogCXU4IHZhbCA9IERQX1RSQUlOSU5HX1BBVFRFUk5f RElTQUJMRTsKIAotCXJldHVybiBkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBf VFJBSU5JTkdfUEFUVEVSTl9TRVQsICZ2YWwsIDEpID09IDE7CisJcmV0dXJuIGRybV9kcF9kcGNk X3dyaXRlKCZpbnRlbF9kcC0+YXV4LCByZWcsICZ2YWwsIDEpID09IDE7CiB9CiAKIC8qKgpAQCAt NDU4LDMyICs2NjgsMzIgQEAgdm9pZCBpbnRlbF9kcF9zdG9wX2xpbmtfdHJhaW4oc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKIAogCWludGVsX2RwX3Byb2dyYW1fbGlua190cmFpbmluZ19wYXR0 ZXJuKGludGVsX2RwLAogCQkJCQkgICAgICAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsK LQlpbnRlbF9kcF9kaXNhYmxlX2RwY2RfdHJhaW5pbmdfcGF0dGVybihpbnRlbF9kcCk7CisJaW50 ZWxfZHBfZGlzYWJsZV9kcGNkX3RyYWluaW5nX3BhdHRlcm4oaW50ZWxfZHAsIERQX1BIWV9EUFJY KTsKIH0KIAogc3RhdGljIGJvb2wKLWludGVsX2RwX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKK2ludGVsX2RwX2xpbmtfdHJhaW5fcGh5KHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHAsIGVudW0gZHJtX2RwX3BoeSBkcF9waHkpCiB7CiAJc3RydWN0IGludGVsX2Nvbm5lY3Rv ciAqaW50ZWxfY29ubmVjdG9yID0gaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3RvcjsKKwljaGFy IHBoeV9uYW1lWzEwXTsKIAlib29sIHJldCA9IGZhbHNlOwogCi0JaW50ZWxfZHBfcHJlcGFyZV9s aW5rX3RyYWluKGludGVsX2RwKTsKLQotCWlmICghaW50ZWxfZHBfbGlua190cmFpbmluZ19jbG9j a19yZWNvdmVyeShpbnRlbF9kcCkpCisJaWYgKCFpbnRlbF9kcF9saW5rX3RyYWluaW5nX2Nsb2Nr X3JlY292ZXJ5KGludGVsX2RwLCBkcF9waHkpKQogCQlnb3RvIG91dDsKIAotCWlmICghaW50ZWxf ZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihpbnRlbF9kcCkpCisJaWYgKCFp bnRlbF9kcF9saW5rX3RyYWluaW5nX2NoYW5uZWxfZXF1YWxpemF0aW9uKGludGVsX2RwLCBkcF9w aHkpKQogCQlnb3RvIG91dDsKIAogCXJldCA9IHRydWU7CiAKIG91dDoKIAlkcm1fZGJnX2ttcygm ZHBfdG9faTkxNShpbnRlbF9kcCktPmRybSwKLQkJICAgICJbQ09OTkVDVE9SOiVkOiVzXSBMaW5r IFRyYWluaW5nICVzIGF0IExpbmsgUmF0ZSA9ICVkLCBMYW5lIGNvdW50ID0gJWQiLAorCQkgICAg IltDT05ORUNUT1I6JWQ6JXNdIExpbmsgVHJhaW5pbmcgJXMgYXQgTGluayBSYXRlID0gJWQsIExh bmUgY291bnQgPSAlZCwgYXQgJXMiLAogCQkgICAgaW50ZWxfY29ubmVjdG9yLT5iYXNlLmJhc2Uu aWQsCiAJCSAgICBpbnRlbF9jb25uZWN0b3ItPmJhc2UubmFtZSwKIAkJICAgIHJldCA/ICJwYXNz ZWQiIDogImZhaWxlZCIsCi0JCSAgICBpbnRlbF9kcC0+bGlua19yYXRlLCBpbnRlbF9kcC0+bGFu ZV9jb3VudCk7CisJCSAgICBpbnRlbF9kcC0+bGlua19yYXRlLCBpbnRlbF9kcC0+bGFuZV9jb3Vu dCwKKwkJICAgIGludGVsX2RwX3BoeV9uYW1lKGRwX3BoeSwgcGh5X25hbWUsIHNpemVvZihwaHlf bmFtZSkpKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01MDYsNiArNzE2LDM0IEBAIHN0YXRpYyB2 b2lkIGludGVsX2RwX3NjaGVkdWxlX2ZhbGxiYWNrX2xpbmtfdHJhaW5pbmcoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKIAlzY2hlZHVsZV93b3JrKCZpbnRlbF9jb25uZWN0b3ItPm1vZGVzZXRf cmV0cnlfd29yayk7CiB9CiAKKy8qIFBlcmZvcm0gdGhlIGxpbmsgdHJhaW5pbmcgb24gYWxsIExU VFBScyBhbmQgdGhlIERQUlggb24gYSBsaW5rLiAqLworc3RhdGljIGJvb2wKK2ludGVsX2RwX2xp bmtfdHJhaW5fYWxsX3BoeXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IGx0dHByX2Nv dW50KQoreworCWJvb2wgcmV0ID0gdHJ1ZTsKKwlpbnQgaTsKKworCWludGVsX2RwX3ByZXBhcmVf bGlua190cmFpbihpbnRlbF9kcCk7CisKKwlmb3IgKGkgPSBsdHRwcl9jb3VudCAtIDE7IGkgPj0g MDsgaS0tKSB7CisJCWVudW0gZHJtX2RwX3BoeSBkcF9waHkgPSBEUF9QSFlfTFRUUFIoaSk7CisK KwkJcmV0ID0gaW50ZWxfZHBfbGlua190cmFpbl9waHkoaW50ZWxfZHAsIGRwX3BoeSk7CisJCWlu dGVsX2RwX2Rpc2FibGVfZHBjZF90cmFpbmluZ19wYXR0ZXJuKGludGVsX2RwLCBkcF9waHkpOwor CisJCWlmICghcmV0KQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJaW50ZWxfZHBfbGlu a190cmFpbl9waHkoaW50ZWxfZHAsIERQX1BIWV9EUFJYKTsKKworCWlmIChpbnRlbF9kcC0+c2V0 X2lkbGVfbGlua190cmFpbikKKwkJaW50ZWxfZHAtPnNldF9pZGxlX2xpbmtfdHJhaW4oaW50ZWxf ZHApOworCisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKiBpbnRlbF9kcF9zdGFydF9saW5rX3Ry YWluIC0gc3RhcnQgbGluayB0cmFpbmluZwogICogQGludGVsX2RwOiBEUCBzdHJ1Y3QKQEAgLTUy MSw4ICs3NTksOCBAQCB2b2lkIGludGVsX2RwX3N0YXJ0X2xpbmtfdHJhaW4oc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKIAkgKiBUT0RPOiBSZWluaXRpbmcgTFRUUFJzIGhlcmUgd29uJ3QgYmUg bmVlZGVkIG9uY2UgcHJvcGVyIGNvbm5lY3RvcgogCSAqIEhXIHN0YXRlIHJlYWRvdXQgaXMgYWRk ZWQuCiAJICovCi0JaW50ZWxfZHBfbHR0cHJfaW5pdChpbnRlbF9kcCk7CisJaW50IGx0dHByX2Nv dW50ID0gaW50ZWxfZHBfbHR0cHJfaW5pdChpbnRlbF9kcCk7CiAKLQlpZiAoIWludGVsX2RwX2xp bmtfdHJhaW4oaW50ZWxfZHApKQorCWlmICghaW50ZWxfZHBfbGlua190cmFpbl9hbGxfcGh5cyhp bnRlbF9kcCwgbHR0cHJfY291bnQpKQogCQlpbnRlbF9kcF9zY2hlZHVsZV9mYWxsYmFja19saW5r X3RyYWluaW5nKGludGVsX2RwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZHBfbGlua190cmFpbmluZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmgKaW5kZXggMzUzNmNlNzNhMTIzLi4yNmYw ZTQ2YzI2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZHBfbGlua190cmFpbmluZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZHBfbGlua190cmFpbmluZy5oCkBAIC0xMiw4ICsxMiw5IEBAIHN0cnVjdCBpbnRlbF9kcDsK IAogaW50IGludGVsX2RwX2x0dHByX2luaXQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7CiAK LXZvaWQgaW50ZWxfZHBfZ2V0X2FkanVzdF90cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw LAotCQkJICAgICAgIGNvbnN0IHU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdKTsK K3ZvaWQKK2ludGVsX2RwX2dldF9hZGp1c3RfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9k cCwgZW51bSBkcm1fZHBfcGh5IGRwX3BoeSwKKwkJCSAgY29uc3QgdTggbGlua19zdGF0dXNbRFBf TElOS19TVEFUVVNfU0laRV0pOwogdm9pZCBpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApOwogdm9pZCBpbnRlbF9kcF9zdG9wX2xpbmtfdHJhaW4oc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCk7CiAKLS0gCjIuMjUuMQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==