From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0600DC35269 for ; Thu, 15 Oct 2020 11:27:15 +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 9DEE120878 for ; Thu, 15 Oct 2020 11:27:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9DEE120878 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 7F61A6ECA7; Thu, 15 Oct 2020 11:27:06 +0000 (UTC) Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7CE3F6EC70 for ; Thu, 15 Oct 2020 11:26:34 +0000 (UTC) From: Maarten Lankhorst To: intel-gfx@lists.freedesktop.org Date: Thu, 15 Oct 2020 13:25:39 +0200 Message-Id: <20201015112627.1142745-16-maarten.lankhorst@linux.intel.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201015112627.1142745-1-maarten.lankhorst@linux.intel.com> References: <20201015112627.1142745-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v3 15/63] drm/i915: Fix userptr so we do not have to worry about obj->mm.lock, v3. 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 RVIKQ2hhbmdlcyBzaW5jZSB2MjoKLSBNYWtlIGk5MTUtPm1tLm5vdGlmaWVyIGEgc3BpbmxvY2su CgpTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGlu dXguaW50ZWwuY29tPgotLS0KIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZm ZXIuYyAgICB8ICA5NCArKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmpl Y3QuaCAgICB8ICAzNSArLQogLi4uL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5 cGVzLmggIHwgIDEwICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMu YyAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRy LmMgICB8IDc1OSArKysrKy0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmggICAgICAgICAgICAgICB8ICAgOSArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYyAgICAgICAgICAgICAgIHwgICA1ICstCiA3IGZpbGVzIGNoYW5nZWQsIDMyNyBpbnNlcnRp b25zKCspLCA1ODcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9leGVjYnVmZmVyLmMKaW5kZXggYzMwZmE1NzkwYTQ3Li5hMTIzNjBiYWYzNzQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwpAQCAt NTIsMTQgKzUyLDE2IEBAIGVudW0gewogLyogX19FWEVDX09CSkVDVF9OT19SRVNFUlZFIGlzIEJJ VCgzMSksIGRlZmluZWQgaW4gaTkxNV92bWEuaCAqLwogI2RlZmluZSBfX0VYRUNfT0JKRUNUX0hB U19QSU4JCUJJVCgzMCkKICNkZWZpbmUgX19FWEVDX09CSkVDVF9IQVNfRkVOQ0UJCUJJVCgyOSkK LSNkZWZpbmUgX19FWEVDX09CSkVDVF9ORUVEU19NQVAJCUJJVCgyOCkKLSNkZWZpbmUgX19FWEVD X09CSkVDVF9ORUVEU19CSUFTCUJJVCgyNykKLSNkZWZpbmUgX19FWEVDX09CSkVDVF9JTlRFUk5B TF9GTEFHUwkofjB1IDw8IDI3KSAvKiBhbGwgb2YgdGhlIGFib3ZlICsgKi8KKyNkZWZpbmUgX19F WEVDX09CSkVDVF9VU0VSUFRSX0lOSVQJQklUKDI4KQorI2RlZmluZSBfX0VYRUNfT0JKRUNUX05F RURTX01BUAkJQklUKDI3KQorI2RlZmluZSBfX0VYRUNfT0JKRUNUX05FRURTX0JJQVMJQklUKDI2 KQorI2RlZmluZSBfX0VYRUNfT0JKRUNUX0lOVEVSTkFMX0ZMQUdTCSh+MHUgPDwgMjYpIC8qIGFs bCBvZiB0aGUgYWJvdmUgKyAqLwogI2RlZmluZSBfX0VYRUNfT0JKRUNUX1JFU0VSVkVEIChfX0VY RUNfT0JKRUNUX0hBU19QSU4gfCBfX0VYRUNfT0JKRUNUX0hBU19GRU5DRSkKIAogI2RlZmluZSBf X0VYRUNfSEFTX1JFTE9DCUJJVCgzMSkKICNkZWZpbmUgX19FWEVDX0VOR0lORV9QSU5ORUQJQklU KDMwKQotI2RlZmluZSBfX0VYRUNfSU5URVJOQUxfRkxBR1MJKH4wdSA8PCAzMCkKKyNkZWZpbmUg X19FWEVDX1VTRVJQVFJfVVNFRAlCSVQoMjkpCisjZGVmaW5lIF9fRVhFQ19JTlRFUk5BTF9GTEFH UwkofjB1IDw8IDI5KQogI2RlZmluZSBVUERBVEUJCQlQSU5fT0ZGU0VUX0ZJWEVECiAKICNkZWZp bmUgQkFUQ0hfT0ZGU0VUX0JJQVMgKDI1NioxMDI0KQpAQCAtODY1LDYgKzg2NywxOSBAQCBzdGF0 aWMgaW50IGViX2xvb2t1cF92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogCQl9CiAK IAkJZWJfYWRkX3ZtYShlYiwgaSwgYmF0Y2gsIHZtYSk7CisKKwkJaWYgKGk5MTVfZ2VtX29iamVj dF9pc191c2VycHRyKHZtYS0+b2JqKSkgeworCQkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3VzZXJw dHJfc3VibWl0X2luaXQodm1hLT5vYmopOworCQkJaWYgKGVycikgeworCQkJCWlmIChpICsgMSA8 IGViLT5idWZmZXJfY291bnQpCisJCQkJCWViLT52bWFbaSArIDFdLnZtYSA9IE5VTEw7CisKKwkJ CQlyZXR1cm4gZXJyOworCQkJfQorCisJCQllYi0+dm1hW2ldLmZsYWdzIHw9IF9fRVhFQ19PQkpF Q1RfVVNFUlBUUl9JTklUOworCQkJZWItPmFyZ3MtPmZsYWdzIHw9IF9fRVhFQ19VU0VSUFRSX1VT RUQ7CisJCX0KIAl9CiAKIAlpZiAodW5saWtlbHkoZWItPmJhdGNoLT5mbGFncyAmIEVYRUNfT0JK RUNUX1dSSVRFKSkgewpAQCAtOTYyLDcgKzk3Nyw3IEBAIGViX2dldF92bWEoY29uc3Qgc3RydWN0 IGk5MTVfZXhlY2J1ZmZlciAqZWIsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKQogCX0KIH0KIAotc3Rh dGljIHZvaWQgZWJfcmVsZWFzZV92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLCBib29s IGZpbmFsKQorc3RhdGljIHZvaWQgZWJfcmVsZWFzZV92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZm ZXIgKmViLCBib29sIGZpbmFsLCBib29sIHJlbGVhc2VfdXNlcnB0cikKIHsKIAljb25zdCB1bnNp Z25lZCBpbnQgY291bnQgPSBlYi0+YnVmZmVyX2NvdW50OwogCXVuc2lnbmVkIGludCBpOwpAQCAt OTc2LDYgKzk5MSwxMSBAQCBzdGF0aWMgdm9pZCBlYl9yZWxlYXNlX3ZtYXMoc3RydWN0IGk5MTVf ZXhlY2J1ZmZlciAqZWIsIGJvb2wgZmluYWwpCiAKIAkJZWJfdW5yZXNlcnZlX3ZtYShldik7CiAK KwkJaWYgKHJlbGVhc2VfdXNlcnB0ciAmJiBldi0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX1VTRVJQ VFJfSU5JVCkgeworCQkJZXYtPmZsYWdzICY9IH5fX0VYRUNfT0JKRUNUX1VTRVJQVFJfSU5JVDsK KwkJCWk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9maW5pKHZtYS0+b2JqKTsKKwkJfQor CiAJCWlmIChmaW5hbCkKIAkJCWk5MTVfdm1hX3B1dCh2bWEpOwogCX0KQEAgLTE5MTEsNiArMTkz MSwzMSBAQCBzdGF0aWMgaW50IGViX3ByZWZhdWx0X3JlbG9jYXRpb25zKGNvbnN0IHN0cnVjdCBp OTE1X2V4ZWNidWZmZXIgKmViKQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGViX3JlaW5p dF91c2VycHRyKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQoreworCWNvbnN0IHVuc2lnbmVk IGludCBjb3VudCA9IGViLT5idWZmZXJfY291bnQ7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJl dDsKKworCWlmIChsaWtlbHkoIShlYi0+YXJncy0+ZmxhZ3MgJiBfX0VYRUNfVVNFUlBUUl9VU0VE KSkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3Ry dWN0IGViX3ZtYSAqZXYgPSAmZWItPnZtYVtpXTsKKworCQlpZiAoIWk5MTVfZ2VtX29iamVjdF9p c191c2VycHRyKGV2LT52bWEtPm9iaikpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBpOTE1X2dl bV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfaW5pdChldi0+dm1hLT5vYmopOworCQlpZiAocmV0KQor CQkJcmV0dXJuIHJldDsKKworCQlldi0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9VU0VSUFRSX0lO SVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBub2lubGluZSBpbnQgZWJfcmVsb2Nh dGVfcGFyc2Vfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKIAkJCQkJICAgc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEpCiB7CkBAIC0xOTI1LDcgKzE5NzAsNyBAQCBzdGF0aWMgbm9pbmxp bmUgaW50IGViX3JlbG9jYXRlX3BhcnNlX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIs CiAJfQogCiAJLyogV2UgbWF5IHByb2Nlc3MgYW5vdGhlciBleGVjYnVmZmVyIGR1cmluZyB0aGUg dW5sb2NrLi4uICovCi0JZWJfcmVsZWFzZV92bWFzKGViLCBmYWxzZSk7CisJZWJfcmVsZWFzZV92 bWFzKGViLCBmYWxzZSwgdHJ1ZSk7CiAJaTkxNV9nZW1fd3dfY3R4X2ZpbmkoJmViLT53dyk7CiAK IAlpZiAocnEpIHsKQEAgLTE5NjYsMTAgKzIwMTEsOCBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGVi X3JlbG9jYXRlX3BhcnNlX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCiAJCWVyciA9 IDA7CiAJfQogCi0jaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgogCWlmICghZXJyKQotCQlmbHVz aF93b3JrcXVldWUoZWItPmk5MTUtPm1tLnVzZXJwdHJfd3EpOwotI2VuZGlmCisJCWVyciA9IGVi X3JlaW5pdF91c2VycHRyKGViKTsKIAogZXJyX3JlbG9jazoKIAlpOTE1X2dlbV93d19jdHhfaW5p dCgmZWItPnd3LCB0cnVlKTsKQEAgLTIwMzEsNyArMjA3NCw3IEBAIHN0YXRpYyBub2lubGluZSBp bnQgZWJfcmVsb2NhdGVfcGFyc2Vfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKIAog ZXJyOgogCWlmIChlcnIgPT0gLUVERUFETEspIHsKLQkJZWJfcmVsZWFzZV92bWFzKGViLCBmYWxz ZSk7CisJCWViX3JlbGVhc2Vfdm1hcyhlYiwgZmFsc2UsIGZhbHNlKTsKIAkJZXJyID0gaTkxNV9n ZW1fd3dfY3R4X2JhY2tvZmYoJmViLT53dyk7CiAJCWlmICghZXJyKQogCQkJZ290byByZXBlYXRf dmFsaWRhdGU7CkBAIC0yMTI4LDcgKzIxNzEsNyBAQCBzdGF0aWMgaW50IGViX3JlbG9jYXRlX3Bh cnNlKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogCiBlcnI6CiAJaWYgKGVyciA9PSAtRURF QURMSykgewotCQllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNlKTsKKwkJZWJfcmVsZWFzZV92bWFz KGViLCBmYWxzZSwgZmFsc2UpOwogCQllcnIgPSBpOTE1X2dlbV93d19jdHhfYmFja29mZigmZWIt Pnd3KTsKIAkJaWYgKCFlcnIpCiAJCQlnb3RvIHJldHJ5OwpAQCAtMjIwMyw2ICsyMjQ2LDMwIEBA IHN0YXRpYyBpbnQgZWJfbW92ZV90b19ncHUoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiAJ CQkJCQkgICAgICBmbGFncyB8IF9fRVhFQ19PQkpFQ1RfTk9fUkVTRVJWRSk7CiAJfQogCisjaWZk ZWYgQ09ORklHX01NVV9OT1RJRklFUgorCWlmICghZXJyICYmIChlYi0+YXJncy0+ZmxhZ3MgJiBf X0VYRUNfVVNFUlBUUl9VU0VEKSkgeworCQlzcGluX2xvY2soJmViLT5pOTE1LT5tbS5ub3RpZmll cl9sb2NrKTsKKworCQkvKgorCQkgKiBjb3VudCBpcyBhbHdheXMgYXQgbGVhc3QgMSwgb3RoZXJ3 aXNlIF9fRVhFQ19VU0VSUFRSX1VTRUQKKwkJICogY291bGQgbm90IGhhdmUgYmVlbiBzZXQKKwkJ ICovCisJCWZvciAoaSA9IGNvdW50IC0gMTsgaTsgaS0tKSB7CisJCQlzdHJ1Y3QgZWJfdm1hICpl diA9ICZlYi0+dm1hW2ldOworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGV2 LT52bWEtPm9iajsKKworCQkJaWYgKCFpOTE1X2dlbV9vYmplY3RfaXNfdXNlcnB0cihvYmopKQor CQkJCWNvbnRpbnVlOworCisJCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRf ZG9uZShvYmopOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKwkJfQorCisJCXNwaW5fdW5sb2Nr KCZlYi0+aTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CisJfQorI2VuZGlmCisKIAlpZiAodW5saWtl bHkoZXJyKSkKIAkJZ290byBlcnJfc2tpcDsKIApAQCAtMzM0MSw3ICszNDA4LDcgQEAgaTkxNV9n ZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiAJZXJyID0gZWJfbG9v a3VwX3ZtYXMoJmViKTsKIAlpZiAoZXJyKSB7Ci0JCWViX3JlbGVhc2Vfdm1hcygmZWIsIHRydWUp OworCQllYl9yZWxlYXNlX3ZtYXMoJmViLCB0cnVlLCB0cnVlKTsKIAkJZ290byBlcnJfZW5naW5l OwogCX0KIApAQCAtMzQxMyw2ICszNDgwLDcgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAogCiAJdHJhY2VfaTkxNV9yZXF1ZXN0X3F1ZXVlKGViLnJlcXVl c3QsIGViLmJhdGNoX2ZsYWdzKTsKIAllcnIgPSBlYl9zdWJtaXQoJmViLCBiYXRjaCk7CisKIGVy cl9yZXF1ZXN0OgogCWk5MTVfcmVxdWVzdF9nZXQoZWIucmVxdWVzdCk7CiAJZWJfcmVxdWVzdF9h ZGQoJmViKTsKQEAgLTM0MzMsNyArMzUwMSw3IEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAlpOTE1X3JlcXVlc3RfcHV0KGViLnJlcXVlc3QpOwogCiBl cnJfdm1hOgotCWViX3JlbGVhc2Vfdm1hcygmZWIsIHRydWUpOworCWViX3JlbGVhc2Vfdm1hcygm ZWIsIHRydWUsIHRydWUpOwogCWlmIChlYi50cmFtcG9saW5lKQogCQlpOTE1X3ZtYV91bnBpbihl Yi50cmFtcG9saW5lKTsKIAlXQVJOX09OKGVyciA9PSAtRURFQURMSyk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKaW5kZXggYTM3NzRlODBhZWRkLi5hYmNjZTRk Mjg1YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmpl Y3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKQEAg LTMzLDYgKzMzLDcgQEAgaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbV9mcm9tX2RhdGEoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCQkJICAgICAgIGNvbnN0IHZvaWQgKmRhdGEs IHJlc291cmNlX3NpemVfdCBzaXplKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9zaG1lbV9vcHM7CisKIHZvaWQgX19pOTE1X2dlbV9vYmpl Y3RfcmVsZWFzZV9zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJCSAg ICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKIAkJCQkgICAgIGJvb2wgbmVlZHNfY2xmbHVzaCk7 CkBAIC0yMjIsMTIgKzIyMyw2IEBAIGk5MTVfZ2VtX29iamVjdF9uZXZlcl9tbWFwKGNvbnN0IHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJcmV0dXJuIGk5MTVfZ2VtX29iamVjdF90 eXBlX2hhcyhvYmosIEk5MTVfR0VNX09CSkVDVF9OT19NTUFQKTsKIH0KIAotc3RhdGljIGlubGlu ZSBib29sCi1pOTE1X2dlbV9vYmplY3RfbmVlZHNfYXN5bmNfY2FuY2VsKGNvbnN0IHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JcmV0dXJuIGk5MTVfZ2VtX29iamVjdF90eXBl X2hhcyhvYmosIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwpOwotfQotCiBzdGF0aWMgaW5s aW5lIGJvb2wKIGk5MTVfZ2VtX29iamVjdF9pc19mcmFtZWJ1ZmZlcihjb25zdCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewpAQCAtNTI4LDE2ICs1MjMsNiBAQCB2b2lkIF9faTkx NV9nZW1fb2JqZWN0X2ZsdXNoX2Zyb250YnVmZmVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCiB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X2ludmFsaWRhdGVfZnJvbnRidWZmZXIoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkJICAgICAgZW51bSBmYl9vcF9vcmln aW4gb3JpZ2luKTsKIAotc3RhdGljIGlubGluZSBib29sCi1pOTE1X2dlbV9vYmplY3RfaXNfdXNl cnB0cihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotI2lmZGVmIENPTkZJR19N TVVfTk9USUZJRVIKLQlyZXR1cm4gb2JqLT51c2VycHRyLm1tOwotI2Vsc2UKLQlyZXR1cm4gZmFs c2U7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSB2b2lkCiBpOTE1X2dlbV9vYmplY3RfZmx1 c2hfZnJvbnRidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkgIGVu dW0gZmJfb3Bfb3JpZ2luIG9yaWdpbikKQEAgLTU1NCw0ICs1MzksMjIgQEAgaTkxNV9nZW1fb2Jq ZWN0X2ludmFsaWRhdGVfZnJvbnRidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKIAkJX19pOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZV9mcm9udGJ1ZmZlcihvYmosIG9yaWdp bik7CiB9CiAKKyNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCitzdGF0aWMgaW5saW5lIGJvb2wK K2k5MTVfZ2VtX29iamVjdF9pc191c2VycHRyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCit7CisJcmV0dXJuIG9iai0+dXNlcnB0ci5ub3RpZmllci5tbTsKK30KKworaW50IGk5MTVf Z2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9pbml0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopOworaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9kb25lKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9z dWJtaXRfZmluaShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKKyNlbHNlCitzdGF0 aWMgaW5saW5lIGJvb2wgaTkxNV9nZW1fb2JqZWN0X2lzX3VzZXJwdHIoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaikgeyByZXR1cm4gZmFsc2U7IH0KKworc3RhdGljIGlubGluZSBpbnQg aTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikgeyBHRU1fQlVHX09OKDEpOyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlu bGluZSBpbnQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2RvbmUoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikgeyBHRU1fQlVHX09OKDEpOyByZXR1cm4gLUVOT0RFVjsgfQor c3RhdGljIGlubGluZSB2b2lkIGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9maW5pKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopIHsgR0VNX0JVR19PTigxKTsgfQorI2VuZGlm CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X29iamVjdF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVj dF90eXBlcy5oCmluZGV4IDFmNzI5ZTYzODY3Yy4uMGFhMzkxZjVkNzNjIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCkBAIC03LDYgKzcs OCBAQAogI2lmbmRlZiBfX0k5MTVfR0VNX09CSkVDVF9UWVBFU19IX18KICNkZWZpbmUgX19JOTE1 X0dFTV9PQkpFQ1RfVFlQRVNfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4K KwogI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CiAjaW5jbHVkZSA8dWFwaS9kcm0vaTkxNV9kcm0u aD4KIApAQCAtMzQsNyArMzYsNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewog I2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNfU0hSSU5LQUJMRQlCSVQoMikKICNkZWZpbmUgSTkx NV9HRU1fT0JKRUNUX0lTX1BST1hZCUJJVCgzKQogI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfTk9f TU1BUAkJQklUKDQpCi0jZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwJQklUKDUp CiAKIAkvKiBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQgaXRzIGJhY2tpbmcg c3RvcmFnZS4KIAkgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlvciB0byB0aGUgdXNl IG9mIHRoZSBhc3NvY2lhdGVkIHNldApAQCAtMjkyLDEwICsyOTMsMTEgQEAgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgewogI2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVIKIAkJc3RydWN0IGk5 MTVfZ2VtX3VzZXJwdHIgewogCQkJdWludHB0cl90IHB0cjsKKwkJCXVuc2lnbmVkIGxvbmcgbm90 aWZpZXJfc2VxOwogCi0JCQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tOwotCQkJc3RydWN0IGk5 MTVfbW11X29iamVjdCAqbW11X29iamVjdDsKLQkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsK KwkJCXN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgbm90aWZpZXI7CisJCQlzdHJ1Y3QgcGFn ZSAqKnB2ZWM7CisJCQlpbnQgcGFnZV9yZWY7CiAJCX0gdXNlcnB0cjsKICNlbmRpZgogCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCmluZGV4IDFjNjQ2ZDVmODAyYi4u YjgxZjI1M2Y1ZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fcGFnZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMu YwpAQCAtMjI1LDcgKzIyNSw3IEBAIGludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAkgKiBnZXRfcGFnZXMgYmFja2VuZHMgd2Ug c2hvdWxkIGJlIGJldHRlciBhYmxlIHRvIGhhbmRsZSB0aGUKIAkgKiBjYW5jZWxsYXRpb24gb2Yg dGhlIGFzeW5jIHRhc2sgaW4gYSBtb3JlIHVuaWZvcm0gbWFubmVyLgogCSAqLwotCWlmICghcGFn ZXMgJiYgIWk5MTVfZ2VtX29iamVjdF9uZWVkc19hc3luY19jYW5jZWwob2JqKSkKKwlpZiAoIXBh Z2VzKQogCQlwYWdlcyA9IEVSUl9QVFIoLUVJTlZBTCk7CiAKIAlpZiAoIUlTX0VSUihwYWdlcykp CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwppbmRleCBhMmI3 ZjZkYjJmMWEuLmUwYTVlM2FlOWQ0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX3VzZXJwdHIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fdXNlcnB0ci5jCkBAIC0yLDEwICsyLDM5IEBACiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogTUlUCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMTItMjAxNCBJbnRlbCBDb3Jwb3JhdGlv bgorICoKKyAgKiBCYXNlZCBvbiBhbWRncHVfbW4sIHdoaWNoIGJlYXJzIHRoZSBmb2xsb3dpbmcg bm90aWNlOgorICoKKyAqIENvcHlyaWdodCAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIElu Yy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNl bnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENP UFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBV U0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl CisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqLworLyoKKyAq IEF1dGhvcnM6CisgKiAgICBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5j b20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8bGlu dXgvbW11X25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVk ZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkL21tLmg+CkBAIC0xNSwzNzQg KzQ0LDEwNCBAQAogI2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdC5oIgogI2luY2x1ZGUgImk5MTVf c2NhdHRlcmxpc3QuaCIKIAotI2lmIGRlZmluZWQoQ09ORklHX01NVV9OT1RJRklFUikKLQotc3Ry dWN0IGk5MTVfbW1fc3RydWN0IHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOwotCXN0 cnVjdCBobGlzdF9ub2RlIG5vZGU7Ci0Jc3RydWN0IGtyZWYga3JlZjsKLQlzdHJ1Y3QgcmN1X3dv cmsgd29yazsKLX07Ci0KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnZhbF90cmVlLmg+Ci0KLXN0cnVj dCBpOTE1X21tdV9ub3RpZmllciB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBobGlzdF9u b2RlIG5vZGU7Ci0Jc3RydWN0IG1tdV9ub3RpZmllciBtbjsKLQlzdHJ1Y3QgcmJfcm9vdF9jYWNo ZWQgb2JqZWN0czsKLQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tOwotfTsKLQotc3RydWN0IGk5 MTVfbW11X29iamVjdCB7Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgaXQ7 Ci19OwotCi1zdGF0aWMgdm9pZCBhZGRfb2JqZWN0KHN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1v KQotewotCUdFTV9CVUdfT04oIVJCX0VNUFRZX05PREUoJm1vLT5pdC5yYikpOwotCWludGVydmFs X3RyZWVfaW5zZXJ0KCZtby0+aXQsICZtby0+bW4tPm9iamVjdHMpOwotfQotCi1zdGF0aWMgdm9p ZCBkZWxfb2JqZWN0KHN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vKQotewotCWlmIChSQl9FTVBU WV9OT0RFKCZtby0+aXQucmIpKQotCQlyZXR1cm47Ci0KLQlpbnRlcnZhbF90cmVlX3JlbW92ZSgm bW8tPml0LCAmbW8tPm1uLT5vYmplY3RzKTsKLQlSQl9DTEVBUl9OT0RFKCZtby0+aXQucmIpOwot fQotCi1zdGF0aWMgdm9pZAotX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgaTkxNV9tbXVf b2JqZWN0ICptbyA9IG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0OwotCi0JLyoKLQkgKiBEdXJpbmcg bW1faW52YWxpZGF0ZV9yYW5nZSB3ZSBuZWVkIHRvIGNhbmNlbCBhbnkgdXNlcnB0ciB0aGF0Ci0J ICogb3ZlcmxhcHMgdGhlIHJhbmdlIGJlaW5nIGludmFsaWRhdGVkLiBEb2luZyBzbyByZXF1aXJl cyB0aGUKLQkgKiBzdHJ1Y3RfbXV0ZXgsIGFuZCB0aGF0IHJpc2tzIHJlY3Vyc2lvbi4gSW4gb3Jk ZXIgdG8gY2F1c2UKLQkgKiByZWN1cnNpb24sIHRoZSB1c2VyIG11c3QgYWxpYXMgdGhlIHVzZXJw dHIgYWRkcmVzcyBzcGFjZSB3aXRoCi0JICogYSBHVFQgbW1hcHBpbmcgKHBvc3NpYmxlIHdpdGgg YSBNQVBfRklYRUQpIC0gdGhlbiB3aGVuIHdlIGhhdmUKLQkgKiB0byBpbnZhbGlkYXRlIHRoYXQg bW1hcGluZywgbW1faW52YWxpZGF0ZV9yYW5nZSBpcyBjYWxsZWQgd2l0aAotCSAqIHRoZSB1c2Vy cHRyIGFkZHJlc3MgKmFuZCogdGhlIHN0cnVjdF9tdXRleCBoZWxkLiAgVG8gcHJldmVudCB0aGF0 Ci0JICogd2Ugc2V0IGEgZmxhZyB1bmRlciB0aGUgaTkxNV9tbXVfbm90aWZpZXIgc3BpbmxvY2sg dG8gaW5kaWNhdGUKLQkgKiB3aGV0aGVyIHRoaXMgb2JqZWN0IGlzIHZhbGlkLgotCSAqLwotCWlm ICghbW8pCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmbW8tPm1uLT5sb2NrKTsKLQlpZiAodmFs dWUpCi0JCWFkZF9vYmplY3QobW8pOwotCWVsc2UKLQkJZGVsX29iamVjdChtbyk7Ci0Jc3Bpbl91 bmxvY2soJm1vLT5tbi0+bG9jayk7Ci19CisjaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgogCi1z dGF0aWMgaW50Ci11c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9u b3RpZmllciAqX21uLAotCQkJCSAgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFu Z2UpCisvKioKKyAqIGk5MTVfZ2VtX3VzZXJwdHJfaW52YWxpZGF0ZSAtIGNhbGxiYWNrIHRvIG5v dGlmeSBhYm91dCBtbSBjaGFuZ2UKKyAqCisgKiBAbW5pOiB0aGUgcmFuZ2UgKG1tKSBpcyBhYm91 dCB0byB1cGRhdGUKKyAqIEByYW5nZTogZGV0YWlscyBvbiB0aGUgaW52YWxpZGF0aW9uCisgKiBA Y3VyX3NlcTogVmFsdWUgdG8gcGFzcyB0byBtbXVfaW50ZXJ2YWxfc2V0X3NlcSgpCisgKgorICog QmxvY2sgZm9yIG9wZXJhdGlvbnMgb24gQk9zIHRvIGZpbmlzaCBhbmQgbWFyayBwYWdlcyBhcyBh Y2Nlc3NlZCBhbmQKKyAqIHBvdGVudGlhbGx5IGRpcnR5LgorICovCitzdGF0aWMgYm9vbCBpOTE1 X2dlbV91c2VycHRyX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5p LAorCQkJCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSwKKwkJCQkJdW5z aWduZWQgbG9uZyBjdXJfc2VxKQogewotCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW4gPQot CQljb250YWluZXJfb2YoX21uLCBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIsIG1uKTsKLQlzdHJ1 Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICppdDsKLQl1bnNpZ25lZCBsb25nIGVuZDsKLQlpbnQgcmV0 ID0gMDsKLQotCWlmIChSQl9FTVBUWV9ST09UKCZtbi0+b2JqZWN0cy5yYl9yb290KSkKLQkJcmV0 dXJuIDA7Ci0KLQkvKiBpbnRlcnZhbCByYW5nZXMgYXJlIGluY2x1c2l2ZSwgYnV0IGludmFsaWRh dGUgcmFuZ2UgaXMgZXhjbHVzaXZlICovCi0JZW5kID0gcmFuZ2UtPmVuZCAtIDE7Ci0KLQlzcGlu X2xvY2soJm1uLT5sb2NrKTsKLQlpdCA9IGludGVydmFsX3RyZWVfaXRlcl9maXJzdCgmbW4tPm9i amVjdHMsIHJhbmdlLT5zdGFydCwgZW5kKTsKLQl3aGlsZSAoaXQpIHsKLQkJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iajsKLQotCQlpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2Fi bGUocmFuZ2UpKSB7Ci0JCQlyZXQgPSAtRUFHQUlOOwotCQkJYnJlYWs7Ci0JCX0KKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gY29udGFpbmVyX29mKG1uaSwgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QsIHVzZXJwdHIubm90aWZpZXIpOworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKKwlsb25nIHI7CiAKLQkJLyoKLQkJ ICogVGhlIG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ryb3lpbmcgdGhlCi0J CSAqIEdFTSBvYmplY3Qgc28gaXQgaXMgZW50aXJlbHkgcG9zc2libGUgdG8gZ2FpbiBhCi0JCSAq IHJlZmVyZW5jZSBvbiBhbiBvYmplY3QgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQKLQkJ ICogc2luY2Ugb3VyIHNlcmlhbGlzYXRpb24gaXMgdmlhIHRoZSBzcGlubG9jayBhbmQgbm90Ci0J CSAqIHRoZSBzdHJ1Y3RfbXV0ZXggLSBhbmQgY29uc2VxdWVudGx5IHVzZSBpdCBhZnRlciBpdAot CQkgKiBpcyBmcmVlZCBhbmQgdGhlbiBkb3VibGUgZnJlZSBpdC4gVG8gcHJldmVudCB0aGF0Ci0J CSAqIHVzZS1hZnRlci1mcmVlIHdlIG9ubHkgYWNxdWlyZSBhIHJlZmVyZW5jZSBvbiB0aGUKLQkJ ICogb2JqZWN0IGlmIGl0IGlzIG5vdCBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQu Ci0JCSAqLwotCQlvYmogPSBjb250YWluZXJfb2YoaXQsIHN0cnVjdCBpOTE1X21tdV9vYmplY3Qs IGl0KS0+b2JqOwotCQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZvYmotPmJhc2UucmVmY291 bnQpKSB7Ci0JCQlpdCA9IGludGVydmFsX3RyZWVfaXRlcl9uZXh0KGl0LCByYW5nZS0+c3RhcnQs IGVuZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlzcGluX3VubG9jaygmbW4tPmxvY2spOworCWlm ICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkpCisJCXJldHVybiBmYWxzZTsK IAotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaiwKLQkJCQkJICAgICBJOTE1X0dF TV9PQkpFQ1RfVU5CSU5EX0FDVElWRSB8Ci0JCQkJCSAgICAgSTkxNV9HRU1fT0JKRUNUX1VOQklO RF9CQVJSSUVSKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gX19pOTE1X2dlbV9vYmplY3Rf cHV0X3BhZ2VzKG9iaik7Ci0JCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKLQkJaWYgKHJldCkK LQkJCXJldHVybiByZXQ7CisJc3Bpbl9sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9sb2NrKTsKIAot CQlzcGluX2xvY2soJm1uLT5sb2NrKTsKKwltbXVfaW50ZXJ2YWxfc2V0X3NlcShtbmksIGN1cl9z ZXEpOwogCi0JCS8qCi0JCSAqIEFzIHdlIGRvIG5vdCAoeWV0KSBwcm90ZWN0IHRoZSBtbXUgZnJv bSBjb25jdXJyZW50IGluc2VydGlvbgotCQkgKiBvdmVyIHRoaXMgcmFuZ2UsIHRoZXJlIGlzIG5v IGd1YXJhbnRlZSB0aGF0IHRoaXMgc2VhcmNoIHdpbGwKLQkJICogdGVybWluYXRlIGdpdmVuIGEg cGF0aG9sb2dpYyB3b3JrbG9hZC4KLQkJICovCi0JCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2Zp cnN0KCZtbi0+b2JqZWN0cywgcmFuZ2UtPnN0YXJ0LCBlbmQpOwotCX0KLQlzcGluX3VubG9jaygm bW4tPmxvY2spOworCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9sb2NrKTsKIAotCXJl dHVybiByZXQ7CisJLyogd2Ugd2lsbCB1bmJpbmQgb24gbmV4dCBzdWJtaXNzaW9uLCBzdGlsbCBo YXZlIHVzZXJwdHIgcGlucyAqLworCXIgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KG9iai0+ YmFzZS5yZXN2LCB0cnVlLCBmYWxzZSwKKwkJCQkgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7 CisJaWYgKHIgPD0gMCkKKwkJZHJtX2VycigmaTkxNS0+ZHJtLCAiKCVsZCkgZmFpbGVkIHRvIHdh aXQgZm9yIGlkbGVcbiIsIHIpOwogCisJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBjb25zdCBz dHJ1Y3QgbW11X25vdGlmaWVyX29wcyBpOTE1X2dlbV91c2VycHRyX25vdGlmaWVyID0gewotCS5p bnZhbGlkYXRlX3JhbmdlX3N0YXJ0ID0gdXNlcnB0cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0 LAorc3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzIGk5MTVfZ2Vt X3VzZXJwdHJfbm90aWZpZXJfb3BzID0geworCS5pbnZhbGlkYXRlID0gaTkxNV9nZW1fdXNlcnB0 cl9pbnZhbGlkYXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqCi1p OTE1X21tdV9ub3RpZmllcl9jcmVhdGUoc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSkKLXsKLQlz dHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOwotCi0JbW4gPSBrbWFsbG9jKHNpemVvZigqbW4p LCBHRlBfS0VSTkVMKTsKLQlpZiAobW4gPT0gTlVMTCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmbW4tPmxvY2spOwotCW1uLT5tbi5vcHMgPSAmaTkxNV9n ZW1fdXNlcnB0cl9ub3RpZmllcjsKLQltbi0+b2JqZWN0cyA9IFJCX1JPT1RfQ0FDSEVEOwotCW1u LT5tbSA9IG1tOwotCi0JcmV0dXJuIG1uOwotfQotCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fdXNl cnB0cl9yZWxlYXNlX19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKLXsKLQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbzsKLQotCW1vID0gZmV0Y2hfYW5kX3pl cm8oJm9iai0+dXNlcnB0ci5tbXVfb2JqZWN0KTsKLQlpZiAoIW1vKQotCQlyZXR1cm47Ci0KLQlz cGluX2xvY2soJm1vLT5tbi0+bG9jayk7Ci0JZGVsX29iamVjdChtbyk7Ci0Jc3Bpbl91bmxvY2so Jm1vLT5tbi0+bG9jayk7Ci0Ja2ZyZWUobW8pOwotfQotCi1zdGF0aWMgc3RydWN0IGk5MTVfbW11 X25vdGlmaWVyICoKLWk5MTVfbW11X25vdGlmaWVyX2ZpbmQoc3RydWN0IGk5MTVfbW1fc3RydWN0 ICptbSkKLXsKLQlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uLCAqb2xkOwotCWludCBlcnI7 Ci0KLQltbiA9IFJFQURfT05DRShtbS0+bW4pOwotCWlmIChsaWtlbHkobW4pKQotCQlyZXR1cm4g bW47Ci0KLQltbiA9IGk5MTVfbW11X25vdGlmaWVyX2NyZWF0ZShtbSk7Ci0JaWYgKElTX0VSUiht bikpCi0JCXJldHVybiBtbjsKLQotCWVyciA9IG1tdV9ub3RpZmllcl9yZWdpc3RlcigmbW4tPm1u LCBtbS0+bW0pOwotCWlmIChlcnIpIHsKLQkJa2ZyZWUobW4pOwotCQlyZXR1cm4gRVJSX1BUUihl cnIpOwotCX0KLQotCW9sZCA9IGNtcHhjaGcoJm1tLT5tbiwgTlVMTCwgbW4pOwotCWlmIChvbGQp IHsKLQkJbW11X25vdGlmaWVyX3VucmVnaXN0ZXIoJm1uLT5tbiwgbW0tPm1tKTsKLQkJa2ZyZWUo bW4pOwotCQltbiA9IG9sZDsKLQl9Ci0KLQlyZXR1cm4gbW47Ci19Ci0KIHN0YXRpYyBpbnQKIGk5 MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCiB7Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsKLQlzdHJ1Y3QgaTkx NV9tbXVfb2JqZWN0ICptbzsKLQotCWlmIChHRU1fV0FSTl9PTighb2JqLT51c2VycHRyLm1tKSkK LQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltbiA9IGk5MTVfbW11X25vdGlmaWVyX2ZpbmQob2JqLT51 c2VycHRyLm1tKTsKLQlpZiAoSVNfRVJSKG1uKSkKLQkJcmV0dXJuIFBUUl9FUlIobW4pOwotCi0J bW8gPSBremFsbG9jKHNpemVvZigqbW8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1vKQotCQlyZXR1 cm4gLUVOT01FTTsKLQotCW1vLT5tbiA9IG1uOwotCW1vLT5vYmogPSBvYmo7Ci0JbW8tPml0LnN0 YXJ0ID0gb2JqLT51c2VycHRyLnB0cjsKLQltby0+aXQubGFzdCA9IG9iai0+dXNlcnB0ci5wdHIg KyBvYmotPmJhc2Uuc2l6ZSAtIDE7Ci0JUkJfQ0xFQVJfTk9ERSgmbW8tPml0LnJiKTsKLQotCW9i ai0+dXNlcnB0ci5tbXVfb2JqZWN0ID0gbW87Ci0JcmV0dXJuIDA7CisJcmV0dXJuIG1tdV9pbnRl cnZhbF9ub3RpZmllcl9pbnNlcnQoJm9iai0+dXNlcnB0ci5ub3RpZmllciwgY3VycmVudC0+bW0s CisJCQkJCSAgICBvYmotPnVzZXJwdHIucHRyLCBvYmotPmJhc2Uuc2l6ZSwKKwkJCQkJICAgICZp OTE1X2dlbV91c2VycHRyX25vdGlmaWVyX29wcyk7CiB9CiAKLXN0YXRpYyB2b2lkCi1pOTE1X21t dV9ub3RpZmllcl9mcmVlKHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW4sCi0JCSAgICAgICBz dHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlpZiAobW4gPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0J bW11X25vdGlmaWVyX3VucmVnaXN0ZXIoJm1uLT5tbiwgbW0pOwotCWtmcmVlKG1uKTsKLX0KLQot Ci1zdGF0aWMgc3RydWN0IGk5MTVfbW1fc3RydWN0ICoKLV9faTkxNV9tbV9zdHJ1Y3RfZmluZChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgc3RydWN0IG1tX3N0cnVjdCAqcmVhbCkKLXsK LQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKml0LCAqbW0gPSBOVUxMOwotCi0JcmN1X3JlYWRfbG9j aygpOwotCWhhc2hfZm9yX2VhY2hfcG9zc2libGVfcmN1KGk5MTUtPm1tX3N0cnVjdHMsCi0JCQkJ ICAgaXQsIG5vZGUsCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcpcmVhbCkKLQkJaWYgKGl0LT5tbSA9 PSByZWFsICYmIGtyZWZfZ2V0X3VubGVzc196ZXJvKCZpdC0+a3JlZikpIHsKLQkJCW1tID0gaXQ7 Ci0JCQlicmVhazsKLQkJfQotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIG1tOwotfQot Ci1zdGF0aWMgaW50Ci1pOTE1X2dlbV91c2VycHRyX2luaXRfX21tX3N0cnVjdChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQorc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3VzZXJw dHJfZHJvcF9yZWYoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7Ci0Jc3RydWN0 IGk5MTVfbW1fc3RydWN0ICptbSwgKm5ldzsKLQlpbnQgcmV0ID0gMDsKLQotCS8qIER1cmluZyBy ZWxlYXNlIG9mIHRoZSBHRU0gb2JqZWN0IHdlIGhvbGQgdGhlIHN0cnVjdF9tdXRleC4gVGhpcwot CSAqIHByZWNsdWRlcyB1cyBmcm9tIGNhbGxpbmcgbW1wdXQoKSBhdCB0aGF0IHRpbWUgYXMgdGhh dCBtYXkgYmUKLQkgKiB0aGUgbGFzdCByZWZlcmVuY2UgYW5kIHNvIGNhbGwgZXhpdF9tbWFwKCku IGV4aXRfbW1hcCgpIHdpbGwKLQkgKiBhdHRlbXB0IHRvIHJlYXAgdGhlIHZtYSwgYW5kIGlmIHdl IHdlcmUgaG9sZGluZyBhIEdUVCBtbWFwCi0JICogd291bGQgdGhlbiBjYWxsIGRybV9nZW1fdm1f Y2xvc2UoKSBhbmQgYXR0ZW1wdCB0byByZWFjcXVpcmUKLQkgKiB0aGUgc3RydWN0IG11dGV4LiBT byBpbiBvcmRlciB0byBhdm9pZCB0aGF0IHJlY3Vyc2lvbiwgd2UgaGF2ZQotCSAqIHRvIGRlZmVy IHJlbGVhc2luZyB0aGUgbW0gcmVmZXJlbmNlIHVudGlsIGFmdGVyIHdlIGRyb3AgdGhlCi0JICog c3RydWN0X211dGV4LCBpLmUuIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSB3b3JrZXIgdG8gZG8gdGhl IGNsZWFuCi0JICogdXAuCi0JICovCi0JbW0gPSBfX2k5MTVfbW1fc3RydWN0X2ZpbmQoaTkxNSwg Y3VycmVudC0+bW0pOwotCWlmIChtbSkKLQkJZ290byBvdXQ7CiAKLQluZXcgPSBrbWFsbG9jKHNp emVvZigqbW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5ldykKLQkJcmV0dXJuIC1FTk9NRU07CisJ c3Bpbl9sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9sb2NrKTsKKwlpZiAoIS0tb2JqLT51c2VycHRy LnBhZ2VfcmVmKSB7CisJCWNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gb2JqLT5iYXNl LnNpemUgPj4gUEFHRV9TSElGVDsKIAotCWtyZWZfaW5pdCgmbmV3LT5rcmVmKTsKLQluZXctPmk5 MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwotCW5ldy0+bW0gPSBjdXJyZW50LT5tbTsKLQlu ZXctPm1uID0gTlVMTDsKLQotCXNwaW5fbG9jaygmaTkxNS0+bW1fbG9jayk7Ci0JbW0gPSBfX2k5 MTVfbW1fc3RydWN0X2ZpbmQoaTkxNSwgY3VycmVudC0+bW0pOwotCWlmICghbW0pIHsKLQkJaGFz aF9hZGRfcmN1KGk5MTUtPm1tX3N0cnVjdHMsCi0JCQkgICAgICZuZXctPm5vZGUsCi0JCQkgICAg ICh1bnNpZ25lZCBsb25nKW5ldy0+bW0pOwotCQltbWdyYWIoY3VycmVudC0+bW0pOwotCQltbSA9 IG5ldzsKKwkJdW5waW5fdXNlcl9wYWdlcyhvYmotPnVzZXJwdHIucHZlYywgbnVtX3BhZ2VzKTsK KwkJa2ZyZWUob2JqLT51c2VycHRyLnB2ZWMpOworCQlvYmotPnVzZXJwdHIucHZlYyA9IE5VTEw7 CiAJfQotCXNwaW5fdW5sb2NrKCZpOTE1LT5tbV9sb2NrKTsKLQlpZiAobW0gIT0gbmV3KQotCQlr ZnJlZShuZXcpOwotCi1vdXQ6Ci0Jb2JqLT51c2VycHRyLm1tID0gbW07Ci0JcmV0dXJuIHJldDsK LX0KLQotc3RhdGljIHZvaWQKLV9faTkxNV9tbV9zdHJ1Y3RfZnJlZV9fd29ya2VyKHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tID0gY29udGFp bmVyX29mKHdvcmssIHR5cGVvZigqbW0pLCB3b3JrLndvcmspOwotCi0JaTkxNV9tbXVfbm90aWZp ZXJfZnJlZShtbS0+bW4sIG1tLT5tbSk7Ci0JbW1kcm9wKG1tLT5tbSk7Ci0Ja2ZyZWUobW0pOwot fQotCi1zdGF0aWMgdm9pZAotX19pOTE1X21tX3N0cnVjdF9mcmVlKHN0cnVjdCBrcmVmICprcmVm KQotewotCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0gPSBjb250YWluZXJfb2Yoa3JlZiwgdHlw ZW9mKCptbSksIGtyZWYpOwotCi0Jc3Bpbl9sb2NrKCZtbS0+aTkxNS0+bW1fbG9jayk7Ci0JaGFz aF9kZWxfcmN1KCZtbS0+bm9kZSk7Ci0Jc3Bpbl91bmxvY2soJm1tLT5pOTE1LT5tbV9sb2NrKTsK LQotCUlOSVRfUkNVX1dPUksoJm1tLT53b3JrLCBfX2k5MTVfbW1fc3RydWN0X2ZyZWVfX3dvcmtl cik7Ci0JcXVldWVfcmN1X3dvcmsoc3lzdGVtX3dxLCAmbW0tPndvcmspOwotfQotCi1zdGF0aWMg dm9pZAotaTkxNV9nZW1fdXNlcnB0cl9yZWxlYXNlX19tbV9zdHJ1Y3Qoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaikKLXsKLQlpZiAob2JqLT51c2VycHRyLm1tID09IE5VTEwpCi0JCXJl dHVybjsKLQotCWtyZWZfcHV0KCZvYmotPnVzZXJwdHIubW0tPmtyZWYsIF9faTkxNV9tbV9zdHJ1 Y3RfZnJlZSk7Ci0Jb2JqLT51c2VycHRyLm1tID0gTlVMTDsKKwlHRU1fQlVHX09OKG9iai0+dXNl cnB0ci5wYWdlX3JlZiA8IDApOworCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9sb2Nr KTsKIH0KIAotc3RydWN0IGdldF9wYWdlc193b3JrIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29y azsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCB0YXNrX3N0cnVj dCAqdGFzazsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKgotX19pOTE1X2dlbV91c2Vy cHRyX2FsbG9jX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAg ICAgc3RydWN0IHBhZ2UgKipwdmVjLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKK3N0YXRpYyBp bnQgaTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5i YXNlLmRldik7CisJY29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6 ZSA+PiBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGludCBtYXhfc2VnbWVudCA9IGk5MTVfc2dfc2Vn bWVudF9zaXplKCk7CiAJc3RydWN0IHNnX3RhYmxlICpzdDsKIAl1bnNpZ25lZCBpbnQgc2dfcGFn ZV9zaXplczsKKwlzdHJ1Y3QgcGFnZSAqKnB2ZWM7CiAJaW50IHJldDsKIAogCXN0ID0ga21hbGxv YyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdCkKLQkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrKCZpOTE1LT5tbS5ub3Rp Zmllcl9sb2NrKTsKKwlpZiAoR0VNX1dBUk5fT04oIW9iai0+dXNlcnB0ci5wYWdlX3JlZikpIHsK KwkJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm5vdGlmaWVyX2xvY2spOworCQlyZXQgPSAtRUZBVUxU OworCQlnb3RvIGVycl9mcmVlOworCX0KKworCW9iai0+dXNlcnB0ci5wYWdlX3JlZisrOworCXB2 ZWMgPSBvYmotPnVzZXJwdHIucHZlYzsKKwlzcGluX3VubG9jaygmaTkxNS0+bW0ubm90aWZpZXJf bG9jayk7CiAKIGFsbG9jX3RhYmxlOgogCXJldCA9IF9fc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdl cyhzdCwgcHZlYywgbnVtX3BhZ2VzLAogCQkJCQkgIDAsIG51bV9wYWdlcyA8PCBQQUdFX1NISUZU LAogCQkJCQkgIG1heF9zZWdtZW50LAogCQkJCQkgIEdGUF9LRVJORUwpOwotCWlmIChyZXQpIHsK LQkJa2ZyZWUoc3QpOwotCQlyZXR1cm4gRVJSX1BUUihyZXQpOwotCX0KKwlpZiAocmV0KQorCQln b3RvIGVycjsKIAogCXJldCA9IGk5MTVfZ2VtX2d0dF9wcmVwYXJlX3BhZ2VzKG9iaiwgc3QpOwog CWlmIChyZXQpIHsKQEAgLTM5MywyMDMgKzE1MiwyMCBAQCBfX2k5MTVfZ2VtX3VzZXJwdHJfYWxs b2NfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCWdvdG8gYWxsb2Nf dGFibGU7CiAJCX0KIAotCQlrZnJlZShzdCk7Ci0JCXJldHVybiBFUlJfUFRSKHJldCk7CisJCWdv dG8gZXJyOwogCX0KIAogCXNnX3BhZ2Vfc2l6ZXMgPSBpOTE1X3NnX3BhZ2Vfc2l6ZXMoc3QtPnNn bCk7CiAKIAlfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMob2JqLCBzdCwgc2dfcGFnZV9zaXpl cyk7CiAKLQlyZXR1cm4gc3Q7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fX2k5MTVfZ2VtX3VzZXJwdHJf Z2V0X3BhZ2VzX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKQotewotCXN0cnVjdCBn ZXRfcGFnZXNfd29yayAqd29yayA9IGNvbnRhaW5lcl9vZihfd29yaywgdHlwZW9mKCp3b3JrKSwg d29yayk7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHdvcmstPm9iajsKLQlj b25zdCB1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7 Ci0JdW5zaWduZWQgbG9uZyBwaW5uZWQ7Ci0Jc3RydWN0IHBhZ2UgKipwdmVjOwotCWludCByZXQ7 Ci0KLQlyZXQgPSAtRU5PTUVNOwotCXBpbm5lZCA9IDA7Ci0KLQlwdmVjID0ga3ZtYWxsb2NfYXJy YXkobnBhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwotCWlmIChwdmVj ICE9IE5VTEwpIHsKLQkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBvYmotPnVzZXJwdHIubW0tPm1t OwotCQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwotCQlpbnQgbG9ja2VkID0gMDsKLQotCQlpZiAo IWk5MTVfZ2VtX29iamVjdF9pc19yZWFkb25seShvYmopKQotCQkJZmxhZ3MgfD0gRk9MTF9XUklU RTsKLQotCQlyZXQgPSAtRUZBVUxUOwotCQlpZiAobW1nZXRfbm90X3plcm8obW0pKSB7Ci0JCQl3 aGlsZSAocGlubmVkIDwgbnBhZ2VzKSB7Ci0JCQkJaWYgKCFsb2NrZWQpIHsKLQkJCQkJbW1hcF9y ZWFkX2xvY2sobW0pOwotCQkJCQlsb2NrZWQgPSAxOwotCQkJCX0KLQkJCQlyZXQgPSBwaW5fdXNl cl9wYWdlc19yZW1vdGUKLQkJCQkJKG1tLAotCQkJCQkgb2JqLT51c2VycHRyLnB0ciArIHBpbm5l ZCAqIFBBR0VfU0laRSwKLQkJCQkJIG5wYWdlcyAtIHBpbm5lZCwKLQkJCQkJIGZsYWdzLAotCQkJ CQkgcHZlYyArIHBpbm5lZCwgTlVMTCwgJmxvY2tlZCk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJ CWJyZWFrOwotCi0JCQkJcGlubmVkICs9IHJldDsKLQkJCX0KLQkJCWlmIChsb2NrZWQpCi0JCQkJ bW1hcF9yZWFkX3VubG9jayhtbSk7Ci0JCQltbXB1dChtbSk7Ci0JCX0KLQl9Ci0KLQltdXRleF9s b2NrX25lc3RlZCgmb2JqLT5tbS5sb2NrLCBJOTE1X01NX0dFVF9QQUdFUyk7Ci0JaWYgKG9iai0+ dXNlcnB0ci53b3JrID09ICZ3b3JrLT53b3JrKSB7Ci0JCXN0cnVjdCBzZ190YWJsZSAqcGFnZXMg PSBFUlJfUFRSKHJldCk7Ci0KLQkJaWYgKHBpbm5lZCA9PSBucGFnZXMpIHsKLQkJCXBhZ2VzID0g X19pOTE1X2dlbV91c2VycHRyX2FsbG9jX3BhZ2VzKG9iaiwgcHZlYywKLQkJCQkJCQkgICAgICAg bnBhZ2VzKTsKLQkJCWlmICghSVNfRVJSKHBhZ2VzKSkgewotCQkJCXBpbm5lZCA9IDA7Ci0JCQkJ cGFnZXMgPSBOVUxMOwotCQkJfQotCQl9Ci0KLQkJb2JqLT51c2VycHRyLndvcmsgPSBFUlJfQ0FT VChwYWdlcyk7Ci0JCWlmIChJU19FUlIocGFnZXMpKQotCQkJX19pOTE1X2dlbV91c2VycHRyX3Nl dF9hY3RpdmUob2JqLCBmYWxzZSk7Ci0JfQotCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsK LQotCXVucGluX3VzZXJfcGFnZXMocHZlYywgcGlubmVkKTsKLQlrdmZyZWUocHZlYyk7Ci0KLQlp OTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Ci0JcHV0X3Rhc2tfc3RydWN0KHdvcmstPnRhc2spOwot CWtmcmVlKHdvcmspOwotfQotCi1zdGF0aWMgc3RydWN0IHNnX3RhYmxlICoKLV9faTkxNV9nZW1f dXNlcnB0cl9nZXRfcGFnZXNfc2NoZWR1bGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKLXsKLQlzdHJ1Y3QgZ2V0X3BhZ2VzX3dvcmsgKndvcms7Ci0KLQkvKiBTcGF3biBhIHdvcmtl ciBzbyB0aGF0IHdlIGNhbiBhY3F1aXJlIHRoZQotCSAqIHVzZXIgcGFnZXMgd2l0aG91dCBob2xk aW5nIG91ciBtdXRleC4gQWNjZXNzCi0JICogdG8gdGhlIHVzZXIgcGFnZXMgcmVxdWlyZXMgbW1h cF9sb2NrLCBhbmQgd2UgaGF2ZQotCSAqIGEgc3RyaWN0IGxvY2sgb3JkZXJpbmcgb2YgbW1hcF9s b2NrLCBzdHJ1Y3RfbXV0ZXggLQotCSAqIHdlIGFscmVhZHkgaG9sZCBzdHJ1Y3RfbXV0ZXggaGVy ZSBhbmQgc28gY2Fubm90Ci0JICogY2FsbCBndXAgd2l0aG91dCBlbmNvdW50ZXJpbmcgYSBsb2Nr IGludmVyc2lvbi4KLQkgKgotCSAqIFVzZXJzcGFjZSB3aWxsIGtlZXAgb24gcmVwZWF0aW5nIHRo ZSBvcGVyYXRpb24KLQkgKiAodGhhbmtzIHRvIEVBR0FJTikgdW50aWwgZWl0aGVyIHdlIGhpdCB0 aGUgZmFzdAotCSAqIHBhdGggb3IgdGhlIHdvcmtlciBjb21wbGV0ZXMuIElmIHRoZSB3b3JrZXIg aXMKLQkgKiBjYW5jZWxsZWQgb3Igc3VwZXJzZWRlZCwgdGhlIHRhc2sgaXMgc3RpbGwgcnVuCi0J ICogYnV0IHRoZSByZXN1bHRzIGlnbm9yZWQuIChUaGlzIGxlYWRzIHRvCi0JICogY29tcGxpY2F0 aW9ucyB0aGF0IHdlIG1heSBoYXZlIGEgc3RyYXkgb2JqZWN0Ci0JICogcmVmY291bnQgdGhhdCB3 ZSBuZWVkIHRvIGJlIHdhcnkgb2Ygd2hlbgotCSAqIGNoZWNraW5nIGZvciBleGlzdGluZyBvYmpl Y3RzIGR1cmluZyBjcmVhdGlvbi4pCi0JICogSWYgdGhlIHdvcmtlciBlbmNvdW50ZXJzIGFuIGVy cm9yLCBpdCByZXBvcnRzCi0JICogdGhhdCBlcnJvciBiYWNrIHRvIHRoaXMgZnVuY3Rpb24gdGhy b3VnaAotCSAqIG9iai0+dXNlcnB0ci53b3JrID0gRVJSX1BUUi4KLQkgKi8KLQl3b3JrID0ga21h bGxvYyhzaXplb2YoKndvcmspLCBHRlBfS0VSTkVMKTsKLQlpZiAod29yayA9PSBOVUxMKQotCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCW9iai0+dXNlcnB0ci53b3JrID0gJndvcmstPndv cms7Ci0KLQl3b3JrLT5vYmogPSBpOTE1X2dlbV9vYmplY3RfZ2V0KG9iaik7Ci0KLQl3b3JrLT50 YXNrID0gY3VycmVudDsKLQlnZXRfdGFza19zdHJ1Y3Qod29yay0+dGFzayk7Ci0KLQlJTklUX1dP UksoJndvcmstPndvcmssIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfd29ya2VyKTsKLQlx dWV1ZV93b3JrKHRvX2k5MTUob2JqLT5iYXNlLmRldiktPm1tLnVzZXJwdHJfd3EsICZ3b3JrLT53 b3JrKTsKLQotCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOwotfQotCi1zdGF0aWMgaW50IGk5MTVf Z2VtX3VzZXJwdHJfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17 Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdF X1NISUZUOwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gb2JqLT51c2VycHRyLm1tLT5tbTsKLQlz dHJ1Y3QgcGFnZSAqKnB2ZWM7Ci0Jc3RydWN0IHNnX3RhYmxlICpwYWdlczsKLQlib29sIGFjdGl2 ZTsKLQlpbnQgcGlubmVkOwotCXVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSAwOwotCi0JLyogSWYg dXNlcnNwYWNlIHNob3VsZCBlbmdpbmVlciB0aGF0IHRoZXNlIHBhZ2VzIGFyZSByZXBsYWNlZCBp bgotCSAqIHRoZSB2bWEgYmV0d2VlbiB1cyBiaW5kaW5nIHRoaXMgcGFnZSBpbnRvIHRoZSBHVFQg YW5kIGNvbXBsZXRpb24KLQkgKiBvZiByZW5kZXJpbmcuLi4gVGhlaXIgbG9zcy4gSWYgdGhleSBj aGFuZ2UgdGhlIG1hcHBpbmcgb2YgdGhlaXIKLQkgKiBwYWdlcyB0aGV5IG5lZWQgdG8gY3JlYXRl IGEgbmV3IGJvIHRvIHBvaW50IHRvIHRoZSBuZXcgdm1hLgotCSAqCi0JICogSG93ZXZlciwgdGhh dCBzdGlsbCBsZWF2ZXMgb3BlbiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIHZtYQotCSAqIGJlaW5n IGNvcGllZCB1cG9uIGZvcmsuIFdoaWNoIGZhbGxzIHVuZGVyIHRoZSBzYW1lIHVzZXJzcGFjZQot CSAqIHN5bmNocm9uaXNhdGlvbiBpc3N1ZSBhcyBhIHJlZ3VsYXIgYm8sIGV4Y2VwdCB0aGF0IHRo aXMgdGltZQotCSAqIHRoZSBwcm9jZXNzIG1heSBub3QgYmUgZXhwZWN0aW5nIHRoYXQgYSBwYXJ0 aWN1bGFyIHBpZWNlIG9mCi0JICogbWVtb3J5IGlzIHRpZWQgdG8gdGhlIEdQVS4KLQkgKgotCSAq IEZvcnR1bmF0ZWx5LCB3ZSBjYW4gaG9vayBpbnRvIHRoZSBtbXVfbm90aWZpZXIgaW4gb3JkZXIg dG8KLQkgKiBkaXNjYXJkIHRoZSBwYWdlIHJlZmVyZW5jZXMgcHJpb3IgdG8gYW55dGhpbmcgbmFz dHkgaGFwcGVuaW5nCi0JICogdG8gdGhlIHZtYSAoZGlzY2FyZCBvciBjbG9uaW5nKSB3aGljaCBz aG91bGQgcHJldmVudCB0aGUgbW9yZQotCSAqIGVncmVnaW91cyBjYXNlcyBmcm9tIGNhdXNpbmcg aGFybS4KLQkgKi8KLQotCWlmIChvYmotPnVzZXJwdHIud29yaykgewotCQkvKiBhY3RpdmUgZmxh ZyBzaG91bGQgc3RpbGwgYmUgaGVsZCBmb3IgdGhlIHBlbmRpbmcgd29yayAqLwotCQlpZiAoSVNf RVJSKG9iai0+dXNlcnB0ci53b3JrKSkKLQkJCXJldHVybiBQVFJfRVJSKG9iai0+dXNlcnB0ci53 b3JrKTsKLQkJZWxzZQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JcHZlYyA9IE5VTEw7Ci0J cGlubmVkID0gMDsKLQotCWlmIChtbSA9PSBjdXJyZW50LT5tbSkgewotCQlwdmVjID0ga3ZtYWxs b2NfYXJyYXkobnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCi0JCQkJICAgICAgR0ZQ X0tFUk5FTCB8Ci0JCQkJICAgICAgX19HRlBfTk9SRVRSWSB8Ci0JCQkJICAgICAgX19HRlBfTk9X QVJOKTsKLQkJaWYgKHB2ZWMpIHsKLQkJCS8qIGRlZmVyIHRvIHdvcmtlciBpZiBtYWxsb2MgZmFp bHMgKi8KLQkJCWlmICghaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRvbmx5KG9iaikpCi0JCQkJZ3Vw X2ZsYWdzIHw9IEZPTExfV1JJVEU7Ci0JCQlwaW5uZWQgPSBwaW5fdXNlcl9wYWdlc19mYXN0X29u bHkob2JqLT51c2VycHRyLnB0ciwKLQkJCQkJCQkgIG51bV9wYWdlcywgZ3VwX2ZsYWdzLAotCQkJ CQkJCSAgcHZlYyk7Ci0JCX0KLQl9Ci0KLQlhY3RpdmUgPSBmYWxzZTsKLQlpZiAocGlubmVkIDwg MCkgewotCQlwYWdlcyA9IEVSUl9QVFIocGlubmVkKTsKLQkJcGlubmVkID0gMDsKLQl9IGVsc2Ug aWYgKHBpbm5lZCA8IG51bV9wYWdlcykgewotCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9n ZXRfcGFnZXNfc2NoZWR1bGUob2JqKTsKLQkJYWN0aXZlID0gcGFnZXMgPT0gRVJSX1BUUigtRUFH QUlOKTsKLQl9IGVsc2UgewotCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdl cyhvYmosIHB2ZWMsIG51bV9wYWdlcyk7Ci0JCWFjdGl2ZSA9ICFJU19FUlIocGFnZXMpOwotCX0K LQlpZiAoYWN0aXZlKQotCQlfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIHRydWUp OwotCi0JaWYgKElTX0VSUihwYWdlcykpCi0JCXVucGluX3VzZXJfcGFnZXMocHZlYywgcGlubmVk KTsKLQlrdmZyZWUocHZlYyk7CisJcmV0dXJuIDA7CiAKLQlyZXR1cm4gUFRSX0VSUl9PUl9aRVJP KHBhZ2VzKTsKK2VycjoKKwlpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9kcm9wX3JlZihvYmopOwor ZXJyX2ZyZWU6CisJa2ZyZWUoc3QpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBA IC01OTksOSArMTc1LDYgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKIAlzdHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7CiAJc3RydWN0 IHBhZ2UgKnBhZ2U7CiAKLQkvKiBDYW5jZWwgYW55IGluZmxpZ2h0IHdvcmsgYW5kIGZvcmNlIHRo ZW0gdG8gcmVzdGFydCB0aGVpciBndXAgKi8KLQlvYmotPnVzZXJwdHIud29yayA9IE5VTEw7Ci0J X19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBmYWxzZSk7CiAJaWYgKCFwYWdlcykK IAkJcmV0dXJuOwogCkBAIC02NDEsMTkgKzIxNCwxMzIgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRf cGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJfQogCiAJCW1hcmtfcGFn ZV9hY2Nlc3NlZChwYWdlKTsKLQkJdW5waW5fdXNlcl9wYWdlKHBhZ2UpOwogCX0KIAlvYmotPm1t LmRpcnR5ID0gZmFsc2U7CiAKIAlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKIAlrZnJlZShwYWdlcyk7 CisKKwlpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9kcm9wX3JlZihvYmopOworfQorCitzdGF0aWMg aW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3VuYmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLCBib29sIGdldF9wYWdlcykKK3sKKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOwor CWludCBlcnI7CisKKwllcnIgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaiwgSTkxNV9HRU1f T0JKRUNUX1VOQklORF9BQ1RJVkUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAo R0VNX1dBUk5fT04oaTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSkpCisJCXJl dHVybiAtRUJVU1k7CisKKwltdXRleF9sb2NrX25lc3RlZCgmb2JqLT5tbS5sb2NrLCBJOTE1X01N X0dFVF9QQUdFUyk7CisKKwlwYWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9i aik7CisJaWYgKCFJU19FUlJfT1JfTlVMTChwYWdlcykpCisJCWk5MTVfZ2VtX3VzZXJwdHJfcHV0 X3BhZ2VzKG9iaiwgcGFnZXMpOworCisJaWYgKGdldF9wYWdlcykKKwkJZXJyID0gX19fX2k5MTVf Z2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKKwltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7 CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0 X2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7CisJY29uc3QgdW5zaWdu ZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOworCXN0cnVj dCBwYWdlICoqcHZlYzsKKwl1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gMDsKKwl1bnNpZ25lZCBs b25nIG5vdGlmaWVyX3NlcTsKKwlpbnQgcGlubmVkLCByZXQ7CisKKwlpZiAob2JqLT51c2VycHRy Lm5vdGlmaWVyLm1tICE9IGN1cnJlbnQtPm1tKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9 IGk5MTVfZ2VtX29iamVjdF9sb2NrX2ludGVycnVwdGlibGUob2JqLCBOVUxMKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJLyogTWFrZSBzdXJlIHVzZXJwdHIgaXMgdW5ib3VuZCBmb3Ig bmV4dCBhdHRlbXB0LCBzbyB3ZSBkb24ndCB1c2Ugc3RhbGUgcGFnZXMuICovCisJcmV0ID0gaTkx NV9nZW1fb2JqZWN0X3VzZXJwdHJfdW5iaW5kKG9iaiwgZmFsc2UpOworCWk5MTVfZ2VtX29iamVj dF91bmxvY2sob2JqKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbm90aWZpZXJfc2Vx ID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oJm9iai0+dXNlcnB0ci5ub3RpZmllcik7CisKKwlw dmVjID0ga3ZtYWxsb2NfYXJyYXkobnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdG UF9LRVJORUwpOworCWlmICghcHZlYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWk5MTVf Z2VtX29iamVjdF9pc19yZWFkb25seShvYmopKQorCQlndXBfZmxhZ3MgfD0gRk9MTF9XUklURTsK KworCXBpbm5lZCA9IHJldCA9IDA7CisJd2hpbGUgKHBpbm5lZCA8IG51bV9wYWdlcykgeworCQly ZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KG9iai0+dXNlcnB0ci5wdHIgKyBwaW5uZWQgKiBQQUdF X1NJWkUsCisJCQkJCSAgbnVtX3BhZ2VzIC0gcGlubmVkLCBndXBfZmxhZ3MsCisJCQkJCSAgJnB2 ZWNbcGlubmVkXSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJcGlubmVkICs9 IHJldDsKKwl9CisKKwlzcGluX2xvY2soJmk5MTUtPm1tLm5vdGlmaWVyX2xvY2spOworCisJaWYg KG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZvYmotPnVzZXJwdHIubm90aWZpZXIsCisJCSFvYmot PnVzZXJwdHIucGFnZV9yZWYgPyBub3RpZmllcl9zZXEgOgorCQlvYmotPnVzZXJwdHIubm90aWZp ZXJfc2VxKSkgeworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJ aWYgKCFvYmotPnVzZXJwdHIucGFnZV9yZWYrKykgeworCQlvYmotPnVzZXJwdHIucHZlYyA9IHB2 ZWM7CisJCW9iai0+dXNlcnB0ci5ub3RpZmllcl9zZXEgPSBub3RpZmllcl9zZXE7CisKKwkJcHZl YyA9IE5VTEw7CisJfQorCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5ub3Rp Zmllcl9sb2NrKTsKKworb3V0OgorCWlmIChwdmVjKSB7CisJCXVucGluX3VzZXJfcGFnZXMocHZl YywgcGlubmVkKTsKKwkJa3ZmcmVlKHB2ZWMpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2lu dCBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfZG9uZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKQoreworCWlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgmb2JqLT51c2Vy cHRyLm5vdGlmaWVyLAorCQkJCSAgICBvYmotPnVzZXJwdHIubm90aWZpZXJfc2VxKSkgeworCQkv KiBXZSBjb2xsaWRlZCB3aXRoIHRoZSBtbXUgbm90aWZpZXIsIG5lZWQgdG8gcmV0cnkgKi8KKwor CQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2dlbV9v YmplY3RfdXNlcnB0cl9zdWJtaXRfZmluaShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KQoreworCWk5MTVfZ2VtX29iamVjdF91c2VycHRyX2Ryb3BfcmVmKG9iaik7CiB9CiAKIHN0YXRp YyB2b2lkCiBpOTE1X2dlbV91c2VycHRyX3JlbGVhc2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKIHsKLQlpOTE1X2dlbV91c2VycHRyX3JlbGVhc2VfX21tdV9ub3RpZmllcihvYmop OwotCWk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW1fc3RydWN0KG9iaik7CisJbW11X2ludGVy dmFsX25vdGlmaWVyX3JlbW92ZSgmb2JqLT51c2VycHRyLm5vdGlmaWVyKTsKKwlvYmotPnVzZXJw dHIubm90aWZpZXIubW0gPSBOVUxMOwogfQogCiBzdGF0aWMgaW50CkBAIC02ODYsNyArMzcyLDYg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV91 c2VycHRyX29wcyA9IHsKIAkubmFtZSA9ICJpOTE1X2dlbV9vYmplY3RfdXNlcnB0ciIsCiAJLmZs YWdzID0gSTkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUgfAogCQkgSTkxNV9HRU1fT0JKRUNU X05PX01NQVAgfAotCQkgSTkxNV9HRU1fT0JKRUNUX0FTWU5DX0NBTkNFTCB8CiAJCSBJOTE1X0dF TV9PQkpFQ1RfSVNfUFJPWFksCiAJLmdldF9wYWdlcyA9IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3Bh Z2VzLAogCS5wdXRfcGFnZXMgPSBpOTE1X2dlbV91c2VycHRyX3B1dF9wYWdlcywKQEAgLTgwNyw2 ICs0OTIsNyBAQCBpOTE1X2dlbV91c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAJaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9jb2hlcmVuY3kob2JqLCBJOTE1X0NBQ0hFX0xM Qyk7CiAKIAlvYmotPnVzZXJwdHIucHRyID0gYXJncy0+dXNlcl9wdHI7CisJb2JqLT51c2VycHRy Lm5vdGlmaWVyX3NlcSA9IFVMT05HX01BWDsKIAlpZiAoYXJncy0+ZmxhZ3MgJiBJOTE1X1VTRVJQ VFJfUkVBRF9PTkxZKQogCQlpOTE1X2dlbV9vYmplY3Rfc2V0X3JlYWRvbmx5KG9iaik7CiAKQEAg LTgxNCw5ICs1MDAsNyBAQCBpOTE1X2dlbV91c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCiAJICogYXQgYmluZGluZy4gVGhpcyBtZWFucyB0aGF0IHdlIG5lZWQgdG8gaG9vayBp bnRvIHRoZSBtbXVfbm90aWZpZXIKIAkgKiBpbiBvcmRlciB0byBkZXRlY3QgaWYgdGhlIG1tdSBp cyBkZXN0cm95ZWQuCiAJICovCi0JcmV0ID0gaTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbV9zdHJ1 Y3Qob2JqKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9f bW11X25vdGlmaWVyKG9iaik7CisJcmV0ID0gaTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbXVfbm90 aWZpZXIob2JqKTsKIAlpZiAocmV0ID09IDApCiAJCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0 ZShmaWxlLCAmb2JqLT5iYXNlLCAmaGFuZGxlKTsKIApAQCAtODM1LDE1ICs1MTksNyBAQCBpOTE1 X2dlbV91c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiBpbnQgaTkxNV9nZW1f aW5pdF91c2VycHRyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKICNpZmRl ZiBDT05GSUdfTU1VX05PVElGSUVSCi0Jc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5tbV9sb2Nr KTsKLQloYXNoX2luaXQoZGV2X3ByaXYtPm1tX3N0cnVjdHMpOwotCi0JZGV2X3ByaXYtPm1tLnVz ZXJwdHJfd3EgPQotCQlhbGxvY193b3JrcXVldWUoImk5MTUtdXNlcnB0ci1hY3F1aXJlIiwKLQkJ CQlXUV9ISUdIUFJJIHwgV1FfVU5CT1VORCwKLQkJCQkwKTsKLQlpZiAoIWRldl9wcml2LT5tbS51 c2VycHRyX3dxKQotCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYt Pm1tLm5vdGlmaWVyX2xvY2spOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKQEAgLTg1MSw3ICs1Mjcs NCBAQCBpbnQgaTkxNV9nZW1faW5pdF91c2VycHRyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIAogdm9pZCBpOTE1X2dlbV9jbGVhbnVwX3VzZXJwdHIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQogewotI2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVIKLQlkZXN0 cm95X3dvcmtxdWV1ZShkZXZfcHJpdi0+bW0udXNlcnB0cl93cSk7Ci0jZW5kaWYKIH0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCmluZGV4IDc3ZDQ3YzE4NTcyZC4uMjQzZjE1NTZkM2VhIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTU5MSwxMSArNTkxLDEwIEBAIHN0cnVjdCBpOTE1X2dlbV9t bSB7CiAKICNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCiAJLyoqCi0JICogV29ya3F1ZXVlIHRv IGZhdWx0IGluIHVzZXJwdHIgcGFnZXMsIGZsdXNoZWQgYnkgdGhlIGV4ZWNidWYKLQkgKiB3aGVu IHJlcXVpcmVkIGJ1dCBvdGhlcndpc2UgbGVmdCB0byB1c2Vyc3BhY2UgdG8gdHJ5IGFnYWluCi0J ICogb24gRUFHQUlOLgorCSAqIG5vdGlmaWVyX2xvY2sgZm9yIG1tdSBub3RpZmllcnMsIG1lbW9y eSBtYXkgbm90IGJlIGFsbG9jYXRlZAorCSAqIHdoaWxlIGhvbGRpbmcgdGhpcyBsb2NrLgogCSAq LwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp1c2VycHRyX3dxOworCXNwaW5sb2NrX3Qgbm90 aWZpZXJfbG9jazsKICNlbmRpZgogCiAJLyogc2hyaW5rZXIgYWNjb3VudGluZywgYWxzbyB1c2Vm dWwgZm9yIHVzZXJsYW5kIGRlYnVnZ2luZyAqLwpAQCAtOTc4LDggKzk3Nyw2IEBAIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3QgaTkxNV9nZ3R0IGdndHQ7IC8qIFZNIHJlcHJlc2Vu dGluZyB0aGUgZ2xvYmFsIGFkZHJlc3Mgc3BhY2UgKi8KIAogCXN0cnVjdCBpOTE1X2dlbV9tbSBt bTsKLQlERUNMQVJFX0hBU0hUQUJMRShtbV9zdHJ1Y3RzLCA3KTsKLQlzcGlubG9ja190IG1tX2xv Y2s7CiAKIAkvKiBLZXJuZWwgTW9kZXNldHRpbmcgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK aW5kZXggZDM0OWMwYjc5NmVjLi5lNDA5NzIwMWYwZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YwpAQCAtMTE4MywxMCArMTE4Myw4IEBAIGludCBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKIGVycl91bmxvY2s6CiAJaTkxNV9nZW1fZHJhaW5fd29ya3F1 ZXVlKGRldl9wcml2KTsKIAotCWlmIChyZXQgIT0gLUVJTykgeworCWlmIChyZXQgIT0gLUVJTykK IAkJaW50ZWxfdWNfY2xlYW51cF9maXJtd2FyZXMoJmRldl9wcml2LT5ndC51Yyk7Ci0JCWk5MTVf Z2VtX2NsZWFudXBfdXNlcnB0cihkZXZfcHJpdik7Ci0JfQogCiAJaWYgKHJldCA9PSAtRUlPKSB7 CiAJCS8qCkBAIC0xMjQ1LDcgKzEyNDMsNiBAQCB2b2lkIGk5MTVfZ2VtX2RyaXZlcl9yZWxlYXNl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlpbnRlbF93YV9saXN0X2ZyZWUo JmRldl9wcml2LT5ndF93YV9saXN0KTsKIAogCWludGVsX3VjX2NsZWFudXBfZmlybXdhcmVzKCZk ZXZfcHJpdi0+Z3QudWMpOwotCWk5MTVfZ2VtX2NsZWFudXBfdXNlcnB0cihkZXZfcHJpdik7CiAK IAlpOTE1X2dlbV9kcmFpbl9mcmVlZF9vYmplY3RzKGRldl9wcml2KTsKIAotLSAKMi4yOC4wCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK