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.7 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 9C0ACC2D0AE for ; Mon, 12 Oct 2020 14:48:01 +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 639B920838 for ; Mon, 12 Oct 2020 14:48:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 639B920838 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 4E06E6E517; Mon, 12 Oct 2020 14:47:57 +0000 (UTC) Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6158F6E4B0 for ; Mon, 12 Oct 2020 14:47:13 +0000 (UTC) From: Maarten Lankhorst To: intel-gfx@lists.freedesktop.org Date: Mon, 12 Oct 2020 16:46:19 +0200 Message-Id: <20201012144706.555345-15-maarten.lankhorst@linux.intel.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201012144706.555345-1-maarten.lankhorst@linux.intel.com> References: <20201012144706.555345-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 14/61] drm/i915: Fix userptr so we do not have to worry about obj->mm.lock, v2. 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" SW5zdGVhZCBvZiBkb2luZyB3aGF0IHdlIGRvIGN1cnJlbnRseSwgd2hpY2ggd2lsbCBuZXZlciB3 b3JrIHdpdGgKUFJPVkVfTE9DS0lORywgZG8gdGhlIHNhbWUgYXMgQU1EIGRvZXMsIGFuZCBzb21l dGhpbmcgc2ltaWxhciB0bwpyZWxvY2F0aW9uIHNsb3dwYXRoLiBXaGVuIGFsbCBsb2NrcyBhcmUg ZHJvcHBlZCwgd2UgYWNxdWlyZSB0aGUKcGFnZXMgZm9yIHBpbm5pbmcuIFdoZW4gdGhlIGxvY2tz IGFyZSB0YWtlbiwgd2UgdHJhbnNmZXIgdGhvc2UKcGFnZXMgaW4gLmdldF9wYWdlcygpIHRvIHRo ZSBiby4gQXMgYSBmaW5hbCBjaGVjayBiZWZvcmUgaW5zdGFsbGluZwp0aGUgZmVuY2VzLCB3ZSBl bnN1cmUgdGhhdCB0aGUgbW11IG5vdGlmaWVyIHdhcyBub3QgY2FsbGVkOyBpZiBpdCBpcywKd2Ug cmV0dXJuIC1FQUdBSU4gdG8gdXNlcnNwYWNlIHRvIHNpZ25hbCBpdCBoYXMgdG8gc3RhcnQgb3Zl ci4KCkNoYW5nZXMgc2luY2UgdjE6Ci0gVW5iaW5kaW5nIGlzIGRvbmUgaW4gc3VibWl0X2luaXQg b25seS4gc3VibWl0X2JlZ2luKCkgcmVtb3ZlZC4KLSBNTVVfTk9URklFUiAtPiBNTVVfTk9USUZJ RVIKClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBs aW51eC5pbnRlbC5jb20+Ci0tLQogLi4uL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1 ZmZlci5jICAgIHwgIDkxICsrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29i amVjdC5oICAgIHwgIDM1ICstCiAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3Rf dHlwZXMuaCAgfCAgMTAgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdl cy5jICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJw dHIuYyAgIHwgNzYyICsrKysrLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCAgICAgICAgICAgICAgIHwgICA5ICstCiA2IGZpbGVzIGNoYW5nZWQsIDMyOCBpbnNl cnRpb25zKCspLCA1ODEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKaW5kZXggYzMwZmE1NzkwYTQ3Li5jYmI2ODYyMzU4NjYg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVy LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwpA QCAtNTIsMTQgKzUyLDE2IEBAIGVudW0gewogLyogX19FWEVDX09CSkVDVF9OT19SRVNFUlZFIGlz IEJJVCgzMSksIGRlZmluZWQgaW4gaTkxNV92bWEuaCAqLwogI2RlZmluZSBfX0VYRUNfT0JKRUNU X0hBU19QSU4JCUJJVCgzMCkKICNkZWZpbmUgX19FWEVDX09CSkVDVF9IQVNfRkVOQ0UJCUJJVCgy OSkKLSNkZWZpbmUgX19FWEVDX09CSkVDVF9ORUVEU19NQVAJCUJJVCgyOCkKLSNkZWZpbmUgX19F WEVDX09CSkVDVF9ORUVEU19CSUFTCUJJVCgyNykKLSNkZWZpbmUgX19FWEVDX09CSkVDVF9JTlRF Uk5BTF9GTEFHUwkofjB1IDw8IDI3KSAvKiBhbGwgb2YgdGhlIGFib3ZlICsgKi8KKyNkZWZpbmUg X19FWEVDX09CSkVDVF9VU0VSUFRSX0lOSVQJQklUKDI4KQorI2RlZmluZSBfX0VYRUNfT0JKRUNU X05FRURTX01BUAkJQklUKDI3KQorI2RlZmluZSBfX0VYRUNfT0JKRUNUX05FRURTX0JJQVMJQklU KDI2KQorI2RlZmluZSBfX0VYRUNfT0JKRUNUX0lOVEVSTkFMX0ZMQUdTCSh+MHUgPDwgMjYpIC8q IGFsbCBvZiB0aGUgYWJvdmUgKyAqLwogI2RlZmluZSBfX0VYRUNfT0JKRUNUX1JFU0VSVkVEIChf X0VYRUNfT0JKRUNUX0hBU19QSU4gfCBfX0VYRUNfT0JKRUNUX0hBU19GRU5DRSkKIAogI2RlZmlu ZSBfX0VYRUNfSEFTX1JFTE9DCUJJVCgzMSkKICNkZWZpbmUgX19FWEVDX0VOR0lORV9QSU5ORUQJ QklUKDMwKQotI2RlZmluZSBfX0VYRUNfSU5URVJOQUxfRkxBR1MJKH4wdSA8PCAzMCkKKyNkZWZp bmUgX19FWEVDX1VTRVJQVFJfVVNFRAlCSVQoMjkpCisjZGVmaW5lIF9fRVhFQ19JTlRFUk5BTF9G TEFHUwkofjB1IDw8IDI5KQogI2RlZmluZSBVUERBVEUJCQlQSU5fT0ZGU0VUX0ZJWEVECiAKICNk ZWZpbmUgQkFUQ0hfT0ZGU0VUX0JJQVMgKDI1NioxMDI0KQpAQCAtODY1LDYgKzg2NywxOSBAQCBz dGF0aWMgaW50IGViX2xvb2t1cF92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogCQl9 CiAKIAkJZWJfYWRkX3ZtYShlYiwgaSwgYmF0Y2gsIHZtYSk7CisKKwkJaWYgKGk5MTVfZ2VtX29i amVjdF9pc191c2VycHRyKHZtYS0+b2JqKSkgeworCQkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3Vz ZXJwdHJfc3VibWl0X2luaXQodm1hLT5vYmopOworCQkJaWYgKGVycikgeworCQkJCWlmIChpICsg MSA8IGViLT5idWZmZXJfY291bnQpCisJCQkJCWViLT52bWFbaSArIDFdLnZtYSA9IE5VTEw7CisK KwkJCQlyZXR1cm4gZXJyOworCQkJfQorCisJCQllYi0+dm1hW2ldLmZsYWdzIHw9IF9fRVhFQ19P QkpFQ1RfVVNFUlBUUl9JTklUOworCQkJZWItPmFyZ3MtPmZsYWdzIHw9IF9fRVhFQ19VU0VSUFRS X1VTRUQ7CisJCX0KIAl9CiAKIAlpZiAodW5saWtlbHkoZWItPmJhdGNoLT5mbGFncyAmIEVYRUNf T0JKRUNUX1dSSVRFKSkgewpAQCAtOTYyLDcgKzk3Nyw3IEBAIGViX2dldF92bWEoY29uc3Qgc3Ry dWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKQogCX0KIH0KIAot c3RhdGljIHZvaWQgZWJfcmVsZWFzZV92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLCBi b29sIGZpbmFsKQorc3RhdGljIHZvaWQgZWJfcmVsZWFzZV92bWFzKHN0cnVjdCBpOTE1X2V4ZWNi dWZmZXIgKmViLCBib29sIGZpbmFsLCBib29sIHJlbGVhc2VfdXNlcnB0cikKIHsKIAljb25zdCB1 bnNpZ25lZCBpbnQgY291bnQgPSBlYi0+YnVmZmVyX2NvdW50OwogCXVuc2lnbmVkIGludCBpOwpA QCAtOTc2LDYgKzk5MSwxMSBAQCBzdGF0aWMgdm9pZCBlYl9yZWxlYXNlX3ZtYXMoc3RydWN0IGk5 MTVfZXhlY2J1ZmZlciAqZWIsIGJvb2wgZmluYWwpCiAKIAkJZWJfdW5yZXNlcnZlX3ZtYShldik7 CiAKKwkJaWYgKHJlbGVhc2VfdXNlcnB0ciAmJiBldi0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX1VT RVJQVFJfSU5JVCkgeworCQkJZXYtPmZsYWdzICY9IH5fX0VYRUNfT0JKRUNUX1VTRVJQVFJfSU5J VDsKKwkJCWk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9maW5pKHZtYS0+b2JqKTsKKwkJ fQorCiAJCWlmIChmaW5hbCkKIAkJCWk5MTVfdm1hX3B1dCh2bWEpOwogCX0KQEAgLTE5MTEsNiAr MTkzMSwzMSBAQCBzdGF0aWMgaW50IGViX3ByZWZhdWx0X3JlbG9jYXRpb25zKGNvbnN0IHN0cnVj dCBpOTE1X2V4ZWNidWZmZXIgKmViKQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGViX3Jl aW5pdF91c2VycHRyKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQoreworCWNvbnN0IHVuc2ln bmVkIGludCBjb3VudCA9IGViLT5idWZmZXJfY291bnQ7CisJdW5zaWduZWQgaW50IGk7CisJaW50 IHJldDsKKworCWlmIChsaWtlbHkoIShlYi0+YXJncy0+ZmxhZ3MgJiBfX0VYRUNfVVNFUlBUUl9V U0VEKSkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJ c3RydWN0IGViX3ZtYSAqZXYgPSAmZWItPnZtYVtpXTsKKworCQlpZiAoIWk5MTVfZ2VtX29iamVj dF9pc191c2VycHRyKGV2LT52bWEtPm9iaikpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBpOTE1 X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfaW5pdChldi0+dm1hLT5vYmopOworCQlpZiAocmV0 KQorCQkJcmV0dXJuIHJldDsKKworCQlldi0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9VU0VSUFRS X0lOSVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBub2lubGluZSBpbnQgZWJfcmVs b2NhdGVfcGFyc2Vfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKIAkJCQkJICAgc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCiB7CkBAIC0xOTI1LDcgKzE5NzAsNyBAQCBzdGF0aWMgbm9p bmxpbmUgaW50IGViX3JlbG9jYXRlX3BhcnNlX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAq ZWIsCiAJfQogCiAJLyogV2UgbWF5IHByb2Nlc3MgYW5vdGhlciBleGVjYnVmZmVyIGR1cmluZyB0 aGUgdW5sb2NrLi4uICovCi0JZWJfcmVsZWFzZV92bWFzKGViLCBmYWxzZSk7CisJZWJfcmVsZWFz ZV92bWFzKGViLCBmYWxzZSwgdHJ1ZSk7CiAJaTkxNV9nZW1fd3dfY3R4X2ZpbmkoJmViLT53dyk7 CiAKIAlpZiAocnEpIHsKQEAgLTE5NjYsMTAgKzIwMTEsOCBAQCBzdGF0aWMgbm9pbmxpbmUgaW50 IGViX3JlbG9jYXRlX3BhcnNlX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCiAJCWVy ciA9IDA7CiAJfQogCi0jaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgogCWlmICghZXJyKQotCQlm bHVzaF93b3JrcXVldWUoZWItPmk5MTUtPm1tLnVzZXJwdHJfd3EpOwotI2VuZGlmCisJCWVyciA9 IGViX3JlaW5pdF91c2VycHRyKGViKTsKIAogZXJyX3JlbG9jazoKIAlpOTE1X2dlbV93d19jdHhf aW5pdCgmZWItPnd3LCB0cnVlKTsKQEAgLTIwMzEsNyArMjA3NCw3IEBAIHN0YXRpYyBub2lubGlu ZSBpbnQgZWJfcmVsb2NhdGVfcGFyc2Vfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwK IAogZXJyOgogCWlmIChlcnIgPT0gLUVERUFETEspIHsKLQkJZWJfcmVsZWFzZV92bWFzKGViLCBm YWxzZSk7CisJCWViX3JlbGVhc2Vfdm1hcyhlYiwgZmFsc2UsIGZhbHNlKTsKIAkJZXJyID0gaTkx NV9nZW1fd3dfY3R4X2JhY2tvZmYoJmViLT53dyk7CiAJCWlmICghZXJyKQogCQkJZ290byByZXBl YXRfdmFsaWRhdGU7CkBAIC0yMTI4LDcgKzIxNzEsNyBAQCBzdGF0aWMgaW50IGViX3JlbG9jYXRl X3BhcnNlKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogCiBlcnI6CiAJaWYgKGVyciA9PSAt RURFQURMSykgewotCQllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNlKTsKKwkJZWJfcmVsZWFzZV92 bWFzKGViLCBmYWxzZSwgZmFsc2UpOwogCQllcnIgPSBpOTE1X2dlbV93d19jdHhfYmFja29mZigm ZWItPnd3KTsKIAkJaWYgKCFlcnIpCiAJCQlnb3RvIHJldHJ5OwpAQCAtMjIwMyw2ICsyMjQ2LDI3 IEBAIHN0YXRpYyBpbnQgZWJfbW92ZV90b19ncHUoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIp CiAJCQkJCQkgICAgICBmbGFncyB8IF9fRVhFQ19PQkpFQ1RfTk9fUkVTRVJWRSk7CiAJfQogCisj aWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgorCWlmICghZXJyICYmIChlYi0+YXJncy0+ZmxhZ3Mg JiBfX0VYRUNfVVNFUlBUUl9VU0VEKSAmJgorCSAgICAhKGVyciA9IG11dGV4X2xvY2tfaW50ZXJy dXB0aWJsZSgmZWItPmk5MTUtPm1tLm5vdGlmaWVyX2xvY2spKSkgeworCQlpID0gY291bnQ7CisK KwkJd2hpbGUgKGktLSkgeworCQkJc3RydWN0IGViX3ZtYSAqZXYgPSAmZWItPnZtYVtpXTsKKwkJ CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBldi0+dm1hLT5vYmo7CisKKwkJCWlm ICghaTkxNV9nZW1fb2JqZWN0X2lzX3VzZXJwdHIob2JqKSkKKwkJCQljb250aW51ZTsKKworCQkJ ZXJyID0gaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2RvbmUob2JqKTsKKwkJCWlmIChl cnIpCisJCQkJYnJlYWs7CisJCX0KKworCQltdXRleF91bmxvY2soJmViLT5pOTE1LT5tbS5ub3Rp Zmllcl9sb2NrKTsKKwl9CisjZW5kaWYKKwogCWlmICh1bmxpa2VseShlcnIpKQogCQlnb3RvIGVy cl9za2lwOwogCkBAIC0zMzQxLDcgKzM0MDUsNyBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAKIAllcnIgPSBlYl9sb29rdXBfdm1hcygmZWIpOwogCWlm IChlcnIpIHsKLQkJZWJfcmVsZWFzZV92bWFzKCZlYiwgdHJ1ZSk7CisJCWViX3JlbGVhc2Vfdm1h cygmZWIsIHRydWUsIHRydWUpOwogCQlnb3RvIGVycl9lbmdpbmU7CiAJfQogCkBAIC0zNDEzLDYg KzM0NzcsNyBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAKIAl0cmFjZV9pOTE1X3JlcXVlc3RfcXVldWUoZWIucmVxdWVzdCwgZWIuYmF0Y2hfZmxhZ3Mp OwogCWVyciA9IGViX3N1Ym1pdCgmZWIsIGJhdGNoKTsKKwogZXJyX3JlcXVlc3Q6CiAJaTkxNV9y ZXF1ZXN0X2dldChlYi5yZXF1ZXN0KTsKIAllYl9yZXF1ZXN0X2FkZCgmZWIpOwpAQCAtMzQzMyw3 ICszNDk4LDcgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAogCWk5MTVfcmVxdWVzdF9wdXQoZWIucmVxdWVzdCk7CiAKIGVycl92bWE6Ci0JZWJfcmVsZWFz ZV92bWFzKCZlYiwgdHJ1ZSk7CisJZWJfcmVsZWFzZV92bWFzKCZlYiwgdHJ1ZSwgdHJ1ZSk7CiAJ aWYgKGViLnRyYW1wb2xpbmUpCiAJCWk5MTVfdm1hX3VucGluKGViLnRyYW1wb2xpbmUpOwogCVdB Uk5fT04oZXJyID09IC1FREVBRExLKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9vYmplY3QuaAppbmRleCBhMzc3NGU4MGFlZGQuLmFiY2NlNGQyODViNSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaApAQCAtMzMsNiArMzMsNyBAQCBpOTE1 X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtX2Zyb21fZGF0YShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSwKIAkJCQkgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgcmVzb3VyY2Vfc2l6ZV90IHNp emUpOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVf Z2VtX3NobWVtX29wczsKKwogdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3NobWVtKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJICAgICBzdHJ1Y3Qgc2dfdGFibGUg KnBhZ2VzLAogCQkJCSAgICAgYm9vbCBuZWVkc19jbGZsdXNoKTsKQEAgLTIyMiwxMiArMjIzLDYg QEAgaTkxNV9nZW1fb2JqZWN0X25ldmVyX21tYXAoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKIAlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3R5cGVfaGFzKG9iaiwgSTkxNV9H RU1fT0JKRUNUX05PX01NQVApOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wKLWk5MTVfZ2VtX29i amVjdF9uZWVkc19hc3luY19jYW5jZWwoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKLXsKLQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3R5cGVfaGFzKG9iaiwgSTkxNV9HRU1f T0JKRUNUX0FTWU5DX0NBTkNFTCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbAogaTkxNV9nZW1f b2JqZWN0X2lzX2ZyYW1lYnVmZmVyKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCiB7CkBAIC01MjgsMTYgKzUyMyw2IEBAIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfZmx1c2hf ZnJvbnRidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIHZvaWQgX19pOTE1 X2dlbV9vYmplY3RfaW52YWxpZGF0ZV9mcm9udGJ1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAogCQkJCQkgICAgICBlbnVtIGZiX29wX29yaWdpbiBvcmlnaW4pOwogCi1zdGF0 aWMgaW5saW5lIGJvb2wKLWk5MTVfZ2VtX29iamVjdF9pc191c2VycHRyKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCi17Ci0jaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgotCXJldHVy biBvYmotPnVzZXJwdHIubW07Ci0jZWxzZQotCXJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBz dGF0aWMgaW5saW5lIHZvaWQKIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9mcm9udGJ1ZmZlcihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJCSAgZW51bSBmYl9vcF9vcmlnaW4gb3Jp Z2luKQpAQCAtNTU0LDQgKzUzOSwyMiBAQCBpOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZV9mcm9u dGJ1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQlfX2k5MTVfZ2VtX29i amVjdF9pbnZhbGlkYXRlX2Zyb250YnVmZmVyKG9iaiwgb3JpZ2luKTsKIH0KIAorI2lmZGVmIENP TkZJR19NTVVfTk9USUZJRVIKK3N0YXRpYyBpbmxpbmUgYm9vbAoraTkxNV9nZW1fb2JqZWN0X2lz X3VzZXJwdHIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlyZXR1cm4gb2Jq LT51c2VycHRyLm5vdGlmaWVyLm1tOworfQorCitpbnQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJf c3VibWl0X2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CitpbnQgaTkxNV9n ZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2RvbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaik7Cit2b2lkIGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9maW5pKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgYm9vbCBpOTE1 X2dlbV9vYmplY3RfaXNfdXNlcnB0cihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKSB7 IHJldHVybiBmYWxzZTsgfQorCitzdGF0aWMgaW5saW5lIGludCBpOTE1X2dlbV9vYmplY3RfdXNl cnB0cl9zdWJtaXRfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKSB7IEdFTV9C VUdfT04oMSk7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIGludCBpOTE1X2dlbV9v YmplY3RfdXNlcnB0cl9zdWJtaXRfZG9uZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KSB7IEdFTV9CVUdfT04oMSk7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIHZvaWQg aTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2Zpbmkoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikgeyBHRU1fQlVHX09OKDEpOyB9CisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKaW5kZXggMWY3 MjllNjM4NjdjLi4wYWEzOTFmNWQ3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKQEAgLTcsNiArNyw4IEBACiAjaWZuZGVmIF9fSTkx NV9HRU1fT0JKRUNUX1RZUEVTX0hfXwogI2RlZmluZSBfX0k5MTVfR0VNX09CSkVDVF9UWVBFU19I X18KIAorI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPgorCiAjaW5jbHVkZSA8ZHJtL2Ry bV9nZW0uaD4KICNpbmNsdWRlIDx1YXBpL2RybS9pOTE1X2RybS5oPgogCkBAIC0zNCw3ICszNiw2 IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyB7CiAjZGVmaW5lIEk5MTVfR0VNX09C SkVDVF9JU19TSFJJTktBQkxFCUJJVCgyKQogI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNfUFJP WFkJQklUKDMpCiAjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9OT19NTUFQCQlCSVQoNCkKLSNkZWZp bmUgSTkxNV9HRU1fT0JKRUNUX0FTWU5DX0NBTkNFTAlCSVQoNSkKIAogCS8qIEludGVyZmFjZSBi ZXR3ZWVuIHRoZSBHRU0gb2JqZWN0IGFuZCBpdHMgYmFja2luZyBzdG9yYWdlLgogCSAqIGdldF9w YWdlcygpIGlzIGNhbGxlZCBvbmNlIHByaW9yIHRvIHRoZSB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQg c2V0CkBAIC0yOTIsMTAgKzI5MywxMSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7CiAj aWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgogCQlzdHJ1Y3QgaTkxNV9nZW1fdXNlcnB0ciB7CiAJ CQl1aW50cHRyX3QgcHRyOworCQkJdW5zaWduZWQgbG9uZyBub3RpZmllcl9zZXE7CiAKLQkJCXN0 cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Ci0JCQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbXVf b2JqZWN0OwotCQkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCQkJc3RydWN0IG1tdV9pbnRl cnZhbF9ub3RpZmllciBub3RpZmllcjsKKwkJCXN0cnVjdCBwYWdlICoqcHZlYzsKKwkJCWludCBw YWdlX3JlZjsKIAkJfSB1c2VycHRyOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX3BhZ2VzLmMKaW5kZXggMWM2NDZkNWY4MDJiLi5iODFmMjUzZjVkYzkgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCkBAIC0yMjUsNyArMjI1LDcg QEAgaW50IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQogCSAqIGdldF9wYWdlcyBiYWNrZW5kcyB3ZSBzaG91bGQgYmUgYmV0dGVyIGFi bGUgdG8gaGFuZGxlIHRoZQogCSAqIGNhbmNlbGxhdGlvbiBvZiB0aGUgYXN5bmMgdGFzayBpbiBh IG1vcmUgdW5pZm9ybSBtYW5uZXIuCiAJICovCi0JaWYgKCFwYWdlcyAmJiAhaTkxNV9nZW1fb2Jq ZWN0X25lZWRzX2FzeW5jX2NhbmNlbChvYmopKQorCWlmICghcGFnZXMpCiAJCXBhZ2VzID0gRVJS X1BUUigtRUlOVkFMKTsKIAogCWlmICghSVNfRVJSKHBhZ2VzKSkKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jCmluZGV4IGEyYjdmNmRiMmYxYS4uMWY2MTA3ODM3 OTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0 ci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMKQEAg LTIsMTAgKzIsMzkgQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICAqCiAgKiBD b3B5cmlnaHQgwqkgMjAxMi0yMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICAqIEJhc2VkIG9u IGFtZGdwdV9tbiwgd2hpY2ggYmVhcnMgdGhlIGZvbGxvd2luZyBub3RpY2U6CisgKgorICogQ29w eXJpZ2h0IDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQWxsIFJpZ2h0cyBS ZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiks IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwor ICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZS SU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFV VEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBE QU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5H UyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z CisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICovCisvKgorICogQXV0aG9yczoKKyAqICAgIENo cmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KICAqLwogCiAjaW5jbHVk ZSA8bGludXgvbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4K ICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAj aW5jbHVkZSA8bGludXgvc2NoZWQvbW0uaD4KQEAgLTE1LDM3NCArNDQsMTA0IEBACiAjaW5jbHVk ZSAiaTkxNV9nZW1fb2JqZWN0LmgiCiAjaW5jbHVkZSAiaTkxNV9zY2F0dGVybGlzdC5oIgogCi0j aWYgZGVmaW5lZChDT05GSUdfTU1VX05PVElGSUVSKQotCi1zdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3Qg ewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 OwotCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47Ci0Jc3RydWN0IGhsaXN0X25vZGUgbm9k ZTsKLQlzdHJ1Y3Qga3JlZiBrcmVmOwotCXN0cnVjdCByY3Vfd29yayB3b3JrOwotfTsKLQotI2lu Y2x1ZGUgPGxpbnV4L2ludGVydmFsX3RyZWUuaD4KLQotc3RydWN0IGk5MTVfbW11X25vdGlmaWVy IHsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKLQlzdHJ1Y3Qg bW11X25vdGlmaWVyIG1uOwotCXN0cnVjdCByYl9yb290X2NhY2hlZCBvYmplY3RzOwotCXN0cnVj dCBpOTE1X21tX3N0cnVjdCAqbW07Ci19OwotCi1zdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0IHsKLQlz dHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmo7Ci0Jc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsKLX07Ci0KLXN0YXRpYyB2b2lk IGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8pCi17Ci0JR0VNX0JVR19PTigh UkJfRU1QVFlfTk9ERSgmbW8tPml0LnJiKSk7Ci0JaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1vLT5p dCwgJm1vLT5tbi0+b2JqZWN0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlbF9vYmplY3Qoc3RydWN0 IGk5MTVfbW11X29iamVjdCAqbW8pCi17Ci0JaWYgKFJCX0VNUFRZX05PREUoJm1vLT5pdC5yYikp Ci0JCXJldHVybjsKLQotCWludGVydmFsX3RyZWVfcmVtb3ZlKCZtby0+aXQsICZtby0+bW4tPm9i amVjdHMpOwotCVJCX0NMRUFSX05PREUoJm1vLT5pdC5yYik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1f X2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLCBib29sIHZhbHVlKQotewotCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vID0gb2JqLT51 c2VycHRyLm1tdV9vYmplY3Q7Ci0KLQkvKgotCSAqIER1cmluZyBtbV9pbnZhbGlkYXRlX3Jhbmdl IHdlIG5lZWQgdG8gY2FuY2VsIGFueSB1c2VycHRyIHRoYXQKLQkgKiBvdmVybGFwcyB0aGUgcmFu Z2UgYmVpbmcgaW52YWxpZGF0ZWQuIERvaW5nIHNvIHJlcXVpcmVzIHRoZQotCSAqIHN0cnVjdF9t dXRleCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQotCSAqIHJl Y3Vyc2lvbiwgdGhlIHVzZXIgbXVzdCBhbGlhcyB0aGUgdXNlcnB0ciBhZGRyZXNzIHNwYWNlIHdp dGgKLQkgKiBhIEdUVCBtbWFwcGluZyAocG9zc2libGUgd2l0aCBhIE1BUF9GSVhFRCkgLSB0aGVu IHdoZW4gd2UgaGF2ZQotCSAqIHRvIGludmFsaWRhdGUgdGhhdCBtbWFwaW5nLCBtbV9pbnZhbGlk YXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCi0JICogdGhlIHVzZXJwdHIgYWRkcmVzcyAqYW5kKiB0 aGUgc3RydWN0X211dGV4IGhlbGQuICBUbyBwcmV2ZW50IHRoYXQKLQkgKiB3ZSBzZXQgYSBmbGFn IHVuZGVyIHRoZSBpOTE1X21tdV9ub3RpZmllciBzcGlubG9jayB0byBpbmRpY2F0ZQotCSAqIHdo ZXRoZXIgdGhpcyBvYmplY3QgaXMgdmFsaWQuCi0JICovCi0JaWYgKCFtbykKLQkJcmV0dXJuOwot Ci0Jc3Bpbl9sb2NrKCZtby0+bW4tPmxvY2spOwotCWlmICh2YWx1ZSkKLQkJYWRkX29iamVjdCht byk7Ci0JZWxzZQotCQlkZWxfb2JqZWN0KG1vKTsKLQlzcGluX3VubG9jaygmbW8tPm1uLT5sb2Nr KTsKLX0KKyNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCiAKLXN0YXRpYyBpbnQKLXVzZXJwdHJf bW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICpfbW4sCi0JCQkJ ICBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSkKKy8qKgorICogaTkxNV9n ZW1fdXNlcnB0cl9pbnZhbGlkYXRlIC0gY2FsbGJhY2sgdG8gbm90aWZ5IGFib3V0IG1tIGNoYW5n ZQorICoKKyAqIEBtbmk6IHRoZSByYW5nZSAobW0pIGlzIGFib3V0IHRvIHVwZGF0ZQorICogQHJh bmdlOiBkZXRhaWxzIG9uIHRoZSBpbnZhbGlkYXRpb24KKyAqIEBjdXJfc2VxOiBWYWx1ZSB0byBw YXNzIHRvIG1tdV9pbnRlcnZhbF9zZXRfc2VxKCkKKyAqCisgKiBCbG9jayBmb3Igb3BlcmF0aW9u cyBvbiBCT3MgdG8gZmluaXNoIGFuZCBtYXJrIHBhZ2VzIGFzIGFjY2Vzc2VkIGFuZAorICogcG90 ZW50aWFsbHkgZGlydHkuCisgKi8KK3N0YXRpYyBib29sIGk5MTVfZ2VtX3VzZXJwdHJfaW52YWxp ZGF0ZShzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICptbmksCisJCQkJCWNvbnN0IHN0cnVj dCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlLAorCQkJCQl1bnNpZ25lZCBsb25nIGN1cl9zZXEp CiB7Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbiA9Ci0JCWNvbnRhaW5lcl9vZihfbW4s IHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciwgbW4pOwotCXN0cnVjdCBpbnRlcnZhbF90cmVlX25v ZGUgKml0OwotCXVuc2lnbmVkIGxvbmcgZW5kOwotCWludCByZXQgPSAwOwotCi0JaWYgKFJCX0VN UFRZX1JPT1QoJm1uLT5vYmplY3RzLnJiX3Jvb3QpKQotCQlyZXR1cm4gMDsKLQotCS8qIGludGVy dmFsIHJhbmdlcyBhcmUgaW5jbHVzaXZlLCBidXQgaW52YWxpZGF0ZSByYW5nZSBpcyBleGNsdXNp dmUgKi8KLQllbmQgPSByYW5nZS0+ZW5kIC0gMTsKLQotCXNwaW5fbG9jaygmbW4tPmxvY2spOwot CWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0cywgcmFuZ2UtPnN0YXJ0 LCBlbmQpOwotCXdoaWxlIChpdCkgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq OwotCi0JCWlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkpIHsKLQkJCXJl dCA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQorCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmogPSBjb250YWluZXJfb2YobW5pLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwgdXNl cnB0ci5ub3RpZmllcik7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1 KG9iai0+YmFzZS5kZXYpOworCWxvbmcgcjsKIAotCQkvKgotCQkgKiBUaGUgbW11X29iamVjdCBp cyByZWxlYXNlZCBsYXRlIHdoZW4gZGVzdHJveWluZyB0aGUKLQkJICogR0VNIG9iamVjdCBzbyBp dCBpcyBlbnRpcmVseSBwb3NzaWJsZSB0byBnYWluIGEKLQkJICogcmVmZXJlbmNlIG9uIGFuIG9i amVjdCBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZAotCQkgKiBzaW5jZSBvdXIgc2VyaWFs aXNhdGlvbiBpcyB2aWEgdGhlIHNwaW5sb2NrIGFuZCBub3QKLQkJICogdGhlIHN0cnVjdF9tdXRl eCAtIGFuZCBjb25zZXF1ZW50bHkgdXNlIGl0IGFmdGVyIGl0Ci0JCSAqIGlzIGZyZWVkIGFuZCB0 aGVuIGRvdWJsZSBmcmVlIGl0LiBUbyBwcmV2ZW50IHRoYXQKLQkJICogdXNlLWFmdGVyLWZyZWUg d2Ugb25seSBhY3F1aXJlIGEgcmVmZXJlbmNlIG9uIHRoZQotCQkgKiBvYmplY3QgaWYgaXQgaXMg bm90IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4KLQkJICovCi0JCW9iaiA9IGNv bnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpLT5vYmo7Ci0JCWlmICgh a3JlZl9nZXRfdW5sZXNzX3plcm8oJm9iai0+YmFzZS5yZWZjb3VudCkpIHsKLQkJCWl0ID0gaW50 ZXJ2YWxfdHJlZV9pdGVyX25leHQoaXQsIHJhbmdlLT5zdGFydCwgZW5kKTsKLQkJCWNvbnRpbnVl OwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7CisJaWYgKCFtbXVfbm90aWZpZXJfcmFu Z2VfYmxvY2thYmxlKHJhbmdlKSkKKwkJcmV0dXJuIGZhbHNlOwogCi0JCXJldCA9IGk5MTVfZ2Vt X29iamVjdF91bmJpbmQob2JqLAotCQkJCQkgICAgIEk5MTVfR0VNX09CSkVDVF9VTkJJTkRfQUNU SVZFIHwKLQkJCQkJICAgICBJOTE1X0dFTV9PQkpFQ1RfVU5CSU5EX0JBUlJJRVIpOwotCQlpZiAo cmV0ID09IDApCi0JCQlyZXQgPSBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKLQkJ aTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwlt dXRleF9sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9sb2NrKTsKIAotCQlzcGluX2xvY2soJm1uLT5s b2NrKTsKKwltbXVfaW50ZXJ2YWxfc2V0X3NlcShtbmksIGN1cl9zZXEpOwogCi0JCS8qCi0JCSAq IEFzIHdlIGRvIG5vdCAoeWV0KSBwcm90ZWN0IHRoZSBtbXUgZnJvbSBjb25jdXJyZW50IGluc2Vy dGlvbgotCQkgKiBvdmVyIHRoaXMgcmFuZ2UsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRo aXMgc2VhcmNoIHdpbGwKLQkJICogdGVybWluYXRlIGdpdmVuIGEgcGF0aG9sb2dpYyB3b3JrbG9h ZC4KLQkJICovCi0JCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0cywg cmFuZ2UtPnN0YXJ0LCBlbmQpOwotCX0KLQlzcGluX3VubG9jaygmbW4tPmxvY2spOworCW11dGV4 X3VubG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CiAKLQlyZXR1cm4gcmV0OworCS8qIHdl IHdpbGwgdW5iaW5kIG9uIG5leHQgc3VibWlzc2lvbiwgc3RpbGwgaGF2ZSB1c2VycHRyIHBpbnMg Ki8KKwlyID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShvYmotPmJhc2UucmVzdiwgdHJ1ZSwg ZmFsc2UsCisJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCWlmIChyIDw9IDApCisJ CWRybV9lcnIoJmk5MTUtPmRybSwgIiglbGQpIGZhaWxlZCB0byB3YWl0IGZvciBpZGxlXG4iLCBy KTsKIAorCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmll cl9vcHMgaTkxNV9nZW1fdXNlcnB0cl9ub3RpZmllciA9IHsKLQkuaW52YWxpZGF0ZV9yYW5nZV9z dGFydCA9IHVzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBpOTE1X2dlbV91c2VycHRyX25vdGlmaWVy X29wcyA9IHsKKwkuaW52YWxpZGF0ZSA9IGk5MTVfZ2VtX3VzZXJwdHJfaW52YWxpZGF0ZSwKIH07 CiAKLXN0YXRpYyBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKgotaTkxNV9tbXVfbm90aWZpZXJf Y3JlYXRlKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IGk5MTVfbW11X25v dGlmaWVyICptbjsKLQotCW1uID0ga21hbGxvYyhzaXplb2YoKm1uKSwgR0ZQX0tFUk5FTCk7Ci0J aWYgKG1uID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0Jc3Bpbl9sb2Nr X2luaXQoJm1uLT5sb2NrKTsKLQltbi0+bW4ub3BzID0gJmk5MTVfZ2VtX3VzZXJwdHJfbm90aWZp ZXI7Ci0JbW4tPm9iamVjdHMgPSBSQl9ST09UX0NBQ0hFRDsKLQltbi0+bW0gPSBtbTsKLQotCXJl dHVybiBtbjsKLX0KLQotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11 X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0Jc3RydWN0IGk5 MTVfbW11X29iamVjdCAqbW87Ci0KLQltbyA9IGZldGNoX2FuZF96ZXJvKCZvYmotPnVzZXJwdHIu bW11X29iamVjdCk7Ci0JaWYgKCFtbykKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrKCZtby0+bW4t PmxvY2spOwotCWRlbF9vYmplY3QobW8pOwotCXNwaW5fdW5sb2NrKCZtby0+bW4tPmxvY2spOwot CWtmcmVlKG1vKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqCi1pOTE1 X21tdV9ub3RpZmllcl9maW5kKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0 IGk5MTVfbW11X25vdGlmaWVyICptbiwgKm9sZDsKLQlpbnQgZXJyOwotCi0JbW4gPSBSRUFEX09O Q0UobW0tPm1uKTsKLQlpZiAobGlrZWx5KG1uKSkKLQkJcmV0dXJuIG1uOwotCi0JbW4gPSBpOTE1 X21tdV9ub3RpZmllcl9jcmVhdGUobW0pOwotCWlmIChJU19FUlIobW4pKQotCQlyZXR1cm4gbW47 Ci0KLQllcnIgPSBtbXVfbm90aWZpZXJfcmVnaXN0ZXIoJm1uLT5tbiwgbW0tPm1tKTsKLQlpZiAo ZXJyKSB7Ci0JCWtmcmVlKG1uKTsKLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKLQl9Ci0KLQlvbGQg PSBjbXB4Y2hnKCZtbS0+bW4sIE5VTEwsIG1uKTsKLQlpZiAob2xkKSB7Ci0JCW1tdV9ub3RpZmll cl91bnJlZ2lzdGVyKCZtbi0+bW4sIG1tLT5tbSk7Ci0JCWtmcmVlKG1uKTsKLQkJbW4gPSBvbGQ7 Ci0JfQotCi0JcmV0dXJuIG1uOwotfQotCiBzdGF0aWMgaW50CiBpOTE1X2dlbV91c2VycHRyX2lu aXRfX21tdV9ub3RpZmllcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCXN0 cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47Ci0Jc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW87 Ci0KLQlpZiAoR0VNX1dBUk5fT04oIW9iai0+dXNlcnB0ci5tbSkpCi0JCXJldHVybiAtRUlOVkFM OwotCi0JbW4gPSBpOTE1X21tdV9ub3RpZmllcl9maW5kKG9iai0+dXNlcnB0ci5tbSk7Ci0JaWYg KElTX0VSUihtbikpCi0JCXJldHVybiBQVFJfRVJSKG1uKTsKLQotCW1vID0ga3phbGxvYyhzaXpl b2YoKm1vKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlt by0+bW4gPSBtbjsKLQltby0+b2JqID0gb2JqOwotCW1vLT5pdC5zdGFydCA9IG9iai0+dXNlcnB0 ci5wdHI7Ci0JbW8tPml0Lmxhc3QgPSBvYmotPnVzZXJwdHIucHRyICsgb2JqLT5iYXNlLnNpemUg LSAxOwotCVJCX0NMRUFSX05PREUoJm1vLT5pdC5yYik7Ci0KLQlvYmotPnVzZXJwdHIubW11X29i amVjdCA9IG1vOwotCXJldHVybiAwOworCXJldHVybiBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfaW5z ZXJ0KCZvYmotPnVzZXJwdHIubm90aWZpZXIsIGN1cnJlbnQtPm1tLAorCQkJCQkgICAgb2JqLT51 c2VycHRyLnB0ciwgb2JqLT5iYXNlLnNpemUsCisJCQkJCSAgICAmaTkxNV9nZW1fdXNlcnB0cl9u b3RpZmllcl9vcHMpOwogfQogCi1zdGF0aWMgdm9pZAotaTkxNV9tbXVfbm90aWZpZXJfZnJlZShz dHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uLAotCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAq bW0pCi17Ci0JaWYgKG1uID09IE5VTEwpCi0JCXJldHVybjsKLQotCW1tdV9ub3RpZmllcl91bnJl Z2lzdGVyKCZtbi0+bW4sIG1tKTsKLQlrZnJlZShtbik7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBp OTE1X21tX3N0cnVjdCAqCi1fX2k5MTVfbW1fc3RydWN0X2ZpbmQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsIHN0cnVjdCBtbV9zdHJ1Y3QgKnJlYWwpCi17Ci0Jc3RydWN0IGk5MTVfbW1f c3RydWN0ICppdCwgKm1tID0gTlVMTDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQloYXNoX2Zvcl9l YWNoX3Bvc3NpYmxlX3JjdShpOTE1LT5tbV9zdHJ1Y3RzLAotCQkJCSAgIGl0LCBub2RlLAotCQkJ CSAgICh1bnNpZ25lZCBsb25nKXJlYWwpCi0JCWlmIChpdC0+bW0gPT0gcmVhbCAmJiBrcmVmX2dl dF91bmxlc3NfemVybygmaXQtPmtyZWYpKSB7Ci0JCQltbSA9IGl0OwotCQkJYnJlYWs7Ci0JCX0K LQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXJldHVybiBtbTsKLX0KLQotc3RhdGljIGludAotaTkx NV9nZW1fdXNlcnB0cl9pbml0X19tbV9zdHJ1Y3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF91c2VycHRyX2Ryb3BfcmVmKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwotCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAq bW0sICpuZXc7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBEdXJpbmcgcmVsZWFzZSBvZiB0aGUgR0VN IG9iamVjdCB3ZSBob2xkIHRoZSBzdHJ1Y3RfbXV0ZXguIFRoaXMKLQkgKiBwcmVjbHVkZXMgdXMg ZnJvbSBjYWxsaW5nIG1tcHV0KCkgYXQgdGhhdCB0aW1lIGFzIHRoYXQgbWF5IGJlCi0JICogdGhl IGxhc3QgcmVmZXJlbmNlIGFuZCBzbyBjYWxsIGV4aXRfbW1hcCgpLiBleGl0X21tYXAoKSB3aWxs Ci0JICogYXR0ZW1wdCB0byByZWFwIHRoZSB2bWEsIGFuZCBpZiB3ZSB3ZXJlIGhvbGRpbmcgYSBH VFQgbW1hcAotCSAqIHdvdWxkIHRoZW4gY2FsbCBkcm1fZ2VtX3ZtX2Nsb3NlKCkgYW5kIGF0dGVt cHQgdG8gcmVhY3F1aXJlCi0JICogdGhlIHN0cnVjdCBtdXRleC4gU28gaW4gb3JkZXIgdG8gYXZv aWQgdGhhdCByZWN1cnNpb24sIHdlIGhhdmUKLQkgKiB0byBkZWZlciByZWxlYXNpbmcgdGhlIG1t IHJlZmVyZW5jZSB1bnRpbCBhZnRlciB3ZSBkcm9wIHRoZQotCSAqIHN0cnVjdF9tdXRleCwgaS5l LiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgd29ya2VyIHRvIGRvIHRoZSBjbGVhbgotCSAqIHVwLgot CSAqLwotCW1tID0gX19pOTE1X21tX3N0cnVjdF9maW5kKGk5MTUsIGN1cnJlbnQtPm1tKTsKLQlp ZiAobW0pCi0JCWdvdG8gb3V0OwogCi0JbmV3ID0ga21hbGxvYyhzaXplb2YoKm1tKSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFuZXcpCi0JCXJldHVybiAtRU5PTUVNOworCW11dGV4X2xvY2soJmk5MTUt Pm1tLm5vdGlmaWVyX2xvY2spOworCWlmICghLS1vYmotPnVzZXJwdHIucGFnZV9yZWYpIHsKKwkJ Y29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NI SUZUOwogCi0Ja3JlZl9pbml0KCZuZXctPmtyZWYpOwotCW5ldy0+aTkxNSA9IHRvX2k5MTUob2Jq LT5iYXNlLmRldik7Ci0JbmV3LT5tbSA9IGN1cnJlbnQtPm1tOwotCW5ldy0+bW4gPSBOVUxMOwot Ci0Jc3Bpbl9sb2NrKCZpOTE1LT5tbV9sb2NrKTsKLQltbSA9IF9faTkxNV9tbV9zdHJ1Y3RfZmlu ZChpOTE1LCBjdXJyZW50LT5tbSk7Ci0JaWYgKCFtbSkgewotCQloYXNoX2FkZF9yY3UoaTkxNS0+ bW1fc3RydWN0cywKLQkJCSAgICAgJm5ldy0+bm9kZSwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcp bmV3LT5tbSk7Ci0JCW1tZ3JhYihjdXJyZW50LT5tbSk7Ci0JCW1tID0gbmV3OworCQl1bnBpbl91 c2VyX3BhZ2VzKG9iai0+dXNlcnB0ci5wdmVjLCBudW1fcGFnZXMpOworCQlrZnJlZShvYmotPnVz ZXJwdHIucHZlYyk7CisJCW9iai0+dXNlcnB0ci5wdmVjID0gTlVMTDsKIAl9Ci0Jc3Bpbl91bmxv Y2soJmk5MTUtPm1tX2xvY2spOwotCWlmIChtbSAhPSBuZXcpCi0JCWtmcmVlKG5ldyk7Ci0KLW91 dDoKLQlvYmotPnVzZXJwdHIubW0gPSBtbTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9p ZAotX19pOTE1X21tX3N0cnVjdF9mcmVlX193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3Jr KQotewotCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0gPSBjb250YWluZXJfb2Yod29yaywgdHlw ZW9mKCptbSksIHdvcmsud29yayk7Ci0KLQlpOTE1X21tdV9ub3RpZmllcl9mcmVlKG1tLT5tbiwg bW0tPm1tKTsKLQltbWRyb3AobW0tPm1tKTsKLQlrZnJlZShtbSk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1fX2k5MTVfbW1fc3RydWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IGk5 MTVfbW1fc3RydWN0ICptbSA9IGNvbnRhaW5lcl9vZihrcmVmLCB0eXBlb2YoKm1tKSwga3JlZik7 Ci0KLQlzcGluX2xvY2soJm1tLT5pOTE1LT5tbV9sb2NrKTsKLQloYXNoX2RlbF9yY3UoJm1tLT5u b2RlKTsKLQlzcGluX3VubG9jaygmbW0tPmk5MTUtPm1tX2xvY2spOwotCi0JSU5JVF9SQ1VfV09S SygmbW0tPndvcmssIF9faTkxNV9tbV9zdHJ1Y3RfZnJlZV9fd29ya2VyKTsKLQlxdWV1ZV9yY3Vf d29yayhzeXN0ZW1fd3EsICZtbS0+d29yayk7CisJR0VNX0JVR19PTihvYmotPnVzZXJwdHIucGFn ZV9yZWYgPCAwKTsKKwltdXRleF91bmxvY2soJmk5MTUtPm1tLm5vdGlmaWVyX2xvY2spOwogfQog Ci1zdGF0aWMgdm9pZAotaTkxNV9nZW1fdXNlcnB0cl9yZWxlYXNlX19tbV9zdHJ1Y3Qoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlpZiAob2JqLT51c2VycHRyLm1tID09IE5V TEwpCi0JCXJldHVybjsKLQotCWtyZWZfcHV0KCZvYmotPnVzZXJwdHIubW0tPmtyZWYsIF9faTkx NV9tbV9zdHJ1Y3RfZnJlZSk7Ci0Jb2JqLT51c2VycHRyLm1tID0gTlVMTDsKLX0KLQotc3RydWN0 IGdldF9wYWdlc193b3JrIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLX07Ci0K LXN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKgotX19pOTE1X2dlbV91c2VycHRyX2FsbG9jX3BhZ2Vz KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgICAgc3RydWN0IHBhZ2Ug KipwdmVjLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKK3N0YXRpYyBpbnQgaTkxNV9nZW1fdXNl cnB0cl9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7CisJY29u c3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZU OwogCXVuc2lnbmVkIGludCBtYXhfc2VnbWVudCA9IGk5MTVfc2dfc2VnbWVudF9zaXplKCk7CiAJ c3RydWN0IHNnX3RhYmxlICpzdDsKIAl1bnNpZ25lZCBpbnQgc2dfcGFnZV9zaXplczsKKwlzdHJ1 Y3QgcGFnZSAqKnB2ZWM7CiAJaW50IHJldDsKIAogCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0KSwg R0ZQX0tFUk5FTCk7CiAJaWYgKCFzdCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJl dHVybiAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CisJ aWYgKEdFTV9XQVJOX09OKCFvYmotPnVzZXJwdHIucGFnZV9yZWYpKSB7CisJCW11dGV4X3VubG9j aygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJy X2ZyZWU7CisJfQorCisJb2JqLT51c2VycHRyLnBhZ2VfcmVmKys7CisJcHZlYyA9IG9iai0+dXNl cnB0ci5wdmVjOworCW11dGV4X3VubG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CiAKIGFs bG9jX3RhYmxlOgogCXJldCA9IF9fc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcyhzdCwgcHZlYywg bnVtX3BhZ2VzLAogCQkJCQkgIDAsIG51bV9wYWdlcyA8PCBQQUdFX1NISUZULAogCQkJCQkgIG1h eF9zZWdtZW50LAogCQkJCQkgIEdGUF9LRVJORUwpOwotCWlmIChyZXQpIHsKLQkJa2ZyZWUoc3Qp OwotCQlyZXR1cm4gRVJSX1BUUihyZXQpOwotCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycjsKIAog CXJldCA9IGk5MTVfZ2VtX2d0dF9wcmVwYXJlX3BhZ2VzKG9iaiwgc3QpOwogCWlmIChyZXQpIHsK QEAgLTM5MywyMDMgKzE1MiwyMCBAQCBfX2k5MTVfZ2VtX3VzZXJwdHJfYWxsb2NfcGFnZXMoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCWdvdG8gYWxsb2NfdGFibGU7CiAJCX0K IAotCQlrZnJlZShzdCk7Ci0JCXJldHVybiBFUlJfUFRSKHJldCk7CisJCWdvdG8gZXJyOwogCX0K IAogCXNnX3BhZ2Vfc2l6ZXMgPSBpOTE1X3NnX3BhZ2Vfc2l6ZXMoc3QtPnNnbCk7CiAKIAlfX2k5 MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMob2JqLCBzdCwgc2dfcGFnZV9zaXplcyk7CiAKLQlyZXR1 cm4gc3Q7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dv cmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKQotewotCXN0cnVjdCBnZXRfcGFnZXNfd29y ayAqd29yayA9IGNvbnRhaW5lcl9vZihfd29yaywgdHlwZW9mKCp3b3JrKSwgd29yayk7Ci0Jc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHdvcmstPm9iajsKLQljb25zdCB1bnNpZ25l ZCBsb25nIG5wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQg bG9uZyBwaW5uZWQ7Ci0Jc3RydWN0IHBhZ2UgKipwdmVjOwotCWludCByZXQ7Ci0KLQlyZXQgPSAt RU5PTUVNOwotCXBpbm5lZCA9IDA7Ci0KLQlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnBhZ2VzLCBz aXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwotCWlmIChwdmVjICE9IE5VTEwpIHsK LQkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBvYmotPnVzZXJwdHIubW0tPm1tOwotCQl1bnNpZ25l ZCBpbnQgZmxhZ3MgPSAwOwotCQlpbnQgbG9ja2VkID0gMDsKLQotCQlpZiAoIWk5MTVfZ2VtX29i amVjdF9pc19yZWFkb25seShvYmopKQotCQkJZmxhZ3MgfD0gRk9MTF9XUklURTsKLQotCQlyZXQg PSAtRUZBVUxUOwotCQlpZiAobW1nZXRfbm90X3plcm8obW0pKSB7Ci0JCQl3aGlsZSAocGlubmVk IDwgbnBhZ2VzKSB7Ci0JCQkJaWYgKCFsb2NrZWQpIHsKLQkJCQkJbW1hcF9yZWFkX2xvY2sobW0p OwotCQkJCQlsb2NrZWQgPSAxOwotCQkJCX0KLQkJCQlyZXQgPSBwaW5fdXNlcl9wYWdlc19yZW1v dGUKLQkJCQkJKG1tLAotCQkJCQkgb2JqLT51c2VycHRyLnB0ciArIHBpbm5lZCAqIFBBR0VfU0la RSwKLQkJCQkJIG5wYWdlcyAtIHBpbm5lZCwKLQkJCQkJIGZsYWdzLAotCQkJCQkgcHZlYyArIHBp bm5lZCwgTlVMTCwgJmxvY2tlZCk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCWJyZWFrOwotCi0J CQkJcGlubmVkICs9IHJldDsKLQkJCX0KLQkJCWlmIChsb2NrZWQpCi0JCQkJbW1hcF9yZWFkX3Vu bG9jayhtbSk7Ci0JCQltbXB1dChtbSk7Ci0JCX0KLQl9Ci0KLQltdXRleF9sb2NrX25lc3RlZCgm b2JqLT5tbS5sb2NrLCBJOTE1X01NX0dFVF9QQUdFUyk7Ci0JaWYgKG9iai0+dXNlcnB0ci53b3Jr ID09ICZ3b3JrLT53b3JrKSB7Ci0JCXN0cnVjdCBzZ190YWJsZSAqcGFnZXMgPSBFUlJfUFRSKHJl dCk7Ci0KLQkJaWYgKHBpbm5lZCA9PSBucGFnZXMpIHsKLQkJCXBhZ2VzID0gX19pOTE1X2dlbV91 c2VycHRyX2FsbG9jX3BhZ2VzKG9iaiwgcHZlYywKLQkJCQkJCQkgICAgICAgbnBhZ2VzKTsKLQkJ CWlmICghSVNfRVJSKHBhZ2VzKSkgewotCQkJCXBpbm5lZCA9IDA7Ci0JCQkJcGFnZXMgPSBOVUxM OwotCQkJfQotCQl9Ci0KLQkJb2JqLT51c2VycHRyLndvcmsgPSBFUlJfQ0FTVChwYWdlcyk7Ci0J CWlmIChJU19FUlIocGFnZXMpKQotCQkJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2Jq LCBmYWxzZSk7Ci0JfQotCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKLQotCXVucGluX3Vz ZXJfcGFnZXMocHZlYywgcGlubmVkKTsKLQlrdmZyZWUocHZlYyk7Ci0KLQlpOTE1X2dlbV9vYmpl Y3RfcHV0KG9iaik7Ci0JcHV0X3Rhc2tfc3RydWN0KHdvcmstPnRhc2spOwotCWtmcmVlKHdvcmsp OwotfQotCi1zdGF0aWMgc3RydWN0IHNnX3RhYmxlICoKLV9faTkxNV9nZW1fdXNlcnB0cl9nZXRf cGFnZXNfc2NoZWR1bGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlzdHJ1 Y3QgZ2V0X3BhZ2VzX3dvcmsgKndvcms7Ci0KLQkvKiBTcGF3biBhIHdvcmtlciBzbyB0aGF0IHdl IGNhbiBhY3F1aXJlIHRoZQotCSAqIHVzZXIgcGFnZXMgd2l0aG91dCBob2xkaW5nIG91ciBtdXRl eC4gQWNjZXNzCi0JICogdG8gdGhlIHVzZXIgcGFnZXMgcmVxdWlyZXMgbW1hcF9sb2NrLCBhbmQg d2UgaGF2ZQotCSAqIGEgc3RyaWN0IGxvY2sgb3JkZXJpbmcgb2YgbW1hcF9sb2NrLCBzdHJ1Y3Rf bXV0ZXggLQotCSAqIHdlIGFscmVhZHkgaG9sZCBzdHJ1Y3RfbXV0ZXggaGVyZSBhbmQgc28gY2Fu bm90Ci0JICogY2FsbCBndXAgd2l0aG91dCBlbmNvdW50ZXJpbmcgYSBsb2NrIGludmVyc2lvbi4K LQkgKgotCSAqIFVzZXJzcGFjZSB3aWxsIGtlZXAgb24gcmVwZWF0aW5nIHRoZSBvcGVyYXRpb24K LQkgKiAodGhhbmtzIHRvIEVBR0FJTikgdW50aWwgZWl0aGVyIHdlIGhpdCB0aGUgZmFzdAotCSAq IHBhdGggb3IgdGhlIHdvcmtlciBjb21wbGV0ZXMuIElmIHRoZSB3b3JrZXIgaXMKLQkgKiBjYW5j ZWxsZWQgb3Igc3VwZXJzZWRlZCwgdGhlIHRhc2sgaXMgc3RpbGwgcnVuCi0JICogYnV0IHRoZSBy ZXN1bHRzIGlnbm9yZWQuIChUaGlzIGxlYWRzIHRvCi0JICogY29tcGxpY2F0aW9ucyB0aGF0IHdl IG1heSBoYXZlIGEgc3RyYXkgb2JqZWN0Ci0JICogcmVmY291bnQgdGhhdCB3ZSBuZWVkIHRvIGJl IHdhcnkgb2Ygd2hlbgotCSAqIGNoZWNraW5nIGZvciBleGlzdGluZyBvYmplY3RzIGR1cmluZyBj cmVhdGlvbi4pCi0JICogSWYgdGhlIHdvcmtlciBlbmNvdW50ZXJzIGFuIGVycm9yLCBpdCByZXBv cnRzCi0JICogdGhhdCBlcnJvciBiYWNrIHRvIHRoaXMgZnVuY3Rpb24gdGhyb3VnaAotCSAqIG9i ai0+dXNlcnB0ci53b3JrID0gRVJSX1BUUi4KLQkgKi8KLQl3b3JrID0ga21hbGxvYyhzaXplb2Yo KndvcmspLCBHRlBfS0VSTkVMKTsKLQlpZiAod29yayA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKLQotCW9iai0+dXNlcnB0ci53b3JrID0gJndvcmstPndvcms7Ci0KLQl3b3Jr LT5vYmogPSBpOTE1X2dlbV9vYmplY3RfZ2V0KG9iaik7Ci0KLQl3b3JrLT50YXNrID0gY3VycmVu dDsKLQlnZXRfdGFza19zdHJ1Y3Qod29yay0+dGFzayk7Ci0KLQlJTklUX1dPUksoJndvcmstPndv cmssIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfd29ya2VyKTsKLQlxdWV1ZV93b3JrKHRv X2k5MTUob2JqLT5iYXNlLmRldiktPm1tLnVzZXJwdHJfd3EsICZ3b3JrLT53b3JrKTsKLQotCXJl dHVybiBFUlJfUFRSKC1FQUdBSU4pOwotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJf Z2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JY29uc3QgdW5z aWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwotCXN0 cnVjdCBtbV9zdHJ1Y3QgKm1tID0gb2JqLT51c2VycHRyLm1tLT5tbTsKLQlzdHJ1Y3QgcGFnZSAq KnB2ZWM7Ci0Jc3RydWN0IHNnX3RhYmxlICpwYWdlczsKLQlib29sIGFjdGl2ZTsKLQlpbnQgcGlu bmVkOwotCXVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSAwOwotCi0JLyogSWYgdXNlcnNwYWNlIHNo b3VsZCBlbmdpbmVlciB0aGF0IHRoZXNlIHBhZ2VzIGFyZSByZXBsYWNlZCBpbgotCSAqIHRoZSB2 bWEgYmV0d2VlbiB1cyBiaW5kaW5nIHRoaXMgcGFnZSBpbnRvIHRoZSBHVFQgYW5kIGNvbXBsZXRp b24KLQkgKiBvZiByZW5kZXJpbmcuLi4gVGhlaXIgbG9zcy4gSWYgdGhleSBjaGFuZ2UgdGhlIG1h cHBpbmcgb2YgdGhlaXIKLQkgKiBwYWdlcyB0aGV5IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGJvIHRv IHBvaW50IHRvIHRoZSBuZXcgdm1hLgotCSAqCi0JICogSG93ZXZlciwgdGhhdCBzdGlsbCBsZWF2 ZXMgb3BlbiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIHZtYQotCSAqIGJlaW5nIGNvcGllZCB1cG9u IGZvcmsuIFdoaWNoIGZhbGxzIHVuZGVyIHRoZSBzYW1lIHVzZXJzcGFjZQotCSAqIHN5bmNocm9u aXNhdGlvbiBpc3N1ZSBhcyBhIHJlZ3VsYXIgYm8sIGV4Y2VwdCB0aGF0IHRoaXMgdGltZQotCSAq IHRoZSBwcm9jZXNzIG1heSBub3QgYmUgZXhwZWN0aW5nIHRoYXQgYSBwYXJ0aWN1bGFyIHBpZWNl IG9mCi0JICogbWVtb3J5IGlzIHRpZWQgdG8gdGhlIEdQVS4KLQkgKgotCSAqIEZvcnR1bmF0ZWx5 LCB3ZSBjYW4gaG9vayBpbnRvIHRoZSBtbXVfbm90aWZpZXIgaW4gb3JkZXIgdG8KLQkgKiBkaXNj YXJkIHRoZSBwYWdlIHJlZmVyZW5jZXMgcHJpb3IgdG8gYW55dGhpbmcgbmFzdHkgaGFwcGVuaW5n Ci0JICogdG8gdGhlIHZtYSAoZGlzY2FyZCBvciBjbG9uaW5nKSB3aGljaCBzaG91bGQgcHJldmVu dCB0aGUgbW9yZQotCSAqIGVncmVnaW91cyBjYXNlcyBmcm9tIGNhdXNpbmcgaGFybS4KLQkgKi8K LQotCWlmIChvYmotPnVzZXJwdHIud29yaykgewotCQkvKiBhY3RpdmUgZmxhZyBzaG91bGQgc3Rp bGwgYmUgaGVsZCBmb3IgdGhlIHBlbmRpbmcgd29yayAqLwotCQlpZiAoSVNfRVJSKG9iai0+dXNl cnB0ci53b3JrKSkKLQkJCXJldHVybiBQVFJfRVJSKG9iai0+dXNlcnB0ci53b3JrKTsKLQkJZWxz ZQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JcHZlYyA9IE5VTEw7Ci0JcGlubmVkID0gMDsK LQotCWlmIChtbSA9PSBjdXJyZW50LT5tbSkgewotCQlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnVt X3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCi0JCQkJICAgICAgR0ZQX0tFUk5FTCB8Ci0J CQkJICAgICAgX19HRlBfTk9SRVRSWSB8Ci0JCQkJICAgICAgX19HRlBfTk9XQVJOKTsKLQkJaWYg KHB2ZWMpIHsKLQkJCS8qIGRlZmVyIHRvIHdvcmtlciBpZiBtYWxsb2MgZmFpbHMgKi8KLQkJCWlm ICghaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRvbmx5KG9iaikpCi0JCQkJZ3VwX2ZsYWdzIHw9IEZP TExfV1JJVEU7Ci0JCQlwaW5uZWQgPSBwaW5fdXNlcl9wYWdlc19mYXN0X29ubHkob2JqLT51c2Vy cHRyLnB0ciwKLQkJCQkJCQkgIG51bV9wYWdlcywgZ3VwX2ZsYWdzLAotCQkJCQkJCSAgcHZlYyk7 Ci0JCX0KLQl9Ci0KLQlhY3RpdmUgPSBmYWxzZTsKLQlpZiAocGlubmVkIDwgMCkgewotCQlwYWdl cyA9IEVSUl9QVFIocGlubmVkKTsKLQkJcGlubmVkID0gMDsKLQl9IGVsc2UgaWYgKHBpbm5lZCA8 IG51bV9wYWdlcykgewotCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2No ZWR1bGUob2JqKTsKLQkJYWN0aXZlID0gcGFnZXMgPT0gRVJSX1BUUigtRUFHQUlOKTsKLQl9IGVs c2UgewotCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhvYmosIHB2ZWMs IG51bV9wYWdlcyk7Ci0JCWFjdGl2ZSA9ICFJU19FUlIocGFnZXMpOwotCX0KLQlpZiAoYWN0aXZl KQotCQlfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIHRydWUpOwotCi0JaWYgKElT X0VSUihwYWdlcykpCi0JCXVucGluX3VzZXJfcGFnZXMocHZlYywgcGlubmVkKTsKLQlrdmZyZWUo cHZlYyk7CisJcmV0dXJuIDA7CiAKLQlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHBhZ2VzKTsKK2Vy cjoKKwlpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9kcm9wX3JlZihvYmopOworZXJyX2ZyZWU6CisJ a2ZyZWUoc3QpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01OTksOSArMTc1 LDYgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKIAlzdHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7 CiAKLQkvKiBDYW5jZWwgYW55IGluZmxpZ2h0IHdvcmsgYW5kIGZvcmNlIHRoZW0gdG8gcmVzdGFy dCB0aGVpciBndXAgKi8KLQlvYmotPnVzZXJwdHIud29yayA9IE5VTEw7Ci0JX19pOTE1X2dlbV91 c2VycHRyX3NldF9hY3RpdmUob2JqLCBmYWxzZSk7CiAJaWYgKCFwYWdlcykKIAkJcmV0dXJuOwog CkBAIC02NDEsMTkgKzIxNCwxMzQgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJfQogCiAJCW1hcmtfcGFnZV9hY2Nlc3NlZChw YWdlKTsKLQkJdW5waW5fdXNlcl9wYWdlKHBhZ2UpOwogCX0KIAlvYmotPm1tLmRpcnR5ID0gZmFs c2U7CiAKIAlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKIAlrZnJlZShwYWdlcyk7CisKKwlpOTE1X2dl bV9vYmplY3RfdXNlcnB0cl9kcm9wX3JlZihvYmopOworfQorCitzdGF0aWMgaW50IGk5MTVfZ2Vt X29iamVjdF91c2VycHRyX3VuYmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBi b29sIGdldF9wYWdlcykKK3sKKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOworCWludCBlcnI7CisK KwllcnIgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaiwgSTkxNV9HRU1fT0JKRUNUX1VOQklO RF9BQ1RJVkUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoR0VNX1dBUk5fT04o aTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSkpCisJCXJldHVybiAtRUJVU1k7 CisKKwltdXRleF9sb2NrX25lc3RlZCgmb2JqLT5tbS5sb2NrLCBJOTE1X01NX0dFVF9QQUdFUyk7 CisKKwlwYWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7CisJaWYgKCFJ U19FUlJfT1JfTlVMTChwYWdlcykpCisJCWk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzKG9iaiwg cGFnZXMpOworCisJaWYgKGdldF9wYWdlcykKKwkJZXJyID0gX19fX2k5MTVfZ2VtX29iamVjdF9n ZXRfcGFnZXMob2JqKTsKKwltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7CisKKwlyZXR1cm4g ZXJyOworfQorCitpbnQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2luaXQoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7CisJY29uc3QgdW5zaWduZWQgbG9uZyBudW1f cGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOworCXN0cnVjdCBwYWdlICoqcHZl YzsKKwl1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIG5vdGlmaWVy X3NlcTsKKwlpbnQgcGlubmVkLCByZXQ7CisKKwlpZiAob2JqLT51c2VycHRyLm5vdGlmaWVyLm1t ICE9IGN1cnJlbnQtPm1tKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IGk5MTVfZ2VtX29i amVjdF9sb2NrX2ludGVycnVwdGlibGUob2JqLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJLyogTWFrZSBzdXJlIHVzZXJwdHIgaXMgdW5ib3VuZCBmb3IgbmV4dCBhdHRlbXB0 LCBzbyB3ZSBkb24ndCB1c2Ugc3RhbGUgcGFnZXMuICovCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0 X3VzZXJwdHJfdW5iaW5kKG9iaiwgZmFsc2UpOworCWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2Jq KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbm90aWZpZXJfc2VxID0gbW11X2ludGVy dmFsX3JlYWRfYmVnaW4oJm9iai0+dXNlcnB0ci5ub3RpZmllcik7CisKKwlwdmVjID0ga3ZtYWxs b2NfYXJyYXkobnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwor CWlmICghcHZlYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWk5MTVfZ2VtX29iamVjdF9p c19yZWFkb25seShvYmopKQorCQlndXBfZmxhZ3MgfD0gRk9MTF9XUklURTsKKworCXBpbm5lZCA9 IHJldCA9IDA7CisJd2hpbGUgKHBpbm5lZCA8IG51bV9wYWdlcykgeworCQlyZXQgPSBwaW5fdXNl cl9wYWdlc19mYXN0KG9iai0+dXNlcnB0ci5wdHIgKyBwaW5uZWQgKiBQQUdFX1NJWkUsCisJCQkJ CSAgbnVtX3BhZ2VzIC0gcGlubmVkLCBndXBfZmxhZ3MsCisJCQkJCSAgJnB2ZWNbcGlubmVkXSk7 CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJcGlubmVkICs9IHJldDsKKwl9CisK KwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmk5MTUtPm1tLm5vdGlmaWVyX2xvY2sp OworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5 KCZvYmotPnVzZXJwdHIubm90aWZpZXIsCisJCSFvYmotPnVzZXJwdHIucGFnZV9yZWYgPyBub3Rp Zmllcl9zZXEgOgorCQlvYmotPnVzZXJwdHIubm90aWZpZXJfc2VxKSkgeworCQlyZXQgPSAtRUFH QUlOOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJaWYgKCFvYmotPnVzZXJwdHIucGFnZV9y ZWYrKykgeworCQlvYmotPnVzZXJwdHIucHZlYyA9IHB2ZWM7CisJCW9iai0+dXNlcnB0ci5ub3Rp Zmllcl9zZXEgPSBub3RpZmllcl9zZXE7CisKKwkJcHZlYyA9IE5VTEw7CisJfQorCitvdXRfdW5s b2NrOgorCW11dGV4X3VubG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CisKK291dDoKKwlp ZiAocHZlYykgeworCQl1bnBpbl91c2VyX3BhZ2VzKHB2ZWMsIHBpbm5lZCk7CisJCWt2ZnJlZShw dmVjKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaTkxNV9nZW1fb2JqZWN0X3VzZXJw dHJfc3VibWl0X2RvbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlpZiAo bW11X2ludGVydmFsX3JlYWRfcmV0cnkoJm9iai0+dXNlcnB0ci5ub3RpZmllciwKKwkJCQkgICAg b2JqLT51c2VycHRyLm5vdGlmaWVyX3NlcSkpIHsKKwkJLyogV2UgY29sbGlkZWQgd2l0aCB0aGUg bW11IG5vdGlmaWVyLCBuZWVkIHRvIHJldHJ5ICovCisKKwkJcmV0dXJuIC1FQUdBSU47CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2Zp bmkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlpOTE1X2dlbV9vYmplY3Rf dXNlcnB0cl9kcm9wX3JlZihvYmopOwogfQogCiBzdGF0aWMgdm9pZAogaTkxNV9nZW1fdXNlcnB0 cl9yZWxlYXNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0JaTkxNV9nZW1f dXNlcnB0cl9yZWxlYXNlX19tbXVfbm90aWZpZXIob2JqKTsKLQlpOTE1X2dlbV91c2VycHRyX3Jl bGVhc2VfX21tX3N0cnVjdChvYmopOworCW1tdV9pbnRlcnZhbF9ub3RpZmllcl9yZW1vdmUoJm9i ai0+dXNlcnB0ci5ub3RpZmllcik7CisJb2JqLT51c2VycHRyLm5vdGlmaWVyLm1tID0gTlVMTDsK IH0KIAogc3RhdGljIGludApAQCAtNjg2LDcgKzM3NCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1fdXNlcnB0cl9vcHMgPSB7CiAJLm5hbWUg PSAiaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHIiLAogCS5mbGFncyA9IEk5MTVfR0VNX09CSkVDVF9J U19TSFJJTktBQkxFIHwKIAkJIEk5MTVfR0VNX09CSkVDVF9OT19NTUFQIHwKLQkJIEk5MTVfR0VN X09CSkVDVF9BU1lOQ19DQU5DRUwgfAogCQkgSTkxNV9HRU1fT0JKRUNUX0lTX1BST1hZLAogCS5n ZXRfcGFnZXMgPSBpOTE1X2dlbV91c2VycHRyX2dldF9wYWdlcywKIAkucHV0X3BhZ2VzID0gaTkx NV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMsCkBAIC04MDcsNiArNDk0LDcgQEAgaTkxNV9nZW1fdXNl cnB0cl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCWk5MTVfZ2VtX29iamVjdF9zZXRf Y2FjaGVfY29oZXJlbmN5KG9iaiwgSTkxNV9DQUNIRV9MTEMpOwogCiAJb2JqLT51c2VycHRyLnB0 ciA9IGFyZ3MtPnVzZXJfcHRyOworCW9iai0+dXNlcnB0ci5ub3RpZmllcl9zZXEgPSBVTE9OR19N QVg7CiAJaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9VU0VSUFRSX1JFQURfT05MWSkKIAkJaTkxNV9n ZW1fb2JqZWN0X3NldF9yZWFkb25seShvYmopOwogCkBAIC04MTQsOSArNTAyLDcgQEAgaTkxNV9n ZW1fdXNlcnB0cl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCSAqIGF0IGJpbmRpbmcu IFRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGhvb2sgaW50byB0aGUgbW11X25vdGlmaWVyCiAJ ICogaW4gb3JkZXIgdG8gZGV0ZWN0IGlmIHRoZSBtbXUgaXMgZGVzdHJveWVkLgogCSAqLwotCXJl dCA9IGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW1fc3RydWN0KG9iaik7Ci0JaWYgKHJldCA9PSAw KQotCQlyZXQgPSBpOTE1X2dlbV91c2VycHRyX2luaXRfX21tdV9ub3RpZmllcihvYmopOworCXJl dCA9IGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKG9iaik7CiAJaWYgKHJldCA9 PSAwKQogCQlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZSwgJm9iai0+YmFzZSwgJmhh bmRsZSk7CiAKQEAgLTgzNSwxNSArNTIxLDkgQEAgaTkxNV9nZW1fdXNlcnB0cl9pb2N0bChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAogaW50IGk5MTVfZ2VtX2luaXRfdXNlcnB0cihzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAjaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgot CXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+bW1fbG9jayk7Ci0JaGFzaF9pbml0KGRldl9wcml2 LT5tbV9zdHJ1Y3RzKTsKLQotCWRldl9wcml2LT5tbS51c2VycHRyX3dxID0KLQkJYWxsb2Nfd29y a3F1ZXVlKCJpOTE1LXVzZXJwdHItYWNxdWlyZSIsCi0JCQkJV1FfSElHSFBSSSB8IFdRX1VOQk9V TkQsCi0JCQkJMCk7Ci0JaWYgKCFkZXZfcHJpdi0+bW0udXNlcnB0cl93cSkKLQkJcmV0dXJuIC1F Tk9NRU07CisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPm1tLm5vdGlmaWVyX2xvY2spOworCisJaTkx NV9nZW1fc2hyaW5rZXJfdGFpbnRzX211dGV4KGRldl9wcml2LCAmZGV2X3ByaXYtPm1tLm5vdGlm aWVyX2xvY2spOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKQEAgLTg1Miw2ICs1MzIsNiBAQCBpbnQg aTkxNV9nZW1faW5pdF91c2VycHRyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IHZvaWQgaTkxNV9nZW1fY2xlYW51cF91c2VycHRyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIHsKICNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCi0JZGVzdHJveV93b3JrcXVl dWUoZGV2X3ByaXYtPm1tLnVzZXJwdHJfd3EpOworCW11dGV4X2Rlc3Ryb3koJmRldl9wcml2LT5t bS5ub3RpZmllcl9sb2NrKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXgg NTY2MzZlNzI3NzZiLi42ZWIxNWI2ZTZkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAt NTkxLDExICs1OTEsMTAgQEAgc3RydWN0IGk5MTVfZ2VtX21tIHsKIAogI2lmZGVmIENPTkZJR19N TVVfTk9USUZJRVIKIAkvKioKLQkgKiBXb3JrcXVldWUgdG8gZmF1bHQgaW4gdXNlcnB0ciBwYWdl cywgZmx1c2hlZCBieSB0aGUgZXhlY2J1ZgotCSAqIHdoZW4gcmVxdWlyZWQgYnV0IG90aGVyd2lz ZSBsZWZ0IHRvIHVzZXJzcGFjZSB0byB0cnkgYWdhaW4KLQkgKiBvbiBFQUdBSU4uCisJICogbm90 aWZpZXJfbG9jayBmb3IgbW11IG5vdGlmaWVycywgbWVtb3J5IG1heSBub3QgYmUgYWxsb2NhdGVk CisJICogd2hpbGUgaG9sZGluZyB0aGlzIGxvY2suCiAJICovCi0Jc3RydWN0IHdvcmtxdWV1ZV9z dHJ1Y3QgKnVzZXJwdHJfd3E7CisJc3RydWN0IG11dGV4IG5vdGlmaWVyX2xvY2s7CiAjZW5kaWYK IAogCS8qIHNocmlua2VyIGFjY291bnRpbmcsIGFsc28gdXNlZnVsIGZvciB1c2VybGFuZCBkZWJ1 Z2dpbmcgKi8KQEAgLTk3OCw4ICs5NzcsNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJ c3RydWN0IGk5MTVfZ2d0dCBnZ3R0OyAvKiBWTSByZXByZXNlbnRpbmcgdGhlIGdsb2JhbCBhZGRy ZXNzIHNwYWNlICovCiAKIAlzdHJ1Y3QgaTkxNV9nZW1fbW0gbW07Ci0JREVDTEFSRV9IQVNIVEFC TEUobW1fc3RydWN0cywgNyk7Ci0Jc3BpbmxvY2tfdCBtbV9sb2NrOwogCiAJLyogS2VybmVsIE1v ZGVzZXR0aW5nICovCiAKLS0gCjIuMjguMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==