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 D0CADC4363D for ; Fri, 2 Oct 2020 12:59:58 +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 7150B206DC for ; Fri, 2 Oct 2020 12:59:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7150B206DC 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 D342F6E965; Fri, 2 Oct 2020 12:59:48 +0000 (UTC) Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id D39436E95D for ; Fri, 2 Oct 2020 12:59:46 +0000 (UTC) From: Maarten Lankhorst To: intel-gfx@lists.freedesktop.org Date: Fri, 2 Oct 2020 14:58:52 +0200 Message-Id: <20201002125939.50817-15-maarten.lankhorst@linux.intel.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201002125939.50817-1-maarten.lankhorst@linux.intel.com> References: <20201002125939.50817-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 14/61] drm/i915: Fix userptr so we do not have to worry about obj->mm.lock 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 ci4KClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBs aW51eC5pbnRlbC5jb20+Ci0tLQogLi4uL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1 ZmZlci5jICAgIHwgIDk3ICsrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29i amVjdC5oICAgIHwgIDM3ICstCiAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3Rf dHlwZXMuaCAgfCAgMTAgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdl cy5jICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJw dHIuYyAgIHwgNzY3ICsrKysrKy0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCAgICAgICAgICAgICAgIHwgICA5ICstCiA2IGZpbGVzIGNoYW5nZWQsIDM0MSBpbnNl cnRpb25zKCspLCA1ODEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKaW5kZXggYzMwZmE1NzkwYTQ3Li40NmVmNzExOTZmN2Qg 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 T0JKRUNUX1dSSVRFKSkgewpAQCAtOTA2LDYgKzkyMSwxMiBAQCBzdGF0aWMgaW50IGViX3ZhbGlk YXRlX3ZtYXMoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiAJCWlmIChlcnIpCiAJCQlyZXR1 cm4gZXJyOwogCisJCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfdXNlcnB0cih2bWEtPm9iaikpIHsK KwkJCWVyciA9IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9iZWdpbih2bWEtPm9iaik7 CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwogCQllcnIgPSBlYl9waW5fdm1h KGViLCBlbnRyeSwgZXYpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC05NjIs NyArOTgzLDcgQEAgZWJfZ2V0X3ZtYShjb25zdCBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwg dW5zaWduZWQgbG9uZyBoYW5kbGUpCiAJfQogfQogCi1zdGF0aWMgdm9pZCBlYl9yZWxlYXNlX3Zt YXMoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsIGJvb2wgZmluYWwpCitzdGF0aWMgdm9pZCBl Yl9yZWxlYXNlX3ZtYXMoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsIGJvb2wgZmluYWwsIGJv b2wgcmVsZWFzZV91c2VycHRyKQogewogCWNvbnN0IHVuc2lnbmVkIGludCBjb3VudCA9IGViLT5i dWZmZXJfY291bnQ7CiAJdW5zaWduZWQgaW50IGk7CkBAIC05NzYsNiArOTk3LDExIEBAIHN0YXRp YyB2b2lkIGViX3JlbGVhc2Vfdm1hcyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgYm9vbCBm aW5hbCkKIAogCQllYl91bnJlc2VydmVfdm1hKGV2KTsKIAorCQlpZiAocmVsZWFzZV91c2VycHRy ICYmIGV2LT5mbGFncyAmIF9fRVhFQ19PQkpFQ1RfVVNFUlBUUl9JTklUKSB7CisJCQlldi0+Zmxh Z3MgJj0gfl9fRVhFQ19PQkpFQ1RfVVNFUlBUUl9JTklUOworCQkJaTkxNV9nZW1fb2JqZWN0X3Vz ZXJwdHJfc3VibWl0X2Zpbmkodm1hLT5vYmopOworCQl9CisKIAkJaWYgKGZpbmFsKQogCQkJaTkx NV92bWFfcHV0KHZtYSk7CiAJfQpAQCAtMTkxMSw2ICsxOTM3LDMxIEBAIHN0YXRpYyBpbnQgZWJf cHJlZmF1bHRfcmVsb2NhdGlvbnMoY29uc3Qgc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiAJ cmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZWJfcmVpbml0X3VzZXJwdHIoc3RydWN0IGk5MTVf ZXhlY2J1ZmZlciAqZWIpCit7CisJY29uc3QgdW5zaWduZWQgaW50IGNvdW50ID0gZWItPmJ1ZmZl cl9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0OworCisJaWYgKGxpa2VseSghKGVi LT5hcmdzLT5mbGFncyAmIF9fRVhFQ19VU0VSUFRSX1VTRUQpKSkKKwkJcmV0dXJuIDA7CisKKwlm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZWJfdm1hICpldiA9ICZlYi0+ dm1hW2ldOworCisJCWlmICghaTkxNV9nZW1fb2JqZWN0X2lzX3VzZXJwdHIoZXYtPnZtYS0+b2Jq KSkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1p dF9pbml0KGV2LT52bWEtPm9iaik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWV2 LT5mbGFncyB8PSBfX0VYRUNfT0JKRUNUX1VTRVJQVFJfSU5JVDsKKwl9CisKKwlyZXR1cm4gMDsK K30KKwogc3RhdGljIG5vaW5saW5lIGludCBlYl9yZWxvY2F0ZV9wYXJzZV9zbG93KHN0cnVjdCBp OTE1X2V4ZWNidWZmZXIgKmViLAogCQkJCQkgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIHsK QEAgLTE5MjUsNyArMTk3Niw3IEBAIHN0YXRpYyBub2lubGluZSBpbnQgZWJfcmVsb2NhdGVfcGFy c2Vfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKIAl9CiAKIAkvKiBXZSBtYXkgcHJv Y2VzcyBhbm90aGVyIGV4ZWNidWZmZXIgZHVyaW5nIHRoZSB1bmxvY2suLi4gKi8KLQllYl9yZWxl YXNlX3ZtYXMoZWIsIGZhbHNlKTsKKwllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNlLCB0cnVlKTsK IAlpOTE1X2dlbV93d19jdHhfZmluaSgmZWItPnd3KTsKIAogCWlmIChycSkgewpAQCAtMTk2Niwx MCArMjAxNyw4IEBAIHN0YXRpYyBub2lubGluZSBpbnQgZWJfcmVsb2NhdGVfcGFyc2Vfc2xvdyhz dHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKIAkJZXJyID0gMDsKIAl9CiAKLSNpZmRlZiBDT05G SUdfTU1VX05PVElGSUVSCiAJaWYgKCFlcnIpCi0JCWZsdXNoX3dvcmtxdWV1ZShlYi0+aTkxNS0+ bW0udXNlcnB0cl93cSk7Ci0jZW5kaWYKKwkJZXJyID0gZWJfcmVpbml0X3VzZXJwdHIoZWIpOwog CiBlcnJfcmVsb2NrOgogCWk5MTVfZ2VtX3d3X2N0eF9pbml0KCZlYi0+d3csIHRydWUpOwpAQCAt MjAzMSw3ICsyMDgwLDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBlYl9yZWxvY2F0ZV9wYXJzZV9z bG93KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLAogCiBlcnI6CiAJaWYgKGVyciA9PSAtRURF QURMSykgewotCQllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNlKTsKKwkJZWJfcmVsZWFzZV92bWFz KGViLCBmYWxzZSwgZmFsc2UpOwogCQllcnIgPSBpOTE1X2dlbV93d19jdHhfYmFja29mZigmZWIt Pnd3KTsKIAkJaWYgKCFlcnIpCiAJCQlnb3RvIHJlcGVhdF92YWxpZGF0ZTsKQEAgLTIxMjgsNyAr MjE3Nyw3IEBAIHN0YXRpYyBpbnQgZWJfcmVsb2NhdGVfcGFyc2Uoc3RydWN0IGk5MTVfZXhlY2J1 ZmZlciAqZWIpCiAKIGVycjoKIAlpZiAoZXJyID09IC1FREVBRExLKSB7Ci0JCWViX3JlbGVhc2Vf dm1hcyhlYiwgZmFsc2UpOworCQllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNlLCBmYWxzZSk7CiAJ CWVyciA9IGk5MTVfZ2VtX3d3X2N0eF9iYWNrb2ZmKCZlYi0+d3cpOwogCQlpZiAoIWVycikKIAkJ CWdvdG8gcmV0cnk7CkBAIC0yMjAzLDYgKzIyNTIsMjcgQEAgc3RhdGljIGludCBlYl9tb3ZlX3Rv X2dwdShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIAkJCQkJCSAgICAgIGZsYWdzIHwgX19F WEVDX09CSkVDVF9OT19SRVNFUlZFKTsKIAl9CiAKKyNpZmRlZiBDT05GSUdfTU1VX05PVEZJRVIK KwlpZiAoIWVyciAmJiAoZWItPmFyZ3MtPmZsYWdzICYgX19FWEVDX1VTRVJQVFJfVVNFRCkgJiYK KwkgICAgIShlcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmViLT5pOTE1LT5tbS5ub3Rp Zmllcl9sb2NrKSkpIHsKKwkJaSA9IGNvdW50OworCisJCXdoaWxlIChpLS0pIHsKKwkJCXN0cnVj dCBlYl92bWEgKmV2ID0gJmViLT52bWFbaV07CisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqID0gZXYtPnZtYS0+b2JqOworCisJCQlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc191c2Vy cHRyKG9iaikpCisJCQkJY29udGludWU7CisKKwkJCWVyciA9IGk5MTVfZ2VtX29iamVjdF91c2Vy cHRyX3N1Ym1pdF9kb25lKG9iaik7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCQl9CisKKwkJ bXV0ZXhfdW5sb2NrKCZlYi0+aTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CisJfQorI2VuZGlmCisK IAlpZiAodW5saWtlbHkoZXJyKSkKIAkJZ290byBlcnJfc2tpcDsKIApAQCAtMzM0MSw3ICszNDEx LDcgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiAJ ZXJyID0gZWJfbG9va3VwX3ZtYXMoJmViKTsKIAlpZiAoZXJyKSB7Ci0JCWViX3JlbGVhc2Vfdm1h cygmZWIsIHRydWUpOworCQllYl9yZWxlYXNlX3ZtYXMoJmViLCB0cnVlLCB0cnVlKTsKIAkJZ290 byBlcnJfZW5naW5lOwogCX0KIApAQCAtMzQxMyw2ICszNDgzLDcgQEAgaTkxNV9nZW1fZG9fZXhl Y2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiAJdHJhY2VfaTkxNV9yZXF1ZXN0X3F1 ZXVlKGViLnJlcXVlc3QsIGViLmJhdGNoX2ZsYWdzKTsKIAllcnIgPSBlYl9zdWJtaXQoJmViLCBi YXRjaCk7CisKIGVycl9yZXF1ZXN0OgogCWk5MTVfcmVxdWVzdF9nZXQoZWIucmVxdWVzdCk7CiAJ ZWJfcmVxdWVzdF9hZGQoJmViKTsKQEAgLTM0MzMsNyArMzUwNCw3IEBAIGk5MTVfZ2VtX2RvX2V4 ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpOTE1X3JlcXVlc3RfcHV0KGViLnJl cXVlc3QpOwogCiBlcnJfdm1hOgotCWViX3JlbGVhc2Vfdm1hcygmZWIsIHRydWUpOworCWViX3Jl bGVhc2Vfdm1hcygmZWIsIHRydWUsIHRydWUpOwogCWlmIChlYi50cmFtcG9saW5lKQogCQlpOTE1 X3ZtYV91bnBpbihlYi50cmFtcG9saW5lKTsKIAlXQVJOX09OKGVyciA9PSAtRURFQURMSyk7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKaW5kZXggMzU4YzMzNDIz NDNjLi4yZmFlYmUxZmQ4YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9vYmplY3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f b2JqZWN0LmgKQEAgLTMzLDYgKzMzLDcgQEAgaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbV9m cm9tX2RhdGEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCQkJICAgICAgIGNvbnN0 IHZvaWQgKmRhdGEsIHJlc291cmNlX3NpemVfdCBzaXplKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9zaG1lbV9vcHM7CisKIHZvaWQgX19p OTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAogCQkJCSAgICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKIAkJCQkgICAgIGJvb2wgbmVl ZHNfY2xmbHVzaCk7CkBAIC0yMjIsMTIgKzIyMyw2IEBAIGk5MTVfZ2VtX29iamVjdF9uZXZlcl9t bWFwKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJcmV0dXJuIGk5MTVf Z2VtX29iamVjdF90eXBlX2hhcyhvYmosIEk5MTVfR0VNX09CSkVDVF9OT19NTUFQKTsKIH0KIAot c3RhdGljIGlubGluZSBib29sCi1pOTE1X2dlbV9vYmplY3RfbmVlZHNfYXN5bmNfY2FuY2VsKGNv bnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JcmV0dXJuIGk5MTVfZ2Vt X29iamVjdF90eXBlX2hhcyhvYmosIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwpOwotfQot CiBzdGF0aWMgaW5saW5lIGJvb2wKIGk5MTVfZ2VtX29iamVjdF9pc19mcmFtZWJ1ZmZlcihjb25z dCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewpAQCAtNTExLDE2ICs1MDYsNiBA QCB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2Zyb250YnVmZmVyKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCiB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X2ludmFsaWRhdGVfZnJv bnRidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkJICAgICAgZW51 bSBmYl9vcF9vcmlnaW4gb3JpZ2luKTsKIAotc3RhdGljIGlubGluZSBib29sCi1pOTE1X2dlbV9v YmplY3RfaXNfdXNlcnB0cihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotI2lm ZGVmIENPTkZJR19NTVVfTk9USUZJRVIKLQlyZXR1cm4gb2JqLT51c2VycHRyLm1tOwotI2Vsc2UK LQlyZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSB2b2lkCiBpOTE1X2dl bV9vYmplY3RfZmx1c2hfZnJvbnRidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKIAkJCQkgIGVudW0gZmJfb3Bfb3JpZ2luIG9yaWdpbikKQEAgLTUzNyw0ICs1MjIsMjQgQEAg aTkxNV9nZW1fb2JqZWN0X2ludmFsaWRhdGVfZnJvbnRidWZmZXIoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKIAkJX19pOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZV9mcm9udGJ1ZmZl cihvYmosIG9yaWdpbik7CiB9CiAKKyNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCitzdGF0aWMg aW5saW5lIGJvb2wKK2k5MTVfZ2VtX29iamVjdF9pc191c2VycHRyKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCit7CisJcmV0dXJuIG9iai0+dXNlcnB0ci5ub3RpZmllci5tbTsKK30K KworaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9pbml0KHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopOworaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9i ZWdpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKK2ludCBpOTE1X2dlbV9vYmpl Y3RfdXNlcnB0cl9zdWJtaXRfZG9uZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsK K3ZvaWQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2Zpbmkoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaik7CisjZWxzZQorc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX29i amVjdF9pc191c2VycHRyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopIHsgcmV0dXJu IGZhbHNlOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1 Ym1pdF9pbml0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopIHsgR0VNX0JVR19PTigx KTsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGk5MTVfZ2VtX29iamVjdF91 c2VycHRyX3N1Ym1pdF9iZWdpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKSB7IEdF TV9CVUdfT04oMSk7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIGludCBpOTE1X2dl bV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfZG9uZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKSB7IEdFTV9CVUdfT04oMSk7IHJldHVybiAtRU5PREVWOyB9CitzdGF0aWMgaW5saW5lIHZv aWQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2Zpbmkoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikgeyBHRU1fQlVHX09OKDEpOyB9CisjZW5kaWYKKwogI2VuZGlmCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKaW5kZXgg OTcwZDIwYjMwZWJkLi5kM2Y2NWRmNmQ2YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKQEAgLTcsNiArNyw4IEBACiAjaWZuZGVmIF9f STkxNV9HRU1fT0JKRUNUX1RZUEVTX0hfXwogI2RlZmluZSBfX0k5MTVfR0VNX09CSkVDVF9UWVBF U19IX18KIAorI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPgorCiAjaW5jbHVkZSA8ZHJt L2RybV9nZW0uaD4KICNpbmNsdWRlIDx1YXBpL2RybS9pOTE1X2RybS5oPgogCkBAIC0zNCw3ICsz Niw2IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyB7CiAjZGVmaW5lIEk5MTVfR0VN X09CSkVDVF9JU19TSFJJTktBQkxFCUJJVCgyKQogI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNf UFJPWFkJQklUKDMpCiAjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9OT19NTUFQCQlCSVQoNCkKLSNk ZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0FTWU5DX0NBTkNFTAlCSVQoNSkKIAogCS8qIEludGVyZmFj ZSBiZXR3ZWVuIHRoZSBHRU0gb2JqZWN0IGFuZCBpdHMgYmFja2luZyBzdG9yYWdlLgogCSAqIGdl dF9wYWdlcygpIGlzIGNhbGxlZCBvbmNlIHByaW9yIHRvIHRoZSB1c2Ugb2YgdGhlIGFzc29jaWF0 ZWQgc2V0CkBAIC0yODksMTAgKzI5MCwxMSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7 CiAjaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgogCQlzdHJ1Y3QgaTkxNV9nZW1fdXNlcnB0ciB7 CiAJCQl1aW50cHRyX3QgcHRyOworCQkJdW5zaWduZWQgbG9uZyBub3RpZmllcl9zZXE7CiAKLQkJ CXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Ci0JCQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICpt bXVfb2JqZWN0OwotCQkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCQkJc3RydWN0IG1tdV9p bnRlcnZhbF9ub3RpZmllciBub3RpZmllcjsKKwkJCXN0cnVjdCBwYWdlICoqcHZlYzsKKwkJCWlu dCBwYWdlX3JlZjsKIAkJfSB1c2VycHRyOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX3BhZ2VzLmMKaW5kZXggYThlNjg2YzAyODY1Li40Mjk0NmIxNjYxYzUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCkBAIC0yMjEsNyArMjIx LDcgQEAgaW50IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKQogCSAqIGdldF9wYWdlcyBiYWNrZW5kcyB3ZSBzaG91bGQgYmUgYmV0dGVy IGFibGUgdG8gaGFuZGxlIHRoZQogCSAqIGNhbmNlbGxhdGlvbiBvZiB0aGUgYXN5bmMgdGFzayBp biBhIG1vcmUgdW5pZm9ybSBtYW5uZXIuCiAJICovCi0JaWYgKCFwYWdlcyAmJiAhaTkxNV9nZW1f b2JqZWN0X25lZWRzX2FzeW5jX2NhbmNlbChvYmopKQorCWlmICghcGFnZXMpCiAJCXBhZ2VzID0g RVJSX1BUUigtRUlOVkFMKTsKIAogCWlmICghSVNfRVJSKHBhZ2VzKSkKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jCmluZGV4IGEyYjdmNmRiMmYxYS4uYjI1YTFh OGM1MTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNl 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+ CiAjaW5jbHVkZSA8bGludXgvc2NoZWQvbW0uaD4KQEAgLTE1LDM3NCArNDQsMTA0IEBACiAjaW5j bHVkZSAiaTkxNV9nZW1fb2JqZWN0LmgiCiAjaW5jbHVkZSAiaTkxNV9zY2F0dGVybGlzdC5oIgog Ci0jaWYgZGVmaW5lZChDT05GSUdfTU1VX05PVElGSUVSKQotCi1zdHJ1Y3QgaTkxNV9tbV9zdHJ1 Y3QgewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1OwotCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47Ci0Jc3RydWN0IGhsaXN0X25vZGUg bm9kZTsKLQlzdHJ1Y3Qga3JlZiBrcmVmOwotCXN0cnVjdCByY3Vfd29yayB3b3JrOwotfTsKLQot I2luY2x1ZGUgPGxpbnV4L2ludGVydmFsX3RyZWUuaD4KLQotc3RydWN0IGk5MTVfbW11X25vdGlm aWVyIHsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKLQlzdHJ1 Y3QgbW11X25vdGlmaWVyIG1uOwotCXN0cnVjdCByYl9yb290X2NhY2hlZCBvYmplY3RzOwotCXN0 cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Ci19OwotCi1zdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0IHsK LQlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmo7Ci0Jc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsKLX07Ci0KLXN0YXRpYyB2 b2lkIGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8pCi17Ci0JR0VNX0JVR19P TighUkJfRU1QVFlfTk9ERSgmbW8tPml0LnJiKSk7Ci0JaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1v LT5pdCwgJm1vLT5tbi0+b2JqZWN0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlbF9vYmplY3Qoc3Ry dWN0IGk5MTVfbW11X29iamVjdCAqbW8pCi17Ci0JaWYgKFJCX0VNUFRZX05PREUoJm1vLT5pdC5y YikpCi0JCXJldHVybjsKLQotCWludGVydmFsX3RyZWVfcmVtb3ZlKCZtby0+aXQsICZtby0+bW4t Pm9iamVjdHMpOwotCVJCX0NMRUFSX05PREUoJm1vLT5pdC5yYik7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1fX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLCBib29sIHZhbHVlKQotewotCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vID0gb2Jq LT51c2VycHRyLm1tdV9vYmplY3Q7Ci0KLQkvKgotCSAqIER1cmluZyBtbV9pbnZhbGlkYXRlX3Jh bmdlIHdlIG5lZWQgdG8gY2FuY2VsIGFueSB1c2VycHRyIHRoYXQKLQkgKiBvdmVybGFwcyB0aGUg cmFuZ2UgYmVpbmcgaW52YWxpZGF0ZWQuIERvaW5nIHNvIHJlcXVpcmVzIHRoZQotCSAqIHN0cnVj dF9tdXRleCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQotCSAq IHJlY3Vyc2lvbiwgdGhlIHVzZXIgbXVzdCBhbGlhcyB0aGUgdXNlcnB0ciBhZGRyZXNzIHNwYWNl IHdpdGgKLQkgKiBhIEdUVCBtbWFwcGluZyAocG9zc2libGUgd2l0aCBhIE1BUF9GSVhFRCkgLSB0 aGVuIHdoZW4gd2UgaGF2ZQotCSAqIHRvIGludmFsaWRhdGUgdGhhdCBtbWFwaW5nLCBtbV9pbnZh bGlkYXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCi0JICogdGhlIHVzZXJwdHIgYWRkcmVzcyAqYW5k KiB0aGUgc3RydWN0X211dGV4IGhlbGQuICBUbyBwcmV2ZW50IHRoYXQKLQkgKiB3ZSBzZXQgYSBm bGFnIHVuZGVyIHRoZSBpOTE1X21tdV9ub3RpZmllciBzcGlubG9jayB0byBpbmRpY2F0ZQotCSAq IHdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdmFsaWQuCi0JICovCi0JaWYgKCFtbykKLQkJcmV0dXJu OwotCi0Jc3Bpbl9sb2NrKCZtby0+bW4tPmxvY2spOwotCWlmICh2YWx1ZSkKLQkJYWRkX29iamVj dChtbyk7Ci0JZWxzZQotCQlkZWxfb2JqZWN0KG1vKTsKLQlzcGluX3VubG9jaygmbW8tPm1uLT5s b2NrKTsKLX0KKyNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCiAKLXN0YXRpYyBpbnQKLXVzZXJw dHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICpfbW4sCi0J CQkJICBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSkKKy8qKgorICogaTkx NV9nZW1fdXNlcnB0cl9pbnZhbGlkYXRlIC0gY2FsbGJhY2sgdG8gbm90aWZ5IGFib3V0IG1tIGNo YW5nZQorICoKKyAqIEBtbmk6IHRoZSByYW5nZSAobW0pIGlzIGFib3V0IHRvIHVwZGF0ZQorICog QHJhbmdlOiBkZXRhaWxzIG9uIHRoZSBpbnZhbGlkYXRpb24KKyAqIEBjdXJfc2VxOiBWYWx1ZSB0 byBwYXNzIHRvIG1tdV9pbnRlcnZhbF9zZXRfc2VxKCkKKyAqCisgKiBCbG9jayBmb3Igb3BlcmF0 aW9ucyBvbiBCT3MgdG8gZmluaXNoIGFuZCBtYXJrIHBhZ2VzIGFzIGFjY2Vzc2VkIGFuZAorICog cG90ZW50aWFsbHkgZGlydHkuCisgKi8KK3N0YXRpYyBib29sIGk5MTVfZ2VtX3VzZXJwdHJfaW52 YWxpZGF0ZShzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICptbmksCisJCQkJCWNvbnN0IHN0 cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlLAorCQkJCQl1bnNpZ25lZCBsb25nIGN1cl9z ZXEpCiB7Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbiA9Ci0JCWNvbnRhaW5lcl9vZihf bW4sIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciwgbW4pOwotCXN0cnVjdCBpbnRlcnZhbF90cmVl X25vZGUgKml0OwotCXVuc2lnbmVkIGxvbmcgZW5kOwotCWludCByZXQgPSAwOwotCi0JaWYgKFJC X0VNUFRZX1JPT1QoJm1uLT5vYmplY3RzLnJiX3Jvb3QpKQotCQlyZXR1cm4gMDsKLQotCS8qIGlu dGVydmFsIHJhbmdlcyBhcmUgaW5jbHVzaXZlLCBidXQgaW52YWxpZGF0ZSByYW5nZSBpcyBleGNs dXNpdmUgKi8KLQllbmQgPSByYW5nZS0+ZW5kIC0gMTsKLQotCXNwaW5fbG9jaygmbW4tPmxvY2sp OwotCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0cywgcmFuZ2UtPnN0 YXJ0LCBlbmQpOwotCXdoaWxlIChpdCkgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqOwotCi0JCWlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkpIHsKLQkJ CXJldCA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQorCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmogPSBjb250YWluZXJfb2YobW5pLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwg dXNlcnB0ci5ub3RpZmllcik7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19p OTE1KG9iai0+YmFzZS5kZXYpOworCWxvbmcgcjsKIAotCQkvKgotCQkgKiBUaGUgbW11X29iamVj dCBpcyByZWxlYXNlZCBsYXRlIHdoZW4gZGVzdHJveWluZyB0aGUKLQkJICogR0VNIG9iamVjdCBz byBpdCBpcyBlbnRpcmVseSBwb3NzaWJsZSB0byBnYWluIGEKLQkJICogcmVmZXJlbmNlIG9uIGFu IG9iamVjdCBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZAotCQkgKiBzaW5jZSBvdXIgc2Vy aWFsaXNhdGlvbiBpcyB2aWEgdGhlIHNwaW5sb2NrIGFuZCBub3QKLQkJICogdGhlIHN0cnVjdF9t dXRleCAtIGFuZCBjb25zZXF1ZW50bHkgdXNlIGl0IGFmdGVyIGl0Ci0JCSAqIGlzIGZyZWVkIGFu ZCB0aGVuIGRvdWJsZSBmcmVlIGl0LiBUbyBwcmV2ZW50IHRoYXQKLQkJICogdXNlLWFmdGVyLWZy ZWUgd2Ugb25seSBhY3F1aXJlIGEgcmVmZXJlbmNlIG9uIHRoZQotCQkgKiBvYmplY3QgaWYgaXQg aXMgbm90IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4KLQkJICovCi0JCW9iaiA9 IGNvbnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpLT5vYmo7Ci0JCWlm ICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJm9iai0+YmFzZS5yZWZjb3VudCkpIHsKLQkJCWl0ID0g aW50ZXJ2YWxfdHJlZV9pdGVyX25leHQoaXQsIHJhbmdlLT5zdGFydCwgZW5kKTsKLQkJCWNvbnRp bnVlOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7CisJaWYgKCFtbXVfbm90aWZpZXJf cmFuZ2VfYmxvY2thYmxlKHJhbmdlKSkKKwkJcmV0dXJuIGZhbHNlOwogCi0JCXJldCA9IGk5MTVf Z2VtX29iamVjdF91bmJpbmQob2JqLAotCQkJCQkgICAgIEk5MTVfR0VNX09CSkVDVF9VTkJJTkRf QUNUSVZFIHwKLQkJCQkJICAgICBJOTE1X0dFTV9PQkpFQ1RfVU5CSU5EX0JBUlJJRVIpOwotCQlp ZiAocmV0ID09IDApCi0JCQlyZXQgPSBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsK LQkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsK KwltdXRleF9sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9sb2NrKTsKIAotCQlzcGluX2xvY2soJm1u LT5sb2NrKTsKKwltbXVfaW50ZXJ2YWxfc2V0X3NlcShtbmksIGN1cl9zZXEpOwogCi0JCS8qCi0J CSAqIEFzIHdlIGRvIG5vdCAoeWV0KSBwcm90ZWN0IHRoZSBtbXUgZnJvbSBjb25jdXJyZW50IGlu c2VydGlvbgotCQkgKiBvdmVyIHRoaXMgcmFuZ2UsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0 IHRoaXMgc2VhcmNoIHdpbGwKLQkJICogdGVybWluYXRlIGdpdmVuIGEgcGF0aG9sb2dpYyB3b3Jr bG9hZC4KLQkJICovCi0JCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0 cywgcmFuZ2UtPnN0YXJ0LCBlbmQpOwotCX0KLQlzcGluX3VubG9jaygmbW4tPmxvY2spOworCW11 dGV4X3VubG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CiAKLQlyZXR1cm4gcmV0OworCS8q IHdlIHdpbGwgdW5iaW5kIG9uIG5leHQgc3VibWlzc2lvbiwgc3RpbGwgaGF2ZSB1c2VycHRyIHBp bnMgKi8KKwlyID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShvYmotPmJhc2UucmVzdiwgdHJ1 ZSwgZmFsc2UsCisJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCWlmIChyIDw9IDAp CisJCWRybV9lcnIoJmk5MTUtPmRybSwgIiglbGQpIGZhaWxlZCB0byB3YWl0IGZvciBpZGxlXG4i LCByKTsKIAorCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3Rp Zmllcl9vcHMgaTkxNV9nZW1fdXNlcnB0cl9ub3RpZmllciA9IHsKLQkuaW52YWxpZGF0ZV9yYW5n ZV9zdGFydCA9IHVzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBpOTE1X2dlbV91c2VycHRyX25vdGlm aWVyX29wcyA9IHsKKwkuaW52YWxpZGF0ZSA9IGk5MTVfZ2VtX3VzZXJwdHJfaW52YWxpZGF0ZSwK IH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKgotaTkxNV9tbXVfbm90aWZp ZXJfY3JlYXRlKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IGk5MTVfbW11 X25vdGlmaWVyICptbjsKLQotCW1uID0ga21hbGxvYyhzaXplb2YoKm1uKSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKG1uID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0Jc3Bpbl9s b2NrX2luaXQoJm1uLT5sb2NrKTsKLQltbi0+bW4ub3BzID0gJmk5MTVfZ2VtX3VzZXJwdHJfbm90 aWZpZXI7Ci0JbW4tPm9iamVjdHMgPSBSQl9ST09UX0NBQ0hFRDsKLQltbi0+bW0gPSBtbTsKLQot CXJldHVybiBtbjsKLX0KLQotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9f bW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0Jc3RydWN0 IGk5MTVfbW11X29iamVjdCAqbW87Ci0KLQltbyA9IGZldGNoX2FuZF96ZXJvKCZvYmotPnVzZXJw dHIubW11X29iamVjdCk7Ci0JaWYgKCFtbykKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrKCZtby0+ bW4tPmxvY2spOwotCWRlbF9vYmplY3QobW8pOwotCXNwaW5fdW5sb2NrKCZtby0+bW4tPmxvY2sp OwotCWtmcmVlKG1vKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqCi1p OTE1X21tdV9ub3RpZmllcl9maW5kKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCi17Ci0Jc3Ry dWN0IGk5MTVfbW11X25vdGlmaWVyICptbiwgKm9sZDsKLQlpbnQgZXJyOwotCi0JbW4gPSBSRUFE X09OQ0UobW0tPm1uKTsKLQlpZiAobGlrZWx5KG1uKSkKLQkJcmV0dXJuIG1uOwotCi0JbW4gPSBp OTE1X21tdV9ub3RpZmllcl9jcmVhdGUobW0pOwotCWlmIChJU19FUlIobW4pKQotCQlyZXR1cm4g bW47Ci0KLQllcnIgPSBtbXVfbm90aWZpZXJfcmVnaXN0ZXIoJm1uLT5tbiwgbW0tPm1tKTsKLQlp ZiAoZXJyKSB7Ci0JCWtmcmVlKG1uKTsKLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKLQl9Ci0KLQlv bGQgPSBjbXB4Y2hnKCZtbS0+bW4sIE5VTEwsIG1uKTsKLQlpZiAob2xkKSB7Ci0JCW1tdV9ub3Rp Zmllcl91bnJlZ2lzdGVyKCZtbi0+bW4sIG1tLT5tbSk7Ci0JCWtmcmVlKG1uKTsKLQkJbW4gPSBv bGQ7Ci0JfQotCi0JcmV0dXJuIG1uOwotfQotCiBzdGF0aWMgaW50CiBpOTE1X2dlbV91c2VycHRy X2luaXRfX21tdV9ub3RpZmllcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewot CXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47Ci0Jc3RydWN0IGk5MTVfbW11X29iamVjdCAq bW87Ci0KLQlpZiAoR0VNX1dBUk5fT04oIW9iai0+dXNlcnB0ci5tbSkpCi0JCXJldHVybiAtRUlO VkFMOwotCi0JbW4gPSBpOTE1X21tdV9ub3RpZmllcl9maW5kKG9iai0+dXNlcnB0ci5tbSk7Ci0J aWYgKElTX0VSUihtbikpCi0JCXJldHVybiBQVFJfRVJSKG1uKTsKLQotCW1vID0ga3phbGxvYyhz aXplb2YoKm1vKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0K LQltby0+bW4gPSBtbjsKLQltby0+b2JqID0gb2JqOwotCW1vLT5pdC5zdGFydCA9IG9iai0+dXNl cnB0ci5wdHI7Ci0JbW8tPml0Lmxhc3QgPSBvYmotPnVzZXJwdHIucHRyICsgb2JqLT5iYXNlLnNp emUgLSAxOwotCVJCX0NMRUFSX05PREUoJm1vLT5pdC5yYik7Ci0KLQlvYmotPnVzZXJwdHIubW11 X29iamVjdCA9IG1vOwotCXJldHVybiAwOworCXJldHVybiBtbXVfaW50ZXJ2YWxfbm90aWZpZXJf aW5zZXJ0KCZvYmotPnVzZXJwdHIubm90aWZpZXIsIGN1cnJlbnQtPm1tLAorCQkJCQkgICAgb2Jq LT51c2VycHRyLnB0ciwgb2JqLT5iYXNlLnNpemUsCisJCQkJCSAgICAmaTkxNV9nZW1fdXNlcnB0 cl9ub3RpZmllcl9vcHMpOwogfQogCi1zdGF0aWMgdm9pZAotaTkxNV9tbXVfbm90aWZpZXJfZnJl ZShzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uLAotCQkgICAgICAgc3RydWN0IG1tX3N0cnVj dCAqbW0pCi17Ci0JaWYgKG1uID09IE5VTEwpCi0JCXJldHVybjsKLQotCW1tdV9ub3RpZmllcl91 bnJlZ2lzdGVyKCZtbi0+bW4sIG1tKTsKLQlrZnJlZShtbik7Ci19Ci0KLQotc3RhdGljIHN0cnVj dCBpOTE1X21tX3N0cnVjdCAqCi1fX2k5MTVfbW1fc3RydWN0X2ZpbmQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsIHN0cnVjdCBtbV9zdHJ1Y3QgKnJlYWwpCi17Ci0Jc3RydWN0IGk5MTVf bW1fc3RydWN0ICppdCwgKm1tID0gTlVMTDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQloYXNoX2Zv cl9lYWNoX3Bvc3NpYmxlX3JjdShpOTE1LT5tbV9zdHJ1Y3RzLAotCQkJCSAgIGl0LCBub2RlLAot CQkJCSAgICh1bnNpZ25lZCBsb25nKXJlYWwpCi0JCWlmIChpdC0+bW0gPT0gcmVhbCAmJiBrcmVm X2dldF91bmxlc3NfemVybygmaXQtPmtyZWYpKSB7Ci0JCQltbSA9IGl0OwotCQkJYnJlYWs7Ci0J CX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXJldHVybiBtbTsKLX0KLQotc3RhdGljIGludAot aTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbV9zdHJ1Y3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF91c2VycHRyX2Ryb3BfcmVmKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwotCXN0cnVjdCBpOTE1X21tX3N0cnVj dCAqbW0sICpuZXc7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBEdXJpbmcgcmVsZWFzZSBvZiB0aGUg R0VNIG9iamVjdCB3ZSBob2xkIHRoZSBzdHJ1Y3RfbXV0ZXguIFRoaXMKLQkgKiBwcmVjbHVkZXMg dXMgZnJvbSBjYWxsaW5nIG1tcHV0KCkgYXQgdGhhdCB0aW1lIGFzIHRoYXQgbWF5IGJlCi0JICog dGhlIGxhc3QgcmVmZXJlbmNlIGFuZCBzbyBjYWxsIGV4aXRfbW1hcCgpLiBleGl0X21tYXAoKSB3 aWxsCi0JICogYXR0ZW1wdCB0byByZWFwIHRoZSB2bWEsIGFuZCBpZiB3ZSB3ZXJlIGhvbGRpbmcg YSBHVFQgbW1hcAotCSAqIHdvdWxkIHRoZW4gY2FsbCBkcm1fZ2VtX3ZtX2Nsb3NlKCkgYW5kIGF0 dGVtcHQgdG8gcmVhY3F1aXJlCi0JICogdGhlIHN0cnVjdCBtdXRleC4gU28gaW4gb3JkZXIgdG8g YXZvaWQgdGhhdCByZWN1cnNpb24sIHdlIGhhdmUKLQkgKiB0byBkZWZlciByZWxlYXNpbmcgdGhl IG1tIHJlZmVyZW5jZSB1bnRpbCBhZnRlciB3ZSBkcm9wIHRoZQotCSAqIHN0cnVjdF9tdXRleCwg aS5lLiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgd29ya2VyIHRvIGRvIHRoZSBjbGVhbgotCSAqIHVw LgotCSAqLwotCW1tID0gX19pOTE1X21tX3N0cnVjdF9maW5kKGk5MTUsIGN1cnJlbnQtPm1tKTsK LQlpZiAobW0pCi0JCWdvdG8gb3V0OwogCi0JbmV3ID0ga21hbGxvYyhzaXplb2YoKm1tKSwgR0ZQ X0tFUk5FTCk7Ci0JaWYgKCFuZXcpCi0JCXJldHVybiAtRU5PTUVNOworCW11dGV4X2xvY2soJmk5 MTUtPm1tLm5vdGlmaWVyX2xvY2spOworCWlmICghLS1vYmotPnVzZXJwdHIucGFnZV9yZWYpIHsK KwkJY29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdF X1NISUZUOwogCi0Ja3JlZl9pbml0KCZuZXctPmtyZWYpOwotCW5ldy0+aTkxNSA9IHRvX2k5MTUo b2JqLT5iYXNlLmRldik7Ci0JbmV3LT5tbSA9IGN1cnJlbnQtPm1tOwotCW5ldy0+bW4gPSBOVUxM OwotCi0Jc3Bpbl9sb2NrKCZpOTE1LT5tbV9sb2NrKTsKLQltbSA9IF9faTkxNV9tbV9zdHJ1Y3Rf ZmluZChpOTE1LCBjdXJyZW50LT5tbSk7Ci0JaWYgKCFtbSkgewotCQloYXNoX2FkZF9yY3UoaTkx NS0+bW1fc3RydWN0cywKLQkJCSAgICAgJm5ldy0+bm9kZSwKLQkJCSAgICAgKHVuc2lnbmVkIGxv bmcpbmV3LT5tbSk7Ci0JCW1tZ3JhYihjdXJyZW50LT5tbSk7Ci0JCW1tID0gbmV3OworCQl1bnBp bl91c2VyX3BhZ2VzKG9iai0+dXNlcnB0ci5wdmVjLCBudW1fcGFnZXMpOworCQlrZnJlZShvYmot PnVzZXJwdHIucHZlYyk7CisJCW9iai0+dXNlcnB0ci5wdmVjID0gTlVMTDsKIAl9Ci0Jc3Bpbl91 bmxvY2soJmk5MTUtPm1tX2xvY2spOwotCWlmIChtbSAhPSBuZXcpCi0JCWtmcmVlKG5ldyk7Ci0K LW91dDoKLQlvYmotPnVzZXJwdHIubW0gPSBtbTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMg dm9pZAotX19pOTE1X21tX3N0cnVjdF9mcmVlX193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQotewotCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0gPSBjb250YWluZXJfb2Yod29yaywg dHlwZW9mKCptbSksIHdvcmsud29yayk7Ci0KLQlpOTE1X21tdV9ub3RpZmllcl9mcmVlKG1tLT5t biwgbW0tPm1tKTsKLQltbWRyb3AobW0tPm1tKTsKLQlrZnJlZShtbSk7CisJR0VNX0JVR19PTihv YmotPnVzZXJwdHIucGFnZV9yZWYgPCAwKTsKKwltdXRleF91bmxvY2soJmk5MTUtPm1tLm5vdGlm aWVyX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZAotX19pOTE1X21tX3N0cnVjdF9mcmVlKHN0cnVj dCBrcmVmICprcmVmKQotewotCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0gPSBjb250YWluZXJf b2Yoa3JlZiwgdHlwZW9mKCptbSksIGtyZWYpOwotCi0Jc3Bpbl9sb2NrKCZtbS0+aTkxNS0+bW1f bG9jayk7Ci0JaGFzaF9kZWxfcmN1KCZtbS0+bm9kZSk7Ci0Jc3Bpbl91bmxvY2soJm1tLT5pOTE1 LT5tbV9sb2NrKTsKLQotCUlOSVRfUkNVX1dPUksoJm1tLT53b3JrLCBfX2k5MTVfbW1fc3RydWN0 X2ZyZWVfX3dvcmtlcik7Ci0JcXVldWVfcmN1X3dvcmsoc3lzdGVtX3dxLCAmbW0tPndvcmspOwot fQotCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fdXNlcnB0cl9yZWxlYXNlX19tbV9zdHJ1Y3Qoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlpZiAob2JqLT51c2VycHRyLm1tID09 IE5VTEwpCi0JCXJldHVybjsKLQotCWtyZWZfcHV0KCZvYmotPnVzZXJwdHIubW0tPmtyZWYsIF9f aTkxNV9tbV9zdHJ1Y3RfZnJlZSk7Ci0Jb2JqLT51c2VycHRyLm1tID0gTlVMTDsKLX0KLQotc3Ry dWN0IGdldF9wYWdlc193b3JrIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLX07 Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKgotX19pOTE1X2dlbV91c2VycHRyX2FsbG9jX3Bh Z2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgICAgc3RydWN0IHBh Z2UgKipwdmVjLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKK3N0YXRpYyBpbnQgaTkxNV9nZW1f dXNlcnB0cl9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7CisJ Y29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NI SUZUOwogCXVuc2lnbmVkIGludCBtYXhfc2VnbWVudCA9IGk5MTVfc2dfc2VnbWVudF9zaXplKCk7 CiAJc3RydWN0IHNnX3RhYmxlICpzdDsKIAl1bnNpZ25lZCBpbnQgc2dfcGFnZV9zaXplczsKKwlz dHJ1Y3QgcGFnZSAqKnB2ZWM7CiAJaW50IHJldDsKIAogCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0 KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJ CXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7 CisJaWYgKEdFTV9XQVJOX09OKCFvYmotPnVzZXJwdHIucGFnZV9yZWYpKSB7CisJCW11dGV4X3Vu bG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8g ZXJyX2ZyZWU7CisJfQorCisJb2JqLT51c2VycHRyLnBhZ2VfcmVmKys7CisJcHZlYyA9IG9iai0+ dXNlcnB0ci5wdmVjOworCW11dGV4X3VubG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CiAK IGFsbG9jX3RhYmxlOgogCXJldCA9IF9fc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcyhzdCwgcHZl YywgbnVtX3BhZ2VzLAogCQkJCQkgIDAsIG51bV9wYWdlcyA8PCBQQUdFX1NISUZULAogCQkJCQkg IG1heF9zZWdtZW50LAogCQkJCQkgIEdGUF9LRVJORUwpOwotCWlmIChyZXQpIHsKLQkJa2ZyZWUo c3QpOwotCQlyZXR1cm4gRVJSX1BUUihyZXQpOwotCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycjsK IAogCXJldCA9IGk5MTVfZ2VtX2d0dF9wcmVwYXJlX3BhZ2VzKG9iaiwgc3QpOwogCWlmIChyZXQp IHsKQEAgLTM5MywyMDMgKzE1MiwyMCBAQCBfX2k5MTVfZ2VtX3VzZXJwdHJfYWxsb2NfcGFnZXMo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCWdvdG8gYWxsb2NfdGFibGU7CiAJ CX0KIAotCQlrZnJlZShzdCk7Ci0JCXJldHVybiBFUlJfUFRSKHJldCk7CisJCWdvdG8gZXJyOwog CX0KIAogCXNnX3BhZ2Vfc2l6ZXMgPSBpOTE1X3NnX3BhZ2Vfc2l6ZXMoc3QtPnNnbCk7CiAKIAlf X2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMob2JqLCBzdCwgc2dfcGFnZV9zaXplcyk7CiAKLQly ZXR1cm4gc3Q7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2Vz X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKQotewotCXN0cnVjdCBnZXRfcGFnZXNf d29yayAqd29yayA9IGNvbnRhaW5lcl9vZihfd29yaywgdHlwZW9mKCp3b3JrKSwgd29yayk7Ci0J c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHdvcmstPm9iajsKLQljb25zdCB1bnNp Z25lZCBsb25nIG5wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7Ci0JdW5zaWdu ZWQgbG9uZyBwaW5uZWQ7Ci0Jc3RydWN0IHBhZ2UgKipwdmVjOwotCWludCByZXQ7Ci0KLQlyZXQg PSAtRU5PTUVNOwotCXBpbm5lZCA9IDA7Ci0KLQlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnBhZ2Vz LCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwotCWlmIChwdmVjICE9IE5VTEwp IHsKLQkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBvYmotPnVzZXJwdHIubW0tPm1tOwotCQl1bnNp Z25lZCBpbnQgZmxhZ3MgPSAwOwotCQlpbnQgbG9ja2VkID0gMDsKLQotCQlpZiAoIWk5MTVfZ2Vt X29iamVjdF9pc19yZWFkb25seShvYmopKQotCQkJZmxhZ3MgfD0gRk9MTF9XUklURTsKLQotCQly ZXQgPSAtRUZBVUxUOwotCQlpZiAobW1nZXRfbm90X3plcm8obW0pKSB7Ci0JCQl3aGlsZSAocGlu bmVkIDwgbnBhZ2VzKSB7Ci0JCQkJaWYgKCFsb2NrZWQpIHsKLQkJCQkJbW1hcF9yZWFkX2xvY2so bW0pOwotCQkJCQlsb2NrZWQgPSAxOwotCQkJCX0KLQkJCQlyZXQgPSBwaW5fdXNlcl9wYWdlc19y ZW1vdGUKLQkJCQkJKG1tLAotCQkJCQkgb2JqLT51c2VycHRyLnB0ciArIHBpbm5lZCAqIFBBR0Vf U0laRSwKLQkJCQkJIG5wYWdlcyAtIHBpbm5lZCwKLQkJCQkJIGZsYWdzLAotCQkJCQkgcHZlYyAr IHBpbm5lZCwgTlVMTCwgJmxvY2tlZCk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCWJyZWFrOwot Ci0JCQkJcGlubmVkICs9IHJldDsKLQkJCX0KLQkJCWlmIChsb2NrZWQpCi0JCQkJbW1hcF9yZWFk X3VubG9jayhtbSk7Ci0JCQltbXB1dChtbSk7Ci0JCX0KLQl9Ci0KLQltdXRleF9sb2NrX25lc3Rl ZCgmb2JqLT5tbS5sb2NrLCBJOTE1X01NX0dFVF9QQUdFUyk7Ci0JaWYgKG9iai0+dXNlcnB0ci53 b3JrID09ICZ3b3JrLT53b3JrKSB7Ci0JCXN0cnVjdCBzZ190YWJsZSAqcGFnZXMgPSBFUlJfUFRS KHJldCk7Ci0KLQkJaWYgKHBpbm5lZCA9PSBucGFnZXMpIHsKLQkJCXBhZ2VzID0gX19pOTE1X2dl bV91c2VycHRyX2FsbG9jX3BhZ2VzKG9iaiwgcHZlYywKLQkJCQkJCQkgICAgICAgbnBhZ2VzKTsK LQkJCWlmICghSVNfRVJSKHBhZ2VzKSkgewotCQkJCXBpbm5lZCA9IDA7Ci0JCQkJcGFnZXMgPSBO VUxMOwotCQkJfQotCQl9Ci0KLQkJb2JqLT51c2VycHRyLndvcmsgPSBFUlJfQ0FTVChwYWdlcyk7 Ci0JCWlmIChJU19FUlIocGFnZXMpKQotCQkJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUo b2JqLCBmYWxzZSk7Ci0JfQotCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKLQotCXVucGlu X3VzZXJfcGFnZXMocHZlYywgcGlubmVkKTsKLQlrdmZyZWUocHZlYyk7Ci0KLQlpOTE1X2dlbV9v YmplY3RfcHV0KG9iaik7Ci0JcHV0X3Rhc2tfc3RydWN0KHdvcmstPnRhc2spOwotCWtmcmVlKHdv cmspOwotfQotCi1zdGF0aWMgc3RydWN0IHNnX3RhYmxlICoKLV9faTkxNV9nZW1fdXNlcnB0cl9n ZXRfcGFnZXNfc2NoZWR1bGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlz dHJ1Y3QgZ2V0X3BhZ2VzX3dvcmsgKndvcms7Ci0KLQkvKiBTcGF3biBhIHdvcmtlciBzbyB0aGF0 IHdlIGNhbiBhY3F1aXJlIHRoZQotCSAqIHVzZXIgcGFnZXMgd2l0aG91dCBob2xkaW5nIG91ciBt dXRleC4gQWNjZXNzCi0JICogdG8gdGhlIHVzZXIgcGFnZXMgcmVxdWlyZXMgbW1hcF9sb2NrLCBh bmQgd2UgaGF2ZQotCSAqIGEgc3RyaWN0IGxvY2sgb3JkZXJpbmcgb2YgbW1hcF9sb2NrLCBzdHJ1 Y3RfbXV0ZXggLQotCSAqIHdlIGFscmVhZHkgaG9sZCBzdHJ1Y3RfbXV0ZXggaGVyZSBhbmQgc28g Y2Fubm90Ci0JICogY2FsbCBndXAgd2l0aG91dCBlbmNvdW50ZXJpbmcgYSBsb2NrIGludmVyc2lv bi4KLQkgKgotCSAqIFVzZXJzcGFjZSB3aWxsIGtlZXAgb24gcmVwZWF0aW5nIHRoZSBvcGVyYXRp b24KLQkgKiAodGhhbmtzIHRvIEVBR0FJTikgdW50aWwgZWl0aGVyIHdlIGhpdCB0aGUgZmFzdAot CSAqIHBhdGggb3IgdGhlIHdvcmtlciBjb21wbGV0ZXMuIElmIHRoZSB3b3JrZXIgaXMKLQkgKiBj YW5jZWxsZWQgb3Igc3VwZXJzZWRlZCwgdGhlIHRhc2sgaXMgc3RpbGwgcnVuCi0JICogYnV0IHRo ZSByZXN1bHRzIGlnbm9yZWQuIChUaGlzIGxlYWRzIHRvCi0JICogY29tcGxpY2F0aW9ucyB0aGF0 IHdlIG1heSBoYXZlIGEgc3RyYXkgb2JqZWN0Ci0JICogcmVmY291bnQgdGhhdCB3ZSBuZWVkIHRv IGJlIHdhcnkgb2Ygd2hlbgotCSAqIGNoZWNraW5nIGZvciBleGlzdGluZyBvYmplY3RzIGR1cmlu ZyBjcmVhdGlvbi4pCi0JICogSWYgdGhlIHdvcmtlciBlbmNvdW50ZXJzIGFuIGVycm9yLCBpdCBy ZXBvcnRzCi0JICogdGhhdCBlcnJvciBiYWNrIHRvIHRoaXMgZnVuY3Rpb24gdGhyb3VnaAotCSAq IG9iai0+dXNlcnB0ci53b3JrID0gRVJSX1BUUi4KLQkgKi8KLQl3b3JrID0ga21hbGxvYyhzaXpl b2YoKndvcmspLCBHRlBfS0VSTkVMKTsKLQlpZiAod29yayA9PSBOVUxMKQotCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKLQotCW9iai0+dXNlcnB0ci53b3JrID0gJndvcmstPndvcms7Ci0KLQl3 b3JrLT5vYmogPSBpOTE1X2dlbV9vYmplY3RfZ2V0KG9iaik7Ci0KLQl3b3JrLT50YXNrID0gY3Vy cmVudDsKLQlnZXRfdGFza19zdHJ1Y3Qod29yay0+dGFzayk7Ci0KLQlJTklUX1dPUksoJndvcmst PndvcmssIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfd29ya2VyKTsKLQlxdWV1ZV93b3Jr KHRvX2k5MTUob2JqLT5iYXNlLmRldiktPm1tLnVzZXJwdHJfd3EsICZ3b3JrLT53b3JrKTsKLQot CXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOwotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJw dHJfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JY29uc3Qg dW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwot CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gb2JqLT51c2VycHRyLm1tLT5tbTsKLQlzdHJ1Y3QgcGFn ZSAqKnB2ZWM7Ci0Jc3RydWN0IHNnX3RhYmxlICpwYWdlczsKLQlib29sIGFjdGl2ZTsKLQlpbnQg cGlubmVkOwotCXVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSAwOwotCi0JLyogSWYgdXNlcnNwYWNl IHNob3VsZCBlbmdpbmVlciB0aGF0IHRoZXNlIHBhZ2VzIGFyZSByZXBsYWNlZCBpbgotCSAqIHRo ZSB2bWEgYmV0d2VlbiB1cyBiaW5kaW5nIHRoaXMgcGFnZSBpbnRvIHRoZSBHVFQgYW5kIGNvbXBs ZXRpb24KLQkgKiBvZiByZW5kZXJpbmcuLi4gVGhlaXIgbG9zcy4gSWYgdGhleSBjaGFuZ2UgdGhl IG1hcHBpbmcgb2YgdGhlaXIKLQkgKiBwYWdlcyB0aGV5IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGJv IHRvIHBvaW50IHRvIHRoZSBuZXcgdm1hLgotCSAqCi0JICogSG93ZXZlciwgdGhhdCBzdGlsbCBs ZWF2ZXMgb3BlbiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIHZtYQotCSAqIGJlaW5nIGNvcGllZCB1 cG9uIGZvcmsuIFdoaWNoIGZhbGxzIHVuZGVyIHRoZSBzYW1lIHVzZXJzcGFjZQotCSAqIHN5bmNo cm9uaXNhdGlvbiBpc3N1ZSBhcyBhIHJlZ3VsYXIgYm8sIGV4Y2VwdCB0aGF0IHRoaXMgdGltZQot CSAqIHRoZSBwcm9jZXNzIG1heSBub3QgYmUgZXhwZWN0aW5nIHRoYXQgYSBwYXJ0aWN1bGFyIHBp ZWNlIG9mCi0JICogbWVtb3J5IGlzIHRpZWQgdG8gdGhlIEdQVS4KLQkgKgotCSAqIEZvcnR1bmF0 ZWx5LCB3ZSBjYW4gaG9vayBpbnRvIHRoZSBtbXVfbm90aWZpZXIgaW4gb3JkZXIgdG8KLQkgKiBk aXNjYXJkIHRoZSBwYWdlIHJlZmVyZW5jZXMgcHJpb3IgdG8gYW55dGhpbmcgbmFzdHkgaGFwcGVu aW5nCi0JICogdG8gdGhlIHZtYSAoZGlzY2FyZCBvciBjbG9uaW5nKSB3aGljaCBzaG91bGQgcHJl dmVudCB0aGUgbW9yZQotCSAqIGVncmVnaW91cyBjYXNlcyBmcm9tIGNhdXNpbmcgaGFybS4KLQkg Ki8KLQotCWlmIChvYmotPnVzZXJwdHIud29yaykgewotCQkvKiBhY3RpdmUgZmxhZyBzaG91bGQg c3RpbGwgYmUgaGVsZCBmb3IgdGhlIHBlbmRpbmcgd29yayAqLwotCQlpZiAoSVNfRVJSKG9iai0+ dXNlcnB0ci53b3JrKSkKLQkJCXJldHVybiBQVFJfRVJSKG9iai0+dXNlcnB0ci53b3JrKTsKLQkJ ZWxzZQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JcHZlYyA9IE5VTEw7Ci0JcGlubmVkID0g MDsKLQotCWlmIChtbSA9PSBjdXJyZW50LT5tbSkgewotCQlwdmVjID0ga3ZtYWxsb2NfYXJyYXko bnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCi0JCQkJICAgICAgR0ZQX0tFUk5FTCB8 Ci0JCQkJICAgICAgX19HRlBfTk9SRVRSWSB8Ci0JCQkJICAgICAgX19HRlBfTk9XQVJOKTsKLQkJ aWYgKHB2ZWMpIHsKLQkJCS8qIGRlZmVyIHRvIHdvcmtlciBpZiBtYWxsb2MgZmFpbHMgKi8KLQkJ CWlmICghaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRvbmx5KG9iaikpCi0JCQkJZ3VwX2ZsYWdzIHw9 IEZPTExfV1JJVEU7Ci0JCQlwaW5uZWQgPSBwaW5fdXNlcl9wYWdlc19mYXN0X29ubHkob2JqLT51 c2VycHRyLnB0ciwKLQkJCQkJCQkgIG51bV9wYWdlcywgZ3VwX2ZsYWdzLAotCQkJCQkJCSAgcHZl Yyk7Ci0JCX0KLQl9Ci0KLQlhY3RpdmUgPSBmYWxzZTsKLQlpZiAocGlubmVkIDwgMCkgewotCQlw YWdlcyA9IEVSUl9QVFIocGlubmVkKTsKLQkJcGlubmVkID0gMDsKLQl9IGVsc2UgaWYgKHBpbm5l ZCA8IG51bV9wYWdlcykgewotCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNf c2NoZWR1bGUob2JqKTsKLQkJYWN0aXZlID0gcGFnZXMgPT0gRVJSX1BUUigtRUFHQUlOKTsKLQl9 IGVsc2UgewotCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhvYmosIHB2 ZWMsIG51bV9wYWdlcyk7Ci0JCWFjdGl2ZSA9ICFJU19FUlIocGFnZXMpOwotCX0KLQlpZiAoYWN0 aXZlKQotCQlfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIHRydWUpOwotCi0JaWYg KElTX0VSUihwYWdlcykpCi0JCXVucGluX3VzZXJfcGFnZXMocHZlYywgcGlubmVkKTsKLQlrdmZy ZWUocHZlYyk7CisJcmV0dXJuIDA7CiAKLQlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHBhZ2VzKTsK K2VycjoKKwlpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9kcm9wX3JlZihvYmopOworZXJyX2ZyZWU6 CisJa2ZyZWUoc3QpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01OTksOSAr MTc1LDYgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwKIAlzdHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7CiAJc3RydWN0IHBhZ2UgKnBh Z2U7CiAKLQkvKiBDYW5jZWwgYW55IGluZmxpZ2h0IHdvcmsgYW5kIGZvcmNlIHRoZW0gdG8gcmVz dGFydCB0aGVpciBndXAgKi8KLQlvYmotPnVzZXJwdHIud29yayA9IE5VTEw7Ci0JX19pOTE1X2dl bV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBmYWxzZSk7CiAJaWYgKCFwYWdlcykKIAkJcmV0dXJu OwogCkBAIC02NDEsMTkgKzIxNCwxMzkgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJfQogCiAJCW1hcmtfcGFnZV9hY2Nlc3Nl ZChwYWdlKTsKLQkJdW5waW5fdXNlcl9wYWdlKHBhZ2UpOwogCX0KIAlvYmotPm1tLmRpcnR5ID0g ZmFsc2U7CiAKIAlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKIAlrZnJlZShwYWdlcyk7CisKKwlpOTE1 X2dlbV9vYmplY3RfdXNlcnB0cl9kcm9wX3JlZihvYmopOworfQorCitzdGF0aWMgaW50IGk5MTVf Z2VtX29iamVjdF91c2VycHRyX3VuYmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LCBib29sIGdldF9wYWdlcykKK3sKKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOworCWludCBlcnI7 CisKKwllcnIgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaiwgSTkxNV9HRU1fT0JKRUNUX1VO QklORF9BQ1RJVkUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoR0VNX1dBUk5f T04oaTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSkpCisJCXJldHVybiAtRUJV U1k7CisKKwltdXRleF9sb2NrX25lc3RlZCgmb2JqLT5tbS5sb2NrLCBJOTE1X01NX0dFVF9QQUdF Uyk7CisKKwlwYWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7CisJaWYg KCFJU19FUlJfT1JfTlVMTChwYWdlcykpCisJCWk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzKG9i aiwgcGFnZXMpOworCisJaWYgKGdldF9wYWdlcykKKwkJZXJyID0gX19fX2k5MTVfZ2VtX29iamVj dF9nZXRfcGFnZXMob2JqKTsKKwltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7CisKKwlyZXR1 cm4gZXJyOworfQorCitpbnQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2JlZ2luKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJcmV0dXJuIGk5MTVfZ2VtX29iamVj dF91c2VycHRyX3VuYmluZChvYmosIHRydWUpOworfQorCitpbnQgaTkxNV9nZW1fb2JqZWN0X3Vz ZXJwdHJfc3VibWl0X2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7CisJ Y29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NI SUZUOworCXN0cnVjdCBwYWdlICoqcHZlYzsKKwl1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gMDsK Kwl1bnNpZ25lZCBsb25nIG5vdGlmaWVyX3NlcTsKKwlpbnQgcGlubmVkLCByZXQ7CisKKwlpZiAo b2JqLT51c2VycHRyLm5vdGlmaWVyLm1tICE9IGN1cnJlbnQtPm1tKQorCQlyZXR1cm4gLUVGQVVM VDsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9sb2NrX2ludGVycnVwdGlibGUob2JqLCBOVUxM KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogTWFrZSBzdXJlIHVzZXJwdHIgaXMg dW5ib3VuZCBmb3IgbmV4dCBhdHRlbXB0LCBzbyB3ZSBkb24ndCB1c2Ugc3RhbGUgcGFnZXMuICov CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfdW5iaW5kKG9iaiwgZmFsc2UpOworCWk5 MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ bm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oJm9iai0+dXNlcnB0ci5ub3Rp Zmllcik7CisKKwlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0 IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICghcHZlYykKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc19yZWFkb25seShvYmopKQorCQlndXBfZmxhZ3MgfD0g Rk9MTF9XUklURTsKKworCXBpbm5lZCA9IHJldCA9IDA7CisJd2hpbGUgKHBpbm5lZCA8IG51bV9w YWdlcykgeworCQlyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KG9iai0+dXNlcnB0ci5wdHIgKyBw aW5uZWQgKiBQQUdFX1NJWkUsCisJCQkJCSAgbnVtX3BhZ2VzIC0gcGlubmVkLCBndXBfZmxhZ3Ms CisJCQkJCSAgJnB2ZWNbcGlubmVkXSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisK KwkJcGlubmVkICs9IHJldDsKKwl9CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUo Jmk5MTUtPm1tLm5vdGlmaWVyX2xvY2spOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYg KG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZvYmotPnVzZXJwdHIubm90aWZpZXIsCisJCSFvYmot PnVzZXJwdHIucGFnZV9yZWYgPyBub3RpZmllcl9zZXEgOgorCQlvYmotPnVzZXJwdHIubm90aWZp ZXJfc2VxKSkgeworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJ aWYgKCFvYmotPnVzZXJwdHIucGFnZV9yZWYrKykgeworCQlvYmotPnVzZXJwdHIucHZlYyA9IHB2 ZWM7CisJCW9iai0+dXNlcnB0ci5ub3RpZmllcl9zZXEgPSBub3RpZmllcl9zZXE7CisKKwkJcHZl YyA9IE5VTEw7CisJfQorCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmaTkxNS0+bW0ubm90 aWZpZXJfbG9jayk7CisKK291dDoKKwlpZiAocHZlYykgeworCQl1bnBpbl91c2VyX3BhZ2VzKHB2 ZWMsIHBpbm5lZCk7CisJCWt2ZnJlZShwdmVjKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitp bnQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2RvbmUoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKK3sKKwlpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoJm9iai0+dXNl cnB0ci5ub3RpZmllciwKKwkJCQkgICAgb2JqLT51c2VycHRyLm5vdGlmaWVyX3NlcSkpIHsKKwkJ LyogV2UgY29sbGlkZWQgd2l0aCB0aGUgbW11IG5vdGlmaWVyLCBuZWVkIHRvIHJldHJ5ICovCisK KwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTkxNV9nZW1f b2JqZWN0X3VzZXJwdHJfc3VibWl0X2Zpbmkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKK3sKKwlpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9kcm9wX3JlZihvYmopOwogfQogCiBzdGF0 aWMgdm9pZAogaTkxNV9nZW1fdXNlcnB0cl9yZWxlYXNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCiB7Ci0JaTkxNV9nZW1fdXNlcnB0cl9yZWxlYXNlX19tbXVfbm90aWZpZXIob2Jq KTsKLQlpOTE1X2dlbV91c2VycHRyX3JlbGVhc2VfX21tX3N0cnVjdChvYmopOworCW1tdV9pbnRl cnZhbF9ub3RpZmllcl9yZW1vdmUoJm9iai0+dXNlcnB0ci5ub3RpZmllcik7CisJb2JqLT51c2Vy cHRyLm5vdGlmaWVyLm1tID0gTlVMTDsKIH0KIAogc3RhdGljIGludApAQCAtNjg2LDcgKzM3OSw2 IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1f dXNlcnB0cl9vcHMgPSB7CiAJLm5hbWUgPSAiaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHIiLAogCS5m bGFncyA9IEk5MTVfR0VNX09CSkVDVF9JU19TSFJJTktBQkxFIHwKIAkJIEk5MTVfR0VNX09CSkVD VF9OT19NTUFQIHwKLQkJIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwgfAogCQkgSTkxNV9H RU1fT0JKRUNUX0lTX1BST1hZLAogCS5nZXRfcGFnZXMgPSBpOTE1X2dlbV91c2VycHRyX2dldF9w YWdlcywKIAkucHV0X3BhZ2VzID0gaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMsCkBAIC04MDcs NiArNDk5LDcgQEAgaTkxNV9nZW1fdXNlcnB0cl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAogCWk5MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVfY29oZXJlbmN5KG9iaiwgSTkxNV9DQUNIRV9M TEMpOwogCiAJb2JqLT51c2VycHRyLnB0ciA9IGFyZ3MtPnVzZXJfcHRyOworCW9iai0+dXNlcnB0 ci5ub3RpZmllcl9zZXEgPSBVTE9OR19NQVg7CiAJaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9VU0VS UFRSX1JFQURfT05MWSkKIAkJaTkxNV9nZW1fb2JqZWN0X3NldF9yZWFkb25seShvYmopOwogCkBA IC04MTQsOSArNTA3LDcgQEAgaTkxNV9nZW1fdXNlcnB0cl9pb2N0bChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAogCSAqIGF0IGJpbmRpbmcuIFRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGhvb2sg aW50byB0aGUgbW11X25vdGlmaWVyCiAJICogaW4gb3JkZXIgdG8gZGV0ZWN0IGlmIHRoZSBtbXUg aXMgZGVzdHJveWVkLgogCSAqLwotCXJldCA9IGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW1fc3Ry dWN0KG9iaik7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBpOTE1X2dlbV91c2VycHRyX2luaXRf X21tdV9ub3RpZmllcihvYmopOworCXJldCA9IGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25v dGlmaWVyKG9iaik7CiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVh dGUoZmlsZSwgJm9iai0+YmFzZSwgJmhhbmRsZSk7CiAKQEAgLTgzNSwxNSArNTI2LDkgQEAgaTkx NV9nZW1fdXNlcnB0cl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogaW50IGk5MTVfZ2Vt X2luaXRfdXNlcnB0cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAjaWZk ZWYgQ09ORklHX01NVV9OT1RJRklFUgotCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+bW1fbG9j ayk7Ci0JaGFzaF9pbml0KGRldl9wcml2LT5tbV9zdHJ1Y3RzKTsKLQotCWRldl9wcml2LT5tbS51 c2VycHRyX3dxID0KLQkJYWxsb2Nfd29ya3F1ZXVlKCJpOTE1LXVzZXJwdHItYWNxdWlyZSIsCi0J CQkJV1FfSElHSFBSSSB8IFdRX1VOQk9VTkQsCi0JCQkJMCk7Ci0JaWYgKCFkZXZfcHJpdi0+bW0u dXNlcnB0cl93cSkKLQkJcmV0dXJuIC1FTk9NRU07CisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPm1t Lm5vdGlmaWVyX2xvY2spOworCisJaTkxNV9nZW1fc2hyaW5rZXJfdGFpbnRzX211dGV4KGRldl9w cml2LCAmZGV2X3ByaXYtPm1tLm5vdGlmaWVyX2xvY2spOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsK QEAgLTg1Miw2ICs1MzcsNiBAQCBpbnQgaTkxNV9nZW1faW5pdF91c2VycHRyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHZvaWQgaTkxNV9nZW1fY2xlYW51cF91c2VycHRyKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKICNpZmRlZiBDT05GSUdfTU1VX05P VElGSUVSCi0JZGVzdHJveV93b3JrcXVldWUoZGV2X3ByaXYtPm1tLnVzZXJwdHJfd3EpOworCW11 dGV4X2Rlc3Ryb3koJmRldl9wcml2LT5tbS5ub3RpZmllcl9sb2NrKTsKICNlbmRpZgogfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZTU2ODllYjI4NjRhLi4xZGExNGEyMDM3YzAgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNTkxLDExICs1OTEsMTAgQEAgc3RydWN0IGk5MTVfZ2Vt X21tIHsKIAogI2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVIKIAkvKioKLQkgKiBXb3JrcXVldWUg dG8gZmF1bHQgaW4gdXNlcnB0ciBwYWdlcywgZmx1c2hlZCBieSB0aGUgZXhlY2J1ZgotCSAqIHdo ZW4gcmVxdWlyZWQgYnV0IG90aGVyd2lzZSBsZWZ0IHRvIHVzZXJzcGFjZSB0byB0cnkgYWdhaW4K LQkgKiBvbiBFQUdBSU4uCisJICogbm90aWZpZXJfbG9jayBmb3IgbW11IG5vdGlmaWVycywgbWVt b3J5IG1heSBub3QgYmUgYWxsb2NhdGVkCisJICogd2hpbGUgaG9sZGluZyB0aGlzIGxvY2suCiAJ ICovCi0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnVzZXJwdHJfd3E7CisJc3RydWN0IG11dGV4 IG5vdGlmaWVyX2xvY2s7CiAjZW5kaWYKIAogCS8qIHNocmlua2VyIGFjY291bnRpbmcsIGFsc28g dXNlZnVsIGZvciB1c2VybGFuZCBkZWJ1Z2dpbmcgKi8KQEAgLTk3OCw4ICs5NzcsNiBAQCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3RydWN0IGk5MTVfZ2d0dCBnZ3R0OyAvKiBWTSByZXBy ZXNlbnRpbmcgdGhlIGdsb2JhbCBhZGRyZXNzIHNwYWNlICovCiAKIAlzdHJ1Y3QgaTkxNV9nZW1f bW0gbW07Ci0JREVDTEFSRV9IQVNIVEFCTEUobW1fc3RydWN0cywgNyk7Ci0Jc3BpbmxvY2tfdCBt bV9sb2NrOwogCiAJLyogS2VybmVsIE1vZGVzZXR0aW5nICovCiAKLS0gCjIuMjguMAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==