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,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 65F0DC433DB for ; Thu, 25 Mar 2021 09:23:22 +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 06D8C619DC for ; Thu, 25 Mar 2021 09:23:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 06D8C619DC 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 6C8E96EB48; Thu, 25 Mar 2021 09:23:21 +0000 (UTC) Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id C60B66EB48; Thu, 25 Mar 2021 09:23:20 +0000 (UTC) From: Maarten Lankhorst To: intel-gfx@lists.freedesktop.org Date: Thu, 25 Mar 2021 10:23:16 +0100 Message-Id: <20210325092316.766063-1-maarten.lankhorst@linux.intel.com> X-Mailer: git-send-email 2.31.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH] drm/i915: Fix userptr so we do not have to worry about obj->mm.lock, v8. 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?= , dri-devel@lists.freedesktop.org, Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" SW5zdGVhZCBvZiBkb2luZyB3aGF0IHdlIGRvIGN1cnJlbnRseSwgd2hpY2ggd2lsbCBuZXZlciB3 b3JrIHdpdGgKUFJPVkVfTE9DS0lORywgZG8gdGhlIHNhbWUgYXMgQU1EIGRvZXMsIGFuZCBzb21l dGhpbmcgc2ltaWxhciB0bwpyZWxvY2F0aW9uIHNsb3dwYXRoLiBXaGVuIGFsbCBsb2NrcyBhcmUg ZHJvcHBlZCwgd2UgYWNxdWlyZSB0aGUKcGFnZXMgZm9yIHBpbm5pbmcuIFdoZW4gdGhlIGxvY2tz IGFyZSB0YWtlbiwgd2UgdHJhbnNmZXIgdGhvc2UKcGFnZXMgaW4gLmdldF9wYWdlcygpIHRvIHRo ZSBiby4gQXMgYSBmaW5hbCBjaGVjayBiZWZvcmUgaW5zdGFsbGluZwp0aGUgZmVuY2VzLCB3ZSBl bnN1cmUgdGhhdCB0aGUgbW11IG5vdGlmaWVyIHdhcyBub3QgY2FsbGVkOyBpZiBpdCBpcywKd2Ug cmV0dXJuIC1FQUdBSU4gdG8gdXNlcnNwYWNlIHRvIHNpZ25hbCBpdCBoYXMgdG8gc3RhcnQgb3Zl ci4KCkNoYW5nZXMgc2luY2UgdjE6Ci0gVW5iaW5kaW5nIGlzIGRvbmUgaW4gc3VibWl0X2luaXQg b25seS4gc3VibWl0X2JlZ2luKCkgcmVtb3ZlZC4KLSBNTVVfTk9URklFUiAtPiBNTVVfTk9USUZJ RVIKQ2hhbmdlcyBzaW5jZSB2MjoKLSBNYWtlIGk5MTUtPm1tLm5vdGlmaWVyIGEgc3BpbmxvY2su CkNoYW5nZXMgc2luY2UgdjM6Ci0gQWRkIFdBUk5fT04gaWYgdGhlcmUgYXJlIGFueSBwYWdlIHJl ZmVyZW5jZXMgbGVmdCwgc2hvdWxkIGhhdmUgYmVlbiAwLgotIFJldHVybiAwIG9uIHN1Y2Nlc3Mg aW4gc3VibWl0X2luaXQoKSwgYnVnIGZyb20gc3BpbmxvY2sgY29udmVyc2lvbi4KLSBSZWxlYXNl IHB2ZWMgb3V0c2lkZSBvZiBub3RpZmllcl9sb2NrIChUaG9tYXMpLgpDaGFuZ2VzIHNpbmNlIHY0 OgotIE1lbnRpb24gd2h5IHdlJ3JlIGNsZWFyaW5nIGViLT5baSArIDFdLnZtYSBpbiB0aGUgY29k ZS4gKFRob21hcykKLSBBY3R1YWxseSBjaGVjayBhbGwgaW52YWxpZGF0aW9ucyBpbiBlYl9tb3Zl X3RvX2dwdS4gKFRob21hcykKLSBEbyBub3Qgd2FpdCB3aGVuIHByb2Nlc3MgaXMgZXhpdGluZyB0 byBmaXggZ2VtX2N0eF9wZXJzaXN0ZW5jZS51c2VycHRyLgpDaGFuZ2VzIHNpbmNlIHY1OgotIENs YXJpZnkgd2h5IGNoZWNrIG9uIFBGX0VYSVRJTkcgaXMgKHRlbXBvcmFyaWx5KSByZXF1aXJlZC4K Q2hhbmdlcyBzaW5jZSB2NjoKLSBFbnN1cmUgdXNlcnB0ciB2YWxpZGl0eSBpcyBjaGVja2VkIGlu IHNldF9kb21haW4gdGhyb3VnaCBhIHNwZWNpYWwgcGF0aC4KQ2hhbmdlcyBzaW5jZSB2NzoKLSBD aGFuZSBrdmZyZWUgdG8ga3ZmcmVlKCkuCgpTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3Jz dCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgpBY2tlZC1ieTogRGF2ZSBBaXJs aWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KUmV2aWV3ZWQtYnk6IFRob21hcyBIZWxsc3Ryw7ZtIDx0 aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fZG9tYWluLmMgICAgfCAgMTggKy0KIC4uLi9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyAgICB8IDEwMSArKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9vYmplY3QuaCAgICB8ICAzOCArLQogLi4uL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fb2JqZWN0X3R5cGVzLmggIHwgIDEwICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fcGFnZXMuYyAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV91c2VycHRyLmMgICB8IDc5NiArKysrKystLS0tLS0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgOSArLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAgIHwgICA1ICstCiA4IGZpbGVzIGNo YW5nZWQsIDM5NSBpbnNlcnRpb25zKCspLCA1ODQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RvbWFpbi5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RvbWFpbi5jCmluZGV4IDJmNDk4MGJmNzQyZS4uNzZjYjlm NWM2NmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG9t YWluLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RvbWFpbi5jCkBA IC00NjgsMTQgKzQ2OCwyOCBAQCBpOTE1X2dlbV9zZXRfZG9tYWluX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJaWYgKCFvYmopCiAJCXJldHVybiAtRU5PRU5UOwog CisJaWYgKGk5MTVfZ2VtX29iamVjdF9pc191c2VycHRyKG9iaikpIHsKKwkJLyoKKwkJICogVHJ5 IHRvIGdyYWIgdXNlcnB0ciBwYWdlcywgaXJpcyB1c2VzIHNldF9kb21haW4gdG8gY2hlY2sKKwkJ ICogdXNlcnB0ciB2YWxpZGl0eQorCQkgKi8KKwkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3VzZXJw dHJfdmFsaWRhdGUob2JqKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBpOTE1X2dlbV9vYmplY3Rf d2FpdChvYmosCisJCQkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8CisJCQkJCQkgICBJ OTE1X1dBSVRfUFJJT1JJVFkgfAorCQkJCQkJICAgKHdyaXRlX2RvbWFpbiA/IEk5MTVfV0FJVF9B TEwgOiAwKSwKKwkJCQkJCSAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwkJZ290byBvdXQ7CisJ fQorCiAJLyoKIAkgKiBQcm94eSBvYmplY3RzIGRvIG5vdCBjb250cm9sIGFjY2VzcyB0byB0aGUg YmFja2luZyBzdG9yYWdlLCBlcmdvCiAJICogdGhleSBjYW5ub3QgYmUgdXNlZCBhcyBhIG1lYW5z IHRvIG1hbmlwdWxhdGUgdGhlIGNhY2hlIGRvbWFpbgogCSAqIHRyYWNraW5nIGZvciB0aGF0IGJh Y2tpbmcgc3RvcmFnZS4gVGhlIHByb3h5IG9iamVjdCBpcyBhbHdheXMKIAkgKiBjb25zaWRlcmVk IHRvIGJlIG91dHNpZGUgb2YgYW55IGNhY2hlIGRvbWFpbi4KIAkgKi8KLQlpZiAoaTkxNV9nZW1f b2JqZWN0X2lzX3Byb3h5KG9iaikgJiYKLQkgICAgIWk5MTVfZ2VtX29iamVjdF9pc191c2VycHRy KG9iaikpIHsKKwlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX3Byb3h5KG9iaikpIHsKIAkJZXJyID0g LUVOWElPOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX2V4ZWNidWZmZXIuYwppbmRleCA3OTVjNjhmY2M2ZWQuLmI1Y2E5ZWI1MzU2NSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBAIC01 MywxNCArNTMsMTYgQEAgZW51bSB7CiAvKiBfX0VYRUNfT0JKRUNUX05PX1JFU0VSVkUgaXMgQklU KDMxKSwgZGVmaW5lZCBpbiBpOTE1X3ZtYS5oICovCiAjZGVmaW5lIF9fRVhFQ19PQkpFQ1RfSEFT X1BJTgkJQklUKDMwKQogI2RlZmluZSBfX0VYRUNfT0JKRUNUX0hBU19GRU5DRQkJQklUKDI5KQot I2RlZmluZSBfX0VYRUNfT0JKRUNUX05FRURTX01BUAkJQklUKDI4KQotI2RlZmluZSBfX0VYRUNf T0JKRUNUX05FRURTX0JJQVMJQklUKDI3KQotI2RlZmluZSBfX0VYRUNfT0JKRUNUX0lOVEVSTkFM X0ZMQUdTCSh+MHUgPDwgMjcpIC8qIGFsbCBvZiB0aGUgYWJvdmUgKyAqLworI2RlZmluZSBfX0VY RUNfT0JKRUNUX1VTRVJQVFJfSU5JVAlCSVQoMjgpCisjZGVmaW5lIF9fRVhFQ19PQkpFQ1RfTkVF RFNfTUFQCQlCSVQoMjcpCisjZGVmaW5lIF9fRVhFQ19PQkpFQ1RfTkVFRFNfQklBUwlCSVQoMjYp CisjZGVmaW5lIF9fRVhFQ19PQkpFQ1RfSU5URVJOQUxfRkxBR1MJKH4wdSA8PCAyNikgLyogYWxs IG9mIHRoZSBhYm92ZSArICovCiAjZGVmaW5lIF9fRVhFQ19PQkpFQ1RfUkVTRVJWRUQgKF9fRVhF Q19PQkpFQ1RfSEFTX1BJTiB8IF9fRVhFQ19PQkpFQ1RfSEFTX0ZFTkNFKQogCiAjZGVmaW5lIF9f RVhFQ19IQVNfUkVMT0MJQklUKDMxKQogI2RlZmluZSBfX0VYRUNfRU5HSU5FX1BJTk5FRAlCSVQo MzApCi0jZGVmaW5lIF9fRVhFQ19JTlRFUk5BTF9GTEFHUwkofjB1IDw8IDMwKQorI2RlZmluZSBf X0VYRUNfVVNFUlBUUl9VU0VECUJJVCgyOSkKKyNkZWZpbmUgX19FWEVDX0lOVEVSTkFMX0ZMQUdT CSh+MHUgPDwgMjkpCiAjZGVmaW5lIFVQREFURQkJCVBJTl9PRkZTRVRfRklYRUQKIAogI2RlZmlu ZSBCQVRDSF9PRkZTRVRfQklBUyAoMjU2KjEwMjQpCkBAIC04NzEsNiArODczLDI2IEBAIHN0YXRp YyBpbnQgZWJfbG9va3VwX3ZtYXMoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiAJCX0KIAog CQllYl9hZGRfdm1hKGViLCBpLCBiYXRjaCwgdm1hKTsKKworCQlpZiAoaTkxNV9nZW1fb2JqZWN0 X2lzX3VzZXJwdHIodm1hLT5vYmopKSB7CisJCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfdXNlcnB0 cl9zdWJtaXRfaW5pdCh2bWEtPm9iaik7CisJCQlpZiAoZXJyKSB7CisJCQkJaWYgKGkgKyAxIDwg ZWItPmJ1ZmZlcl9jb3VudCkgeworCQkJCQkvKgorCQkJCQkgKiBFeGVjYnVmZmVyIGNvZGUgZXhw ZWN0cyBsYXN0IHZtYSBlbnRyeSB0byBiZSBOVUxMLAorCQkJCQkgKiBzaW5jZSB3ZSBhbHJlYWR5 IGluaXRpYWxpemVkIHRoaXMgZW50cnksCisJCQkJCSAqIHNldCB0aGUgbmV4dCB2YWx1ZSB0byBO VUxMIG9yIHdlIG1lc3MgdXAKKwkJCQkJICogY2xlYW51cCBoYW5kbGluZy4KKwkJCQkJICovCisJ CQkJCWViLT52bWFbaSArIDFdLnZtYSA9IE5VTEw7CisJCQkJfQorCisJCQkJcmV0dXJuIGVycjsK KwkJCX0KKworCQkJZWItPnZtYVtpXS5mbGFncyB8PSBfX0VYRUNfT0JKRUNUX1VTRVJQVFJfSU5J VDsKKwkJCWViLT5hcmdzLT5mbGFncyB8PSBfX0VYRUNfVVNFUlBUUl9VU0VEOworCQl9CiAJfQog CiAJaWYgKHVubGlrZWx5KGViLT5iYXRjaC0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9XUklURSkpIHsK QEAgLTk3Miw3ICs5OTQsNyBAQCBlYl9nZXRfdm1hKGNvbnN0IHN0cnVjdCBpOTE1X2V4ZWNidWZm ZXIgKmViLCB1bnNpZ25lZCBsb25nIGhhbmRsZSkKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGViX3Jl bGVhc2Vfdm1hcyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgYm9vbCBmaW5hbCkKK3N0YXRp YyB2b2lkIGViX3JlbGVhc2Vfdm1hcyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgYm9vbCBm aW5hbCwgYm9vbCByZWxlYXNlX3VzZXJwdHIpCiB7CiAJY29uc3QgdW5zaWduZWQgaW50IGNvdW50 ID0gZWItPmJ1ZmZlcl9jb3VudDsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTk4Niw2ICsxMDA4LDEx IEBAIHN0YXRpYyB2b2lkIGViX3JlbGVhc2Vfdm1hcyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl YiwgYm9vbCBmaW5hbCkKIAogCQllYl91bnJlc2VydmVfdm1hKGV2KTsKIAorCQlpZiAocmVsZWFz ZV91c2VycHRyICYmIGV2LT5mbGFncyAmIF9fRVhFQ19PQkpFQ1RfVVNFUlBUUl9JTklUKSB7CisJ CQlldi0+ZmxhZ3MgJj0gfl9fRVhFQ19PQkpFQ1RfVVNFUlBUUl9JTklUOworCQkJaTkxNV9nZW1f b2JqZWN0X3VzZXJwdHJfc3VibWl0X2Zpbmkodm1hLT5vYmopOworCQl9CisKIAkJaWYgKGZpbmFs KQogCQkJaTkxNV92bWFfcHV0KHZtYSk7CiAJfQpAQCAtMTkxNiw2ICsxOTQzLDMxIEBAIHN0YXRp YyBpbnQgZWJfcHJlZmF1bHRfcmVsb2NhdGlvbnMoY29uc3Qgc3RydWN0IGk5MTVfZXhlY2J1ZmZl ciAqZWIpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZWJfcmVpbml0X3VzZXJwdHIoc3Ry dWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCit7CisJY29uc3QgdW5zaWduZWQgaW50IGNvdW50ID0g ZWItPmJ1ZmZlcl9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0OworCisJaWYgKGxp a2VseSghKGViLT5hcmdzLT5mbGFncyAmIF9fRVhFQ19VU0VSUFRSX1VTRUQpKSkKKwkJcmV0dXJu IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZWJfdm1hICpl diA9ICZlYi0+dm1hW2ldOworCisJCWlmICghaTkxNV9nZW1fb2JqZWN0X2lzX3VzZXJwdHIoZXYt PnZtYS0+b2JqKSkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91c2Vy cHRyX3N1Ym1pdF9pbml0KGV2LT52bWEtPm9iaik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0 OworCisJCWV2LT5mbGFncyB8PSBfX0VYRUNfT0JKRUNUX1VTRVJQVFJfSU5JVDsKKwl9CisKKwly ZXR1cm4gMDsKK30KKwogc3RhdGljIG5vaW5saW5lIGludCBlYl9yZWxvY2F0ZV9wYXJzZV9zbG93 KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLAogCQkJCQkgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSkKIHsKQEAgLTE5MzAsNyArMTk4Miw3IEBAIHN0YXRpYyBub2lubGluZSBpbnQgZWJfcmVs b2NhdGVfcGFyc2Vfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKIAl9CiAKIAkvKiBX ZSBtYXkgcHJvY2VzcyBhbm90aGVyIGV4ZWNidWZmZXIgZHVyaW5nIHRoZSB1bmxvY2suLi4gKi8K LQllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNlKTsKKwllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNl LCB0cnVlKTsKIAlpOTE1X2dlbV93d19jdHhfZmluaSgmZWItPnd3KTsKIAogCWlmIChycSkgewpA QCAtMTk3MSwxMCArMjAyMyw4IEBAIHN0YXRpYyBub2lubGluZSBpbnQgZWJfcmVsb2NhdGVfcGFy c2Vfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKIAkJZXJyID0gMDsKIAl9CiAKLSNp ZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCiAJaWYgKCFlcnIpCi0JCWZsdXNoX3dvcmtxdWV1ZShl Yi0+aTkxNS0+bW0udXNlcnB0cl93cSk7Ci0jZW5kaWYKKwkJZXJyID0gZWJfcmVpbml0X3VzZXJw dHIoZWIpOwogCiBlcnJfcmVsb2NrOgogCWk5MTVfZ2VtX3d3X2N0eF9pbml0KCZlYi0+d3csIHRy dWUpOwpAQCAtMjAzNiw3ICsyMDg2LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBlYl9yZWxvY2F0 ZV9wYXJzZV9zbG93KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLAogCiBlcnI6CiAJaWYgKGVy ciA9PSAtRURFQURMSykgewotCQllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNlKTsKKwkJZWJfcmVs ZWFzZV92bWFzKGViLCBmYWxzZSwgZmFsc2UpOwogCQllcnIgPSBpOTE1X2dlbV93d19jdHhfYmFj a29mZigmZWItPnd3KTsKIAkJaWYgKCFlcnIpCiAJCQlnb3RvIHJlcGVhdF92YWxpZGF0ZTsKQEAg LTIxMzMsNyArMjE4Myw3IEBAIHN0YXRpYyBpbnQgZWJfcmVsb2NhdGVfcGFyc2Uoc3RydWN0IGk5 MTVfZXhlY2J1ZmZlciAqZWIpCiAKIGVycjoKIAlpZiAoZXJyID09IC1FREVBRExLKSB7Ci0JCWVi X3JlbGVhc2Vfdm1hcyhlYiwgZmFsc2UpOworCQllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNlLCBm YWxzZSk7CiAJCWVyciA9IGk5MTVfZ2VtX3d3X2N0eF9iYWNrb2ZmKCZlYi0+d3cpOwogCQlpZiAo IWVycikKIAkJCWdvdG8gcmV0cnk7CkBAIC0yMjA4LDYgKzIyNTgsMzAgQEAgc3RhdGljIGludCBl Yl9tb3ZlX3RvX2dwdShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIAkJCQkJCSAgICAgIGZs YWdzIHwgX19FWEVDX09CSkVDVF9OT19SRVNFUlZFKTsKIAl9CiAKKyNpZmRlZiBDT05GSUdfTU1V X05PVElGSUVSCisJaWYgKCFlcnIgJiYgKGViLT5hcmdzLT5mbGFncyAmIF9fRVhFQ19VU0VSUFRS X1VTRUQpKSB7CisJCXNwaW5fbG9jaygmZWItPmk5MTUtPm1tLm5vdGlmaWVyX2xvY2spOworCisJ CS8qCisJCSAqIGNvdW50IGlzIGFsd2F5cyBhdCBsZWFzdCAxLCBvdGhlcndpc2UgX19FWEVDX1VT RVJQVFJfVVNFRAorCQkgKiBjb3VsZCBub3QgaGF2ZSBiZWVuIHNldAorCQkgKi8KKwkJZm9yIChp ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCXN0cnVjdCBlYl92bWEgKmV2ID0gJmViLT52bWFb aV07CisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gZXYtPnZtYS0+b2JqOwor CisJCQlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc191c2VycHRyKG9iaikpCisJCQkJY29udGludWU7 CisKKwkJCWVyciA9IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9kb25lKG9iaik7CisJ CQlpZiAoZXJyKQorCQkJCWJyZWFrOworCQl9CisKKwkJc3Bpbl91bmxvY2soJmViLT5pOTE1LT5t bS5ub3RpZmllcl9sb2NrKTsKKwl9CisjZW5kaWYKKwogCWlmICh1bmxpa2VseShlcnIpKQogCQln b3RvIGVycl9za2lwOwogCkBAIC0zMzUyLDcgKzM0MjYsNyBAQCBpOTE1X2dlbV9kb19leGVjYnVm ZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAKIAllcnIgPSBlYl9sb29rdXBfdm1hcygmZWIp OwogCWlmIChlcnIpIHsKLQkJZWJfcmVsZWFzZV92bWFzKCZlYiwgdHJ1ZSk7CisJCWViX3JlbGVh c2Vfdm1hcygmZWIsIHRydWUsIHRydWUpOwogCQlnb3RvIGVycl9lbmdpbmU7CiAJfQogCkBAIC0z NDI0LDYgKzM0OTgsNyBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCiAKIAl0cmFjZV9pOTE1X3JlcXVlc3RfcXVldWUoZWIucmVxdWVzdCwgZWIuYmF0Y2hf ZmxhZ3MpOwogCWVyciA9IGViX3N1Ym1pdCgmZWIsIGJhdGNoKTsKKwogZXJyX3JlcXVlc3Q6CiAJ aTkxNV9yZXF1ZXN0X2dldChlYi5yZXF1ZXN0KTsKIAllcnIgPSBlYl9yZXF1ZXN0X2FkZCgmZWIs IGVycik7CkBAIC0zNDQ0LDcgKzM1MTksNyBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCiAJaTkxNV9yZXF1ZXN0X3B1dChlYi5yZXF1ZXN0KTsKIAogZXJy X3ZtYToKLQllYl9yZWxlYXNlX3ZtYXMoJmViLCB0cnVlKTsKKwllYl9yZWxlYXNlX3ZtYXMoJmVi LCB0cnVlLCB0cnVlKTsKIAlpZiAoZWIudHJhbXBvbGluZSkKIAkJaTkxNV92bWFfdW5waW4oZWIu dHJhbXBvbGluZSk7CiAJV0FSTl9PTihlcnIgPT0gLUVERUFETEspOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCmluZGV4IDY5NTA5ZGJkMDFjNy4uYjVhZjljNDQw YWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCkBAIC01 OSw2ICs1OSw3IEBAIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW1fZnJvbV9kYXRhKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCQkJCSAgICAgICBjb25zdCB2b2lkICpkYXRhLCBy ZXNvdXJjZV9zaXplX3Qgc2l6ZSk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdF9vcHMgaTkxNV9nZW1fc2htZW1fb3BzOworCiB2b2lkIF9faTkxNV9nZW1fb2JqZWN0 X3JlbGVhc2Vfc2htZW0oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkgICAg IHN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCiAJCQkJICAgICBib29sIG5lZWRzX2NsZmx1c2gpOwpA QCAtMjc4LDEyICsyNzksNiBAQCBpOTE1X2dlbV9vYmplY3RfbmV2ZXJfbW1hcChjb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCXJldHVybiBpOTE1X2dlbV9vYmplY3RfdHlw ZV9oYXMob2JqLCBJOTE1X0dFTV9PQkpFQ1RfTk9fTU1BUCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg Ym9vbAotaTkxNV9nZW1fb2JqZWN0X25lZWRzX2FzeW5jX2NhbmNlbChjb25zdCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCXJldHVybiBpOTE1X2dlbV9vYmplY3RfdHlwZV9o YXMob2JqLCBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMKTsKLX0KLQogc3RhdGljIGlubGlu ZSBib29sCiBpOTE1X2dlbV9vYmplY3RfaXNfZnJhbWVidWZmZXIoY29uc3Qgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikKIHsKQEAgLTU3MywxNiArNTY4LDYgQEAgdm9pZCBfX2k5MTVf Z2VtX29iamVjdF9mbHVzaF9mcm9udGJ1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAogdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9pbnZhbGlkYXRlX2Zyb250YnVmZmVyKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJCSAgICAgIGVudW0gZmJfb3Bfb3JpZ2lu IG9yaWdpbik7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbAotaTkxNV9nZW1fb2JqZWN0X2lzX3VzZXJw dHIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLSNpZmRlZiBDT05GSUdfTU1V X05PVElGSUVSCi0JcmV0dXJuIG9iai0+dXNlcnB0ci5tbTsKLSNlbHNlCi0JcmV0dXJuIGZhbHNl OwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZAogaTkxNV9nZW1fb2JqZWN0X2ZsdXNo X2Zyb250YnVmZmVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJICBlbnVt IGZiX29wX29yaWdpbiBvcmlnaW4pCkBAIC02MDMsNCArNTg4LDI1IEBAIGludCBpOTE1X2dlbV9v YmplY3RfcmVhZF9mcm9tX3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdTY0 IG9mZnNldCwKIAogYm9vbCBpOTE1X2dlbV9vYmplY3RfaXNfc2htZW0oY29uc3Qgc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiAKKyNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCitz dGF0aWMgaW5saW5lIGJvb2wKK2k5MTVfZ2VtX29iamVjdF9pc191c2VycHRyKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJcmV0dXJuIG9iai0+dXNlcnB0ci5ub3RpZmllci5t bTsKK30KKworaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9pbml0KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOworaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1 Ym1pdF9kb25lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBpOTE1X2dl bV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfZmluaShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKTsKK2ludCBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl92YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9nZW1f b2JqZWN0X2lzX3VzZXJwdHIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikgeyByZXR1 cm4gZmFsc2U7IH0KKworc3RhdGljIGlubGluZSBpbnQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJf c3VibWl0X2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikgeyBHRU1fQlVHX09O KDEpOyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSBpbnQgaTkxNV9nZW1fb2JqZWN0 X3VzZXJwdHJfc3VibWl0X2RvbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikgeyBH RU1fQlVHX09OKDEpOyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSB2b2lkIGk5MTVf Z2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9maW5pKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopIHsgR0VNX0JVR19PTigxKTsgfQorc3RhdGljIGlubGluZSBpbnQgaTkxNV9nZW1fb2Jq ZWN0X3VzZXJwdHJfdmFsaWRhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikgeyBH RU1fQlVHX09OKDEpOyByZXR1cm4gLUVOT0RFVjsgfQorCisjZW5kaWYKKwogI2VuZGlmCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKaW5kZXgg NDE0MzIyNjE5NzgxLi40YzBhMzQyMzE2MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKQEAgLTcsNiArNyw4IEBACiAjaWZuZGVmIF9f STkxNV9HRU1fT0JKRUNUX1RZUEVTX0hfXwogI2RlZmluZSBfX0k5MTVfR0VNX09CSkVDVF9UWVBF U19IX18KIAorI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPgorCiAjaW5jbHVkZSA8ZHJt L2RybV9nZW0uaD4KICNpbmNsdWRlIDx1YXBpL2RybS9pOTE1X2RybS5oPgogCkBAIC0zNCw3ICsz Niw2IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyB7CiAjZGVmaW5lIEk5MTVfR0VN X09CSkVDVF9JU19TSFJJTktBQkxFCUJJVCgyKQogI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNf UFJPWFkJQklUKDMpCiAjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9OT19NTUFQCQlCSVQoNCkKLSNk ZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0FTWU5DX0NBTkNFTAlCSVQoNSkKIAogCS8qIEludGVyZmFj ZSBiZXR3ZWVuIHRoZSBHRU0gb2JqZWN0IGFuZCBpdHMgYmFja2luZyBzdG9yYWdlLgogCSAqIGdl dF9wYWdlcygpIGlzIGNhbGxlZCBvbmNlIHByaW9yIHRvIHRoZSB1c2Ugb2YgdGhlIGFzc29jaWF0 ZWQgc2V0CkBAIC0yOTksMTAgKzMwMCwxMSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7 CiAjaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgogCQlzdHJ1Y3QgaTkxNV9nZW1fdXNlcnB0ciB7 CiAJCQl1aW50cHRyX3QgcHRyOworCQkJdW5zaWduZWQgbG9uZyBub3RpZmllcl9zZXE7CiAKLQkJ CXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Ci0JCQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICpt bXVfb2JqZWN0OwotCQkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCQkJc3RydWN0IG1tdV9p bnRlcnZhbF9ub3RpZmllciBub3RpZmllcjsKKwkJCXN0cnVjdCBwYWdlICoqcHZlYzsKKwkJCWlu dCBwYWdlX3JlZjsKIAkJfSB1c2VycHRyOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX3BhZ2VzLmMKaW5kZXggYmY2MWI4OGEyMTEzLi5lN2Q3NjUwMDcyYzUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCkBAIC0yMjYsNyArMjI2 LDcgQEAgaW50IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKQogCSAqIGdldF9wYWdlcyBiYWNrZW5kcyB3ZSBzaG91bGQgYmUgYmV0dGVy IGFibGUgdG8gaGFuZGxlIHRoZQogCSAqIGNhbmNlbGxhdGlvbiBvZiB0aGUgYXN5bmMgdGFzayBp biBhIG1vcmUgdW5pZm9ybSBtYW5uZXIuCiAJICovCi0JaWYgKCFwYWdlcyAmJiAhaTkxNV9nZW1f b2JqZWN0X25lZWRzX2FzeW5jX2NhbmNlbChvYmopKQorCWlmICghcGFnZXMpCiAJCXBhZ2VzID0g RVJSX1BUUigtRUlOVkFMKTsKIAogCWlmICghSVNfRVJSKHBhZ2VzKSkKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jCmluZGV4IGI0NjZhYjJkZWY0ZC4uMzc5MTYx ODJhZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNl cnB0ci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMK QEAgLTIsMTAgKzIsMzkgQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICAqCiAg KiBDb3B5cmlnaHQgwqkgMjAxMi0yMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICAqIEJhc2Vk IG9uIGFtZGdwdV9tbiwgd2hpY2ggYmVhcnMgdGhlIGZvbGxvd2luZyBub3RpY2U6CisgKgorICog Q29weXJpZ2h0IDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQWxsIFJpZ2h0 cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJl IiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1J TkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMs IEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisg KiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICovCisvKgorICogQXV0aG9yczoKKyAqICAg IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KICAqLwogCiAjaW5j bHVkZSA8bGludXgvbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIu aD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+ CiAjaW5jbHVkZSA8bGludXgvc2NoZWQvbW0uaD4KQEAgLTE1LDM3MyArNDQsMTIxIEBACiAjaW5j bHVkZSAiaTkxNV9nZW1fb2JqZWN0LmgiCiAjaW5jbHVkZSAiaTkxNV9zY2F0dGVybGlzdC5oIgog Ci0jaWYgZGVmaW5lZChDT05GSUdfTU1VX05PVElGSUVSKQotCi1zdHJ1Y3QgaTkxNV9tbV9zdHJ1 Y3QgewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1OwotCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47Ci0Jc3RydWN0IGhsaXN0X25vZGUg bm9kZTsKLQlzdHJ1Y3Qga3JlZiBrcmVmOwotCXN0cnVjdCByY3Vfd29yayB3b3JrOwotfTsKLQot I2luY2x1ZGUgPGxpbnV4L2ludGVydmFsX3RyZWUuaD4KLQotc3RydWN0IGk5MTVfbW11X25vdGlm aWVyIHsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKLQlzdHJ1 Y3QgbW11X25vdGlmaWVyIG1uOwotCXN0cnVjdCByYl9yb290X2NhY2hlZCBvYmplY3RzOwotCXN0 cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Ci19OwotCi1zdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0IHsK LQlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmo7Ci0Jc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsKLX07CisjaWZkZWYgQ09O RklHX01NVV9OT1RJRklFUgogCi1zdGF0aWMgdm9pZCBhZGRfb2JqZWN0KHN0cnVjdCBpOTE1X21t dV9vYmplY3QgKm1vKQorLyoqCisgKiBpOTE1X2dlbV91c2VycHRyX2ludmFsaWRhdGUgLSBjYWxs YmFjayB0byBub3RpZnkgYWJvdXQgbW0gY2hhbmdlCisgKgorICogQG1uaTogdGhlIHJhbmdlICht bSkgaXMgYWJvdXQgdG8gdXBkYXRlCisgKiBAcmFuZ2U6IGRldGFpbHMgb24gdGhlIGludmFsaWRh dGlvbgorICogQGN1cl9zZXE6IFZhbHVlIHRvIHBhc3MgdG8gbW11X2ludGVydmFsX3NldF9zZXEo KQorICoKKyAqIEJsb2NrIGZvciBvcGVyYXRpb25zIG9uIEJPcyB0byBmaW5pc2ggYW5kIG1hcmsg cGFnZXMgYXMgYWNjZXNzZWQgYW5kCisgKiBwb3RlbnRpYWxseSBkaXJ0eS4KKyAqLworc3RhdGlj IGJvb2wgaTkxNV9nZW1fdXNlcnB0cl9pbnZhbGlkYXRlKHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90 aWZpZXIgKm1uaSwKKwkJCQkJY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2Us CisJCQkJCXVuc2lnbmVkIGxvbmcgY3VyX3NlcSkKIHsKLQlHRU1fQlVHX09OKCFSQl9FTVBUWV9O T0RFKCZtby0+aXQucmIpKTsKLQlpbnRlcnZhbF90cmVlX2luc2VydCgmbW8tPml0LCAmbW8tPm1u LT5vYmplY3RzKTsKLX0KKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gY29udGFp bmVyX29mKG1uaSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsIHVzZXJwdHIubm90aWZpZXIp OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2 KTsKKwlsb25nIHI7CiAKLXN0YXRpYyB2b2lkIGRlbF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29i amVjdCAqbW8pCi17Ci0JaWYgKFJCX0VNUFRZX05PREUoJm1vLT5pdC5yYikpCi0JCXJldHVybjsK KwlpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKQorCQlyZXR1cm4gZmFs c2U7CiAKLQlpbnRlcnZhbF90cmVlX3JlbW92ZSgmbW8tPml0LCAmbW8tPm1uLT5vYmplY3RzKTsK LQlSQl9DTEVBUl9OT0RFKCZtby0+aXQucmIpOwotfQorCXNwaW5fbG9jaygmaTkxNS0+bW0ubm90 aWZpZXJfbG9jayk7CiAKLXN0YXRpYyB2b2lkCi1fX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2 ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIHZhbHVlKQotewotCXN0cnVj dCBpOTE1X21tdV9vYmplY3QgKm1vID0gb2JqLT51c2VycHRyLm1tdV9vYmplY3Q7CisJbW11X2lu dGVydmFsX3NldF9zZXEobW5pLCBjdXJfc2VxKTsKKworCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5u b3RpZmllcl9sb2NrKTsKIAogCS8qCi0JICogRHVyaW5nIG1tX2ludmFsaWRhdGVfcmFuZ2Ugd2Ug bmVlZCB0byBjYW5jZWwgYW55IHVzZXJwdHIgdGhhdAotCSAqIG92ZXJsYXBzIHRoZSByYW5nZSBi ZWluZyBpbnZhbGlkYXRlZC4gRG9pbmcgc28gcmVxdWlyZXMgdGhlCi0JICogc3RydWN0X211dGV4 LCBhbmQgdGhhdCByaXNrcyByZWN1cnNpb24uIEluIG9yZGVyIHRvIGNhdXNlCi0JICogcmVjdXJz aW9uLCB0aGUgdXNlciBtdXN0IGFsaWFzIHRoZSB1c2VycHRyIGFkZHJlc3Mgc3BhY2Ugd2l0aAot CSAqIGEgR1RUIG1tYXBwaW5nIChwb3NzaWJsZSB3aXRoIGEgTUFQX0ZJWEVEKSAtIHRoZW4gd2hl biB3ZSBoYXZlCi0JICogdG8gaW52YWxpZGF0ZSB0aGF0IG1tYXBpbmcsIG1tX2ludmFsaWRhdGVf cmFuZ2UgaXMgY2FsbGVkIHdpdGgKLQkgKiB0aGUgdXNlcnB0ciBhZGRyZXNzICphbmQqIHRoZSBz dHJ1Y3RfbXV0ZXggaGVsZC4gIFRvIHByZXZlbnQgdGhhdAotCSAqIHdlIHNldCBhIGZsYWcgdW5k ZXIgdGhlIGk5MTVfbW11X25vdGlmaWVyIHNwaW5sb2NrIHRvIGluZGljYXRlCi0JICogd2hldGhl ciB0aGlzIG9iamVjdCBpcyB2YWxpZC4KKwkgKiBXZSBkb24ndCB3YWl0IHdoZW4gdGhlIHByb2Nl c3MgaXMgZXhpdGluZy4gVGhpcyBpcyB2YWxpZAorCSAqIGJlY2F1c2UgdGhlIG9iamVjdCB3aWxs IGJlIGNsZWFuZWQgdXAgYW55d2F5LgorCSAqCisJICogVGhpcyBpcyBhbHNvIHRlbXBvcmFyaWx5 IHJlcXVpcmVkIGFzIGEgaGFjaywgYmVjYXVzZSB3ZQorCSAqIGNhbm5vdCBjdXJyZW50bHkgZm9y Y2Ugbm9uLWNvbnNpc3RlbnQgYmF0Y2ggYnVmZmVycyB0byBwcmVlbXB0CisJICogYW5kIHJlc2No ZWR1bGUgYnkgd2FpdGluZyBvbiBpdCwgaGFuZ2luZyBwcm9jZXNzZXMgb24gZXhpdC4KIAkgKi8K LQlpZiAoIW1vKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJm1vLT5tbi0+bG9jayk7Ci0JaWYg KHZhbHVlKQotCQlhZGRfb2JqZWN0KG1vKTsKLQllbHNlCi0JCWRlbF9vYmplY3QobW8pOwotCXNw aW5fdW5sb2NrKCZtby0+bW4tPmxvY2spOwotfQotCi1zdGF0aWMgaW50Ci11c2VycHRyX21uX2lu dmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAqX21uLAotCQkJCSAgY29u c3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpCi17Ci0Jc3RydWN0IGk5MTVfbW11 X25vdGlmaWVyICptbiA9Ci0JCWNvbnRhaW5lcl9vZihfbW4sIHN0cnVjdCBpOTE1X21tdV9ub3Rp ZmllciwgbW4pOwotCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0OwotCXVuc2lnbmVkIGxv bmcgZW5kOwotCWludCByZXQgPSAwOwotCi0JaWYgKFJCX0VNUFRZX1JPT1QoJm1uLT5vYmplY3Rz LnJiX3Jvb3QpKQotCQlyZXR1cm4gMDsKLQotCS8qIGludGVydmFsIHJhbmdlcyBhcmUgaW5jbHVz aXZlLCBidXQgaW52YWxpZGF0ZSByYW5nZSBpcyBleGNsdXNpdmUgKi8KLQllbmQgPSByYW5nZS0+ ZW5kIC0gMTsKLQotCXNwaW5fbG9jaygmbW4tPmxvY2spOwotCWl0ID0gaW50ZXJ2YWxfdHJlZV9p dGVyX2ZpcnN0KCZtbi0+b2JqZWN0cywgcmFuZ2UtPnN0YXJ0LCBlbmQpOwotCXdoaWxlIChpdCkg ewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCi0JCWlmICghbW11X25vdGlm aWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkpIHsKLQkJCXJldCA9IC1FQUdBSU47Ci0JCQlicmVh azsKLQkJfQotCi0JCS8qCi0JCSAqIFRoZSBtbXVfb2JqZWN0IGlzIHJlbGVhc2VkIGxhdGUgd2hl biBkZXN0cm95aW5nIHRoZQotCQkgKiBHRU0gb2JqZWN0IHNvIGl0IGlzIGVudGlyZWx5IHBvc3Np YmxlIHRvIGdhaW4gYQotCQkgKiByZWZlcmVuY2Ugb24gYW4gb2JqZWN0IGluIHRoZSBwcm9jZXNz IG9mIGJlaW5nIGZyZWVkCi0JCSAqIHNpbmNlIG91ciBzZXJpYWxpc2F0aW9uIGlzIHZpYSB0aGUg c3BpbmxvY2sgYW5kIG5vdAotCQkgKiB0aGUgc3RydWN0X211dGV4IC0gYW5kIGNvbnNlcXVlbnRs eSB1c2UgaXQgYWZ0ZXIgaXQKLQkJICogaXMgZnJlZWQgYW5kIHRoZW4gZG91YmxlIGZyZWUgaXQu IFRvIHByZXZlbnQgdGhhdAotCQkgKiB1c2UtYWZ0ZXItZnJlZSB3ZSBvbmx5IGFjcXVpcmUgYSBy ZWZlcmVuY2Ugb24gdGhlCi0JCSAqIG9iamVjdCBpZiBpdCBpcyBub3QgaW4gdGhlIHByb2Nlc3Mg b2YgYmVpbmcgZGVzdHJveWVkLgotCQkgKi8KLQkJb2JqID0gY29udGFpbmVyX29mKGl0LCBzdHJ1 Y3QgaTkxNV9tbXVfb2JqZWN0LCBpdCktPm9iajsKLQkJaWYgKCFrcmVmX2dldF91bmxlc3NfemVy bygmb2JqLT5iYXNlLnJlZmNvdW50KSkgewotCQkJaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfbmV4 dChpdCwgcmFuZ2UtPnN0YXJ0LCBlbmQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJc3Bpbl91bmxv Y2soJm1uLT5sb2NrKTsKLQotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaiwKLQkJ CQkJICAgICBJOTE1X0dFTV9PQkpFQ1RfVU5CSU5EX0FDVElWRSB8Ci0JCQkJCSAgICAgSTkxNV9H RU1fT0JKRUNUX1VOQklORF9CQVJSSUVSKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gX19p OTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7Ci0JCWk5MTVfZ2VtX29iamVjdF9wdXQob2Jq KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZf RVhJVElORykKKwkJcmV0dXJuIHRydWU7CiAKLQkJc3Bpbl9sb2NrKCZtbi0+bG9jayk7Ci0KLQkJ LyoKLQkJICogQXMgd2UgZG8gbm90ICh5ZXQpIHByb3RlY3QgdGhlIG1tdSBmcm9tIGNvbmN1cnJl bnQgaW5zZXJ0aW9uCi0JCSAqIG92ZXIgdGhpcyByYW5nZSwgdGhlcmUgaXMgbm8gZ3VhcmFudGVl IHRoYXQgdGhpcyBzZWFyY2ggd2lsbAotCQkgKiB0ZXJtaW5hdGUgZ2l2ZW4gYSBwYXRob2xvZ2lj IHdvcmtsb2FkLgotCQkgKi8KLQkJaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3QoJm1uLT5v YmplY3RzLCByYW5nZS0+c3RhcnQsIGVuZCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7 Ci0KLQlyZXR1cm4gcmV0OworCS8qIHdlIHdpbGwgdW5iaW5kIG9uIG5leHQgc3VibWlzc2lvbiwg c3RpbGwgaGF2ZSB1c2VycHRyIHBpbnMgKi8KKwlyID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3Jj dShvYmotPmJhc2UucmVzdiwgdHJ1ZSwgZmFsc2UsCisJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJ TUVPVVQpOworCWlmIChyIDw9IDApCisJCWRybV9lcnIoJmk5MTUtPmRybSwgIiglbGQpIGZhaWxl ZCB0byB3YWl0IGZvciBpZGxlXG4iLCByKTsKIAorCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg Y29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMgaTkxNV9nZW1fdXNlcnB0cl9ub3RpZmllciA9 IHsKLQkuaW52YWxpZGF0ZV9yYW5nZV9zdGFydCA9IHVzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5n ZV9zdGFydCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBp OTE1X2dlbV91c2VycHRyX25vdGlmaWVyX29wcyA9IHsKKwkuaW52YWxpZGF0ZSA9IGk5MTVfZ2Vt X3VzZXJwdHJfaW52YWxpZGF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZp ZXIgKgotaTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0p Ci17Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsKLQotCW1uID0ga21hbGxvYyhzaXpl b2YoKm1uKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG1uID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwotCi0Jc3Bpbl9sb2NrX2luaXQoJm1uLT5sb2NrKTsKLQltbi0+bW4ub3BzID0g Jmk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXI7Ci0JbW4tPm9iamVjdHMgPSBSQl9ST09UX0NBQ0hF RDsKLQltbi0+bW0gPSBtbTsKLQotCXJldHVybiBtbjsKLX0KLQotc3RhdGljIHZvaWQKLWk5MTVf Z2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCi17Ci0Jc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW87Ci0KLQltbyA9IGZldGNo X2FuZF96ZXJvKCZvYmotPnVzZXJwdHIubW11X29iamVjdCk7Ci0JaWYgKCFtbykKLQkJcmV0dXJu OwotCi0Jc3Bpbl9sb2NrKCZtby0+bW4tPmxvY2spOwotCWRlbF9vYmplY3QobW8pOwotCXNwaW5f dW5sb2NrKCZtby0+bW4tPmxvY2spOwotCWtmcmVlKG1vKTsKLX0KLQotc3RhdGljIHN0cnVjdCBp OTE1X21tdV9ub3RpZmllciAqCi1pOTE1X21tdV9ub3RpZmllcl9maW5kKHN0cnVjdCBpOTE1X21t X3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbiwgKm9sZDsKLQlp bnQgZXJyOwotCi0JbW4gPSBSRUFEX09OQ0UobW0tPm1uKTsKLQlpZiAobGlrZWx5KG1uKSkKLQkJ cmV0dXJuIG1uOwotCi0JbW4gPSBpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUobW0pOwotCWlmIChJ U19FUlIobW4pKQotCQlyZXR1cm4gbW47Ci0KLQllcnIgPSBtbXVfbm90aWZpZXJfcmVnaXN0ZXIo Jm1uLT5tbiwgbW0tPm1tKTsKLQlpZiAoZXJyKSB7Ci0JCWtmcmVlKG1uKTsKLQkJcmV0dXJuIEVS Ul9QVFIoZXJyKTsKLQl9Ci0KLQlvbGQgPSBjbXB4Y2hnKCZtbS0+bW4sIE5VTEwsIG1uKTsKLQlp ZiAob2xkKSB7Ci0JCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZtbi0+bW4sIG1tLT5tbSk7Ci0J CWtmcmVlKG1uKTsKLQkJbW4gPSBvbGQ7Ci0JfQotCi0JcmV0dXJuIG1uOwotfQotCiBzdGF0aWMg aW50CiBpOTE1X2dlbV91c2VycHRyX2luaXRfX21tdV9ub3RpZmllcihzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQogewotCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47Ci0Jc3Ry dWN0IGk5MTVfbW11X29iamVjdCAqbW87Ci0KLQlpZiAoR0VNX1dBUk5fT04oIW9iai0+dXNlcnB0 ci5tbSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbW4gPSBpOTE1X21tdV9ub3RpZmllcl9maW5k KG9iai0+dXNlcnB0ci5tbSk7Ci0JaWYgKElTX0VSUihtbikpCi0JCXJldHVybiBQVFJfRVJSKG1u KTsKLQotCW1vID0ga3phbGxvYyhzaXplb2YoKm1vKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtbykK LQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltby0+bW4gPSBtbjsKLQltby0+b2JqID0gb2JqOwotCW1v LT5pdC5zdGFydCA9IG9iai0+dXNlcnB0ci5wdHI7Ci0JbW8tPml0Lmxhc3QgPSBvYmotPnVzZXJw dHIucHRyICsgb2JqLT5iYXNlLnNpemUgLSAxOwotCVJCX0NMRUFSX05PREUoJm1vLT5pdC5yYik7 Ci0KLQlvYmotPnVzZXJwdHIubW11X29iamVjdCA9IG1vOwotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgdm9pZAotaTkxNV9tbXVfbm90aWZpZXJfZnJlZShzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIg Km1uLAotCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JaWYgKG1uID09IE5VTEwp Ci0JCXJldHVybjsKLQotCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZtbi0+bW4sIG1tKTsKLQlr ZnJlZShtbik7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqCi1fX2k5MTVf bW1fc3RydWN0X2ZpbmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHN0cnVjdCBtbV9z dHJ1Y3QgKnJlYWwpCi17Ci0Jc3RydWN0IGk5MTVfbW1fc3RydWN0ICppdCwgKm1tID0gTlVMTDsK LQotCXJjdV9yZWFkX2xvY2soKTsKLQloYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlX3JjdShpOTE1LT5t bV9zdHJ1Y3RzLAotCQkJCSAgIGl0LCBub2RlLAotCQkJCSAgICh1bnNpZ25lZCBsb25nKXJlYWwp Ci0JCWlmIChpdC0+bW0gPT0gcmVhbCAmJiBrcmVmX2dldF91bmxlc3NfemVybygmaXQtPmtyZWYp KSB7Ci0JCQltbSA9IGl0OwotCQkJYnJlYWs7Ci0JCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQot CXJldHVybiBtbTsKKwlyZXR1cm4gbW11X2ludGVydmFsX25vdGlmaWVyX2luc2VydCgmb2JqLT51 c2VycHRyLm5vdGlmaWVyLCBjdXJyZW50LT5tbSwKKwkJCQkJICAgIG9iai0+dXNlcnB0ci5wdHIs IG9iai0+YmFzZS5zaXplLAorCQkJCQkgICAgJmk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXJfb3Bz KTsKIH0KIAotc3RhdGljIGludAotaTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbV9zdHJ1Y3Qoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVj dF91c2VycHRyX2Ryb3BfcmVmKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwot CXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0sICpuZXc7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBE dXJpbmcgcmVsZWFzZSBvZiB0aGUgR0VNIG9iamVjdCB3ZSBob2xkIHRoZSBzdHJ1Y3RfbXV0ZXgu IFRoaXMKLQkgKiBwcmVjbHVkZXMgdXMgZnJvbSBjYWxsaW5nIG1tcHV0KCkgYXQgdGhhdCB0aW1l IGFzIHRoYXQgbWF5IGJlCi0JICogdGhlIGxhc3QgcmVmZXJlbmNlIGFuZCBzbyBjYWxsIGV4aXRf bW1hcCgpLiBleGl0X21tYXAoKSB3aWxsCi0JICogYXR0ZW1wdCB0byByZWFwIHRoZSB2bWEsIGFu ZCBpZiB3ZSB3ZXJlIGhvbGRpbmcgYSBHVFQgbW1hcAotCSAqIHdvdWxkIHRoZW4gY2FsbCBkcm1f Z2VtX3ZtX2Nsb3NlKCkgYW5kIGF0dGVtcHQgdG8gcmVhY3F1aXJlCi0JICogdGhlIHN0cnVjdCBt dXRleC4gU28gaW4gb3JkZXIgdG8gYXZvaWQgdGhhdCByZWN1cnNpb24sIHdlIGhhdmUKLQkgKiB0 byBkZWZlciByZWxlYXNpbmcgdGhlIG1tIHJlZmVyZW5jZSB1bnRpbCBhZnRlciB3ZSBkcm9wIHRo ZQotCSAqIHN0cnVjdF9tdXRleCwgaS5lLiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgd29ya2VyIHRv IGRvIHRoZSBjbGVhbgotCSAqIHVwLgotCSAqLwotCW1tID0gX19pOTE1X21tX3N0cnVjdF9maW5k KGk5MTUsIGN1cnJlbnQtPm1tKTsKLQlpZiAobW0pCi0JCWdvdG8gb3V0OworCXN0cnVjdCBwYWdl ICoqcHZlYyA9IE5VTEw7CiAKLQluZXcgPSBrbWFsbG9jKHNpemVvZigqbW0pLCBHRlBfS0VSTkVM KTsKLQlpZiAoIW5ldykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlrcmVmX2luaXQoJm5ldy0+a3Jl Zik7Ci0JbmV3LT5pOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKLQluZXctPm1tID0gY3Vy cmVudC0+bW07Ci0JbmV3LT5tbiA9IE5VTEw7Ci0KLQlzcGluX2xvY2soJmk5MTUtPm1tX2xvY2sp OwotCW1tID0gX19pOTE1X21tX3N0cnVjdF9maW5kKGk5MTUsIGN1cnJlbnQtPm1tKTsKLQlpZiAo IW1tKSB7Ci0JCWhhc2hfYWRkX3JjdShpOTE1LT5tbV9zdHJ1Y3RzLAotCQkJICAgICAmbmV3LT5u b2RlLAotCQkJICAgICAodW5zaWduZWQgbG9uZyluZXctPm1tKTsKLQkJbW1ncmFiKGN1cnJlbnQt Pm1tKTsKLQkJbW0gPSBuZXc7CisJc3Bpbl9sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9sb2NrKTsK KwlpZiAoIS0tb2JqLT51c2VycHRyLnBhZ2VfcmVmKSB7CisJCXB2ZWMgPSBvYmotPnVzZXJwdHIu cHZlYzsKKwkJb2JqLT51c2VycHRyLnB2ZWMgPSBOVUxMOwogCX0KLQlzcGluX3VubG9jaygmaTkx NS0+bW1fbG9jayk7Ci0JaWYgKG1tICE9IG5ldykKLQkJa2ZyZWUobmV3KTsKKwlHRU1fQlVHX09O KG9iai0+dXNlcnB0ci5wYWdlX3JlZiA8IDApOworCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5ub3Rp Zmllcl9sb2NrKTsKIAotb3V0OgotCW9iai0+dXNlcnB0ci5tbSA9IG1tOwotCXJldHVybiByZXQ7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1fX2k5MTVfbW1fc3RydWN0X2ZyZWVfX3dvcmtlcihzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSA9IGNvbnRh aW5lcl9vZih3b3JrLCB0eXBlb2YoKm1tKSwgd29yay53b3JrKTsKLQotCWk5MTVfbW11X25vdGlm aWVyX2ZyZWUobW0tPm1uLCBtbS0+bW0pOwotCW1tZHJvcChtbS0+bW0pOwotCWtmcmVlKG1tKTsK LX0KLQotc3RhdGljIHZvaWQKLV9faTkxNV9tbV9zdHJ1Y3RfZnJlZShzdHJ1Y3Qga3JlZiAqa3Jl ZikKLXsKLQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tID0gY29udGFpbmVyX29mKGtyZWYsIHR5 cGVvZigqbW0pLCBrcmVmKTsKLQotCXNwaW5fbG9jaygmbW0tPmk5MTUtPm1tX2xvY2spOwotCWhh c2hfZGVsX3JjdSgmbW0tPm5vZGUpOwotCXNwaW5fdW5sb2NrKCZtbS0+aTkxNS0+bW1fbG9jayk7 Ci0KLQlJTklUX1JDVV9XT1JLKCZtbS0+d29yaywgX19pOTE1X21tX3N0cnVjdF9mcmVlX193b3Jr ZXIpOwotCXF1ZXVlX3JjdV93b3JrKHN5c3RlbV93cSwgJm1tLT53b3JrKTsKLX0KLQotc3RhdGlj IHZvaWQKLWk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW1fc3RydWN0KHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JaWYgKG9iai0+dXNlcnB0ci5tbSA9PSBOVUxMKQotCQly ZXR1cm47CisJaWYgKHB2ZWMpIHsKKwkJY29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBv YmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwogCi0Ja3JlZl9wdXQoJm9iai0+dXNlcnB0ci5t bS0+a3JlZiwgX19pOTE1X21tX3N0cnVjdF9mcmVlKTsKLQlvYmotPnVzZXJwdHIubW0gPSBOVUxM OworCQl1bnBpbl91c2VyX3BhZ2VzKHB2ZWMsIG51bV9wYWdlcyk7CisJCWt2ZnJlZShwdmVjKTsK Kwl9CiB9CiAKLXN0cnVjdCBnZXRfcGFnZXNfd29yayB7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdv cms7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRhc2s7Ci19OwotCi1zdGF0aWMgc3RydWN0IHNnX3RhYmxlICoKLV9faTkxNV9nZW1fdXNl cnB0cl9hbGxvY19wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJICAg ICAgIHN0cnVjdCBwYWdlICoqcHZlYywgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpCitzdGF0aWMg aW50IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCiB7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+ YmFzZS5kZXYpOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gb2JqLT5iYXNlLnNp emUgPj4gUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBpbnQgbWF4X3NlZ21lbnQgPSBpOTE1X3NnX3Nl Z21lbnRfc2l6ZSgpOwogCXN0cnVjdCBzZ190YWJsZSAqc3Q7CiAJdW5zaWduZWQgaW50IHNnX3Bh Z2Vfc2l6ZXM7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3QgcGFnZSAqKnB2ZWM7 CiAJaW50IHJldDsKIAogCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7CiAJ aWYgKCFzdCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwor CisJc3Bpbl9sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9sb2NrKTsKKwlpZiAoR0VNX1dBUk5fT04o IW9iai0+dXNlcnB0ci5wYWdlX3JlZikpIHsKKwkJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm5vdGlm aWVyX2xvY2spOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCW9i ai0+dXNlcnB0ci5wYWdlX3JlZisrOworCXB2ZWMgPSBvYmotPnVzZXJwdHIucHZlYzsKKwlzcGlu X3VubG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CiAKIGFsbG9jX3RhYmxlOgogCXNnID0g X19zZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKHN0LCBwdmVjLCBudW1fcGFnZXMsIDAsCiAJCQkJ CSBudW1fcGFnZXMgPDwgUEFHRV9TSElGVCwgbWF4X3NlZ21lbnQsCiAJCQkJCSBOVUxMLCAwLCBH RlBfS0VSTkVMKTsKIAlpZiAoSVNfRVJSKHNnKSkgewotCQlrZnJlZShzdCk7Ci0JCXJldHVybiBF UlJfQ0FTVChzZyk7CisJCXJldCA9IFBUUl9FUlIoc2cpOworCQlnb3RvIGVycjsKIAl9CiAKIAly ZXQgPSBpOTE1X2dlbV9ndHRfcHJlcGFyZV9wYWdlcyhvYmosIHN0KTsKQEAgLTM5MywyMDMgKzE3 MCwyMCBAQCBfX2k5MTVfZ2VtX3VzZXJwdHJfYWxsb2NfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKIAkJCWdvdG8gYWxsb2NfdGFibGU7CiAJCX0KIAotCQlrZnJlZShzdCk7 Ci0JCXJldHVybiBFUlJfUFRSKHJldCk7CisJCWdvdG8gZXJyOwogCX0KIAogCXNnX3BhZ2Vfc2l6 ZXMgPSBpOTE1X3NnX3BhZ2Vfc2l6ZXMoc3QtPnNnbCk7CiAKIAlfX2k5MTVfZ2VtX29iamVjdF9z ZXRfcGFnZXMob2JqLCBzdCwgc2dfcGFnZV9zaXplcyk7CiAKLQlyZXR1cm4gc3Q7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1fX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcihzdHJ1Y3Qgd29y a19zdHJ1Y3QgKl93b3JrKQotewotCXN0cnVjdCBnZXRfcGFnZXNfd29yayAqd29yayA9IGNvbnRh aW5lcl9vZihfd29yaywgdHlwZW9mKCp3b3JrKSwgd29yayk7Ci0Jc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiA9IHdvcmstPm9iajsKLQljb25zdCB1bnNpZ25lZCBsb25nIG5wYWdlcyA9 IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBwaW5uZWQ7Ci0J c3RydWN0IHBhZ2UgKipwdmVjOwotCWludCByZXQ7Ci0KLQlyZXQgPSAtRU5PTUVNOwotCXBpbm5l ZCA9IDA7Ci0KLQlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnBhZ2VzLCBzaXplb2Yoc3RydWN0IHBh Z2UgKiksIEdGUF9LRVJORUwpOwotCWlmIChwdmVjICE9IE5VTEwpIHsKLQkJc3RydWN0IG1tX3N0 cnVjdCAqbW0gPSBvYmotPnVzZXJwdHIubW0tPm1tOwotCQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAw OwotCQlpbnQgbG9ja2VkID0gMDsKLQotCQlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc19yZWFkb25s eShvYmopKQotCQkJZmxhZ3MgfD0gRk9MTF9XUklURTsKLQotCQlyZXQgPSAtRUZBVUxUOwotCQlp ZiAobW1nZXRfbm90X3plcm8obW0pKSB7Ci0JCQl3aGlsZSAocGlubmVkIDwgbnBhZ2VzKSB7Ci0J CQkJaWYgKCFsb2NrZWQpIHsKLQkJCQkJbW1hcF9yZWFkX2xvY2sobW0pOwotCQkJCQlsb2NrZWQg PSAxOwotCQkJCX0KLQkJCQlyZXQgPSBwaW5fdXNlcl9wYWdlc19yZW1vdGUKLQkJCQkJKG1tLAot CQkJCQkgb2JqLT51c2VycHRyLnB0ciArIHBpbm5lZCAqIFBBR0VfU0laRSwKLQkJCQkJIG5wYWdl cyAtIHBpbm5lZCwKLQkJCQkJIGZsYWdzLAotCQkJCQkgcHZlYyArIHBpbm5lZCwgTlVMTCwgJmxv Y2tlZCk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCWJyZWFrOwotCi0JCQkJcGlubmVkICs9IHJl dDsKLQkJCX0KLQkJCWlmIChsb2NrZWQpCi0JCQkJbW1hcF9yZWFkX3VubG9jayhtbSk7Ci0JCQlt bXB1dChtbSk7Ci0JCX0KLQl9Ci0KLQltdXRleF9sb2NrX25lc3RlZCgmb2JqLT5tbS5sb2NrLCBJ OTE1X01NX0dFVF9QQUdFUyk7Ci0JaWYgKG9iai0+dXNlcnB0ci53b3JrID09ICZ3b3JrLT53b3Jr KSB7Ci0JCXN0cnVjdCBzZ190YWJsZSAqcGFnZXMgPSBFUlJfUFRSKHJldCk7Ci0KLQkJaWYgKHBp bm5lZCA9PSBucGFnZXMpIHsKLQkJCXBhZ2VzID0gX19pOTE1X2dlbV91c2VycHRyX2FsbG9jX3Bh Z2VzKG9iaiwgcHZlYywKLQkJCQkJCQkgICAgICAgbnBhZ2VzKTsKLQkJCWlmICghSVNfRVJSKHBh Z2VzKSkgewotCQkJCXBpbm5lZCA9IDA7Ci0JCQkJcGFnZXMgPSBOVUxMOwotCQkJfQotCQl9Ci0K LQkJb2JqLT51c2VycHRyLndvcmsgPSBFUlJfQ0FTVChwYWdlcyk7Ci0JCWlmIChJU19FUlIocGFn ZXMpKQotCQkJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBmYWxzZSk7Ci0JfQot CW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKLQotCXVucGluX3VzZXJfcGFnZXMocHZlYywg cGlubmVkKTsKLQlrdmZyZWUocHZlYyk7Ci0KLQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Ci0J cHV0X3Rhc2tfc3RydWN0KHdvcmstPnRhc2spOwotCWtmcmVlKHdvcmspOwotfQotCi1zdGF0aWMg c3RydWN0IHNnX3RhYmxlICoKLV9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2NoZWR1bGUo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlzdHJ1Y3QgZ2V0X3BhZ2VzX3dv cmsgKndvcms7Ci0KLQkvKiBTcGF3biBhIHdvcmtlciBzbyB0aGF0IHdlIGNhbiBhY3F1aXJlIHRo ZQotCSAqIHVzZXIgcGFnZXMgd2l0aG91dCBob2xkaW5nIG91ciBtdXRleC4gQWNjZXNzCi0JICog dG8gdGhlIHVzZXIgcGFnZXMgcmVxdWlyZXMgbW1hcF9sb2NrLCBhbmQgd2UgaGF2ZQotCSAqIGEg c3RyaWN0IGxvY2sgb3JkZXJpbmcgb2YgbW1hcF9sb2NrLCBzdHJ1Y3RfbXV0ZXggLQotCSAqIHdl IGFscmVhZHkgaG9sZCBzdHJ1Y3RfbXV0ZXggaGVyZSBhbmQgc28gY2Fubm90Ci0JICogY2FsbCBn dXAgd2l0aG91dCBlbmNvdW50ZXJpbmcgYSBsb2NrIGludmVyc2lvbi4KLQkgKgotCSAqIFVzZXJz cGFjZSB3aWxsIGtlZXAgb24gcmVwZWF0aW5nIHRoZSBvcGVyYXRpb24KLQkgKiAodGhhbmtzIHRv IEVBR0FJTikgdW50aWwgZWl0aGVyIHdlIGhpdCB0aGUgZmFzdAotCSAqIHBhdGggb3IgdGhlIHdv cmtlciBjb21wbGV0ZXMuIElmIHRoZSB3b3JrZXIgaXMKLQkgKiBjYW5jZWxsZWQgb3Igc3VwZXJz ZWRlZCwgdGhlIHRhc2sgaXMgc3RpbGwgcnVuCi0JICogYnV0IHRoZSByZXN1bHRzIGlnbm9yZWQu IChUaGlzIGxlYWRzIHRvCi0JICogY29tcGxpY2F0aW9ucyB0aGF0IHdlIG1heSBoYXZlIGEgc3Ry YXkgb2JqZWN0Ci0JICogcmVmY291bnQgdGhhdCB3ZSBuZWVkIHRvIGJlIHdhcnkgb2Ygd2hlbgot CSAqIGNoZWNraW5nIGZvciBleGlzdGluZyBvYmplY3RzIGR1cmluZyBjcmVhdGlvbi4pCi0JICog SWYgdGhlIHdvcmtlciBlbmNvdW50ZXJzIGFuIGVycm9yLCBpdCByZXBvcnRzCi0JICogdGhhdCBl cnJvciBiYWNrIHRvIHRoaXMgZnVuY3Rpb24gdGhyb3VnaAotCSAqIG9iai0+dXNlcnB0ci53b3Jr ID0gRVJSX1BUUi4KLQkgKi8KLQl3b3JrID0ga21hbGxvYyhzaXplb2YoKndvcmspLCBHRlBfS0VS TkVMKTsKLQlpZiAod29yayA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQot CW9iai0+dXNlcnB0ci53b3JrID0gJndvcmstPndvcms7Ci0KLQl3b3JrLT5vYmogPSBpOTE1X2dl bV9vYmplY3RfZ2V0KG9iaik7Ci0KLQl3b3JrLT50YXNrID0gY3VycmVudDsKLQlnZXRfdGFza19z dHJ1Y3Qod29yay0+dGFzayk7Ci0KLQlJTklUX1dPUksoJndvcmstPndvcmssIF9faTkxNV9nZW1f dXNlcnB0cl9nZXRfcGFnZXNfd29ya2VyKTsKLQlxdWV1ZV93b3JrKHRvX2k5MTUob2JqLT5iYXNl LmRldiktPm1tLnVzZXJwdHJfd3EsICZ3b3JrLT53b3JrKTsKLQotCXJldHVybiBFUlJfUFRSKC1F QUdBSU4pOwotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBudW1f cGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwotCXN0cnVjdCBtbV9zdHJ1Y3Qg Km1tID0gb2JqLT51c2VycHRyLm1tLT5tbTsKLQlzdHJ1Y3QgcGFnZSAqKnB2ZWM7Ci0Jc3RydWN0 IHNnX3RhYmxlICpwYWdlczsKLQlib29sIGFjdGl2ZTsKLQlpbnQgcGlubmVkOwotCXVuc2lnbmVk IGludCBndXBfZmxhZ3MgPSAwOwotCi0JLyogSWYgdXNlcnNwYWNlIHNob3VsZCBlbmdpbmVlciB0 aGF0IHRoZXNlIHBhZ2VzIGFyZSByZXBsYWNlZCBpbgotCSAqIHRoZSB2bWEgYmV0d2VlbiB1cyBi aW5kaW5nIHRoaXMgcGFnZSBpbnRvIHRoZSBHVFQgYW5kIGNvbXBsZXRpb24KLQkgKiBvZiByZW5k ZXJpbmcuLi4gVGhlaXIgbG9zcy4gSWYgdGhleSBjaGFuZ2UgdGhlIG1hcHBpbmcgb2YgdGhlaXIK LQkgKiBwYWdlcyB0aGV5IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGJvIHRvIHBvaW50IHRvIHRoZSBu ZXcgdm1hLgotCSAqCi0JICogSG93ZXZlciwgdGhhdCBzdGlsbCBsZWF2ZXMgb3BlbiB0aGUgcG9z c2liaWxpdHkgb2YgdGhlIHZtYQotCSAqIGJlaW5nIGNvcGllZCB1cG9uIGZvcmsuIFdoaWNoIGZh bGxzIHVuZGVyIHRoZSBzYW1lIHVzZXJzcGFjZQotCSAqIHN5bmNocm9uaXNhdGlvbiBpc3N1ZSBh cyBhIHJlZ3VsYXIgYm8sIGV4Y2VwdCB0aGF0IHRoaXMgdGltZQotCSAqIHRoZSBwcm9jZXNzIG1h eSBub3QgYmUgZXhwZWN0aW5nIHRoYXQgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mCi0JICogbWVtb3J5 IGlzIHRpZWQgdG8gdGhlIEdQVS4KLQkgKgotCSAqIEZvcnR1bmF0ZWx5LCB3ZSBjYW4gaG9vayBp bnRvIHRoZSBtbXVfbm90aWZpZXIgaW4gb3JkZXIgdG8KLQkgKiBkaXNjYXJkIHRoZSBwYWdlIHJl ZmVyZW5jZXMgcHJpb3IgdG8gYW55dGhpbmcgbmFzdHkgaGFwcGVuaW5nCi0JICogdG8gdGhlIHZt YSAoZGlzY2FyZCBvciBjbG9uaW5nKSB3aGljaCBzaG91bGQgcHJldmVudCB0aGUgbW9yZQotCSAq IGVncmVnaW91cyBjYXNlcyBmcm9tIGNhdXNpbmcgaGFybS4KLQkgKi8KLQotCWlmIChvYmotPnVz ZXJwdHIud29yaykgewotCQkvKiBhY3RpdmUgZmxhZyBzaG91bGQgc3RpbGwgYmUgaGVsZCBmb3Ig dGhlIHBlbmRpbmcgd29yayAqLwotCQlpZiAoSVNfRVJSKG9iai0+dXNlcnB0ci53b3JrKSkKLQkJ CXJldHVybiBQVFJfRVJSKG9iai0+dXNlcnB0ci53b3JrKTsKLQkJZWxzZQotCQkJcmV0dXJuIC1F QUdBSU47Ci0JfQotCi0JcHZlYyA9IE5VTEw7Ci0JcGlubmVkID0gMDsKLQotCWlmIChtbSA9PSBj dXJyZW50LT5tbSkgewotCQlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnVtX3BhZ2VzLCBzaXplb2Yo c3RydWN0IHBhZ2UgKiksCi0JCQkJICAgICAgR0ZQX0tFUk5FTCB8Ci0JCQkJICAgICAgX19HRlBf Tk9SRVRSWSB8Ci0JCQkJICAgICAgX19HRlBfTk9XQVJOKTsKLQkJaWYgKHB2ZWMpIHsKLQkJCS8q IGRlZmVyIHRvIHdvcmtlciBpZiBtYWxsb2MgZmFpbHMgKi8KLQkJCWlmICghaTkxNV9nZW1fb2Jq ZWN0X2lzX3JlYWRvbmx5KG9iaikpCi0JCQkJZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7Ci0JCQlw aW5uZWQgPSBwaW5fdXNlcl9wYWdlc19mYXN0X29ubHkob2JqLT51c2VycHRyLnB0ciwKLQkJCQkJ CQkgIG51bV9wYWdlcywgZ3VwX2ZsYWdzLAotCQkJCQkJCSAgcHZlYyk7Ci0JCX0KLQl9Ci0KLQlh Y3RpdmUgPSBmYWxzZTsKLQlpZiAocGlubmVkIDwgMCkgewotCQlwYWdlcyA9IEVSUl9QVFIocGlu bmVkKTsKLQkJcGlubmVkID0gMDsKLQl9IGVsc2UgaWYgKHBpbm5lZCA8IG51bV9wYWdlcykgewot CQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2NoZWR1bGUob2JqKTsKLQkJ YWN0aXZlID0gcGFnZXMgPT0gRVJSX1BUUigtRUFHQUlOKTsKLQl9IGVsc2UgewotCQlwYWdlcyA9 IF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhvYmosIHB2ZWMsIG51bV9wYWdlcyk7Ci0J CWFjdGl2ZSA9ICFJU19FUlIocGFnZXMpOwotCX0KLQlpZiAoYWN0aXZlKQotCQlfX2k5MTVfZ2Vt X3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIHRydWUpOwotCi0JaWYgKElTX0VSUihwYWdlcykpCi0J CXVucGluX3VzZXJfcGFnZXMocHZlYywgcGlubmVkKTsKLQlrdmZyZWUocHZlYyk7CisJcmV0dXJu IDA7CiAKLQlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHBhZ2VzKTsKK2VycjoKKwlpOTE1X2dlbV9v YmplY3RfdXNlcnB0cl9kcm9wX3JlZihvYmopOworZXJyX2ZyZWU6CisJa2ZyZWUoc3QpOworCXJl dHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01OTksOSArMTkzLDYgQEAgaTkxNV9nZW1f dXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAlzdHJ1 Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQkvKiBDYW5jZWwg YW55IGluZmxpZ2h0IHdvcmsgYW5kIGZvcmNlIHRoZW0gdG8gcmVzdGFydCB0aGVpciBndXAgKi8K LQlvYmotPnVzZXJwdHIud29yayA9IE5VTEw7Ci0JX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3Rp dmUob2JqLCBmYWxzZSk7CiAJaWYgKCFwYWdlcykKIAkJcmV0dXJuOwogCkBAIC02NDEsMTkgKzIz MiwxNjEgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwKIAkJfQogCiAJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKLQkJdW5waW5f dXNlcl9wYWdlKHBhZ2UpOwogCX0KIAlvYmotPm1tLmRpcnR5ID0gZmFsc2U7CiAKIAlzZ19mcmVl X3RhYmxlKHBhZ2VzKTsKIAlrZnJlZShwYWdlcyk7CisKKwlpOTE1X2dlbV9vYmplY3RfdXNlcnB0 cl9kcm9wX3JlZihvYmopOworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRy X3VuYmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIGdldF9wYWdlcykK K3sKKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOworCWludCBlcnI7CisKKwllcnIgPSBpOTE1X2dl bV9vYmplY3RfdW5iaW5kKG9iaiwgSTkxNV9HRU1fT0JKRUNUX1VOQklORF9BQ1RJVkUpOworCWlm IChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoR0VNX1dBUk5fT04oaTkxNV9nZW1fb2JqZWN0 X2hhc19waW5uZWRfcGFnZXMob2JqKSkpCisJCXJldHVybiAtRUJVU1k7CisKKwltdXRleF9sb2Nr X25lc3RlZCgmb2JqLT5tbS5sb2NrLCBJOTE1X01NX0dFVF9QQUdFUyk7CisKKwlwYWdlcyA9IF9f aTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7CisJaWYgKCFJU19FUlJfT1JfTlVMTChw YWdlcykpCisJCWk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzKG9iaiwgcGFnZXMpOworCisJaWYg KGdldF9wYWdlcykKKwkJZXJyID0gX19fX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsK KwltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQg aTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUo b2JqLT5iYXNlLmRldik7CisJY29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJh c2Uuc2l6ZSA+PiBQQUdFX1NISUZUOworCXN0cnVjdCBwYWdlICoqcHZlYzsKKwl1bnNpZ25lZCBp bnQgZ3VwX2ZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIG5vdGlmaWVyX3NlcTsKKwlpbnQgcGlu bmVkLCByZXQ7CisKKwlpZiAob2JqLT51c2VycHRyLm5vdGlmaWVyLm1tICE9IGN1cnJlbnQtPm1t KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9sb2NrX2ludGVy cnVwdGlibGUob2JqLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogTWFr ZSBzdXJlIHVzZXJwdHIgaXMgdW5ib3VuZCBmb3IgbmV4dCBhdHRlbXB0LCBzbyB3ZSBkb24ndCB1 c2Ugc3RhbGUgcGFnZXMuICovCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfdW5iaW5k KG9iaiwgZmFsc2UpOworCWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJbm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4o Jm9iai0+dXNlcnB0ci5ub3RpZmllcik7CisKKwlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnVtX3Bh Z2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICghcHZlYykKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc19yZWFkb25seShvYmop KQorCQlndXBfZmxhZ3MgfD0gRk9MTF9XUklURTsKKworCXBpbm5lZCA9IHJldCA9IDA7CisJd2hp bGUgKHBpbm5lZCA8IG51bV9wYWdlcykgeworCQlyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KG9i ai0+dXNlcnB0ci5wdHIgKyBwaW5uZWQgKiBQQUdFX1NJWkUsCisJCQkJCSAgbnVtX3BhZ2VzIC0g cGlubmVkLCBndXBfZmxhZ3MsCisJCQkJCSAgJnB2ZWNbcGlubmVkXSk7CisJCWlmIChyZXQgPCAw KQorCQkJZ290byBvdXQ7CisKKwkJcGlubmVkICs9IHJldDsKKwl9CisJcmV0ID0gMDsKKworCXNw aW5fbG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CisKKwlpZiAobW11X2ludGVydmFsX3Jl YWRfcmV0cnkoJm9iai0+dXNlcnB0ci5ub3RpZmllciwKKwkJIW9iai0+dXNlcnB0ci5wYWdlX3Jl ZiA/IG5vdGlmaWVyX3NlcSA6CisJCW9iai0+dXNlcnB0ci5ub3RpZmllcl9zZXEpKSB7CisJCXJl dCA9IC1FQUdBSU47CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAoIW9iai0+dXNlcnB0 ci5wYWdlX3JlZisrKSB7CisJCW9iai0+dXNlcnB0ci5wdmVjID0gcHZlYzsKKwkJb2JqLT51c2Vy cHRyLm5vdGlmaWVyX3NlcSA9IG5vdGlmaWVyX3NlcTsKKworCQlwdmVjID0gTlVMTDsKKwl9CisK K291dF91bmxvY2s6CisJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm5vdGlmaWVyX2xvY2spOworCitv dXQ6CisJaWYgKHB2ZWMpIHsKKwkJdW5waW5fdXNlcl9wYWdlcyhwdmVjLCBwaW5uZWQpOworCQlr dmZyZWUocHZlYyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IGk5MTVfZ2VtX29iamVj dF91c2VycHRyX3N1Ym1pdF9kb25lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7 CisJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZvYmotPnVzZXJwdHIubm90aWZpZXIsCisJ CQkJICAgIG9iai0+dXNlcnB0ci5ub3RpZmllcl9zZXEpKSB7CisJCS8qIFdlIGNvbGxpZGVkIHdp dGggdGhlIG1tdSBub3RpZmllciwgbmVlZCB0byByZXRyeSAqLworCisJCXJldHVybiAtRUFHQUlO OworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1 Ym1pdF9maW5pKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJaTkxNV9nZW1f b2JqZWN0X3VzZXJwdHJfZHJvcF9yZWYob2JqKTsKK30KKworaW50IGk5MTVfZ2VtX29iamVjdF91 c2VycHRyX3ZhbGlkYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJaW50 IGVycjsKKworCWVyciA9IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9pbml0KG9iaik7 CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGk5MTVfZ2VtX29iamVjdF9sb2Nr X2ludGVycnVwdGlibGUob2JqLCBOVUxMKTsKKwlpZiAoIWVycikgeworCQkvKgorCQkgKiBTaW5j ZSB3ZSBvbmx5IGNoZWNrIHZhbGlkaXR5LCBub3QgdXNlIHRoZSBwYWdlcywKKwkJICogaXQgZG9l c24ndCBtYXR0ZXIgaWYgd2UgY29sbGlkZSB3aXRoIHRoZSBtbXUgbm90aWZpZXIsCisJCSAqIGFu ZCAtRUFHQUlOIGhhbmRsaW5nIGlzIG5vdCByZXF1aXJlZC4KKwkJICovCisJCWVyciA9IGk5MTVf Z2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwkJaWYgKCFlcnIpCisJCQlpOTE1X2dlbV9vYmpl Y3RfdW5waW5fcGFnZXMob2JqKTsKKworCQlpOTE1X2dlbV9vYmplY3RfdW5sb2NrKG9iaik7CisJ fQorCisJaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2Zpbmkob2JqKTsKKwlyZXR1cm4g ZXJyOwogfQogCiBzdGF0aWMgdm9pZAogaTkxNV9nZW1fdXNlcnB0cl9yZWxlYXNlKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0JaTkxNV9nZW1fdXNlcnB0cl9yZWxlYXNlX19t bXVfbm90aWZpZXIob2JqKTsKLQlpOTE1X2dlbV91c2VycHRyX3JlbGVhc2VfX21tX3N0cnVjdChv YmopOworCUdFTV9XQVJOX09OKG9iai0+dXNlcnB0ci5wYWdlX3JlZik7CisKKwltbXVfaW50ZXJ2 YWxfbm90aWZpZXJfcmVtb3ZlKCZvYmotPnVzZXJwdHIubm90aWZpZXIpOworCW9iai0+dXNlcnB0 ci5ub3RpZmllci5tbSA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTY4Niw3ICs0MTksNiBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX3Vz ZXJwdHJfb3BzID0gewogCS5uYW1lID0gImk5MTVfZ2VtX29iamVjdF91c2VycHRyIiwKIAkuZmxh Z3MgPSBJOTE1X0dFTV9PQkpFQ1RfSVNfU0hSSU5LQUJMRSB8CiAJCSBJOTE1X0dFTV9PQkpFQ1Rf Tk9fTU1BUCB8Ci0JCSBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMIHwKIAkJIEk5MTVfR0VN X09CSkVDVF9JU19QUk9YWSwKIAkuZ2V0X3BhZ2VzID0gaTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFn ZXMsCiAJLnB1dF9wYWdlcyA9IGk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzLApAQCAtNzkzLDYg KzUyNSw3IEBAIGk5MTVfZ2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK IAlpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2NvaGVyZW5jeShvYmosIEk5MTVfQ0FDSEVfTExD KTsKIAogCW9iai0+dXNlcnB0ci5wdHIgPSBhcmdzLT51c2VyX3B0cjsKKwlvYmotPnVzZXJwdHIu bm90aWZpZXJfc2VxID0gVUxPTkdfTUFYOwogCWlmIChhcmdzLT5mbGFncyAmIEk5MTVfVVNFUlBU Ul9SRUFEX09OTFkpCiAJCWk5MTVfZ2VtX29iamVjdF9zZXRfcmVhZG9ubHkob2JqKTsKIApAQCAt ODAwLDkgKzUzMyw3IEBAIGk5MTVfZ2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAkgKiBhdCBiaW5kaW5nLiBUaGlzIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBob29rIGlu dG8gdGhlIG1tdV9ub3RpZmllcgogCSAqIGluIG9yZGVyIHRvIGRldGVjdCBpZiB0aGUgbW11IGlz IGRlc3Ryb3llZC4KIAkgKi8KLQlyZXQgPSBpOTE1X2dlbV91c2VycHRyX2luaXRfX21tX3N0cnVj dChvYmopOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gaTkxNV9nZW1fdXNlcnB0cl9pbml0X19t bXVfbm90aWZpZXIob2JqKTsKKwlyZXQgPSBpOTE1X2dlbV91c2VycHRyX2luaXRfX21tdV9ub3Rp ZmllcihvYmopOwogCWlmIChyZXQgPT0gMCkKIAkJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRl KGZpbGUsICZvYmotPmJhc2UsICZoYW5kbGUpOwogCkBAIC04MjEsMTUgKzU1Miw3IEBAIGk5MTVf Z2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIGludCBpOTE1X2dlbV9p bml0X3VzZXJwdHIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogI2lmZGVm IENPTkZJR19NTVVfTk9USUZJRVIKLQlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPm1tX2xvY2sp OwotCWhhc2hfaW5pdChkZXZfcHJpdi0+bW1fc3RydWN0cyk7Ci0KLQlkZXZfcHJpdi0+bW0udXNl cnB0cl93cSA9Ci0JCWFsbG9jX3dvcmtxdWV1ZSgiaTkxNS11c2VycHRyLWFjcXVpcmUiLAotCQkJ CVdRX0hJR0hQUkkgfCBXUV9VTkJPVU5ELAotCQkJCTApOwotCWlmICghZGV2X3ByaXYtPm1tLnVz ZXJwdHJfd3EpCi0JCXJldHVybiAtRU5PTUVNOworCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+ bW0ubm90aWZpZXJfbG9jayk7CiAjZW5kaWYKIAogCXJldHVybiAwOwpAQCAtODM3LDcgKzU2MCw0 IEBAIGludCBpOTE1X2dlbV9pbml0X3VzZXJwdHIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQogCiB2b2lkIGk5MTVfZ2VtX2NsZWFudXBfdXNlcnB0cihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0jaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgotCWRlc3Ry b3lfd29ya3F1ZXVlKGRldl9wcml2LT5tbS51c2VycHRyX3dxKTsKLSNlbmRpZgogfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKaW5kZXggZDczOGUyYmEwN2M4Li43YzE2YmQyODNiODcgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaApAQCAtNTU4LDExICs1NTgsMTAgQEAgc3RydWN0IGk5MTVfZ2VtX21t IHsKIAogI2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVIKIAkvKioKLQkgKiBXb3JrcXVldWUgdG8g ZmF1bHQgaW4gdXNlcnB0ciBwYWdlcywgZmx1c2hlZCBieSB0aGUgZXhlY2J1ZgotCSAqIHdoZW4g cmVxdWlyZWQgYnV0IG90aGVyd2lzZSBsZWZ0IHRvIHVzZXJzcGFjZSB0byB0cnkgYWdhaW4KLQkg KiBvbiBFQUdBSU4uCisJICogbm90aWZpZXJfbG9jayBmb3IgbW11IG5vdGlmaWVycywgbWVtb3J5 IG1heSBub3QgYmUgYWxsb2NhdGVkCisJICogd2hpbGUgaG9sZGluZyB0aGlzIGxvY2suCiAJICov Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnVzZXJwdHJfd3E7CisJc3BpbmxvY2tfdCBub3Rp Zmllcl9sb2NrOwogI2VuZGlmCiAKIAkvKiBzaHJpbmtlciBhY2NvdW50aW5nLCBhbHNvIHVzZWZ1 bCBmb3IgdXNlcmxhbmQgZGVidWdnaW5nICovCkBAIC05MzYsOCArOTM1LDYgQEAgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgewogCXN0cnVjdCBpOTE1X2dndHQgZ2d0dDsgLyogVk0gcmVwcmVzZW50 aW5nIHRoZSBnbG9iYWwgYWRkcmVzcyBzcGFjZSAqLwogCiAJc3RydWN0IGk5MTVfZ2VtX21tIG1t OwotCURFQ0xBUkVfSEFTSFRBQkxFKG1tX3N0cnVjdHMsIDcpOwotCXNwaW5sb2NrX3QgbW1fbG9j azsKIAogCS8qIEtlcm5lbCBNb2Rlc2V0dGluZyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpp bmRleCBkZGUxMmNlNGY5MGIuLjNkZWU0ZTMxZmIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j CkBAIC0xMDY3LDEwICsxMDY3LDggQEAgaW50IGk5MTVfZ2VtX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQogZXJyX3VubG9jazoKIAlpOTE1X2dlbV9kcmFpbl93b3JrcXVl dWUoZGV2X3ByaXYpOwogCi0JaWYgKHJldCAhPSAtRUlPKSB7CisJaWYgKHJldCAhPSAtRUlPKQog CQlpbnRlbF91Y19jbGVhbnVwX2Zpcm13YXJlcygmZGV2X3ByaXYtPmd0LnVjKTsKLQkJaTkxNV9n ZW1fY2xlYW51cF91c2VycHRyKGRldl9wcml2KTsKLQl9CiAKIAlpZiAocmV0ID09IC1FSU8pIHsK IAkJLyoKQEAgLTExMjcsNyArMTEyNSw2IEBAIHZvaWQgaTkxNV9nZW1fZHJpdmVyX3JlbGVhc2Uo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWludGVsX3dhX2xpc3RfZnJlZSgm ZGV2X3ByaXYtPmd0X3dhX2xpc3QpOwogCiAJaW50ZWxfdWNfY2xlYW51cF9maXJtd2FyZXMoJmRl dl9wcml2LT5ndC51Yyk7Ci0JaTkxNV9nZW1fY2xlYW51cF91c2VycHRyKGRldl9wcml2KTsKIAog CWk5MTVfZ2VtX2RyYWluX2ZyZWVkX29iamVjdHMoZGV2X3ByaXYpOwogCi0tIAoyLjMxLjAKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=