From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 446FAC64E7A for ; Fri, 27 Nov 2020 12:08:53 +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 E884D21D81 for ; Fri, 27 Nov 2020 12:08:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E884D21D81 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6974D6EC36; Fri, 27 Nov 2020 12:08:15 +0000 (UTC) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 016236EC30; Fri, 27 Nov 2020 12:08:12 +0000 (UTC) IronPort-SDR: 7k80OeW6hMjFIgJQcVcJItO58BLBbJReec2rmZzF5waWYJCSN7oq0S8gFcizztSnyDZSBGNh92 HUepluR2hNgw== X-IronPort-AV: E=McAfee;i="6000,8403,9817"; a="168883415" X-IronPort-AV: E=Sophos;i="5.78,374,1599548400"; d="scan'208";a="168883415" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2020 04:08:12 -0800 IronPort-SDR: MTcL/OB6z84+Q6FRYVKXNA0Bx6MhoQYwn1ivXP+MMa+0QRx6MoxIHLaBcZOGEU7Tvxjcvvz0H3 cvWhmmBr7oCA== X-IronPort-AV: E=Sophos;i="5.78,374,1599548400"; d="scan'208";a="548028675" Received: from mjgleeso-mobl.ger.corp.intel.com (HELO mwauld-desk1.ger.corp.intel.com) ([10.251.85.2]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2020 04:08:10 -0800 From: Matthew Auld To: intel-gfx@lists.freedesktop.org Subject: [RFC PATCH 025/162] drm/i915: Fix userptr so we do not have to worry about obj->mm.lock, v5. Date: Fri, 27 Nov 2020 12:05:01 +0000 Message-Id: <20201127120718.454037-26-matthew.auld@intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201127120718.454037-1-matthew.auld@intel.com> References: <20201127120718.454037-1-matthew.auld@intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: dri-devel@lists.freedesktop.org, =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RnJvbTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNv bT4KCkluc3RlYWQgb2YgZG9pbmcgd2hhdCB3ZSBkbyBjdXJyZW50bHksIHdoaWNoIHdpbGwgbmV2 ZXIgd29yayB3aXRoClBST1ZFX0xPQ0tJTkcsIGRvIHRoZSBzYW1lIGFzIEFNRCBkb2VzLCBhbmQg c29tZXRoaW5nIHNpbWlsYXIgdG8KcmVsb2NhdGlvbiBzbG93cGF0aC4gV2hlbiBhbGwgbG9ja3Mg YXJlIGRyb3BwZWQsIHdlIGFjcXVpcmUgdGhlCnBhZ2VzIGZvciBwaW5uaW5nLiBXaGVuIHRoZSBs b2NrcyBhcmUgdGFrZW4sIHdlIHRyYW5zZmVyIHRob3NlCnBhZ2VzIGluIC5nZXRfcGFnZXMoKSB0 byB0aGUgYm8uIEFzIGEgZmluYWwgY2hlY2sgYmVmb3JlIGluc3RhbGxpbmcKdGhlIGZlbmNlcywg d2UgZW5zdXJlIHRoYXQgdGhlIG1tdSBub3RpZmllciB3YXMgbm90IGNhbGxlZDsgaWYgaXQgaXMs CndlIHJldHVybiAtRUFHQUlOIHRvIHVzZXJzcGFjZSB0byBzaWduYWwgaXQgaGFzIHRvIHN0YXJ0 IG92ZXIuCgpTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9y c3RAbGludXguaW50ZWwuY29tPgpDYzogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ry b21AbGludXguaW50ZWwuY29tPgotLS0KIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4 ZWNidWZmZXIuYyAgICB8IDEwMSArKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9vYmplY3QuaCAgICB8ICAzNSArLQogLi4uL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2Jq ZWN0X3R5cGVzLmggIHwgIDEwICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f cGFnZXMuYyAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91 c2VycHRyLmMgICB8IDc2NCArKysrKystLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgOSArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYyAgICAgICAgICAgICAgIHwgICA1ICstCiA3IGZpbGVzIGNoYW5nZWQsIDM0NCBp bnNlcnRpb25zKCspLCA1ODIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKaW5kZXggMDY0Mjg1YTUwMDliLi5mNWVhNDllMjQ0 Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVm ZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIu YwpAQCAtNTIsMTQgKzUyLDE2IEBAIGVudW0gewogLyogX19FWEVDX09CSkVDVF9OT19SRVNFUlZF IGlzIEJJVCgzMSksIGRlZmluZWQgaW4gaTkxNV92bWEuaCAqLwogI2RlZmluZSBfX0VYRUNfT0JK RUNUX0hBU19QSU4JCUJJVCgzMCkKICNkZWZpbmUgX19FWEVDX09CSkVDVF9IQVNfRkVOQ0UJCUJJ VCgyOSkKLSNkZWZpbmUgX19FWEVDX09CSkVDVF9ORUVEU19NQVAJCUJJVCgyOCkKLSNkZWZpbmUg X19FWEVDX09CSkVDVF9ORUVEU19CSUFTCUJJVCgyNykKLSNkZWZpbmUgX19FWEVDX09CSkVDVF9J TlRFUk5BTF9GTEFHUwkofjB1IDw8IDI3KSAvKiBhbGwgb2YgdGhlIGFib3ZlICsgKi8KKyNkZWZp bmUgX19FWEVDX09CSkVDVF9VU0VSUFRSX0lOSVQJQklUKDI4KQorI2RlZmluZSBfX0VYRUNfT0JK RUNUX05FRURTX01BUAkJQklUKDI3KQorI2RlZmluZSBfX0VYRUNfT0JKRUNUX05FRURTX0JJQVMJ QklUKDI2KQorI2RlZmluZSBfX0VYRUNfT0JKRUNUX0lOVEVSTkFMX0ZMQUdTCSh+MHUgPDwgMjYp IC8qIGFsbCBvZiB0aGUgYWJvdmUgKyAqLwogI2RlZmluZSBfX0VYRUNfT0JKRUNUX1JFU0VSVkVE IChfX0VYRUNfT0JKRUNUX0hBU19QSU4gfCBfX0VYRUNfT0JKRUNUX0hBU19GRU5DRSkKIAogI2Rl ZmluZSBfX0VYRUNfSEFTX1JFTE9DCUJJVCgzMSkKICNkZWZpbmUgX19FWEVDX0VOR0lORV9QSU5O RUQJQklUKDMwKQotI2RlZmluZSBfX0VYRUNfSU5URVJOQUxfRkxBR1MJKH4wdSA8PCAzMCkKKyNk ZWZpbmUgX19FWEVDX1VTRVJQVFJfVVNFRAlCSVQoMjkpCisjZGVmaW5lIF9fRVhFQ19JTlRFUk5B TF9GTEFHUwkofjB1IDw8IDI5KQogI2RlZmluZSBVUERBVEUJCQlQSU5fT0ZGU0VUX0ZJWEVECiAK ICNkZWZpbmUgQkFUQ0hfT0ZGU0VUX0JJQVMgKDI1NioxMDI0KQpAQCAtODY1LDYgKzg2NywyNiBA QCBzdGF0aWMgaW50IGViX2xvb2t1cF92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQog CQl9CiAKIAkJZWJfYWRkX3ZtYShlYiwgaSwgYmF0Y2gsIHZtYSk7CisKKwkJaWYgKGk5MTVfZ2Vt X29iamVjdF9pc191c2VycHRyKHZtYS0+b2JqKSkgeworCQkJZXJyID0gaTkxNV9nZW1fb2JqZWN0 X3VzZXJwdHJfc3VibWl0X2luaXQodm1hLT5vYmopOworCQkJaWYgKGVycikgeworCQkJCWlmIChp ICsgMSA8IGViLT5idWZmZXJfY291bnQpIHsKKwkJCQkJLyoKKwkJCQkJICogRXhlY2J1ZmZlciBj b2RlIGV4cGVjdHMgbGFzdCB2bWEgZW50cnkgdG8gYmUgTlVMTCwKKwkJCQkJICogc2luY2Ugd2Ug YWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIGVudHJ5LAorCQkJCQkgKiBzZXQgdGhlIG5leHQgdmFs dWUgdG8gTlVMTCBvciB3ZSBtZXNzIHVwCisJCQkJCSAqIGNsZWFudXAgaGFuZGxpbmcuCisJCQkJ CSAqLworCQkJCQllYi0+dm1hW2kgKyAxXS52bWEgPSBOVUxMOworCQkJCX0KKworCQkJCXJldHVy biBlcnI7CisJCQl9CisKKwkJCWViLT52bWFbaV0uZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9VU0VS UFRSX0lOSVQ7CisJCQllYi0+YXJncy0+ZmxhZ3MgfD0gX19FWEVDX1VTRVJQVFJfVVNFRDsKKwkJ fQogCX0KIAogCWlmICh1bmxpa2VseShlYi0+YmF0Y2gtPmZsYWdzICYgRVhFQ19PQkpFQ1RfV1JJ VEUpKSB7CkBAIC05NjYsNyArOTg4LDcgQEAgZWJfZ2V0X3ZtYShjb25zdCBzdHJ1Y3QgaTkxNV9l eGVjYnVmZmVyICplYiwgdW5zaWduZWQgbG9uZyBoYW5kbGUpCiAJfQogfQogCi1zdGF0aWMgdm9p ZCBlYl9yZWxlYXNlX3ZtYXMoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsIGJvb2wgZmluYWwp CitzdGF0aWMgdm9pZCBlYl9yZWxlYXNlX3ZtYXMoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIs IGJvb2wgZmluYWwsIGJvb2wgcmVsZWFzZV91c2VycHRyKQogewogCWNvbnN0IHVuc2lnbmVkIGlu dCBjb3VudCA9IGViLT5idWZmZXJfY291bnQ7CiAJdW5zaWduZWQgaW50IGk7CkBAIC05ODAsNiAr MTAwMiwxMSBAQCBzdGF0aWMgdm9pZCBlYl9yZWxlYXNlX3ZtYXMoc3RydWN0IGk5MTVfZXhlY2J1 ZmZlciAqZWIsIGJvb2wgZmluYWwpCiAKIAkJZWJfdW5yZXNlcnZlX3ZtYShldik7CiAKKwkJaWYg KHJlbGVhc2VfdXNlcnB0ciAmJiBldi0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX1VTRVJQVFJfSU5J VCkgeworCQkJZXYtPmZsYWdzICY9IH5fX0VYRUNfT0JKRUNUX1VTRVJQVFJfSU5JVDsKKwkJCWk5 MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9maW5pKHZtYS0+b2JqKTsKKwkJfQorCiAJCWlm IChmaW5hbCkKIAkJCWk5MTVfdm1hX3B1dCh2bWEpOwogCX0KQEAgLTE5MTUsNiArMTk0MiwzMSBA QCBzdGF0aWMgaW50IGViX3ByZWZhdWx0X3JlbG9jYXRpb25zKGNvbnN0IHN0cnVjdCBpOTE1X2V4 ZWNidWZmZXIgKmViKQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGViX3JlaW5pdF91c2Vy cHRyKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBj b3VudCA9IGViLT5idWZmZXJfY291bnQ7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKwor CWlmIChsaWtlbHkoIShlYi0+YXJncy0+ZmxhZ3MgJiBfX0VYRUNfVVNFUlBUUl9VU0VEKSkpCisJ CXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGVi X3ZtYSAqZXYgPSAmZWItPnZtYVtpXTsKKworCQlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc191c2Vy cHRyKGV2LT52bWEtPm9iaikpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBpOTE1X2dlbV9vYmpl Y3RfdXNlcnB0cl9zdWJtaXRfaW5pdChldi0+dm1hLT5vYmopOworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKworCQlldi0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9VU0VSUFRSX0lOSVQ7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBub2lubGluZSBpbnQgZWJfcmVsb2NhdGVfcGFy c2Vfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKIAkJCQkJICAgc3RydWN0IGk5MTVf cmVxdWVzdCAqcnEpCiB7CkBAIC0xOTI5LDcgKzE5ODEsNyBAQCBzdGF0aWMgbm9pbmxpbmUgaW50 IGViX3JlbG9jYXRlX3BhcnNlX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCiAJfQog CiAJLyogV2UgbWF5IHByb2Nlc3MgYW5vdGhlciBleGVjYnVmZmVyIGR1cmluZyB0aGUgdW5sb2Nr Li4uICovCi0JZWJfcmVsZWFzZV92bWFzKGViLCBmYWxzZSk7CisJZWJfcmVsZWFzZV92bWFzKGVi LCBmYWxzZSwgdHJ1ZSk7CiAJaTkxNV9nZW1fd3dfY3R4X2ZpbmkoJmViLT53dyk7CiAKIAlpZiAo cnEpIHsKQEAgLTE5NzAsMTAgKzIwMjIsOCBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGViX3JlbG9j YXRlX3BhcnNlX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCiAJCWVyciA9IDA7CiAJ fQogCi0jaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgogCWlmICghZXJyKQotCQlmbHVzaF93b3Jr cXVldWUoZWItPmk5MTUtPm1tLnVzZXJwdHJfd3EpOwotI2VuZGlmCisJCWVyciA9IGViX3JlaW5p dF91c2VycHRyKGViKTsKIAogZXJyX3JlbG9jazoKIAlpOTE1X2dlbV93d19jdHhfaW5pdCgmZWIt Pnd3LCB0cnVlKTsKQEAgLTIwMzUsNyArMjA4NSw3IEBAIHN0YXRpYyBub2lubGluZSBpbnQgZWJf cmVsb2NhdGVfcGFyc2Vfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKIAogZXJyOgog CWlmIChlcnIgPT0gLUVERUFETEspIHsKLQkJZWJfcmVsZWFzZV92bWFzKGViLCBmYWxzZSk7CisJ CWViX3JlbGVhc2Vfdm1hcyhlYiwgZmFsc2UsIGZhbHNlKTsKIAkJZXJyID0gaTkxNV9nZW1fd3df Y3R4X2JhY2tvZmYoJmViLT53dyk7CiAJCWlmICghZXJyKQogCQkJZ290byByZXBlYXRfdmFsaWRh dGU7CkBAIC0yMTMyLDcgKzIxODIsNyBAQCBzdGF0aWMgaW50IGViX3JlbG9jYXRlX3BhcnNlKHN0 cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogCiBlcnI6CiAJaWYgKGVyciA9PSAtRURFQURMSykg ewotCQllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNlKTsKKwkJZWJfcmVsZWFzZV92bWFzKGViLCBm YWxzZSwgZmFsc2UpOwogCQllcnIgPSBpOTE1X2dlbV93d19jdHhfYmFja29mZigmZWItPnd3KTsK IAkJaWYgKCFlcnIpCiAJCQlnb3RvIHJldHJ5OwpAQCAtMjIwNyw2ICsyMjU3LDMwIEBAIHN0YXRp YyBpbnQgZWJfbW92ZV90b19ncHUoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiAJCQkJCQkg ICAgICBmbGFncyB8IF9fRVhFQ19PQkpFQ1RfTk9fUkVTRVJWRSk7CiAJfQogCisjaWZkZWYgQ09O RklHX01NVV9OT1RJRklFUgorCWlmICghZXJyICYmIChlYi0+YXJncy0+ZmxhZ3MgJiBfX0VYRUNf VVNFUlBUUl9VU0VEKSkgeworCQlzcGluX2xvY2soJmViLT5pOTE1LT5tbS5ub3RpZmllcl9sb2Nr KTsKKworCQkvKgorCQkgKiBjb3VudCBpcyBhbHdheXMgYXQgbGVhc3QgMSwgb3RoZXJ3aXNlIF9f RVhFQ19VU0VSUFRSX1VTRUQKKwkJICogY291bGQgbm90IGhhdmUgYmVlbiBzZXQKKwkJICovCisJ CWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQlzdHJ1Y3QgZWJfdm1hICpldiA9ICZl Yi0+dm1hW2ldOworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGV2LT52bWEt Pm9iajsKKworCQkJaWYgKCFpOTE1X2dlbV9vYmplY3RfaXNfdXNlcnB0cihvYmopKQorCQkJCWNv bnRpbnVlOworCisJCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfZG9uZShv YmopOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKwkJfQorCisJCXNwaW5fdW5sb2NrKCZlYi0+ aTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CisJfQorI2VuZGlmCisKIAlpZiAodW5saWtlbHkoZXJy KSkKIAkJZ290byBlcnJfc2tpcDsKIApAQCAtMzM0Nyw3ICszNDIxLDcgQEAgaTkxNV9nZW1fZG9f ZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiAJZXJyID0gZWJfbG9va3VwX3Zt YXMoJmViKTsKIAlpZiAoZXJyKSB7Ci0JCWViX3JlbGVhc2Vfdm1hcygmZWIsIHRydWUpOworCQll Yl9yZWxlYXNlX3ZtYXMoJmViLCB0cnVlLCB0cnVlKTsKIAkJZ290byBlcnJfZW5naW5lOwogCX0K IApAQCAtMzQxOSw2ICszNDkzLDcgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAogCiAJdHJhY2VfaTkxNV9yZXF1ZXN0X3F1ZXVlKGViLnJlcXVlc3QsIGVi LmJhdGNoX2ZsYWdzKTsKIAllcnIgPSBlYl9zdWJtaXQoJmViLCBiYXRjaCk7CisKIGVycl9yZXF1 ZXN0OgogCWk5MTVfcmVxdWVzdF9nZXQoZWIucmVxdWVzdCk7CiAJZWJfcmVxdWVzdF9hZGQoJmVi KTsKQEAgLTM0MzksNyArMzUxNCw3IEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKIAlpOTE1X3JlcXVlc3RfcHV0KGViLnJlcXVlc3QpOwogCiBlcnJfdm1h OgotCWViX3JlbGVhc2Vfdm1hcygmZWIsIHRydWUpOworCWViX3JlbGVhc2Vfdm1hcygmZWIsIHRy dWUsIHRydWUpOwogCWlmIChlYi50cmFtcG9saW5lKQogCQlpOTE1X3ZtYV91bnBpbihlYi50cmFt cG9saW5lKTsKIAlXQVJOX09OKGVyciA9PSAtRURFQURMSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKaW5kZXggN2IzYTg0Zjk4YjQyLi4zMzQxMjI0OGY2ZGYg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKQEAgLTMzLDYg KzMzLDcgQEAgaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbV9mcm9tX2RhdGEoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCQkJICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHJlc291 cmNlX3NpemVfdCBzaXplKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0X29wcyBpOTE1X2dlbV9zaG1lbV9vcHM7CisKIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVs ZWFzZV9zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJCSAgICAgc3Ry dWN0IHNnX3RhYmxlICpwYWdlcywKIAkJCQkgICAgIGJvb2wgbmVlZHNfY2xmbHVzaCk7CkBAIC0y NDUsMTIgKzI0Niw2IEBAIGk5MTVfZ2VtX29iamVjdF9uZXZlcl9tbWFwKGNvbnN0IHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJcmV0dXJuIGk5MTVfZ2VtX29iamVjdF90eXBlX2hh cyhvYmosIEk5MTVfR0VNX09CSkVDVF9OT19NTUFQKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s Ci1pOTE1X2dlbV9vYmplY3RfbmVlZHNfYXN5bmNfY2FuY2VsKGNvbnN0IHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JcmV0dXJuIGk5MTVfZ2VtX29iamVjdF90eXBlX2hhcyhv YmosIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwpOwotfQotCiBzdGF0aWMgaW5saW5lIGJv b2wKIGk5MTVfZ2VtX29iamVjdF9pc19mcmFtZWJ1ZmZlcihjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQogewpAQCAtNTUxLDE2ICs1NDYsNiBAQCB2b2lkIF9faTkxNV9nZW1f b2JqZWN0X2ZsdXNoX2Zyb250YnVmZmVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos CiB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X2ludmFsaWRhdGVfZnJvbnRidWZmZXIoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkJICAgICAgZW51bSBmYl9vcF9vcmlnaW4gb3Jp Z2luKTsKIAotc3RhdGljIGlubGluZSBib29sCi1pOTE1X2dlbV9vYmplY3RfaXNfdXNlcnB0cihz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotI2lmZGVmIENPTkZJR19NTVVfTk9U SUZJRVIKLQlyZXR1cm4gb2JqLT51c2VycHRyLm1tOwotI2Vsc2UKLQlyZXR1cm4gZmFsc2U7Ci0j ZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSB2b2lkCiBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZnJv bnRidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkgIGVudW0gZmJf b3Bfb3JpZ2luIG9yaWdpbikKQEAgLTU3Nyw0ICs1NjIsMjIgQEAgaTkxNV9nZW1fb2JqZWN0X2lu dmFsaWRhdGVfZnJvbnRidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJ X19pOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZV9mcm9udGJ1ZmZlcihvYmosIG9yaWdpbik7CiB9 CiAKKyNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCitzdGF0aWMgaW5saW5lIGJvb2wKK2k5MTVf Z2VtX29iamVjdF9pc191c2VycHRyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7 CisJcmV0dXJuIG9iai0+dXNlcnB0ci5ub3RpZmllci5tbTsKK30KKworaW50IGk5MTVfZ2VtX29i amVjdF91c2VycHRyX3N1Ym1pdF9pbml0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop OworaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9kb25lKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRf ZmluaShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKKyNlbHNlCitzdGF0aWMgaW5s aW5lIGJvb2wgaTkxNV9nZW1fb2JqZWN0X2lzX3VzZXJwdHIoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikgeyByZXR1cm4gZmFsc2U7IH0KKworc3RhdGljIGlubGluZSBpbnQgaTkxNV9n ZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikgeyBHRU1fQlVHX09OKDEpOyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSBp bnQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2RvbmUoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikgeyBHRU1fQlVHX09OKDEpOyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGlj IGlubGluZSB2b2lkIGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9maW5pKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopIHsgR0VNX0JVR19PTigxKTsgfQorI2VuZGlmCisKICNl bmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVj dF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBl cy5oCmluZGV4IDZkM2Y0NTFjMTVjNi4uNTIzNGMxZWQ2MmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCkBAIC03LDYgKzcsOCBAQAog I2lmbmRlZiBfX0k5MTVfR0VNX09CSkVDVF9UWVBFU19IX18KICNkZWZpbmUgX19JOTE1X0dFTV9P QkpFQ1RfVFlQRVNfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KKwogI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtLmg+CiAjaW5jbHVkZSA8dWFwaS9kcm0vaTkxNV9kcm0uaD4KIApA QCAtMzQsNyArMzYsNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewogI2RlZmlu ZSBJOTE1X0dFTV9PQkpFQ1RfSVNfU0hSSU5LQUJMRQlCSVQoMikKICNkZWZpbmUgSTkxNV9HRU1f T0JKRUNUX0lTX1BST1hZCUJJVCgzKQogI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfTk9fTU1BUAkJ QklUKDQpCi0jZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwJQklUKDUpCiAKIAkv KiBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQgaXRzIGJhY2tpbmcgc3RvcmFn ZS4KIAkgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlvciB0byB0aGUgdXNlIG9mIHRo ZSBhc3NvY2lhdGVkIHNldApAQCAtMjkyLDEwICsyOTMsMTEgQEAgc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgewogI2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVIKIAkJc3RydWN0IGk5MTVfZ2Vt X3VzZXJwdHIgewogCQkJdWludHB0cl90IHB0cjsKKwkJCXVuc2lnbmVkIGxvbmcgbm90aWZpZXJf c2VxOwogCi0JCQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tOwotCQkJc3RydWN0IGk5MTVfbW11 X29iamVjdCAqbW11X29iamVjdDsKLQkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKKwkJCXN0 cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgbm90aWZpZXI7CisJCQlzdHJ1Y3QgcGFnZSAqKnB2 ZWM7CisJCQlpbnQgcGFnZV9yZWY7CiAJCX0gdXNlcnB0cjsKICNlbmRpZgogCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCmluZGV4IDc5ODM0MjMyMzdlMy4uNjAxNDlj YWQ2MDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFn ZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYwpAQCAt MjIzLDcgKzIyMyw3IEBAIGludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAkgKiBnZXRfcGFnZXMgYmFja2VuZHMgd2Ugc2hvdWxk IGJlIGJldHRlciBhYmxlIHRvIGhhbmRsZSB0aGUKIAkgKiBjYW5jZWxsYXRpb24gb2YgdGhlIGFz eW5jIHRhc2sgaW4gYSBtb3JlIHVuaWZvcm0gbWFubmVyLgogCSAqLwotCWlmICghcGFnZXMgJiYg IWk5MTVfZ2VtX29iamVjdF9uZWVkc19hc3luY19jYW5jZWwob2JqKSkKKwlpZiAoIXBhZ2VzKQog CQlwYWdlcyA9IEVSUl9QVFIoLUVJTlZBTCk7CiAKIAlpZiAoIUlTX0VSUihwYWdlcykpCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwppbmRleCAxMTgzYjI4YzA4 NGIuLjllYTlhYTY1YWRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3VzZXJwdHIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f dXNlcnB0ci5jCkBAIC0yLDEwICsyLDM5IEBACiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog TUlUCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMTItMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAgKiBCYXNlZCBvbiBhbWRncHVfbW4sIHdoaWNoIGJlYXJzIHRoZSBmb2xsb3dpbmcgbm90aWNl OgorICoKKyAqIENvcHlyaWdodCAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAq IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAq ICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdI VCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0UgT1Ig T1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBu ZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqLworLyoKKyAqIEF1dGhv cnM6CisgKiAgICBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+CiAg Ki8KIAogI2luY2x1ZGUgPGxpbnV4L21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW11 X25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGlu dXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkL21tLmg+CkBAIC0xNSwzNjUgKzQ0LDEw NiBAQAogI2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdC5oIgogI2luY2x1ZGUgImk5MTVfc2NhdHRl cmxpc3QuaCIKIAotI2lmIGRlZmluZWQoQ09ORklHX01NVV9OT1RJRklFUikKLQotc3RydWN0IGk5 MTVfbW1fc3RydWN0IHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNTsKLQlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOwotCXN0cnVjdCBo bGlzdF9ub2RlIG5vZGU7Ci0Jc3RydWN0IGtyZWYga3JlZjsKLQlzdHJ1Y3QgcmN1X3dvcmsgd29y azsKLX07Ci0KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnZhbF90cmVlLmg+Ci0KLXN0cnVjdCBpOTE1 X21tdV9ub3RpZmllciB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBobGlzdF9ub2RlIG5v ZGU7Ci0Jc3RydWN0IG1tdV9ub3RpZmllciBtbjsKLQlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgb2Jq ZWN0czsKLQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tOwotfTsKLQotc3RydWN0IGk5MTVfbW11 X29iamVjdCB7Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsKLQlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgaXQ7Ci19Owot Ci1zdGF0aWMgdm9pZCBhZGRfb2JqZWN0KHN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vKQotewot CUdFTV9CVUdfT04oIVJCX0VNUFRZX05PREUoJm1vLT5pdC5yYikpOwotCWludGVydmFsX3RyZWVf aW5zZXJ0KCZtby0+aXQsICZtby0+bW4tPm9iamVjdHMpOwotfQotCi1zdGF0aWMgdm9pZCBkZWxf b2JqZWN0KHN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vKQotewotCWlmIChSQl9FTVBUWV9OT0RF KCZtby0+aXQucmIpKQotCQlyZXR1cm47Ci0KLQlpbnRlcnZhbF90cmVlX3JlbW92ZSgmbW8tPml0 LCAmbW8tPm1uLT5vYmplY3RzKTsKLQlSQl9DTEVBUl9OT0RFKCZtby0+aXQucmIpOwotfQorI2lm ZGVmIENPTkZJR19NTVVfTk9USUZJRVIKIAotc3RhdGljIHZvaWQKLV9faTkxNV9nZW1fdXNlcnB0 cl9zZXRfYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wgdmFsdWUp CisvKioKKyAqIGk5MTVfZ2VtX3VzZXJwdHJfaW52YWxpZGF0ZSAtIGNhbGxiYWNrIHRvIG5vdGlm eSBhYm91dCBtbSBjaGFuZ2UKKyAqCisgKiBAbW5pOiB0aGUgcmFuZ2UgKG1tKSBpcyBhYm91dCB0 byB1cGRhdGUKKyAqIEByYW5nZTogZGV0YWlscyBvbiB0aGUgaW52YWxpZGF0aW9uCisgKiBAY3Vy X3NlcTogVmFsdWUgdG8gcGFzcyB0byBtbXVfaW50ZXJ2YWxfc2V0X3NlcSgpCisgKgorICogQmxv Y2sgZm9yIG9wZXJhdGlvbnMgb24gQk9zIHRvIGZpbmlzaCBhbmQgbWFyayBwYWdlcyBhcyBhY2Nl c3NlZCBhbmQKKyAqIHBvdGVudGlhbGx5IGRpcnR5LgorICovCitzdGF0aWMgYm9vbCBpOTE1X2dl bV91c2VycHRyX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLAor CQkJCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSwKKwkJCQkJdW5zaWdu ZWQgbG9uZyBjdXJfc2VxKQogewotCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vID0gb2JqLT51 c2VycHRyLm1tdV9vYmplY3Q7Ci0KLQkvKgotCSAqIER1cmluZyBtbV9pbnZhbGlkYXRlX3Jhbmdl IHdlIG5lZWQgdG8gY2FuY2VsIGFueSB1c2VycHRyIHRoYXQKLQkgKiBvdmVybGFwcyB0aGUgcmFu Z2UgYmVpbmcgaW52YWxpZGF0ZWQuIERvaW5nIHNvIHJlcXVpcmVzIHRoZQotCSAqIHN0cnVjdF9t dXRleCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQotCSAqIHJl Y3Vyc2lvbiwgdGhlIHVzZXIgbXVzdCBhbGlhcyB0aGUgdXNlcnB0ciBhZGRyZXNzIHNwYWNlIHdp dGgKLQkgKiBhIEdUVCBtbWFwcGluZyAocG9zc2libGUgd2l0aCBhIE1BUF9GSVhFRCkgLSB0aGVu IHdoZW4gd2UgaGF2ZQotCSAqIHRvIGludmFsaWRhdGUgdGhhdCBtbWFwaW5nLCBtbV9pbnZhbGlk YXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCi0JICogdGhlIHVzZXJwdHIgYWRkcmVzcyAqYW5kKiB0 aGUgc3RydWN0X211dGV4IGhlbGQuICBUbyBwcmV2ZW50IHRoYXQKLQkgKiB3ZSBzZXQgYSBmbGFn IHVuZGVyIHRoZSBpOTE1X21tdV9ub3RpZmllciBzcGlubG9jayB0byBpbmRpY2F0ZQotCSAqIHdo ZXRoZXIgdGhpcyBvYmplY3QgaXMgdmFsaWQuCi0JICovCi0JaWYgKCFtbykKLQkJcmV0dXJuOwor CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBjb250YWluZXJfb2YobW5pLCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwgdXNlcnB0ci5ub3RpZmllcik7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOworCWxvbmcgcjsKIAot CXNwaW5fbG9jaygmbW8tPm1uLT5sb2NrKTsKLQlpZiAodmFsdWUpCi0JCWFkZF9vYmplY3QobW8p OwotCWVsc2UKLQkJZGVsX29iamVjdChtbyk7Ci0Jc3Bpbl91bmxvY2soJm1vLT5tbi0+bG9jayk7 Ci19CisJaWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSkKKwkJcmV0dXJu IGZhbHNlOwogCi1zdGF0aWMgaW50Ci11c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQo c3RydWN0IG1tdV9ub3RpZmllciAqX21uLAotCQkJCSAgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmll cl9yYW5nZSAqcmFuZ2UpCi17Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbiA9Ci0JCWNv bnRhaW5lcl9vZihfbW4sIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciwgbW4pOwotCXN0cnVjdCBp bnRlcnZhbF90cmVlX25vZGUgKml0OwotCXVuc2lnbmVkIGxvbmcgZW5kOwotCWludCByZXQgPSAw OwotCi0JaWYgKFJCX0VNUFRZX1JPT1QoJm1uLT5vYmplY3RzLnJiX3Jvb3QpKQotCQlyZXR1cm4g MDsKLQotCS8qIGludGVydmFsIHJhbmdlcyBhcmUgaW5jbHVzaXZlLCBidXQgaW52YWxpZGF0ZSBy YW5nZSBpcyBleGNsdXNpdmUgKi8KLQllbmQgPSByYW5nZS0+ZW5kIC0gMTsKLQotCXNwaW5fbG9j aygmbW4tPmxvY2spOwotCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0 cywgcmFuZ2UtPnN0YXJ0LCBlbmQpOwotCXdoaWxlIChpdCkgewotCQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqOwotCi0JCWlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShy YW5nZSkpIHsKLQkJCXJldCA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQorCXNwaW5fbG9jaygm aTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CiAKLQkJLyoKLQkJICogVGhlIG1tdV9vYmplY3QgaXMg cmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ryb3lpbmcgdGhlCi0JCSAqIEdFTSBvYmplY3Qgc28gaXQg aXMgZW50aXJlbHkgcG9zc2libGUgdG8gZ2FpbiBhCi0JCSAqIHJlZmVyZW5jZSBvbiBhbiBvYmpl Y3QgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQKLQkJICogc2luY2Ugb3VyIHNlcmlhbGlz YXRpb24gaXMgdmlhIHRoZSBzcGlubG9jayBhbmQgbm90Ci0JCSAqIHRoZSBzdHJ1Y3RfbXV0ZXgg LSBhbmQgY29uc2VxdWVudGx5IHVzZSBpdCBhZnRlciBpdAotCQkgKiBpcyBmcmVlZCBhbmQgdGhl biBkb3VibGUgZnJlZSBpdC4gVG8gcHJldmVudCB0aGF0Ci0JCSAqIHVzZS1hZnRlci1mcmVlIHdl IG9ubHkgYWNxdWlyZSBhIHJlZmVyZW5jZSBvbiB0aGUKLQkJICogb2JqZWN0IGlmIGl0IGlzIG5v dCBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQuCi0JCSAqLwotCQlvYmogPSBjb250 YWluZXJfb2YoaXQsIHN0cnVjdCBpOTE1X21tdV9vYmplY3QsIGl0KS0+b2JqOwotCQlpZiAoIWty ZWZfZ2V0X3VubGVzc196ZXJvKCZvYmotPmJhc2UucmVmY291bnQpKSB7Ci0JCQlpdCA9IGludGVy dmFsX3RyZWVfaXRlcl9uZXh0KGl0LCByYW5nZS0+c3RhcnQsIGVuZCk7Ci0JCQljb250aW51ZTsK LQkJfQotCQlzcGluX3VubG9jaygmbW4tPmxvY2spOworCW1tdV9pbnRlcnZhbF9zZXRfc2VxKG1u aSwgY3VyX3NlcSk7CiAKLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmosCi0JCQkJ CSAgICAgSTkxNV9HRU1fT0JKRUNUX1VOQklORF9BQ1RJVkUgfAotCQkJCQkgICAgIEk5MTVfR0VN X09CSkVDVF9VTkJJTkRfQkFSUklFUik7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IF9faTkx NV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOwotCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7 Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5ub3Rp Zmllcl9sb2NrKTsKIAotCQlzcGluX2xvY2soJm1uLT5sb2NrKTsKKwkvKiBEdXJpbmcgZXhpdCB0 aGVyZSdzIG5vIG5lZWQgdG8gd2FpdCAqLworCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX0VYSVRJ TkcpCisJCXJldHVybiB0cnVlOwogCi0JCS8qCi0JCSAqIEFzIHdlIGRvIG5vdCAoeWV0KSBwcm90 ZWN0IHRoZSBtbXUgZnJvbSBjb25jdXJyZW50IGluc2VydGlvbgotCQkgKiBvdmVyIHRoaXMgcmFu Z2UsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoaXMgc2VhcmNoIHdpbGwKLQkJICogdGVy bWluYXRlIGdpdmVuIGEgcGF0aG9sb2dpYyB3b3JrbG9hZC4KLQkJICovCi0JCWl0ID0gaW50ZXJ2 YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0cywgcmFuZ2UtPnN0YXJ0LCBlbmQpOwotCX0K LQlzcGluX3VubG9jaygmbW4tPmxvY2spOwotCi0JcmV0dXJuIHJldDsKKwkvKiB3ZSB3aWxsIHVu YmluZCBvbiBuZXh0IHN1Ym1pc3Npb24sIHN0aWxsIGhhdmUgdXNlcnB0ciBwaW5zICovCisJciA9 IGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3Uob2JqLT5iYXNlLnJlc3YsIHRydWUsIGZhbHNlLAor CQkJCSAgICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwlpZiAociA8PSAwKQorCQlkcm1fZXJy KCZpOTE1LT5kcm0sICIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgaWRsZVxuIiwgcik7CiAKKwly ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGk5 MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXIgPSB7Ci0JLmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgPSB1 c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQsCitzdGF0aWMgY29uc3Qgc3RydWN0IG1t dV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgaTkxNV9nZW1fdXNlcnB0cl9ub3RpZmllcl9vcHMgPSB7 CisJLmludmFsaWRhdGUgPSBpOTE1X2dlbV91c2VycHRyX2ludmFsaWRhdGUsCiB9OwogCi1zdGF0 aWMgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICoKLWk5MTVfbW11X25vdGlmaWVyX2NyZWF0ZShz dHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tKQotewotCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAq bW47Ci0KLQltbiA9IGttYWxsb2Moc2l6ZW9mKCptbiksIEdGUF9LRVJORUwpOwotCWlmIChtbiA9 PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCXNwaW5fbG9ja19pbml0KCZt bi0+bG9jayk7Ci0JbW4tPm1uLm9wcyA9ICZpOTE1X2dlbV91c2VycHRyX25vdGlmaWVyOwotCW1u LT5vYmplY3RzID0gUkJfUk9PVF9DQUNIRUQ7Ci0JbW4tPm1tID0gbW07Ci0KLQlyZXR1cm4gbW47 Ci19Ci0KLXN0YXRpYyB2b2lkCi1pOTE1X2dlbV91c2VycHRyX3JlbGVhc2VfX21tdV9ub3RpZmll cihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCXN0cnVjdCBpOTE1X21tdV9v YmplY3QgKm1vOwotCi0JbW8gPSBmZXRjaF9hbmRfemVybygmb2JqLT51c2VycHRyLm1tdV9vYmpl Y3QpOwotCWlmICghbW8pCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmbW8tPm1uLT5sb2NrKTsK LQlkZWxfb2JqZWN0KG1vKTsKLQlzcGluX3VubG9jaygmbW8tPm1uLT5sb2NrKTsKLQlrZnJlZSht byk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKgotaTkxNV9tbXVfbm90 aWZpZXJfZmluZChzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tKQotewotCXN0cnVjdCBpOTE1X21t dV9ub3RpZmllciAqbW4sICpvbGQ7Ci0JaW50IGVycjsKLQotCW1uID0gUkVBRF9PTkNFKG1tLT5t bik7Ci0JaWYgKGxpa2VseShtbikpCi0JCXJldHVybiBtbjsKLQotCW1uID0gaTkxNV9tbXVfbm90 aWZpZXJfY3JlYXRlKG1tKTsKLQlpZiAoSVNfRVJSKG1uKSkKLQkJcmV0dXJuIG1uOwotCi0JZXJy ID0gbW11X25vdGlmaWVyX3JlZ2lzdGVyKCZtbi0+bW4sIG1tLT5tbSk7Ci0JaWYgKGVycikgewot CQlrZnJlZShtbik7Ci0JCXJldHVybiBFUlJfUFRSKGVycik7Ci0JfQotCi0Jb2xkID0gY21weGNo ZygmbW0tPm1uLCBOVUxMLCBtbik7Ci0JaWYgKG9sZCkgewotCQltbXVfbm90aWZpZXJfdW5yZWdp c3RlcigmbW4tPm1uLCBtbS0+bW0pOwotCQlrZnJlZShtbik7Ci0JCW1uID0gb2xkOwotCX0KLQot CXJldHVybiBtbjsKLX0KLQogc3RhdGljIGludAogaTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbXVf bm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgaTkx NV9tbXVfbm90aWZpZXIgKm1uOwotCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vOwotCi0JaWYg KEdFTV9XQVJOX09OKCFvYmotPnVzZXJwdHIubW0pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1u ID0gaTkxNV9tbXVfbm90aWZpZXJfZmluZChvYmotPnVzZXJwdHIubW0pOwotCWlmIChJU19FUlIo bW4pKQotCQlyZXR1cm4gUFRSX0VSUihtbik7Ci0KLQltbyA9IGt6YWxsb2Moc2l6ZW9mKCptbyks IEdGUF9LRVJORUwpOwotCWlmICghbW8pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbW8tPm1uID0g bW47Ci0JbW8tPm9iaiA9IG9iajsKLQltby0+aXQuc3RhcnQgPSBvYmotPnVzZXJwdHIucHRyOwot CW1vLT5pdC5sYXN0ID0gb2JqLT51c2VycHRyLnB0ciArIG9iai0+YmFzZS5zaXplIC0gMTsKLQlS Ql9DTEVBUl9OT0RFKCZtby0+aXQucmIpOwotCi0Jb2JqLT51c2VycHRyLm1tdV9vYmplY3QgPSBt bzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbW11X2ludGVydmFsX25vdGlmaWVyX2luc2VydCgmb2Jq LT51c2VycHRyLm5vdGlmaWVyLCBjdXJyZW50LT5tbSwKKwkJCQkJICAgIG9iai0+dXNlcnB0ci5w dHIsIG9iai0+YmFzZS5zaXplLAorCQkJCQkgICAgJmk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXJf b3BzKTsKIH0KIAotc3RhdGljIHZvaWQKLWk5MTVfbW11X25vdGlmaWVyX2ZyZWUoc3RydWN0IGk5 MTVfbW11X25vdGlmaWVyICptbiwKLQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewot CWlmIChtbiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQltbXVfbm90aWZpZXJfdW5yZWdpc3Rlcigm bW4tPm1uLCBtbSk7Ci0Ja2ZyZWUobW4pOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgaTkxNV9tbV9z dHJ1Y3QgKgotX19pOTE1X21tX3N0cnVjdF9maW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LCBzdHJ1Y3QgbW1fc3RydWN0ICpyZWFsKQotewotCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAq aXQsICptbSA9IE5VTEw7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JaGFzaF9mb3JfZWFjaF9wb3Nz aWJsZV9yY3UoaTkxNS0+bW1fc3RydWN0cywKLQkJCQkgICBpdCwgbm9kZSwKLQkJCQkgICAodW5z aWduZWQgbG9uZylyZWFsKQotCQlpZiAoaXQtPm1tID09IHJlYWwgJiYga3JlZl9nZXRfdW5sZXNz X3plcm8oJml0LT5rcmVmKSkgewotCQkJbW0gPSBpdDsKLQkJCWJyZWFrOwotCQl9Ci0JcmN1X3Jl YWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gbW07Ci19Ci0KLXN0YXRpYyBpbnQKLWk5MTVfZ2VtX3Vz ZXJwdHJfaW5pdF9fbW1fc3RydWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCitz dGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9kcm9wX3JlZihzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g dG9faTkxNShvYmotPmJhc2UuZGV2KTsKLQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tLCAqbmV3 OwotCWludCByZXQgPSAwOwotCi0JLyogRHVyaW5nIHJlbGVhc2Ugb2YgdGhlIEdFTSBvYmplY3Qg d2UgaG9sZCB0aGUgc3RydWN0X211dGV4LiBUaGlzCi0JICogcHJlY2x1ZGVzIHVzIGZyb20gY2Fs bGluZyBtbXB1dCgpIGF0IHRoYXQgdGltZSBhcyB0aGF0IG1heSBiZQotCSAqIHRoZSBsYXN0IHJl ZmVyZW5jZSBhbmQgc28gY2FsbCBleGl0X21tYXAoKS4gZXhpdF9tbWFwKCkgd2lsbAotCSAqIGF0 dGVtcHQgdG8gcmVhcCB0aGUgdm1hLCBhbmQgaWYgd2Ugd2VyZSBob2xkaW5nIGEgR1RUIG1tYXAK LQkgKiB3b3VsZCB0aGVuIGNhbGwgZHJtX2dlbV92bV9jbG9zZSgpIGFuZCBhdHRlbXB0IHRvIHJl YWNxdWlyZQotCSAqIHRoZSBzdHJ1Y3QgbXV0ZXguIFNvIGluIG9yZGVyIHRvIGF2b2lkIHRoYXQg cmVjdXJzaW9uLCB3ZSBoYXZlCi0JICogdG8gZGVmZXIgcmVsZWFzaW5nIHRoZSBtbSByZWZlcmVu Y2UgdW50aWwgYWZ0ZXIgd2UgZHJvcCB0aGUKLQkgKiBzdHJ1Y3RfbXV0ZXgsIGkuZS4gd2UgbmVl ZCB0byBzY2hlZHVsZSBhIHdvcmtlciB0byBkbyB0aGUgY2xlYW4KLQkgKiB1cC4KLQkgKi8KLQlt bSA9IF9faTkxNV9tbV9zdHJ1Y3RfZmluZChpOTE1LCBjdXJyZW50LT5tbSk7Ci0JaWYgKG1tKQot CQlnb3RvIG91dDsKKwlzdHJ1Y3QgcGFnZSAqKnB2ZWMgPSBOVUxMOwogCi0JbmV3ID0ga21hbGxv YyhzaXplb2YoKm1tKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuZXcpCi0JCXJldHVybiAtRU5PTUVN OwotCi0Ja3JlZl9pbml0KCZuZXctPmtyZWYpOwotCW5ldy0+aTkxNSA9IHRvX2k5MTUob2JqLT5i YXNlLmRldik7Ci0JbmV3LT5tbSA9IGN1cnJlbnQtPm1tOwotCW5ldy0+bW4gPSBOVUxMOwotCi0J c3Bpbl9sb2NrKCZpOTE1LT5tbV9sb2NrKTsKLQltbSA9IF9faTkxNV9tbV9zdHJ1Y3RfZmluZChp OTE1LCBjdXJyZW50LT5tbSk7Ci0JaWYgKCFtbSkgewotCQloYXNoX2FkZF9yY3UoaTkxNS0+bW1f c3RydWN0cywKLQkJCSAgICAgJm5ldy0+bm9kZSwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpbmV3 LT5tbSk7Ci0JCW1tZ3JhYihjdXJyZW50LT5tbSk7Ci0JCW1tID0gbmV3OworCXNwaW5fbG9jaygm aTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CisJaWYgKCEtLW9iai0+dXNlcnB0ci5wYWdlX3JlZikg eworCQlwdmVjID0gb2JqLT51c2VycHRyLnB2ZWM7CisJCW9iai0+dXNlcnB0ci5wdmVjID0gTlVM TDsKIAl9Ci0Jc3Bpbl91bmxvY2soJmk5MTUtPm1tX2xvY2spOwotCWlmIChtbSAhPSBuZXcpCi0J CWtmcmVlKG5ldyk7Ci0KLW91dDoKLQlvYmotPnVzZXJwdHIubW0gPSBtbTsKLQlyZXR1cm4gcmV0 OwotfQotCi1zdGF0aWMgdm9pZAotX19pOTE1X21tX3N0cnVjdF9mcmVlX193b3JrZXIoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0gPSBjb250 YWluZXJfb2Yod29yaywgdHlwZW9mKCptbSksIHdvcmsud29yayk7Ci0KLQlpOTE1X21tdV9ub3Rp Zmllcl9mcmVlKG1tLT5tbiwgbW0tPm1tKTsKLQltbWRyb3AobW0tPm1tKTsKLQlrZnJlZShtbSk7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1fX2k5MTVfbW1fc3RydWN0X2ZyZWUoc3RydWN0IGtyZWYgKmty ZWYpCi17Ci0Jc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSA9IGNvbnRhaW5lcl9vZihrcmVmLCB0 eXBlb2YoKm1tKSwga3JlZik7Ci0KLQlzcGluX2xvY2soJm1tLT5pOTE1LT5tbV9sb2NrKTsKLQlo YXNoX2RlbF9yY3UoJm1tLT5ub2RlKTsKLQlzcGluX3VubG9jaygmbW0tPmk5MTUtPm1tX2xvY2sp OwotCi0JSU5JVF9SQ1VfV09SSygmbW0tPndvcmssIF9faTkxNV9tbV9zdHJ1Y3RfZnJlZV9fd29y a2VyKTsKLQlxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fd3EsICZtbS0+d29yayk7Ci19CisJR0VNX0JV R19PTihvYmotPnVzZXJwdHIucGFnZV9yZWYgPCAwKTsKKwlzcGluX3VubG9jaygmaTkxNS0+bW0u bm90aWZpZXJfbG9jayk7CiAKLXN0YXRpYyB2b2lkCi1pOTE1X2dlbV91c2VycHRyX3JlbGVhc2Vf X21tX3N0cnVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCWlmIChvYmot PnVzZXJwdHIubW0gPT0gTlVMTCkKLQkJcmV0dXJuOworCWlmIChwdmVjKSB7CisJCWNvbnN0IHVu c2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKIAot CWtyZWZfcHV0KCZvYmotPnVzZXJwdHIubW0tPmtyZWYsIF9faTkxNV9tbV9zdHJ1Y3RfZnJlZSk7 Ci0Jb2JqLT51c2VycHRyLm1tID0gTlVMTDsKKwkJdW5waW5fdXNlcl9wYWdlcyhwdmVjLCBudW1f cGFnZXMpOworCQlrZnJlZShwdmVjKTsKKwl9CiB9CiAKLXN0cnVjdCBnZXRfcGFnZXNfd29yayB7 Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci19OwotCi1zdGF0aWMgc3RydWN0IHNn X3RhYmxlICoKLV9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAotCQkJICAgICAgIHN0cnVjdCBwYWdlICoqcHZlYywgdW5zaWduZWQg bG9uZyBudW1fcGFnZXMpCitzdGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOworCWNvbnN0IHVuc2lnbmVkIGxvbmcg bnVtX3BhZ2VzID0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBpbnQg bWF4X3NlZ21lbnQgPSBpOTE1X3NnX3NlZ21lbnRfc2l6ZSgpOwogCXN0cnVjdCBzZ190YWJsZSAq c3Q7CiAJdW5zaWduZWQgaW50IHNnX3BhZ2Vfc2l6ZXM7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpz ZzsKKwlzdHJ1Y3QgcGFnZSAqKnB2ZWM7CiAJaW50IHJldDsKIAogCXN0ID0ga21hbGxvYyhzaXpl b2YoKnN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9s b2NrKTsKKwlpZiAoR0VNX1dBUk5fT04oIW9iai0+dXNlcnB0ci5wYWdlX3JlZikpIHsKKwkJc3Bp bl91bmxvY2soJmk5MTUtPm1tLm5vdGlmaWVyX2xvY2spOworCQlyZXQgPSAtRUZBVUxUOworCQln b3RvIGVycl9mcmVlOworCX0KKworCW9iai0+dXNlcnB0ci5wYWdlX3JlZisrOworCXB2ZWMgPSBv YmotPnVzZXJwdHIucHZlYzsKKwlzcGluX3VubG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7 CiAKIGFsbG9jX3RhYmxlOgogCXNnID0gX19zZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKHN0LCBw dmVjLCBudW1fcGFnZXMsIDAsCkBAIC0zODEsNyArMTUxLDggQEAgX19pOTE1X2dlbV91c2VycHRy X2FsbG9jX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJCSBOVUxM LCAwLCBHRlBfS0VSTkVMKTsKIAlpZiAoSVNfRVJSKHNnKSkgewogCQlrZnJlZShzdCk7Ci0JCXJl dHVybiBFUlJfQ0FTVChzZyk7CisJCXJldCA9IFBUUl9FUlIoc2cpOworCQlnb3RvIGVycjsKIAl9 CiAKIAlyZXQgPSBpOTE1X2dlbV9ndHRfcHJlcGFyZV9wYWdlcyhvYmosIHN0KTsKQEAgLTM5Mywy MDMgKzE2NCwyMCBAQCBfX2k5MTVfZ2VtX3VzZXJwdHJfYWxsb2NfcGFnZXMoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCWdvdG8gYWxsb2NfdGFibGU7CiAJCX0KIAotCQlrZnJl ZShzdCk7Ci0JCXJldHVybiBFUlJfUFRSKHJldCk7CisJCWdvdG8gZXJyOwogCX0KIAogCXNnX3Bh Z2Vfc2l6ZXMgPSBpOTE1X3NnX3BhZ2Vfc2l6ZXMoc3QtPnNnbCk7CiAKIAlfX2k5MTVfZ2VtX29i amVjdF9zZXRfcGFnZXMob2JqLCBzdCwgc2dfcGFnZV9zaXplcyk7CiAKLQlyZXR1cm4gc3Q7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1fX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcihzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKQotewotCXN0cnVjdCBnZXRfcGFnZXNfd29yayAqd29yayA9 IGNvbnRhaW5lcl9vZihfd29yaywgdHlwZW9mKCp3b3JrKSwgd29yayk7Ci0Jc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiA9IHdvcmstPm9iajsKLQljb25zdCB1bnNpZ25lZCBsb25nIG5w YWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBwaW5u ZWQ7Ci0Jc3RydWN0IHBhZ2UgKipwdmVjOwotCWludCByZXQ7Ci0KLQlyZXQgPSAtRU5PTUVNOwot CXBpbm5lZCA9IDA7Ci0KLQlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnBhZ2VzLCBzaXplb2Yoc3Ry dWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwotCWlmIChwdmVjICE9IE5VTEwpIHsKLQkJc3RydWN0 IG1tX3N0cnVjdCAqbW0gPSBvYmotPnVzZXJwdHIubW0tPm1tOwotCQl1bnNpZ25lZCBpbnQgZmxh Z3MgPSAwOwotCQlpbnQgbG9ja2VkID0gMDsKLQotCQlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc19y ZWFkb25seShvYmopKQotCQkJZmxhZ3MgfD0gRk9MTF9XUklURTsKLQotCQlyZXQgPSAtRUZBVUxU OwotCQlpZiAobW1nZXRfbm90X3plcm8obW0pKSB7Ci0JCQl3aGlsZSAocGlubmVkIDwgbnBhZ2Vz KSB7Ci0JCQkJaWYgKCFsb2NrZWQpIHsKLQkJCQkJbW1hcF9yZWFkX2xvY2sobW0pOwotCQkJCQls b2NrZWQgPSAxOwotCQkJCX0KLQkJCQlyZXQgPSBwaW5fdXNlcl9wYWdlc19yZW1vdGUKLQkJCQkJ KG1tLAotCQkJCQkgb2JqLT51c2VycHRyLnB0ciArIHBpbm5lZCAqIFBBR0VfU0laRSwKLQkJCQkJ IG5wYWdlcyAtIHBpbm5lZCwKLQkJCQkJIGZsYWdzLAotCQkJCQkgcHZlYyArIHBpbm5lZCwgTlVM TCwgJmxvY2tlZCk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCWJyZWFrOwotCi0JCQkJcGlubmVk ICs9IHJldDsKLQkJCX0KLQkJCWlmIChsb2NrZWQpCi0JCQkJbW1hcF9yZWFkX3VubG9jayhtbSk7 Ci0JCQltbXB1dChtbSk7Ci0JCX0KLQl9Ci0KLQltdXRleF9sb2NrX25lc3RlZCgmb2JqLT5tbS5s b2NrLCBJOTE1X01NX0dFVF9QQUdFUyk7Ci0JaWYgKG9iai0+dXNlcnB0ci53b3JrID09ICZ3b3Jr LT53b3JrKSB7Ci0JCXN0cnVjdCBzZ190YWJsZSAqcGFnZXMgPSBFUlJfUFRSKHJldCk7Ci0KLQkJ aWYgKHBpbm5lZCA9PSBucGFnZXMpIHsKLQkJCXBhZ2VzID0gX19pOTE1X2dlbV91c2VycHRyX2Fs bG9jX3BhZ2VzKG9iaiwgcHZlYywKLQkJCQkJCQkgICAgICAgbnBhZ2VzKTsKLQkJCWlmICghSVNf RVJSKHBhZ2VzKSkgewotCQkJCXBpbm5lZCA9IDA7Ci0JCQkJcGFnZXMgPSBOVUxMOwotCQkJfQot CQl9Ci0KLQkJb2JqLT51c2VycHRyLndvcmsgPSBFUlJfQ0FTVChwYWdlcyk7Ci0JCWlmIChJU19F UlIocGFnZXMpKQotCQkJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBmYWxzZSk7 Ci0JfQotCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKLQotCXVucGluX3VzZXJfcGFnZXMo cHZlYywgcGlubmVkKTsKLQlrdmZyZWUocHZlYyk7Ci0KLQlpOTE1X2dlbV9vYmplY3RfcHV0KG9i aik7Ci0JcHV0X3Rhc2tfc3RydWN0KHdvcmstPnRhc2spOwotCWtmcmVlKHdvcmspOwotfQotCi1z dGF0aWMgc3RydWN0IHNnX3RhYmxlICoKLV9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2No ZWR1bGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlzdHJ1Y3QgZ2V0X3Bh Z2VzX3dvcmsgKndvcms7Ci0KLQkvKiBTcGF3biBhIHdvcmtlciBzbyB0aGF0IHdlIGNhbiBhY3F1 aXJlIHRoZQotCSAqIHVzZXIgcGFnZXMgd2l0aG91dCBob2xkaW5nIG91ciBtdXRleC4gQWNjZXNz Ci0JICogdG8gdGhlIHVzZXIgcGFnZXMgcmVxdWlyZXMgbW1hcF9sb2NrLCBhbmQgd2UgaGF2ZQot CSAqIGEgc3RyaWN0IGxvY2sgb3JkZXJpbmcgb2YgbW1hcF9sb2NrLCBzdHJ1Y3RfbXV0ZXggLQot CSAqIHdlIGFscmVhZHkgaG9sZCBzdHJ1Y3RfbXV0ZXggaGVyZSBhbmQgc28gY2Fubm90Ci0JICog Y2FsbCBndXAgd2l0aG91dCBlbmNvdW50ZXJpbmcgYSBsb2NrIGludmVyc2lvbi4KLQkgKgotCSAq IFVzZXJzcGFjZSB3aWxsIGtlZXAgb24gcmVwZWF0aW5nIHRoZSBvcGVyYXRpb24KLQkgKiAodGhh bmtzIHRvIEVBR0FJTikgdW50aWwgZWl0aGVyIHdlIGhpdCB0aGUgZmFzdAotCSAqIHBhdGggb3Ig dGhlIHdvcmtlciBjb21wbGV0ZXMuIElmIHRoZSB3b3JrZXIgaXMKLQkgKiBjYW5jZWxsZWQgb3Ig c3VwZXJzZWRlZCwgdGhlIHRhc2sgaXMgc3RpbGwgcnVuCi0JICogYnV0IHRoZSByZXN1bHRzIGln bm9yZWQuIChUaGlzIGxlYWRzIHRvCi0JICogY29tcGxpY2F0aW9ucyB0aGF0IHdlIG1heSBoYXZl IGEgc3RyYXkgb2JqZWN0Ci0JICogcmVmY291bnQgdGhhdCB3ZSBuZWVkIHRvIGJlIHdhcnkgb2Yg d2hlbgotCSAqIGNoZWNraW5nIGZvciBleGlzdGluZyBvYmplY3RzIGR1cmluZyBjcmVhdGlvbi4p Ci0JICogSWYgdGhlIHdvcmtlciBlbmNvdW50ZXJzIGFuIGVycm9yLCBpdCByZXBvcnRzCi0JICog dGhhdCBlcnJvciBiYWNrIHRvIHRoaXMgZnVuY3Rpb24gdGhyb3VnaAotCSAqIG9iai0+dXNlcnB0 ci53b3JrID0gRVJSX1BUUi4KLQkgKi8KLQl3b3JrID0ga21hbGxvYyhzaXplb2YoKndvcmspLCBH RlBfS0VSTkVMKTsKLQlpZiAod29yayA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKLQotCW9iai0+dXNlcnB0ci53b3JrID0gJndvcmstPndvcms7Ci0KLQl3b3JrLT5vYmogPSBp OTE1X2dlbV9vYmplY3RfZ2V0KG9iaik7Ci0KLQl3b3JrLT50YXNrID0gY3VycmVudDsKLQlnZXRf dGFza19zdHJ1Y3Qod29yay0+dGFzayk7Ci0KLQlJTklUX1dPUksoJndvcmstPndvcmssIF9faTkx NV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfd29ya2VyKTsKLQlxdWV1ZV93b3JrKHRvX2k5MTUob2Jq LT5iYXNlLmRldiktPm1tLnVzZXJwdHJfd3EsICZ3b3JrLT53b3JrKTsKLQotCXJldHVybiBFUlJf UFRSKC1FQUdBSU4pOwotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2Vz KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JY29uc3QgdW5zaWduZWQgbG9u ZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwotCXN0cnVjdCBtbV9z dHJ1Y3QgKm1tID0gb2JqLT51c2VycHRyLm1tLT5tbTsKLQlzdHJ1Y3QgcGFnZSAqKnB2ZWM7Ci0J c3RydWN0IHNnX3RhYmxlICpwYWdlczsKLQlib29sIGFjdGl2ZTsKLQlpbnQgcGlubmVkOwotCXVu c2lnbmVkIGludCBndXBfZmxhZ3MgPSAwOwotCi0JLyogSWYgdXNlcnNwYWNlIHNob3VsZCBlbmdp bmVlciB0aGF0IHRoZXNlIHBhZ2VzIGFyZSByZXBsYWNlZCBpbgotCSAqIHRoZSB2bWEgYmV0d2Vl biB1cyBiaW5kaW5nIHRoaXMgcGFnZSBpbnRvIHRoZSBHVFQgYW5kIGNvbXBsZXRpb24KLQkgKiBv ZiByZW5kZXJpbmcuLi4gVGhlaXIgbG9zcy4gSWYgdGhleSBjaGFuZ2UgdGhlIG1hcHBpbmcgb2Yg dGhlaXIKLQkgKiBwYWdlcyB0aGV5IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGJvIHRvIHBvaW50IHRv IHRoZSBuZXcgdm1hLgotCSAqCi0JICogSG93ZXZlciwgdGhhdCBzdGlsbCBsZWF2ZXMgb3BlbiB0 aGUgcG9zc2liaWxpdHkgb2YgdGhlIHZtYQotCSAqIGJlaW5nIGNvcGllZCB1cG9uIGZvcmsuIFdo aWNoIGZhbGxzIHVuZGVyIHRoZSBzYW1lIHVzZXJzcGFjZQotCSAqIHN5bmNocm9uaXNhdGlvbiBp c3N1ZSBhcyBhIHJlZ3VsYXIgYm8sIGV4Y2VwdCB0aGF0IHRoaXMgdGltZQotCSAqIHRoZSBwcm9j ZXNzIG1heSBub3QgYmUgZXhwZWN0aW5nIHRoYXQgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mCi0JICog bWVtb3J5IGlzIHRpZWQgdG8gdGhlIEdQVS4KLQkgKgotCSAqIEZvcnR1bmF0ZWx5LCB3ZSBjYW4g aG9vayBpbnRvIHRoZSBtbXVfbm90aWZpZXIgaW4gb3JkZXIgdG8KLQkgKiBkaXNjYXJkIHRoZSBw YWdlIHJlZmVyZW5jZXMgcHJpb3IgdG8gYW55dGhpbmcgbmFzdHkgaGFwcGVuaW5nCi0JICogdG8g dGhlIHZtYSAoZGlzY2FyZCBvciBjbG9uaW5nKSB3aGljaCBzaG91bGQgcHJldmVudCB0aGUgbW9y ZQotCSAqIGVncmVnaW91cyBjYXNlcyBmcm9tIGNhdXNpbmcgaGFybS4KLQkgKi8KLQotCWlmIChv YmotPnVzZXJwdHIud29yaykgewotCQkvKiBhY3RpdmUgZmxhZyBzaG91bGQgc3RpbGwgYmUgaGVs ZCBmb3IgdGhlIHBlbmRpbmcgd29yayAqLwotCQlpZiAoSVNfRVJSKG9iai0+dXNlcnB0ci53b3Jr KSkKLQkJCXJldHVybiBQVFJfRVJSKG9iai0+dXNlcnB0ci53b3JrKTsKLQkJZWxzZQotCQkJcmV0 dXJuIC1FQUdBSU47Ci0JfQotCi0JcHZlYyA9IE5VTEw7Ci0JcGlubmVkID0gMDsKLQotCWlmICht bSA9PSBjdXJyZW50LT5tbSkgewotCQlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnVtX3BhZ2VzLCBz aXplb2Yoc3RydWN0IHBhZ2UgKiksCi0JCQkJICAgICAgR0ZQX0tFUk5FTCB8Ci0JCQkJICAgICAg X19HRlBfTk9SRVRSWSB8Ci0JCQkJICAgICAgX19HRlBfTk9XQVJOKTsKLQkJaWYgKHB2ZWMpIHsK LQkJCS8qIGRlZmVyIHRvIHdvcmtlciBpZiBtYWxsb2MgZmFpbHMgKi8KLQkJCWlmICghaTkxNV9n ZW1fb2JqZWN0X2lzX3JlYWRvbmx5KG9iaikpCi0JCQkJZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7 Ci0JCQlwaW5uZWQgPSBwaW5fdXNlcl9wYWdlc19mYXN0X29ubHkob2JqLT51c2VycHRyLnB0ciwK LQkJCQkJCQkgIG51bV9wYWdlcywgZ3VwX2ZsYWdzLAotCQkJCQkJCSAgcHZlYyk7Ci0JCX0KLQl9 Ci0KLQlhY3RpdmUgPSBmYWxzZTsKLQlpZiAocGlubmVkIDwgMCkgewotCQlwYWdlcyA9IEVSUl9Q VFIocGlubmVkKTsKLQkJcGlubmVkID0gMDsKLQl9IGVsc2UgaWYgKHBpbm5lZCA8IG51bV9wYWdl cykgewotCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2NoZWR1bGUob2Jq KTsKLQkJYWN0aXZlID0gcGFnZXMgPT0gRVJSX1BUUigtRUFHQUlOKTsKLQl9IGVsc2UgewotCQlw YWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhvYmosIHB2ZWMsIG51bV9wYWdl cyk7Ci0JCWFjdGl2ZSA9ICFJU19FUlIocGFnZXMpOwotCX0KLQlpZiAoYWN0aXZlKQotCQlfX2k5 MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIHRydWUpOwotCi0JaWYgKElTX0VSUihwYWdl cykpCi0JCXVucGluX3VzZXJfcGFnZXMocHZlYywgcGlubmVkKTsKLQlrdmZyZWUocHZlYyk7CisJ cmV0dXJuIDA7CiAKLQlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHBhZ2VzKTsKK2VycjoKKwlpOTE1 X2dlbV9vYmplY3RfdXNlcnB0cl9kcm9wX3JlZihvYmopOworZXJyX2ZyZWU6CisJa2ZyZWUoc3Qp OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01OTksOSArMTg3LDYgQEAgaTkx NV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK IAlzdHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQkvKiBD YW5jZWwgYW55IGluZmxpZ2h0IHdvcmsgYW5kIGZvcmNlIHRoZW0gdG8gcmVzdGFydCB0aGVpciBn dXAgKi8KLQlvYmotPnVzZXJwdHIud29yayA9IE5VTEw7Ci0JX19pOTE1X2dlbV91c2VycHRyX3Nl dF9hY3RpdmUob2JqLCBmYWxzZSk7CiAJaWYgKCFwYWdlcykKIAkJcmV0dXJuOwogCkBAIC02NDEs MTkgKzIyNiwxMzUgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKIAkJfQogCiAJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKLQkJ dW5waW5fdXNlcl9wYWdlKHBhZ2UpOwogCX0KIAlvYmotPm1tLmRpcnR5ID0gZmFsc2U7CiAKIAlz Z19mcmVlX3RhYmxlKHBhZ2VzKTsKIAlrZnJlZShwYWdlcyk7CisKKwlpOTE1X2dlbV9vYmplY3Rf dXNlcnB0cl9kcm9wX3JlZihvYmopOworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF91 c2VycHRyX3VuYmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIGdldF9w YWdlcykKK3sKKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOworCWludCBlcnI7CisKKwllcnIgPSBp OTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaiwgSTkxNV9HRU1fT0JKRUNUX1VOQklORF9BQ1RJVkUp OworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoR0VNX1dBUk5fT04oaTkxNV9nZW1f b2JqZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSkpCisJCXJldHVybiAtRUJVU1k7CisKKwltdXRl eF9sb2NrX25lc3RlZCgmb2JqLT5tbS5sb2NrLCBJOTE1X01NX0dFVF9QQUdFUyk7CisKKwlwYWdl cyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7CisJaWYgKCFJU19FUlJfT1Jf TlVMTChwYWdlcykpCisJCWk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzKG9iaiwgcGFnZXMpOwor CisJaWYgKGdldF9wYWdlcykKKwkJZXJyID0gX19fX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMo b2JqKTsKKwltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7CisKKwlyZXR1cm4gZXJyOworfQor CitpbnQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2luaXQoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRv X2k5MTUob2JqLT5iYXNlLmRldik7CisJY29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBv YmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOworCXN0cnVjdCBwYWdlICoqcHZlYzsKKwl1bnNp Z25lZCBpbnQgZ3VwX2ZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIG5vdGlmaWVyX3NlcTsKKwlp bnQgcGlubmVkLCByZXQ7CisKKwlpZiAob2JqLT51c2VycHRyLm5vdGlmaWVyLm1tICE9IGN1cnJl bnQtPm1tKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9sb2Nr X2ludGVycnVwdGlibGUob2JqLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ LyogTWFrZSBzdXJlIHVzZXJwdHIgaXMgdW5ib3VuZCBmb3IgbmV4dCBhdHRlbXB0LCBzbyB3ZSBk b24ndCB1c2Ugc3RhbGUgcGFnZXMuICovCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJf dW5iaW5kKG9iaiwgZmFsc2UpOworCWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJbm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRf YmVnaW4oJm9iai0+dXNlcnB0ci5ub3RpZmllcik7CisKKwlwdmVjID0ga3ZtYWxsb2NfYXJyYXko bnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICghcHZl YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc19yZWFkb25s eShvYmopKQorCQlndXBfZmxhZ3MgfD0gRk9MTF9XUklURTsKKworCXBpbm5lZCA9IHJldCA9IDA7 CisJd2hpbGUgKHBpbm5lZCA8IG51bV9wYWdlcykgeworCQlyZXQgPSBwaW5fdXNlcl9wYWdlc19m YXN0KG9iai0+dXNlcnB0ci5wdHIgKyBwaW5uZWQgKiBQQUdFX1NJWkUsCisJCQkJCSAgbnVtX3Bh Z2VzIC0gcGlubmVkLCBndXBfZmxhZ3MsCisJCQkJCSAgJnB2ZWNbcGlubmVkXSk7CisJCWlmIChy ZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJcGlubmVkICs9IHJldDsKKwl9CisJcmV0ID0gMDsK KworCXNwaW5fbG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7CisKKwlpZiAobW11X2ludGVy dmFsX3JlYWRfcmV0cnkoJm9iai0+dXNlcnB0ci5ub3RpZmllciwKKwkJIW9iai0+dXNlcnB0ci5w YWdlX3JlZiA/IG5vdGlmaWVyX3NlcSA6CisJCW9iai0+dXNlcnB0ci5ub3RpZmllcl9zZXEpKSB7 CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAoIW9iai0+ dXNlcnB0ci5wYWdlX3JlZisrKSB7CisJCW9iai0+dXNlcnB0ci5wdmVjID0gcHZlYzsKKwkJb2Jq LT51c2VycHRyLm5vdGlmaWVyX3NlcSA9IG5vdGlmaWVyX3NlcTsKKworCQlwdmVjID0gTlVMTDsK Kwl9CisKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm5vdGlmaWVyX2xvY2sp OworCitvdXQ6CisJaWYgKHB2ZWMpIHsKKwkJdW5waW5fdXNlcl9wYWdlcyhwdmVjLCBwaW5uZWQp OworCQlrdmZyZWUocHZlYyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IGk5MTVfZ2Vt X29iamVjdF91c2VycHRyX3N1Ym1pdF9kb25lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCit7CisJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZvYmotPnVzZXJwdHIubm90aWZp ZXIsCisJCQkJICAgIG9iai0+dXNlcnB0ci5ub3RpZmllcl9zZXEpKSB7CisJCS8qIFdlIGNvbGxp ZGVkIHdpdGggdGhlIG1tdSBub3RpZmllciwgbmVlZCB0byByZXRyeSAqLworCisJCXJldHVybiAt RUFHQUlOOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGk5MTVfZ2VtX29iamVjdF91c2Vy cHRyX3N1Ym1pdF9maW5pKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJaTkx NV9nZW1fb2JqZWN0X3VzZXJwdHJfZHJvcF9yZWYob2JqKTsKIH0KIAogc3RhdGljIHZvaWQKIGk5 MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQog ewotCWk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKG9iaik7Ci0JaTkxNV9n ZW1fdXNlcnB0cl9yZWxlYXNlX19tbV9zdHJ1Y3Qob2JqKTsKKwlHRU1fV0FSTl9PTihvYmotPnVz ZXJwdHIucGFnZV9yZWYpOworCisJbW11X2ludGVydmFsX25vdGlmaWVyX3JlbW92ZSgmb2JqLT51 c2VycHRyLm5vdGlmaWVyKTsKKwlvYmotPnVzZXJwdHIubm90aWZpZXIubW0gPSBOVUxMOwogfQog CiBzdGF0aWMgaW50CkBAIC02ODYsNyArMzg3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV91c2VycHRyX29wcyA9IHsKIAkubmFtZSA9ICJp OTE1X2dlbV9vYmplY3RfdXNlcnB0ciIsCiAJLmZsYWdzID0gSTkxNV9HRU1fT0JKRUNUX0lTX1NI UklOS0FCTEUgfAogCQkgSTkxNV9HRU1fT0JKRUNUX05PX01NQVAgfAotCQkgSTkxNV9HRU1fT0JK RUNUX0FTWU5DX0NBTkNFTCB8CiAJCSBJOTE1X0dFTV9PQkpFQ1RfSVNfUFJPWFksCiAJLmdldF9w YWdlcyA9IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzLAogCS5wdXRfcGFnZXMgPSBpOTE1X2dl bV91c2VycHRyX3B1dF9wYWdlcywKQEAgLTgwNyw2ICs1MDcsNyBAQCBpOTE1X2dlbV91c2VycHRy X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNo ZV9jb2hlcmVuY3kob2JqLCBJOTE1X0NBQ0hFX0xMQyk7CiAKIAlvYmotPnVzZXJwdHIucHRyID0g YXJncy0+dXNlcl9wdHI7CisJb2JqLT51c2VycHRyLm5vdGlmaWVyX3NlcSA9IFVMT05HX01BWDsK IAlpZiAoYXJncy0+ZmxhZ3MgJiBJOTE1X1VTRVJQVFJfUkVBRF9PTkxZKQogCQlpOTE1X2dlbV9v YmplY3Rfc2V0X3JlYWRvbmx5KG9iaik7CiAKQEAgLTgxNCw5ICs1MTUsNyBAQCBpOTE1X2dlbV91 c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJICogYXQgYmluZGluZy4gVGhp cyBtZWFucyB0aGF0IHdlIG5lZWQgdG8gaG9vayBpbnRvIHRoZSBtbXVfbm90aWZpZXIKIAkgKiBp biBvcmRlciB0byBkZXRlY3QgaWYgdGhlIG1tdSBpcyBkZXN0cm95ZWQuCiAJICovCi0JcmV0ID0g aTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbV9zdHJ1Y3Qob2JqKTsKLQlpZiAocmV0ID09IDApCi0J CXJldCA9IGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKG9iaik7CisJcmV0ID0g aTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbXVfbm90aWZpZXIob2JqKTsKIAlpZiAocmV0ID09IDAp CiAJCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlLCAmb2JqLT5iYXNlLCAmaGFuZGxl KTsKIApAQCAtODM1LDE1ICs1MzQsNyBAQCBpOTE1X2dlbV91c2VycHRyX2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiBpbnQgaTkxNV9nZW1faW5pdF91c2VycHRyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKIHsKICNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCi0Jc3Bp bl9sb2NrX2luaXQoJmRldl9wcml2LT5tbV9sb2NrKTsKLQloYXNoX2luaXQoZGV2X3ByaXYtPm1t X3N0cnVjdHMpOwotCi0JZGV2X3ByaXYtPm1tLnVzZXJwdHJfd3EgPQotCQlhbGxvY193b3JrcXVl dWUoImk5MTUtdXNlcnB0ci1hY3F1aXJlIiwKLQkJCQlXUV9ISUdIUFJJIHwgV1FfVU5CT1VORCwK LQkJCQkwKTsKLQlpZiAoIWRldl9wcml2LT5tbS51c2VycHRyX3dxKQotCQlyZXR1cm4gLUVOT01F TTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPm1tLm5vdGlmaWVyX2xvY2spOwogI2VuZGlm CiAKIAlyZXR1cm4gMDsKQEAgLTg1MSw3ICs1NDIsNCBAQCBpbnQgaTkxNV9nZW1faW5pdF91c2Vy cHRyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAogdm9pZCBpOTE1X2dlbV9j bGVhbnVwX3VzZXJwdHIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotI2lm ZGVmIENPTkZJR19NTVVfTk9USUZJRVIKLQlkZXN0cm95X3dvcmtxdWV1ZShkZXZfcHJpdi0+bW0u dXNlcnB0cl93cSk7Ci0jZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGQzYzY3 ZTE3Y2QwMi4uY2U4ZDVmZjhiOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTU5MSwx MSArNTkxLDEwIEBAIHN0cnVjdCBpOTE1X2dlbV9tbSB7CiAKICNpZmRlZiBDT05GSUdfTU1VX05P VElGSUVSCiAJLyoqCi0JICogV29ya3F1ZXVlIHRvIGZhdWx0IGluIHVzZXJwdHIgcGFnZXMsIGZs dXNoZWQgYnkgdGhlIGV4ZWNidWYKLQkgKiB3aGVuIHJlcXVpcmVkIGJ1dCBvdGhlcndpc2UgbGVm dCB0byB1c2Vyc3BhY2UgdG8gdHJ5IGFnYWluCi0JICogb24gRUFHQUlOLgorCSAqIG5vdGlmaWVy X2xvY2sgZm9yIG1tdSBub3RpZmllcnMsIG1lbW9yeSBtYXkgbm90IGJlIGFsbG9jYXRlZAorCSAq IHdoaWxlIGhvbGRpbmcgdGhpcyBsb2NrLgogCSAqLwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0 ICp1c2VycHRyX3dxOworCXNwaW5sb2NrX3Qgbm90aWZpZXJfbG9jazsKICNlbmRpZgogCiAJLyog c2hyaW5rZXIgYWNjb3VudGluZywgYWxzbyB1c2VmdWwgZm9yIHVzZXJsYW5kIGRlYnVnZ2luZyAq LwpAQCAtOTc4LDggKzk3Nyw2IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3Qg aTkxNV9nZ3R0IGdndHQ7IC8qIFZNIHJlcHJlc2VudGluZyB0aGUgZ2xvYmFsIGFkZHJlc3Mgc3Bh Y2UgKi8KIAogCXN0cnVjdCBpOTE1X2dlbV9tbSBtbTsKLQlERUNMQVJFX0hBU0hUQUJMRShtbV9z dHJ1Y3RzLCA3KTsKLQlzcGlubG9ja190IG1tX2xvY2s7CiAKIAkvKiBLZXJuZWwgTW9kZXNldHRp bmcgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggYjAzZTI0NTY0MGMwLi4wYjllYWI2 NjUxMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTE1OCwxMCArMTE1OCw4IEBAIGlu dCBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIGVycl91 bmxvY2s6CiAJaTkxNV9nZW1fZHJhaW5fd29ya3F1ZXVlKGRldl9wcml2KTsKIAotCWlmIChyZXQg IT0gLUVJTykgeworCWlmIChyZXQgIT0gLUVJTykKIAkJaW50ZWxfdWNfY2xlYW51cF9maXJtd2Fy ZXMoJmRldl9wcml2LT5ndC51Yyk7Ci0JCWk5MTVfZ2VtX2NsZWFudXBfdXNlcnB0cihkZXZfcHJp dik7Ci0JfQogCiAJaWYgKHJldCA9PSAtRUlPKSB7CiAJCS8qCkBAIC0xMjIwLDcgKzEyMTgsNiBA QCB2b2lkIGk5MTVfZ2VtX2RyaXZlcl9yZWxlYXNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIAlpbnRlbF93YV9saXN0X2ZyZWUoJmRldl9wcml2LT5ndF93YV9saXN0KTsKIAog CWludGVsX3VjX2NsZWFudXBfZmlybXdhcmVzKCZkZXZfcHJpdi0+Z3QudWMpOwotCWk5MTVfZ2Vt X2NsZWFudXBfdXNlcnB0cihkZXZfcHJpdik7CiAKIAlpOTE1X2dlbV9kcmFpbl9mcmVlZF9vYmpl Y3RzKGRldl9wcml2KTsKIAotLSAKMi4yNi4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK