From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 B31F5C4708F for ; Tue, 1 Jun 2021 07:47:29 +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 7B5056124B for ; Tue, 1 Jun 2021 07:47:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7B5056124B 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 1099C6E8A0; Tue, 1 Jun 2021 07:47:17 +0000 (UTC) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 129BD6E88A; Tue, 1 Jun 2021 07:47:15 +0000 (UTC) IronPort-SDR: lWxlP3fUSAihErIEVnUlv1CPOWvJsT48bHa2FC//h3JNuWDEhjDgj3Afw+8JsF4io5CW1C552f Ffq5HcXclDRA== X-IronPort-AV: E=McAfee;i="6200,9189,10001"; a="203494072" X-IronPort-AV: E=Sophos;i="5.83,239,1616482800"; d="scan'208";a="203494072" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jun 2021 00:47:14 -0700 IronPort-SDR: S+gSBfTLDXWDYiKJCRi0p1Vf6h25dBJy+czLIajafOEqvdkZdx6vdjl4wzqLOhgL4gL6gDvae+ SyY9IlOjMI3A== X-IronPort-AV: E=Sophos;i="5.83,239,1616482800"; d="scan'208";a="549648702" Received: from clillies-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.18]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jun 2021 00:47:13 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Tue, 1 Jun 2021 09:46:45 +0200 Message-Id: <20210601074654.3103-7-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210601074654.3103-1-thomas.hellstrom@linux.intel.com> References: <20210601074654.3103-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v9 06/15] drm/ttm: Add a generic TTM memcpy move for page-based iomem X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , =?UTF-8?q?Christian=20K=C3=B6nig?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" VGhlIGludGVybmFsIHR0bV9ib191dGlsIG1lbWNweSB1c2VzIGlvcmVtYXAgZnVuY3Rpb25hbGl0 eSwgYW5kIHdoaWxlIGl0CnByb2JhYmx5IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHVzZSBpdCBmb3Ig Y29weWluZyBpbi0gYW5kIG91dCBvZgpzZ2xpc3QgcmVwcmVzZW50ZWQgaW8gbWVtb3J5LCB1c2lu ZyBpb19tZW1fcmVzZXJ2ZSgpIC8gaW9fbWVtX2ZyZWUoKQpjYWxsYmFja3MsIHRoYXQgd291bGQg Y2F1c2UgcHJvYmxlbXMgd2l0aCBmYXVsdCgpLgpJbnN0ZWFkLCBpbXBsZW1lbnQgYSBtZXRob2Qg bWFwcGluZyBwYWdlLWJ5LXBhZ2UgdXNpbmcga21hcF9sb2NhbCgpCnNlbWFudGljcy4gQXMgYW4g YWRkaXRpb25hbCBiZW5lZml0IHdlIHRoZW4gYXZvaWQgdGhlIG9jY2FzaW9uYWwgZ2xvYmFsClRM QiBmbHVzaGVzIG9mIGlvcmVtYXAoKSBhbmQgY29uc3VtaW5nIGlvcmVtYXAgc3BhY2UsIGVsaW1p bmF0aW9uIG9mIGEKY3JpdGljYWwgcG9pbnQgb2YgZmFpbHVyZSBhbmQgd2l0aCBhIHNsaWdodCBj aGFuZ2Ugb2Ygc2VtYW50aWNzIHdlIGNvdWxkCmFsc28gcHVzaCB0aGUgbWVtY3B5IG91dCBhc3lu YyBmb3IgdGVzdGluZyBhbmQgYXN5bmMgZHJpdmVyIGRldmVsb3BtZW50CnB1cnBvc2VzLgoKQSBz cGVjaWFsIGxpbmVhciBpb21lbSBpdGVyYXRvciBpcyBpbnRyb2R1Y2VkIGludGVybmFsbHkgdG8g bWltaWMgdGhlCm9sZCBpb3JlbWFwIGJlaGF2aW91ciBmb3IgY29kZS1wYXRocyB0aGF0IGNhbid0 IGltbWVkaWF0ZWx5IGJlIHBvcnRlZApvdmVyLiBUaGlzIGFkZHMgdG8gdGhlIGNvZGUgc2l6ZSBh bmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSB0ZW1wb3JhcnkKc29sdXRpb24uCgpMb29raW5nIGF0 IHRoZSBjb2RlIHdlIGhhdmUgYSBsb3Qgb2YgY2hlY2tzIGZvciBpb21hcCB0YWdnZWQgcG9pbnRl cnMuCklkZWFsbHkgd2Ugc2hvdWxkIGV4dGVuZCB0aGUgY29yZSBtZW1yZW1hcCBmdW5jdGlvbnMg dG8gYWxzbyBhY2NlcHQKdW5jYWNoZWQgbWVtb3J5IGFuZCBrbWFwX2xvY2FsIGZ1bmN0aW9uYWxp dHkuIFRoZW4gd2UgY291bGQgc3RyaXAgYQpsb3Qgb2YgY29kZS4KCkNjOiBDaHJpc3RpYW4gS8O2 bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+ClNpZ25lZC1vZmYtYnk6IFRob21hcyBIZWxs c3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IENo cmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KLS0tCnYzOgotIFNwbGl0 IHVwIGluIHZhcmlvdXMgVFRNIGZpbGVzIGFuZCBhZGRyZXNzZWQgcmV2aWV3IGNvbW1lbnRzIGJ5 CiAgQ2hyaXN0aWFuIEvDtm5pZy4gVGVzdGVkIGFuZCBmaXhlZCBsZWdhY3kgaW9tYXAgbWVtY3B5 IHBhdGggb24gaTkxNS4KdjQ6Ci0gRml4IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUKICBSZXBv cnRlZCBieToga2VybmVsIHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5jb20+CiAgUmVwb3J0ZWQgYnk6 IERhbiBDYXJwZW50ZXIgPGRhbi5jYXJwZW50ZXJAb3JhY2xlLmNvbT4KLSBNaW5vciBjaGFuZ2Ug dG8gdGhlIHR0bV9tb3ZlX21lbWNweSgpIGludGVyZmFjZS4KLSBHcmFjZWZ1bGx5IGhhbmRsZSBs YWNrIG9mIG1lbXJlbWFwKCkgc3VwcG9ydCBvbiBtZW1jcHkKICAoUmVwb3J0ZWQgYnkgTWF0dGhl dyBBdWxkKQotIE1pbm9yIHN0eWxlIGZpeCAoUmVwb3J0ZWQgYnkgTWF0dGhldyBBdWxkKQp2ODoK LSBDaGFuZ2UgbnVtX3BhZ2VzIGZyb20gcGdvZmZfdCB0byB1aW50MzJfdCAoU3VnZ2VzdGVkIGJ5 IENocmlzdGlhbiBLw7ZuaWcpCnY5OgotIEZpeCBhIE5VTEwgcG9pbnRlciBkZXJlZiBpbiB0dG1f a21hcF9pdGVyX3R0X2luaXQgaWYgdHQgaXMgTlVMTC4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vdHRt L3R0bV9ib191dGlsLmMgIHwgMjgwICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2 ZXJzL2dwdS9kcm0vdHRtL3R0bV9tb2R1bGUuYyAgIHwgIDM1ICsrKysKIGRyaXZlcnMvZ3B1L2Ry bS90dG0vdHRtX3Jlc291cmNlLmMgfCAxOTMgKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS90dG0vdHRtX3R0LmMgICAgICAgfCAgNDUgKysrKysKIGluY2x1ZGUvZHJtL3R0bS90 dG1fYm9fZHJpdmVyLmggICAgfCAgMjggKysrCiBpbmNsdWRlL2RybS90dG0vdHRtX2NhY2hpbmcu aCAgICAgIHwgICAyICsKIGluY2x1ZGUvZHJtL3R0bS90dG1fa21hcF9pdGVyLmggICAgfCAgNjEg KysrKysrKwogaW5jbHVkZS9kcm0vdHRtL3R0bV9yZXNvdXJjZS5oICAgICB8ICA2MSArKysrKysr CiBpbmNsdWRlL2RybS90dG0vdHRtX3R0LmggICAgICAgICAgIHwgIDE2ICsrCiA5IGZpbGVzIGNo YW5nZWQsIDUzOSBpbnNlcnRpb25zKCspLCAxODIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgaW5jbHVkZS9kcm0vdHRtL3R0bV9rbWFwX2l0ZXIuaAoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2Jv X3V0aWwuYwppbmRleCBhZThiNjE0NjA3MjQuLmE4MDA5OThhMTJiMCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0v dHRtX2JvX3V0aWwuYwpAQCAtNzIsMTkwICs3MiwxMjYgQEAgdm9pZCB0dG1fbWVtX2lvX2ZyZWUo c3RydWN0IHR0bV9kZXZpY2UgKmJkZXYsCiAJbWVtLT5idXMuYWRkciA9IE5VTEw7CiB9CiAKLXN0 YXRpYyBpbnQgdHRtX3Jlc291cmNlX2lvcmVtYXAoc3RydWN0IHR0bV9kZXZpY2UgKmJkZXYsCi0J CQkgICAgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqbWVtLAotCQkJICAgICAgIHZvaWQgKip2aXJ0 dWFsKQorLyoqCisgKiB0dG1fbW92ZV9tZW1jcHkgLSBIZWxwZXIgdG8gcGVyZm9ybSBhIG1lbWNw eSB0dG0gbW92ZSBvcGVyYXRpb24uCisgKiBAYm86IFRoZSBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QuCisgKiBAbmV3X21lbTogVGhlIHN0cnVjdCB0dG1fcmVzb3VyY2Ugd2UncmUgbW92aW5nIHRv IChjb3B5IGRlc3RpbmF0aW9uKS4KKyAqIEBuZXdfaXRlcjogQSBzdHJ1Y3QgdHRtX2ttYXBfaXRl ciByZXByZXNlbnRpbmcgdGhlIGRlc3RpbmF0aW9uIHJlc291cmNlLgorICogQHNyY19pdGVyOiBB IHN0cnVjdCB0dG1fa21hcF9pdGVyIHJlcHJlc2VudGluZyB0aGUgc291cmNlIHJlc291cmNlLgor ICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgYWJsZSB0byBtb3ZlIG91dCBh c3luYyB1bmRlciBhCisgKiBkbWEtZmVuY2UgaWYgZGVzaXJlZC4KKyAqLwordm9pZCB0dG1fbW92 ZV9tZW1jcHkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJICAgICB1MzIgbnVtX3Bh Z2VzLAorCQkgICAgIHN0cnVjdCB0dG1fa21hcF9pdGVyICpkc3RfaXRlciwKKwkJICAgICBzdHJ1 Y3QgdHRtX2ttYXBfaXRlciAqc3JjX2l0ZXIpCiB7Ci0JaW50IHJldDsKLQl2b2lkICphZGRyOwot Ci0JKnZpcnR1YWwgPSBOVUxMOwotCXJldCA9IHR0bV9tZW1faW9fcmVzZXJ2ZShiZGV2LCBtZW0p OwotCWlmIChyZXQgfHwgIW1lbS0+YnVzLmlzX2lvbWVtKQotCQlyZXR1cm4gcmV0OworCWNvbnN0 IHN0cnVjdCB0dG1fa21hcF9pdGVyX29wcyAqZHN0X29wcyA9IGRzdF9pdGVyLT5vcHM7CisJY29u c3Qgc3RydWN0IHR0bV9rbWFwX2l0ZXJfb3BzICpzcmNfb3BzID0gc3JjX2l0ZXItPm9wczsKKwlz dHJ1Y3QgdHRtX3R0ICp0dG0gPSBiby0+dHRtOworCXN0cnVjdCBkbWFfYnVmX21hcCBzcmNfbWFw LCBkc3RfbWFwOworCXBnb2ZmX3QgaTsKIAotCWlmIChtZW0tPmJ1cy5hZGRyKSB7Ci0JCWFkZHIg PSBtZW0tPmJ1cy5hZGRyOwotCX0gZWxzZSB7Ci0JCXNpemVfdCBidXNfc2l6ZSA9IChzaXplX3Qp bWVtLT5udW1fcGFnZXMgPDwgUEFHRV9TSElGVDsKKwkvKiBTaW5nbGUgVFRNIG1vdmUuIE5PUCAq LworCWlmIChkc3Rfb3BzLT5tYXBzX3R0ICYmIHNyY19vcHMtPm1hcHNfdHQpCisJCXJldHVybjsK IAotCQlpZiAobWVtLT5idXMuY2FjaGluZyA9PSB0dG1fd3JpdGVfY29tYmluZWQpCi0JCQlhZGRy ID0gaW9yZW1hcF93YyhtZW0tPmJ1cy5vZmZzZXQsIGJ1c19zaXplKTsKLSNpZmRlZiBDT05GSUdf WDg2Ci0JCWVsc2UgaWYgKG1lbS0+YnVzLmNhY2hpbmcgPT0gdHRtX2NhY2hlZCkKLQkJCWFkZHIg PSBpb3JlbWFwX2NhY2hlKG1lbS0+YnVzLm9mZnNldCwgYnVzX3NpemUpOwotI2VuZGlmCi0JCWVs c2UKLQkJCWFkZHIgPSBpb3JlbWFwKG1lbS0+YnVzLm9mZnNldCwgYnVzX3NpemUpOwotCQlpZiAo IWFkZHIpIHsKLQkJCXR0bV9tZW1faW9fZnJlZShiZGV2LCBtZW0pOwotCQkJcmV0dXJuIC1FTk9N RU07CisJLyogRG9uJ3QgbW92ZSBub25leGlzdGVudCBkYXRhLiBDbGVhciBkZXN0aW5hdGlvbiBp bnN0ZWFkLiAqLworCWlmIChzcmNfb3BzLT5tYXBzX3R0ICYmICghdHRtIHx8ICF0dG1fdHRfaXNf cG9wdWxhdGVkKHR0bSkpKSB7CisJCWlmICh0dG0gJiYgISh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1f UEFHRV9GTEFHX1pFUk9fQUxMT0MpKQorCQkJcmV0dXJuOworCisJCWZvciAoaSA9IDA7IGkgPCBu dW1fcGFnZXM7ICsraSkgeworCQkJZHN0X29wcy0+bWFwX2xvY2FsKGRzdF9pdGVyLCAmZHN0X21h cCwgaSk7CisJCQlpZiAoZHN0X21hcC5pc19pb21lbSkKKwkJCQltZW1zZXRfaW8oZHN0X21hcC52 YWRkcl9pb21lbSwgMCwgUEFHRV9TSVpFKTsKKwkJCWVsc2UKKwkJCQltZW1zZXQoZHN0X21hcC52 YWRkciwgMCwgUEFHRV9TSVpFKTsKKwkJCWlmIChkc3Rfb3BzLT51bm1hcF9sb2NhbCkKKwkJCQlk c3Rfb3BzLT51bm1hcF9sb2NhbChkc3RfaXRlciwgJmRzdF9tYXApOwogCQl9CisJCXJldHVybjsK IAl9Ci0JKnZpcnR1YWwgPSBhZGRyOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0dG1f cmVzb3VyY2VfaW91bm1hcChzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwKLQkJCQlzdHJ1Y3QgdHRt X3Jlc291cmNlICptZW0sCi0JCQkJdm9pZCAqdmlydHVhbCkKLXsKLQlpZiAodmlydHVhbCAmJiBt ZW0tPmJ1cy5hZGRyID09IE5VTEwpCi0JCWlvdW5tYXAodmlydHVhbCk7Ci0JdHRtX21lbV9pb19m cmVlKGJkZXYsIG1lbSk7Ci19Ci0KLXN0YXRpYyBpbnQgdHRtX2NvcHlfaW9fcGFnZSh2b2lkICpk c3QsIHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBwYWdlKQotewotCXVpbnQzMl90ICpkc3RQID0K LQkgICAgKHVpbnQzMl90ICopICgodW5zaWduZWQgbG9uZylkc3QgKyAocGFnZSA8PCBQQUdFX1NI SUZUKSk7Ci0JdWludDMyX3QgKnNyY1AgPQotCSAgICAodWludDMyX3QgKikgKCh1bnNpZ25lZCBs b25nKXNyYyArIChwYWdlIDw8IFBBR0VfU0hJRlQpKTsKLQotCWludCBpOwotCWZvciAoaSA9IDA7 IGkgPCBQQUdFX1NJWkUgLyBzaXplb2YodWludDMyX3QpOyArK2kpCi0JCWlvd3JpdGUzMihpb3Jl YWQzMihzcmNQKyspLCBkc3RQKyspOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHR0bV9j b3B5X2lvX3R0bV9wYWdlKHN0cnVjdCB0dG1fdHQgKnR0bSwgdm9pZCAqc3JjLAotCQkJCXVuc2ln bmVkIGxvbmcgcGFnZSwKLQkJCQlwZ3Byb3RfdCBwcm90KQotewotCXN0cnVjdCBwYWdlICpkID0g dHRtLT5wYWdlc1twYWdlXTsKLQl2b2lkICpkc3Q7Ci0KLQlpZiAoIWQpCi0JCXJldHVybiAtRU5P TUVNOwotCi0Jc3JjID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpc3JjICsgKHBhZ2UgPDwgUEFH RV9TSElGVCkpOwotCWRzdCA9IGttYXBfYXRvbWljX3Byb3QoZCwgcHJvdCk7Ci0JaWYgKCFkc3Qp Ci0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5X2Zyb21pbyhkc3QsIHNyYywgUEFHRV9TSVpF KTsKLQotCWt1bm1hcF9hdG9taWMoZHN0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IHR0bV9jb3B5X3R0bV9pb19wYWdlKHN0cnVjdCB0dG1fdHQgKnR0bSwgdm9pZCAqZHN0LAotCQkJ CXVuc2lnbmVkIGxvbmcgcGFnZSwKLQkJCQlwZ3Byb3RfdCBwcm90KQotewotCXN0cnVjdCBwYWdl ICpzID0gdHRtLT5wYWdlc1twYWdlXTsKLQl2b2lkICpzcmM7CiAKLQlpZiAoIXMpCi0JCXJldHVy biAtRU5PTUVNOwotCi0JZHN0ID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpZHN0ICsgKHBhZ2Ug PDwgUEFHRV9TSElGVCkpOwotCXNyYyA9IGttYXBfYXRvbWljX3Byb3QocywgcHJvdCk7Ci0JaWYg KCFzcmMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5X3RvaW8oZHN0LCBzcmMsIFBBR0Vf U0laRSk7Ci0KLQlrdW5tYXBfYXRvbWljKHNyYyk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdl czsgKytpKSB7CisJCWRzdF9vcHMtPm1hcF9sb2NhbChkc3RfaXRlciwgJmRzdF9tYXAsIGkpOwor CQlzcmNfb3BzLT5tYXBfbG9jYWwoc3JjX2l0ZXIsICZzcmNfbWFwLCBpKTsKKworCQlpZiAoIXNy Y19tYXAuaXNfaW9tZW0gJiYgIWRzdF9tYXAuaXNfaW9tZW0pIHsKKwkJCW1lbWNweShkc3RfbWFw LnZhZGRyLCBzcmNfbWFwLnZhZGRyLCBQQUdFX1NJWkUpOworCQl9IGVsc2UgaWYgKCFzcmNfbWFw LmlzX2lvbWVtKSB7CisJCQlkbWFfYnVmX21hcF9tZW1jcHlfdG8oJmRzdF9tYXAsIHNyY19tYXAu dmFkZHIsCisJCQkJCSAgICAgIFBBR0VfU0laRSk7CisJCX0gZWxzZSBpZiAoIWRzdF9tYXAuaXNf aW9tZW0pIHsKKwkJCW1lbWNweV9mcm9taW8oZHN0X21hcC52YWRkciwgc3JjX21hcC52YWRkcl9p b21lbSwKKwkJCQkgICAgICBQQUdFX1NJWkUpOworCQl9IGVsc2UgeworCQkJaW50IGo7CisJCQl1 MzIgX19pb21lbSAqc3JjID0gc3JjX21hcC52YWRkcl9pb21lbTsKKwkJCXUzMiBfX2lvbWVtICpk c3QgPSBkc3RfbWFwLnZhZGRyX2lvbWVtOwogCi0JcmV0dXJuIDA7CisJCQlmb3IgKGogPSAwOyBq IDwgKFBBR0VfU0laRSAvIHNpemVvZih1MzIpKTsgKytqKQorCQkJCWlvd3JpdGUzMihpb3JlYWQz MihzcmMrKyksIGRzdCsrKTsKKwkJfQorCQlpZiAoc3JjX29wcy0+dW5tYXBfbG9jYWwpCisJCQlz cmNfb3BzLT51bm1hcF9sb2NhbChzcmNfaXRlciwgJnNyY19tYXApOworCQlpZiAoZHN0X29wcy0+ dW5tYXBfbG9jYWwpCisJCQlkc3Rfb3BzLT51bm1hcF9sb2NhbChkc3RfaXRlciwgJmRzdF9tYXAp OworCX0KIH0KK0VYUE9SVF9TWU1CT0wodHRtX21vdmVfbWVtY3B5KTsKIAogaW50IHR0bV9ib19t b3ZlX21lbWNweShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQkgICAgICAgc3RydWN0 IHR0bV9vcGVyYXRpb25fY3R4ICpjdHgsCi0JCSAgICAgICBzdHJ1Y3QgdHRtX3Jlc291cmNlICpu ZXdfbWVtKQorCQkgICAgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqZHN0X21lbSkKIHsKIAlzdHJ1 Y3QgdHRtX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OwotCXN0cnVjdCB0dG1fcmVzb3VyY2VfbWFu YWdlciAqbWFuID0gdHRtX21hbmFnZXJfdHlwZShiZGV2LCBuZXdfbWVtLT5tZW1fdHlwZSk7CisJ c3RydWN0IHR0bV9yZXNvdXJjZV9tYW5hZ2VyICpkc3RfbWFuID0KKwkJdHRtX21hbmFnZXJfdHlw ZShiby0+YmRldiwgZHN0X21lbS0+bWVtX3R5cGUpOwogCXN0cnVjdCB0dG1fdHQgKnR0bSA9IGJv LT50dG07Ci0Jc3RydWN0IHR0bV9yZXNvdXJjZSAqb2xkX21lbSA9ICZiby0+bWVtOwotCXN0cnVj dCB0dG1fcmVzb3VyY2Ugb2xkX2NvcHkgPSAqb2xkX21lbTsKLQl2b2lkICpvbGRfaW9tYXA7Ci0J dm9pZCAqbmV3X2lvbWFwOwotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBpOwotCi0JcmV0ID0g dHRtX2JvX3dhaXRfY3R4KGJvLCBjdHgpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQly ZXQgPSB0dG1fcmVzb3VyY2VfaW9yZW1hcChiZGV2LCBvbGRfbWVtLCAmb2xkX2lvbWFwKTsKLQlp ZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXJldCA9IHR0bV9yZXNvdXJjZV9pb3JlbWFwKGJkZXYs IG5ld19tZW0sICZuZXdfaW9tYXApOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkg KiBTaW5nbGUgVFRNIG1vdmUuIE5PUC4KLQkgKi8KLQlpZiAob2xkX2lvbWFwID09IE5VTEwgJiYg bmV3X2lvbWFwID09IE5VTEwpCi0JCWdvdG8gb3V0MjsKLQotCS8qCi0JICogRG9uJ3QgbW92ZSBu b25leGlzdGVudCBkYXRhLiBDbGVhciBkZXN0aW5hdGlvbiBpbnN0ZWFkLgotCSAqLwotCWlmIChv bGRfaW9tYXAgPT0gTlVMTCAmJgotCSAgICAodHRtID09IE5VTEwgfHwgKCF0dG1fdHRfaXNfcG9w dWxhdGVkKHR0bSkgJiYKLQkJCSAgICAgISh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFH X1NXQVBQRUQpKSkpIHsKLQkJbWVtc2V0X2lvKG5ld19pb21hcCwgMCwgbmV3X21lbS0+bnVtX3Bh Z2VzKlBBR0VfU0laRSk7Ci0JCWdvdG8gb3V0MjsKLQl9CisJc3RydWN0IHR0bV9yZXNvdXJjZSAq c3JjX21lbSA9ICZiby0+bWVtOworCXN0cnVjdCB0dG1fcmVzb3VyY2VfbWFuYWdlciAqc3JjX21h biA9CisJCXR0bV9tYW5hZ2VyX3R5cGUoYmRldiwgc3JjX21lbS0+bWVtX3R5cGUpOworCXN0cnVj dCB0dG1fcmVzb3VyY2Ugc3JjX2NvcHkgPSAqc3JjX21lbTsKKwl1bmlvbiB7CisJCXN0cnVjdCB0 dG1fa21hcF9pdGVyX3R0IHR0OworCQlzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9saW5lYXJfaW8gaW87 CisJfSBfZHN0X2l0ZXIsIF9zcmNfaXRlcjsKKwlzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqZHN0X2l0 ZXIsICpzcmNfaXRlcjsKKwlpbnQgcmV0ID0gMDsKIAotCS8qCi0JICogVFRNIG1pZ2h0IGJlIG51 bGwgZm9yIG1vdmVzIHdpdGhpbiB0aGUgc2FtZSByZWdpb24uCi0JICovCi0JaWYgKHR0bSkgewor CWlmICh0dG0gJiYgKCh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1NXQVBQRUQpIHx8 CisJCSAgICBkc3RfbWFuLT51c2VfdHQpKSB7CiAJCXJldCA9IHR0bV90dF9wb3B1bGF0ZShiZGV2 LCB0dG0sIGN0eCk7CiAJCWlmIChyZXQpCi0JCQlnb3RvIG91dDE7CisJCQlyZXR1cm4gcmV0Owog CX0KIAotCWZvciAoaSA9IDA7IGkgPCBuZXdfbWVtLT5udW1fcGFnZXM7ICsraSkgewotCQlpZiAo b2xkX2lvbWFwID09IE5VTEwpIHsKLQkJCXBncHJvdF90IHByb3QgPSB0dG1faW9fcHJvdChibywg b2xkX21lbSwgUEFHRV9LRVJORUwpOwotCQkJcmV0ID0gdHRtX2NvcHlfdHRtX2lvX3BhZ2UodHRt LCBuZXdfaW9tYXAsIGksCi0JCQkJCQkgICBwcm90KTsKLQkJfSBlbHNlIGlmIChuZXdfaW9tYXAg PT0gTlVMTCkgewotCQkJcGdwcm90X3QgcHJvdCA9IHR0bV9pb19wcm90KGJvLCBuZXdfbWVtLCBQ QUdFX0tFUk5FTCk7Ci0JCQlyZXQgPSB0dG1fY29weV9pb190dG1fcGFnZSh0dG0sIG9sZF9pb21h cCwgaSwKLQkJCQkJCSAgIHByb3QpOwotCQl9IGVsc2UgewotCQkJcmV0ID0gdHRtX2NvcHlfaW9f cGFnZShuZXdfaW9tYXAsIG9sZF9pb21hcCwgaSk7Ci0JCX0KLQkJaWYgKHJldCkKLQkJCWdvdG8g b3V0MTsKKwlkc3RfaXRlciA9IHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvX2luaXQoJl9kc3RfaXRl ci5pbywgYmRldiwgZHN0X21lbSk7CisJaWYgKFBUUl9FUlIoZHN0X2l0ZXIpID09IC1FSU5WQUwg JiYgZHN0X21hbi0+dXNlX3R0KQorCQlkc3RfaXRlciA9IHR0bV9rbWFwX2l0ZXJfdHRfaW5pdCgm X2RzdF9pdGVyLnR0LCBiby0+dHRtKTsKKwlpZiAoSVNfRVJSKGRzdF9pdGVyKSkKKwkJcmV0dXJu IFBUUl9FUlIoZHN0X2l0ZXIpOworCisJc3JjX2l0ZXIgPSB0dG1fa21hcF9pdGVyX2xpbmVhcl9p b19pbml0KCZfc3JjX2l0ZXIuaW8sIGJkZXYsIHNyY19tZW0pOworCWlmIChQVFJfRVJSKHNyY19p dGVyKSA9PSAtRUlOVkFMICYmIHNyY19tYW4tPnVzZV90dCkKKwkJc3JjX2l0ZXIgPSB0dG1fa21h cF9pdGVyX3R0X2luaXQoJl9zcmNfaXRlci50dCwgYm8tPnR0bSk7CisJaWYgKElTX0VSUihzcmNf aXRlcikpIHsKKwkJcmV0ID0gUFRSX0VSUihzcmNfaXRlcik7CisJCWdvdG8gb3V0X3NyY19pdGVy OwogCX0KLQltYigpOwotb3V0MjoKLQlvbGRfY29weSA9ICpvbGRfbWVtOwogCi0JdHRtX2JvX2Fz c2lnbl9tZW0oYm8sIG5ld19tZW0pOwotCi0JaWYgKCFtYW4tPnVzZV90dCkKLQkJdHRtX2JvX3R0 X2Rlc3Ryb3koYm8pOworCXR0bV9tb3ZlX21lbWNweShibywgZHN0X21lbS0+bnVtX3BhZ2VzLCBk c3RfaXRlciwgc3JjX2l0ZXIpOworCXNyY19jb3B5ID0gKnNyY19tZW07CisJdHRtX2JvX21vdmVf c3luY19jbGVhbnVwKGJvLCBkc3RfbWVtKTsKIAotb3V0MToKLQl0dG1fcmVzb3VyY2VfaW91bm1h cChiZGV2LCBvbGRfbWVtLCBuZXdfaW9tYXApOwotb3V0OgotCXR0bV9yZXNvdXJjZV9pb3VubWFw KGJkZXYsICZvbGRfY29weSwgb2xkX2lvbWFwKTsKKwlpZiAoIXNyY19pdGVyLT5vcHMtPm1hcHNf dHQpCisJCXR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvX2ZpbmkoJl9zcmNfaXRlci5pbywgYmRldiwg JnNyY19jb3B5KTsKK291dF9zcmNfaXRlcjoKKwlpZiAoIWRzdF9pdGVyLT5vcHMtPm1hcHNfdHQp CisJCXR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvX2ZpbmkoJl9kc3RfaXRlci5pbywgYmRldiwgZHN0 X21lbSk7CiAKLQkvKgotCSAqIE9uIGVycm9yLCBrZWVwIHRoZSBtbSBub2RlIQotCSAqLwotCWlm ICghcmV0KQotCQl0dG1fcmVzb3VyY2VfZnJlZShibywgJm9sZF9jb3B5KTsKIAlyZXR1cm4gcmV0 OwogfQogRVhQT1JUX1NZTUJPTCh0dG1fYm9fbW92ZV9tZW1jcHkpOwpAQCAtMzM2LDI3ICsyNzIs NyBAQCBwZ3Byb3RfdCB0dG1faW9fcHJvdChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLCBz dHJ1Y3QgdHRtX3Jlc291cmNlICpyZXMsCiAJbWFuID0gdHRtX21hbmFnZXJfdHlwZShiby0+YmRl diwgcmVzLT5tZW1fdHlwZSk7CiAJY2FjaGluZyA9IG1hbi0+dXNlX3R0ID8gYm8tPnR0bS0+Y2Fj aGluZyA6IHJlcy0+YnVzLmNhY2hpbmc7CiAKLQkvKiBDYWNoZWQgbWFwcGluZ3MgbmVlZCBubyBh ZGp1c3RtZW50ICovCi0JaWYgKGNhY2hpbmcgPT0gdHRtX2NhY2hlZCkKLQkJcmV0dXJuIHRtcDsK LQotI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLQlpZiAoY2Fj aGluZyA9PSB0dG1fd3JpdGVfY29tYmluZWQpCi0JCXRtcCA9IHBncHJvdF93cml0ZWNvbWJpbmUo dG1wKTsKLQllbHNlIGlmIChib290X2NwdV9kYXRhLng4NiA+IDMpCi0JCXRtcCA9IHBncHJvdF9u b25jYWNoZWQodG1wKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQo X19hcm1fXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykgfHwgXAotICAgIGRlZmluZWQoX19wb3dl cnBjX18pIHx8IGRlZmluZWQoX19taXBzX18pCi0JaWYgKGNhY2hpbmcgPT0gdHRtX3dyaXRlX2Nv bWJpbmVkKQotCQl0bXAgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHRtcCk7Ci0JZWxzZQotCQl0bXAg PSBwZ3Byb3Rfbm9uY2FjaGVkKHRtcCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fc3BhcmNfXykK LQl0bXAgPSBwZ3Byb3Rfbm9uY2FjaGVkKHRtcCk7Ci0jZW5kaWYKLQlyZXR1cm4gdG1wOworCXJl dHVybiB0dG1fcHJvdF9mcm9tX2NhY2hpbmcoY2FjaGluZywgdG1wKTsKIH0KIEVYUE9SVF9TWU1C T0wodHRtX2lvX3Byb3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9t b2R1bGUuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX21vZHVsZS5jCmluZGV4IDU2YjBlZmRi YTFhOS4uOTk3YzQ1OGY2OGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9t b2R1bGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tb2R1bGUuYwpAQCAtMzEsMTIg KzMxLDQ3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgv c2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9z eXNmcy5oPgorI2luY2x1ZGUgPGRybS90dG0vdHRtX2NhY2hpbmcuaD4KIAogI2luY2x1ZGUgInR0 bV9tb2R1bGUuaCIKIAorLyoqCisgKiB0dG1fcHJvdF9mcm9tX2NhY2hpbmcgLSBNb2RpZnkgdGhl IHBhZ2UgcHJvdGVjdGlvbiBhY2NvcmRpbmcgdG8gdGhlCisgKiB0dG0gY2FjaW5nIG1vZGUKKyAq IEBjYWNoaW5nOiBUaGUgdHRtIGNhY2hpbmcgbW9kZQorICogQHRtcDogVGhlIG9yaWdpbmFsIHBh Z2UgcHJvdGVjdGlvbgorICoKKyAqIFJldHVybjogVGhlIG1vZGlmaWVkIHBhZ2UgcHJvdGVjdGlv bgorICovCitwZ3Byb3RfdCB0dG1fcHJvdF9mcm9tX2NhY2hpbmcoZW51bSB0dG1fY2FjaGluZyBj YWNoaW5nLCBwZ3Byb3RfdCB0bXApCit7CisJLyogQ2FjaGVkIG1hcHBpbmdzIG5lZWQgbm8gYWRq dXN0bWVudCAqLworCWlmIChjYWNoaW5nID09IHR0bV9jYWNoZWQpCisJCXJldHVybiB0bXA7CisK KyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisJaWYgKGNhY2hp bmcgPT0gdHRtX3dyaXRlX2NvbWJpbmVkKQorCQl0bXAgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHRt cCk7CisJZWxzZSBpZiAoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQorCQl0bXAgPSBwZ3Byb3Rfbm9u Y2FjaGVkKHRtcCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9f YXJtX18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pIHx8IFwKKwlkZWZpbmVkKF9fcG93ZXJwY19f KSB8fCBkZWZpbmVkKF9fbWlwc19fKQorCWlmIChjYWNoaW5nID09IHR0bV93cml0ZV9jb21iaW5l ZCkKKwkJdG1wID0gcGdwcm90X3dyaXRlY29tYmluZSh0bXApOworCWVsc2UKKwkJdG1wID0gcGdw cm90X25vbmNhY2hlZCh0bXApOworI2VuZGlmCisjaWYgZGVmaW5lZChfX3NwYXJjX18pCisJdG1w ID0gcGdwcm90X25vbmNhY2hlZCh0bXApOworI2VuZGlmCisJcmV0dXJuIHRtcDsKK30KKwogc3Ry dWN0IGRlbnRyeSAqdHRtX2RlYnVnZnNfcm9vdDsKIAogc3RhdGljIGludCBfX2luaXQgdHRtX2lu aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3Jlc291cmNlLmMg Yi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9yZXNvdXJjZS5jCmluZGV4IDU5ZTJiNzE1N2U0MS4u OTMxYmNkMWE5YjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9yZXNvdXJj ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3Jlc291cmNlLmMKQEAgLTIyLDYgKzIy LDEwIEBACiAgKiBBdXRob3JzOiBDaHJpc3RpYW4gS8O2bmlnCiAgKi8KIAorI2luY2x1ZGUgPGxp bnV4L2RtYS1idWYtbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW8tbWFwcGluZy5oPgorI2luY2x1 ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKICNpbmNsdWRlIDxkcm0vdHRtL3R0bV9yZXNvdXJj ZS5oPgogI2luY2x1ZGUgPGRybS90dG0vdHRtX2JvX2RyaXZlci5oPgogCkBAIC0xNDcsMyArMTUx LDE5MiBAQCB2b2lkIHR0bV9yZXNvdXJjZV9tYW5hZ2VyX2RlYnVnKHN0cnVjdCB0dG1fcmVzb3Vy Y2VfbWFuYWdlciAqbWFuLAogCQltYW4tPmZ1bmMtPmRlYnVnKG1hbiwgcCk7CiB9CiBFWFBPUlRf U1lNQk9MKHR0bV9yZXNvdXJjZV9tYW5hZ2VyX2RlYnVnKTsKKworc3RhdGljIHZvaWQgdHRtX2tt YXBfaXRlcl9pb21hcF9tYXBfbG9jYWwoc3RydWN0IHR0bV9rbWFwX2l0ZXIgKml0ZXIsCisJCQkJ CSAgc3RydWN0IGRtYV9idWZfbWFwICpkbWFwLAorCQkJCQkgIHBnb2ZmX3QgaSkKK3sKKwlzdHJ1 Y3QgdHRtX2ttYXBfaXRlcl9pb21hcCAqaXRlcl9pbyA9CisJCWNvbnRhaW5lcl9vZihpdGVyLCB0 eXBlb2YoKml0ZXJfaW8pLCBiYXNlKTsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKK3JldHJ5Ogor CXdoaWxlIChpID49IGl0ZXJfaW8tPmNhY2hlLmVuZCkgeworCQlpdGVyX2lvLT5jYWNoZS5zZyA9 IGl0ZXJfaW8tPmNhY2hlLnNnID8KKwkJCXNnX25leHQoaXRlcl9pby0+Y2FjaGUuc2cpIDogaXRl cl9pby0+c3QtPnNnbDsKKwkJaXRlcl9pby0+Y2FjaGUuaSA9IGl0ZXJfaW8tPmNhY2hlLmVuZDsK KwkJaXRlcl9pby0+Y2FjaGUuZW5kICs9IHNnX2RtYV9sZW4oaXRlcl9pby0+Y2FjaGUuc2cpID4+ CisJCQlQQUdFX1NISUZUOworCQlpdGVyX2lvLT5jYWNoZS5vZmZzID0gc2dfZG1hX2FkZHJlc3Mo aXRlcl9pby0+Y2FjaGUuc2cpIC0KKwkJCWl0ZXJfaW8tPnN0YXJ0OworCX0KKworCWlmIChpIDwg aXRlcl9pby0+Y2FjaGUuaSkgeworCQlpdGVyX2lvLT5jYWNoZS5lbmQgPSAwOworCQlpdGVyX2lv LT5jYWNoZS5zZyA9IE5VTEw7CisJCWdvdG8gcmV0cnk7CisJfQorCisJYWRkciA9IGlvX21hcHBp bmdfbWFwX2xvY2FsX3djKGl0ZXJfaW8tPmlvbWFwLCBpdGVyX2lvLT5jYWNoZS5vZmZzICsKKwkJ CQkgICAgICAgKCgocmVzb3VyY2Vfc2l6ZV90KWkgLSBpdGVyX2lvLT5jYWNoZS5pKQorCQkJCQk8 PCBQQUdFX1NISUZUKSk7CisJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyX2lvbWVtKGRtYXAsIGFkZHIp OworfQorCitzdGF0aWMgdm9pZCB0dG1fa21hcF9pdGVyX2lvbWFwX3VubWFwX2xvY2FsKHN0cnVj dCB0dG1fa21hcF9pdGVyICppdGVyLAorCQkJCQkgICAgc3RydWN0IGRtYV9idWZfbWFwICptYXAp Cit7CisJaW9fbWFwcGluZ191bm1hcF9sb2NhbChtYXAtPnZhZGRyX2lvbWVtKTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCB0dG1fa21hcF9pdGVyX29wcyB0dG1fa21hcF9pdGVyX2lvX29wcyA9 IHsKKwkubWFwX2xvY2FsID0gIHR0bV9rbWFwX2l0ZXJfaW9tYXBfbWFwX2xvY2FsLAorCS51bm1h cF9sb2NhbCA9IHR0bV9rbWFwX2l0ZXJfaW9tYXBfdW5tYXBfbG9jYWwsCisJLm1hcHNfdHQgPSBm YWxzZSwKK307CisKKy8qKgorICogdHRtX2ttYXBfaXRlcl9pb21hcF9pbml0IC0gSW5pdGlhbGl6 ZSBhIHN0cnVjdCB0dG1fa21hcF9pdGVyX2lvbWFwCisgKiBAaXRlcl9pbzogVGhlIHN0cnVjdCB0 dG1fa21hcF9pdGVyX2lvbWFwIHRvIGluaXRpYWxpemUuCisgKiBAaW9tYXA6IFRoZSBzdHJ1Y3Qg aW9fbWFwcGluZyByZXByZXNlbnRpbmcgdGhlIHVuZGVybHlpbmcgbGluZWFyIGlvX21lbW9yeS4K KyAqIEBzdDogc2dfdGFibGUgaW50byBAaW9tYXAsIHJlcHJlc2VudGluZyB0aGUgbWVtb3J5IG9m IHRoZSBzdHJ1Y3QKKyAqIHR0bV9yZXNvdXJjZS4KKyAqIEBzdGFydDogT2Zmc2V0IHRoYXQgbmVl ZHMgdG8gYmUgc3VidHJhY3RlZCBmcm9tIEBzdCB0byBtYWtlCisgKiBzZ19kbWFfYWRkcmVzcyhz dC0+c2dsKSAtIEBzdGFydCA9PSAwIGZvciBAaW9tYXAgc3RhcnQuCisgKgorICogUmV0dXJuOiBQ b2ludGVyIHRvIHRoZSBlbWJlZGRlZCBzdHJ1Y3QgdHRtX2ttYXBfaXRlci4KKyAqLworc3RydWN0 IHR0bV9rbWFwX2l0ZXIgKgordHRtX2ttYXBfaXRlcl9pb21hcF9pbml0KHN0cnVjdCB0dG1fa21h cF9pdGVyX2lvbWFwICppdGVyX2lvLAorCQkJIHN0cnVjdCBpb19tYXBwaW5nICppb21hcCwKKwkJ CSBzdHJ1Y3Qgc2dfdGFibGUgKnN0LAorCQkJIHJlc291cmNlX3NpemVfdCBzdGFydCkKK3sKKwlp dGVyX2lvLT5iYXNlLm9wcyA9ICZ0dG1fa21hcF9pdGVyX2lvX29wczsKKwlpdGVyX2lvLT5pb21h cCA9IGlvbWFwOworCWl0ZXJfaW8tPnN0ID0gc3Q7CisJaXRlcl9pby0+c3RhcnQgPSBzdGFydDsK KwltZW1zZXQoJml0ZXJfaW8tPmNhY2hlLCAwLCBzaXplb2YoaXRlcl9pby0+Y2FjaGUpKTsKKwor CXJldHVybiAmaXRlcl9pby0+YmFzZTsKK30KK0VYUE9SVF9TWU1CT0wodHRtX2ttYXBfaXRlcl9p b21hcF9pbml0KTsKKworLyoqCisgKiBET0M6IExpbmVhciBpbyBpdGVyYXRvcgorICoKKyAqIFRo aXMgY29kZSBzaG91bGQgZGllIGluIHRoZSBub3QgdG9vIG5lYXIgZnV0dXJlLiBCZXN0IHdvdWxk IGJlIGlmIHdlIGNvdWxkCisgKiBtYWtlIGlvLW1hcHBpbmcgdXNlIG1lbXJlbWFwIGZvciBhbGwg aW8gbWVtb3J5LCBhbmQgaGF2ZSBtZW1yZW1hcAorICogaW1wbGVtZW50IGEga21hcF9sb2NhbCBm dW5jdGlvbmFsaXR5LiBXZSBjb3VsZCB0aGVuIHN0cmlwIGEgaHVnZSBhbW91bnQgb2YKKyAqIGNv ZGUuIFRoZXNlIGxpbmVhciBpbyBpdGVyYXRvcnMgYXJlIGltcGxlbWVudGVkIHRvIG1pbWljIG9s ZCBmdW5jdGlvbmFsaXR5LAorICogYW5kIHRoZXkgZG9uJ3QgdXNlIGttYXBfbG9jYWwgc2VtYW50 aWNzIGF0IGFsbCBpbnRlcm5hbGx5LiBSYXRoZXIgaW9yZW1hcCBvcgorICogZnJpZW5kcywgYW5k IGF0IGxlYXN0IG9uIDMyLWJpdCB0aGV5IGFkZCBnbG9iYWwgVExCIGZsdXNoZXMgYW5kIHBvaW50 cworICogb2YgZmFpbHVyZS4KKyAqLworCitzdGF0aWMgdm9pZCB0dG1fa21hcF9pdGVyX2xpbmVh cl9pb19tYXBfbG9jYWwoc3RydWN0IHR0bV9rbWFwX2l0ZXIgKml0ZXIsCisJCQkJCSAgICAgIHN0 cnVjdCBkbWFfYnVmX21hcCAqZG1hcCwKKwkJCQkJICAgICAgcGdvZmZfdCBpKQoreworCXN0cnVj dCB0dG1fa21hcF9pdGVyX2xpbmVhcl9pbyAqaXRlcl9pbyA9CisJCWNvbnRhaW5lcl9vZihpdGVy LCB0eXBlb2YoKml0ZXJfaW8pLCBiYXNlKTsKKworCSpkbWFwID0gaXRlcl9pby0+ZG1hcDsKKwlk bWFfYnVmX21hcF9pbmNyKGRtYXAsIGkgKiBQQUdFX1NJWkUpOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IHR0bV9rbWFwX2l0ZXJfb3BzIHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvX29wcyA9IHsK KwkubWFwX2xvY2FsID0gIHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvX21hcF9sb2NhbCwKKwkubWFw c190dCA9IGZhbHNlLAorfTsKKworLyoqCisgKiB0dG1fa21hcF9pdGVyX2xpbmVhcl9pb19pbml0 IC0gSW5pdGlhbGl6ZSBhbiBpdGVyYXRvciBmb3IgbGluZWFyIGlvIG1lbW9yeQorICogQGl0ZXJf aW86IFRoZSBpdGVyYXRvciB0byBpbml0aWFsaXplCisgKiBAYmRldjogVGhlIFRUTSBkZXZpY2UK KyAqIEBtZW06IFRoZSB0dG0gcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBpb21hcC4KKyAqCisg KiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBpbnRlcm5hbCBUVE0gdXNlIG9ubHkuIEl0IHNldHMgdXAg YSBtZW1jcHkga21hcCBpdGVyYXRvcgorICogcG9pbnRpbmcgYXQgYSBsaW5lYXIgY2h1bmsgb2Yg aW8gbWVtb3J5LgorICoKKyAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBlbWJlZGRlZCBzdHJ1 Y3QgdHRtX2ttYXBfaXRlciBvciBlcnJvciBwb2ludGVyIG9uCisgKiBmYWlsdXJlLgorICovCitz dHJ1Y3QgdHRtX2ttYXBfaXRlciAqCit0dG1fa21hcF9pdGVyX2xpbmVhcl9pb19pbml0KHN0cnVj dCB0dG1fa21hcF9pdGVyX2xpbmVhcl9pbyAqaXRlcl9pbywKKwkJCSAgICAgc3RydWN0IHR0bV9k ZXZpY2UgKmJkZXYsCisJCQkgICAgIHN0cnVjdCB0dG1fcmVzb3VyY2UgKm1lbSkKK3sKKwlpbnQg cmV0OworCisJcmV0ID0gdHRtX21lbV9pb19yZXNlcnZlKGJkZXYsIG1lbSk7CisJaWYgKHJldCkK KwkJZ290byBvdXRfZXJyOworCWlmICghbWVtLT5idXMuaXNfaW9tZW0pIHsKKwkJcmV0ID0gLUVJ TlZBTDsKKwkJZ290byBvdXRfaW9fZnJlZTsKKwl9CisKKwlpZiAobWVtLT5idXMuYWRkcikgewor CQlkbWFfYnVmX21hcF9zZXRfdmFkZHIoJml0ZXJfaW8tPmRtYXAsIG1lbS0+YnVzLmFkZHIpOwor CQlpdGVyX2lvLT5uZWVkc191bm1hcCA9IGZhbHNlOworCX0gZWxzZSB7CisJCXNpemVfdCBidXNf c2l6ZSA9IChzaXplX3QpbWVtLT5udW1fcGFnZXMgPDwgUEFHRV9TSElGVDsKKworCQlpdGVyX2lv LT5uZWVkc191bm1hcCA9IHRydWU7CisJCW1lbXNldCgmaXRlcl9pby0+ZG1hcCwgMCwgc2l6ZW9m KGl0ZXJfaW8tPmRtYXApKTsKKwkJaWYgKG1lbS0+YnVzLmNhY2hpbmcgPT0gdHRtX3dyaXRlX2Nv bWJpbmVkKQorCQkJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyX2lvbWVtKCZpdGVyX2lvLT5kbWFwLAor CQkJCQkJICAgIGlvcmVtYXBfd2MobWVtLT5idXMub2Zmc2V0LAorCQkJCQkJCSAgICAgICBidXNf c2l6ZSkpOworCQllbHNlIGlmIChtZW0tPmJ1cy5jYWNoaW5nID09IHR0bV9jYWNoZWQpCisJCQlk bWFfYnVmX21hcF9zZXRfdmFkZHIoJml0ZXJfaW8tPmRtYXAsCisJCQkJCSAgICAgIG1lbXJlbWFw KG1lbS0+YnVzLm9mZnNldCwgYnVzX3NpemUsCisJCQkJCQkgICAgICAgTUVNUkVNQVBfV0IgfAor CQkJCQkJICAgICAgIE1FTVJFTUFQX1dUIHwKKwkJCQkJCSAgICAgICBNRU1SRU1BUF9XQykpOwor CisJCS8qIElmIHVuY2FjaGVkIHJlcXVlc3RlZCBvciBpZiBtYXBwaW5nIGNhY2hlZCBvciB3YyBm YWlsZWQgKi8KKwkJaWYgKGRtYV9idWZfbWFwX2lzX251bGwoJml0ZXJfaW8tPmRtYXApKQorCQkJ ZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyX2lvbWVtKCZpdGVyX2lvLT5kbWFwLAorCQkJCQkJICAgIGlv cmVtYXAobWVtLT5idXMub2Zmc2V0LAorCQkJCQkJCSAgICBidXNfc2l6ZSkpOworCisJCWlmIChk bWFfYnVmX21hcF9pc19udWxsKCZpdGVyX2lvLT5kbWFwKSkgeworCQkJcmV0ID0gLUVOT01FTTsK KwkJCWdvdG8gb3V0X2lvX2ZyZWU7CisJCX0KKwl9CisKKwlpdGVyX2lvLT5iYXNlLm9wcyA9ICZ0 dG1fa21hcF9pdGVyX2xpbmVhcl9pb19vcHM7CisJcmV0dXJuICZpdGVyX2lvLT5iYXNlOworCitv dXRfaW9fZnJlZToKKwl0dG1fbWVtX2lvX2ZyZWUoYmRldiwgbWVtKTsKK291dF9lcnI6CisJcmV0 dXJuIEVSUl9QVFIocmV0KTsKK30KKworLyoqCisgKiB0dG1fa21hcF9pdGVyX2xpbmVhcl9pb19m aW5pIC0gQ2xlYW4gdXAgYW4gaXRlcmF0b3IgZm9yIGxpbmVhciBpbyBtZW1vcnkKKyAqIEBpdGVy X2lvOiBUaGUgaXRlcmF0b3IgdG8gaW5pdGlhbGl6ZQorICogQGJkZXY6IFRoZSBUVE0gZGV2aWNl CisgKiBAbWVtOiBUaGUgdHRtIHJlc291cmNlIHJlcHJlc2VudGluZyB0aGUgaW9tYXAuCisgKgor ICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgaW50ZXJuYWwgVFRNIHVzZSBvbmx5LiBJdCBjbGVhbnMg dXAgYSBtZW1jcHkga21hcAorICogaXRlcmF0b3IgaW5pdGlhbGl6ZWQgYnkgdHRtX2ttYXBfaXRl cl9saW5lYXJfaW9faW5pdC4KKyAqLwordm9pZAordHRtX2ttYXBfaXRlcl9saW5lYXJfaW9fZmlu aShzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9saW5lYXJfaW8gKml0ZXJfaW8sCisJCQkgICAgIHN0cnVj dCB0dG1fZGV2aWNlICpiZGV2LAorCQkJICAgICBzdHJ1Y3QgdHRtX3Jlc291cmNlICptZW0pCit7 CisJaWYgKGl0ZXJfaW8tPm5lZWRzX3VubWFwICYmIGRtYV9idWZfbWFwX2lzX3NldCgmaXRlcl9p by0+ZG1hcCkpIHsKKwkJaWYgKGl0ZXJfaW8tPmRtYXAuaXNfaW9tZW0pCisJCQlpb3VubWFwKGl0 ZXJfaW8tPmRtYXAudmFkZHJfaW9tZW0pOworCQllbHNlCisJCQltZW11bm1hcChpdGVyX2lvLT5k bWFwLnZhZGRyKTsKKwl9CisKKwl0dG1fbWVtX2lvX2ZyZWUoYmRldiwgbWVtKTsKK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRt L3R0bV90dC5jCmluZGV4IDUzOWUwMjMyY2IzYi4uNWEwMTRjNGQ0YjZmIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRt X3R0LmMKQEAgLTQzMywzICs0MzMsNDggQEAgdm9pZCB0dG1fdHRfbWdyX2luaXQodW5zaWduZWQg bG9uZyBudW1fcGFnZXMsIHVuc2lnbmVkIGxvbmcgbnVtX2RtYTMyX3BhZ2VzKQogCWlmICghdHRt X2RtYTMyX3BhZ2VzX2xpbWl0KQogCQl0dG1fZG1hMzJfcGFnZXNfbGltaXQgPSBudW1fZG1hMzJf cGFnZXM7CiB9CisKK3N0YXRpYyB2b2lkIHR0bV9rbWFwX2l0ZXJfdHRfbWFwX2xvY2FsKHN0cnVj dCB0dG1fa21hcF9pdGVyICppdGVyLAorCQkJCSAgICAgICBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKmRt YXAsCisJCQkJICAgICAgIHBnb2ZmX3QgaSkKK3sKKwlzdHJ1Y3QgdHRtX2ttYXBfaXRlcl90dCAq aXRlcl90dCA9CisJCWNvbnRhaW5lcl9vZihpdGVyLCB0eXBlb2YoKml0ZXJfdHQpLCBiYXNlKTsK KworCWRtYV9idWZfbWFwX3NldF92YWRkcihkbWFwLCBrbWFwX2xvY2FsX3BhZ2VfcHJvdChpdGVy X3R0LT50dC0+cGFnZXNbaV0sCisJCQkJCQkJIGl0ZXJfdHQtPnByb3QpKTsKK30KKworc3RhdGlj IHZvaWQgdHRtX2ttYXBfaXRlcl90dF91bm1hcF9sb2NhbChzdHJ1Y3QgdHRtX2ttYXBfaXRlciAq aXRlciwKKwkJCQkJIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKQoreworCWt1bm1hcF9sb2NhbCht YXAtPnZhZGRyKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0dG1fa21hcF9pdGVyX29wcyB0 dG1fa21hcF9pdGVyX3R0X29wcyA9IHsKKwkubWFwX2xvY2FsID0gdHRtX2ttYXBfaXRlcl90dF9t YXBfbG9jYWwsCisJLnVubWFwX2xvY2FsID0gdHRtX2ttYXBfaXRlcl90dF91bm1hcF9sb2NhbCwK KwkubWFwc190dCA9IHRydWUsCit9OworCisvKioKKyAqIHR0bV9rbWFwX2l0ZXJfdHRfaW5pdCAt IEluaXRpYWxpemUgYSBzdHJ1Y3QgdHRtX2ttYXBfaXRlcl90dAorICogQGl0ZXJfdHQ6IFRoZSBz dHJ1Y3QgdHRtX2ttYXBfaXRlcl90dCB0byBpbml0aWFsaXplLgorICogQHR0OiBTdHJ1Y3QgdHRt X3R0IGhvbGRpbmcgcGFnZSBwb2ludGVycyBvZiB0aGUgc3RydWN0IHR0bV9yZXNvdXJjZS4KKyAq CisgKiBSZXR1cm46IFBvaW50ZXIgdG8gdGhlIGVtYmVkZGVkIHN0cnVjdCB0dG1fa21hcF9pdGVy LgorICovCitzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqCit0dG1fa21hcF9pdGVyX3R0X2luaXQoc3Ry dWN0IHR0bV9rbWFwX2l0ZXJfdHQgKml0ZXJfdHQsCisJCSAgICAgIHN0cnVjdCB0dG1fdHQgKnR0 KQoreworCWl0ZXJfdHQtPmJhc2Uub3BzID0gJnR0bV9rbWFwX2l0ZXJfdHRfb3BzOworCWl0ZXJf dHQtPnR0ID0gdHQ7CisJaWYgKHR0KQorCQlpdGVyX3R0LT5wcm90ID0gdHRtX3Byb3RfZnJvbV9j YWNoaW5nKHR0LT5jYWNoaW5nLCBQQUdFX0tFUk5FTCk7CisJZWxzZQorCQlpdGVyX3R0LT5wcm90 ID0gUEFHRV9LRVJORUw7CisKKwlyZXR1cm4gJml0ZXJfdHQtPmJhc2U7Cit9CitFWFBPUlRfU1lN Qk9MKHR0bV9rbWFwX2l0ZXJfdHRfaW5pdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0v dHRtX2JvX2RyaXZlci5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaAppbmRleCBk YmNjYWM5NTdmOGYuLjcyNTExOTkyMjYxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0 bV9ib19kcml2ZXIuaAorKysgYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCkBAIC00 MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fZGV2aWNlLmg+CiAKICNpbmNsdWRl ICJ0dG1fYm9fYXBpLmgiCisjaW5jbHVkZSAidHRtX2ttYXBfaXRlci5oIgogI2luY2x1ZGUgInR0 bV9wbGFjZW1lbnQuaCIKICNpbmNsdWRlICJ0dG1fdHQuaCIKICNpbmNsdWRlICJ0dG1fcG9vbC5o IgpAQCAtMjcyLDYgKzI3MywyMyBAQCBpbnQgdHRtX2JvX21vdmVfYWNjZWxfY2xlYW51cChzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQkJICAgICAgYm9vbCBwaXBlbGluZSwKIAkJCSAg ICAgIHN0cnVjdCB0dG1fcmVzb3VyY2UgKm5ld19tZW0pOwogCisvKioKKyAqIHR0bV9ib19tb3Zl X2FjY2VsX2NsZWFudXAuCisgKgorICogQGJvOiBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgdHRtX2J1 ZmZlcl9vYmplY3QuCisgKiBAbmV3X21lbTogc3RydWN0IHR0bV9yZXNvdXJjZSBpbmRpY2F0aW5n IHdoZXJlIHRvIG1vdmUuCisgKgorICogU3BlY2lhbCBjYXNlIG9mIHR0bV9ib19tb3ZlX2FjY2Vs X2NsZWFudXAgd2hlcmUgdGhlIGJvIGlzIGd1YXJhbnRlZWQKKyAqIGJ5IHRoZSBjYWxsZXIgdG8g YmUgaWRsZS4gVHlwaWNhbGx5IHVzZWQgYWZ0ZXIgbWVtY3B5IGJ1ZmZlciBtb3Zlcy4KKyAqLwor c3RhdGljIGlubGluZSB2b2lkIHR0bV9ib19tb3ZlX3N5bmNfY2xlYW51cChzdHJ1Y3QgdHRtX2J1 ZmZlcl9vYmplY3QgKmJvLAorCQkJCQkgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqbmV3X21lbSkK K3sKKwlpbnQgcmV0ID0gdHRtX2JvX21vdmVfYWNjZWxfY2xlYW51cChibywgTlVMTCwgdHJ1ZSwg ZmFsc2UsIG5ld19tZW0pOworCisJV0FSTl9PTihyZXQpOworfQorCiAvKioKICAqIHR0bV9ib19w aXBlbGluZV9ndXR0aW5nLgogICoKQEAgLTMzMiw0ICszNTAsMTQgQEAgaW50IHR0bV9yYW5nZV9t YW5faW5pdChzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwKIGludCB0dG1fcmFuZ2VfbWFuX2Zpbmko c3RydWN0IHR0bV9kZXZpY2UgKmJkZXYsCiAJCSAgICAgICB1bnNpZ25lZCB0eXBlKTsKIAordm9p ZCB0dG1fbW92ZV9tZW1jcHkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJICAgICB1 MzIgbnVtX3BhZ2VzLAorCQkgICAgIHN0cnVjdCB0dG1fa21hcF9pdGVyICpkc3RfaXRlciwKKwkJ ICAgICBzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqc3JjX2l0ZXIpOworCitzdHJ1Y3QgdHRtX2ttYXBf aXRlciAqCit0dG1fa21hcF9pdGVyX2lvbWFwX2luaXQoc3RydWN0IHR0bV9rbWFwX2l0ZXJfaW9t YXAgKml0ZXJfaW8sCisJCQkgc3RydWN0IGlvX21hcHBpbmcgKmlvbWFwLAorCQkJIHN0cnVjdCBz Z190YWJsZSAqc3QsCisJCQkgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0KTsKICNlbmRpZgpkaWZmIC0t Z2l0IGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9jYWNoaW5nLmggYi9pbmNsdWRlL2RybS90dG0vdHRt X2NhY2hpbmcuaAppbmRleCBhMGI0YTQ5ZmE0MzIuLjNjOWRkNjVmNWFhZiAxMDA2NDQKLS0tIGEv aW5jbHVkZS9kcm0vdHRtL3R0bV9jYWNoaW5nLmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9j YWNoaW5nLmgKQEAgLTMzLDQgKzMzLDYgQEAgZW51bSB0dG1fY2FjaGluZyB7CiAJdHRtX2NhY2hl ZAogfTsKIAorcGdwcm90X3QgdHRtX3Byb3RfZnJvbV9jYWNoaW5nKGVudW0gdHRtX2NhY2hpbmcg Y2FjaGluZywgcGdwcm90X3QgdG1wKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Ry bS90dG0vdHRtX2ttYXBfaXRlci5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9rbWFwX2l0ZXIuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhiYjAwZmQzOWQ2YwotLS0g L2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL3R0bS90dG1fa21hcF9pdGVyLmgKQEAgLTAsMCAr MSw2MSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAqIENvcHly aWdodCDCqSAyMDIxIEludGVsIENvcnBvcmF0aW9uCisgKi8KKyNpZm5kZWYgX19UVE1fS01BUF9J VEVSX0hfXworI2RlZmluZSBfX1RUTV9LTUFQX0lURVJfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgorCitzdHJ1Y3QgdHRtX2ttYXBfaXRlcjsKK3N0cnVjdCBkbWFfYnVmX21hcDsKKwor LyoqCisgKiBzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9vcHMgLSBPcHMgc3RydWN0dXJlIGZvciBhIHN0 cnVjdAorICogdHRtX2ttYXBfaXRlci4KKyAqIEBtYXBzX3R0OiBXaGV0aGVyIHRoZSBpdGVyYXRv ciBtYXBzIFRUIG1lbW9yeSBkaXJlY3RseSwgYXMgb3Bwb3NlZAorICogbWFwcGluZyBhIFRUIHRo cm91Z2ggYW4gYXBlcnR1cmUuIEJvdGggdGhlc2UgbW9kZXMgaGF2ZQorICogc3RydWN0IHR0bV9y ZXNvdXJjZV9tYW5hZ2VyOjp1c2VfdHQgc2V0LCBidXQgdGhlIGxhdHRlciB0eXBpY2FsbHkKKyAq IHJldHVybnMgaXNfaW9tZW0gPT0gdHJ1ZSBmcm9tIHR0bV9tZW1faW9fcmVzZXJ2ZS4KKyAqLwor c3RydWN0IHR0bV9rbWFwX2l0ZXJfb3BzIHsKKwkvKioKKwkgKiBrbWFwX2xvY2FsKCkgLSBNYXAg YSBQQUdFX1NJWkUgcGFydCBvZiB0aGUgcmVzb3VyY2UgdXNpbmcKKwkgKiBrbWFwX2xvY2FsIHNl bWFudGljcy4KKwkgKiBAcmVzX2l0ZXI6IFBvaW50ZXIgdG8gdGhlIHN0cnVjdCB0dG1fa21hcF9p dGVyIHJlcHJlc2VudGluZworCSAqIHRoZSByZXNvdXJjZS4KKwkgKiBAZG1hcDogVGhlIHN0cnVj dCBkbWFfYnVmX21hcCBob2xkaW5nIHRoZSB2aXJ0dWFsIGFkZHJlc3MgYWZ0ZXIKKwkgKiB0aGUg b3BlcmF0aW9uLgorCSAqIEBpOiBUaGUgbG9jYXRpb24gd2l0aGluIHRoZSByZXNvdXJjZSB0byBt YXAuIFBBR0VfU0laRSBncmFudWxhcml0eS4KKwkgKi8KKwl2b2lkICgqbWFwX2xvY2FsKShzdHJ1 Y3QgdHRtX2ttYXBfaXRlciAqcmVzX2l0ZXIsCisJCQkgIHN0cnVjdCBkbWFfYnVmX21hcCAqZG1h cCwgcGdvZmZfdCBpKTsKKwkvKioKKwkgKiB1bm1hcF9sb2NhbCgpIC0gVW5tYXAgYSBQQUdFX1NJ WkUgcGFydCBvZiB0aGUgcmVzb3VyY2UgcHJldmlvdXNseQorCSAqIG1hcHBlZCB1c2luZyBrbWFw X2xvY2FsLgorCSAqIEByZXNfaXRlcjogUG9pbnRlciB0byB0aGUgc3RydWN0IHR0bV9rbWFwX2l0 ZXIgcmVwcmVzZW50aW5nCisJICogdGhlIHJlc291cmNlLgorCSAqIEBkbWFwOiBUaGUgc3RydWN0 IGRtYV9idWZfbWFwIGhvbGRpbmcgdGhlIHZpcnR1YWwgYWRkcmVzcyBhZnRlcgorCSAqIHRoZSBv cGVyYXRpb24uCisJICovCisJdm9pZCAoKnVubWFwX2xvY2FsKShzdHJ1Y3QgdHRtX2ttYXBfaXRl ciAqcmVzX2l0ZXIsCisJCQkgICAgc3RydWN0IGRtYV9idWZfbWFwICpkbWFwKTsKKwlib29sIG1h cHNfdHQ7Cit9OworCisvKioKKyAqIHN0cnVjdCB0dG1fa21hcF9pdGVyIC0gSXRlcmF0b3IgZm9y IGttYXBfbG9jYWwgdHlwZSBvcGVyYXRpb25zIG9uIGEKKyAqIHJlc291cmNlLgorICogQG9wczog UG9pbnRlciB0byB0aGUgb3BlcmF0aW9ucyBzdHJ1Y3QuCisgKgorICogVGhpcyBzdHJ1Y3QgaXMg aW50ZW5kZWQgdG8gYmUgZW1iZWRkZWQgaW4gYSByZXNvdXJjZS1zcGVjaWZpYyBzcGVjaWFsaXph dGlvbgorICogaW1wbGVtZW50aW5nIG9wZXJhdGlvbnMgZm9yIHRoZSByZXNvdXJjZS4KKyAqCisg KiBOb3RoaW5nIHN0b3BzIHVzIGZyb20gZXh0ZW5kaW5nIHRoZSBvcGVyYXRpb25zIHRvIHZtYXAs IHZtYXBfcGZuIGV0YywKKyAqIHJlcGxhY2luZyBzb21lIG9yIHBhcnRzIG9mIHRoZSB0dG1fYm9f dXRpbC4gY3B1LW1hcCBmdW5jdGlvbmFsaXR5LgorICovCitzdHJ1Y3QgdHRtX2ttYXBfaXRlciB7 CisJY29uc3Qgc3RydWN0IHR0bV9rbWFwX2l0ZXJfb3BzICpvcHM7Cit9OworCisjZW5kaWYgLyog X19UVE1fS01BUF9JVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9y ZXNvdXJjZS5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9yZXNvdXJjZS5oCmluZGV4IDg5MGI5ZDM2 OTUxOS4uYjhkYzBiZGIwZGE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS90dG0vdHRtX3Jlc291 cmNlLmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9yZXNvdXJjZS5oCkBAIC0yNyw5ICsyNywx MSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5o PgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYtbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLWZl bmNlLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgogI2luY2x1ZGUgPGRybS90dG0vdHRt X2NhY2hpbmcuaD4KKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9rbWFwX2l0ZXIuaD4KIAogI2RlZmlu ZSBUVE1fTUFYX0JPX1BSSU9SSVRZCTRVCiAKQEAgLTM4LDYgKzQwLDEwIEBAIHN0cnVjdCB0dG1f cmVzb3VyY2VfbWFuYWdlcjsKIHN0cnVjdCB0dG1fcmVzb3VyY2U7CiBzdHJ1Y3QgdHRtX3BsYWNl Owogc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0Oworc3RydWN0IGRtYV9idWZfbWFwOworc3RydWN0 IGlvX21hcHBpbmc7CitzdHJ1Y3Qgc2dfdGFibGU7CitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CiAKIHN0 cnVjdCB0dG1fcmVzb3VyY2VfbWFuYWdlcl9mdW5jIHsKIAkvKioKQEAgLTE3Niw2ICsxODIsNDUg QEAgc3RydWN0IHR0bV9yZXNvdXJjZSB7CiAJc3RydWN0IHR0bV9idXNfcGxhY2VtZW50IGJ1czsK IH07CiAKKy8qKgorICogc3RydWN0IHR0bV9rbWFwX2l0ZXJfaW9tYXAgLSBTcGVjaWFsaXphdGlv biBmb3IgYSBzdHJ1Y3QgaW9fbWFwcGluZyArCisgKiBzdHJ1Y3Qgc2dfdGFibGUgYmFja2VkIHN0 cnVjdCB0dG1fcmVzb3VyY2UuCisgKiBAYmFzZTogRW1iZWRkZWQgc3RydWN0IHR0bV9rbWFwX2l0 ZXIgcHJvdmlkaW5nIHRoZSB1c2FnZSBpbnRlcmZhY2UuCisgKiBAaW9tYXA6IHN0cnVjdCBpb19t YXBwaW5nIHJlcHJlc2VudGluZyB0aGUgdW5kZXJseWluZyBsaW5lYXIgaW9fbWVtb3J5LgorICog QHN0OiBzZ190YWJsZSBpbnRvIEBpb21hcCwgcmVwcmVzZW50aW5nIHRoZSBtZW1vcnkgb2YgdGhl IHN0cnVjdCB0dG1fcmVzb3VyY2UuCisgKiBAc3RhcnQ6IE9mZnNldCB0aGF0IG5lZWRzIHRvIGJl IHN1YnRyYWN0ZWQgZnJvbSBAc3QgdG8gbWFrZQorICogc2dfZG1hX2FkZHJlc3Moc3QtPnNnbCkg LSBAc3RhcnQgPT0gMCBmb3IgQGlvbWFwIHN0YXJ0LgorICogQGNhY2hlOiBTY2F0dGVybGlzdCB0 cmF2ZXJzYWwgY2FjaGUgZm9yIGZhc3QgbG9va3Vwcy4KKyAqIEBjYWNoZS5zZzogUG9pbnRlciB0 byB0aGUgY3VycmVudGx5IGNhY2hlZCBzY2F0dGVybGlzdCBzZWdtZW50LgorICogQGNhY2hlLmk6 IEZpcnN0IGluZGV4IG9mIEBzZy4gUEFHRV9TSVpFIGdyYW51bGFyaXR5LgorICogQGNhY2hlLmVu ZDogTGFzdCBpbmRleCArIDEgb2YgQHNnLiBQQUdFX1NJWkUgZ3JhbnVsYXJpdHkuCisgKiBAY2Fj aGUub2ZmczogRmlyc3Qgb2Zmc2V0IGludG8gQGlvbWFwIG9mIEBzZy4gUEFHRV9TSVpFIGdyYW51 bGFyaXR5LgorICovCitzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9pb21hcCB7CisJc3RydWN0IHR0bV9r bWFwX2l0ZXIgYmFzZTsKKwlzdHJ1Y3QgaW9fbWFwcGluZyAqaW9tYXA7CisJc3RydWN0IHNnX3Rh YmxlICpzdDsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQ7CisJc3RydWN0IHsKKwkJc3RydWN0IHNj YXR0ZXJsaXN0ICpzZzsKKwkJcGdvZmZfdCBpOworCQlwZ29mZl90IGVuZDsKKwkJcGdvZmZfdCBv ZmZzOworCX0gY2FjaGU7Cit9OworCisvKioKKyAqIHN0cnVjdCB0dG1fa21hcF9pdGVyX2xpbmVh cl9pbyAtIEl0ZXJhdG9yIHNwZWNpYWxpemF0aW9uIGZvciBsaW5lYXIgaW8KKyAqIEBiYXNlOiBU aGUgYmFzZSBpdGVyYXRvcgorICogQGRtYXA6IFBvaW50cyB0byB0aGUgc3RhcnRpbmcgYWRkcmVz cyBvZiB0aGUgcmVnaW9uCisgKiBAbmVlZHNfdW5tYXA6IFdoZXRoZXIgd2UgbmVlZCB0byB1bm1h cCBvbiBmaW5pCisgKi8KK3N0cnVjdCB0dG1fa21hcF9pdGVyX2xpbmVhcl9pbyB7CisJc3RydWN0 IHR0bV9rbWFwX2l0ZXIgYmFzZTsKKwlzdHJ1Y3QgZG1hX2J1Zl9tYXAgZG1hcDsKKwlib29sIG5l ZWRzX3VubWFwOworfTsKKwogLyoqCiAgKiB0dG1fcmVzb3VyY2VfbWFuYWdlcl9zZXRfdXNlZAog ICoKQEAgLTIzNyw0ICsyODIsMjAgQEAgaW50IHR0bV9yZXNvdXJjZV9tYW5hZ2VyX2V2aWN0X2Fs bChzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwKIHZvaWQgdHRtX3Jlc291cmNlX21hbmFnZXJfZGVi dWcoc3RydWN0IHR0bV9yZXNvdXJjZV9tYW5hZ2VyICptYW4sCiAJCQkJc3RydWN0IGRybV9wcmlu dGVyICpwKTsKIAorc3RydWN0IHR0bV9rbWFwX2l0ZXIgKgordHRtX2ttYXBfaXRlcl9pb21hcF9p bml0KHN0cnVjdCB0dG1fa21hcF9pdGVyX2lvbWFwICppdGVyX2lvLAorCQkJIHN0cnVjdCBpb19t YXBwaW5nICppb21hcCwKKwkJCSBzdHJ1Y3Qgc2dfdGFibGUgKnN0LAorCQkJIHJlc291cmNlX3Np emVfdCBzdGFydCk7CisKK3N0cnVjdCB0dG1fa21hcF9pdGVyX2xpbmVhcl9pbzsKKworc3RydWN0 IHR0bV9rbWFwX2l0ZXIgKgordHRtX2ttYXBfaXRlcl9saW5lYXJfaW9faW5pdChzdHJ1Y3QgdHRt X2ttYXBfaXRlcl9saW5lYXJfaW8gKml0ZXJfaW8sCisJCQkgICAgIHN0cnVjdCB0dG1fZGV2aWNl ICpiZGV2LAorCQkJICAgICBzdHJ1Y3QgdHRtX3Jlc291cmNlICptZW0pOworCit2b2lkIHR0bV9r bWFwX2l0ZXJfbGluZWFyX2lvX2Zpbmkoc3RydWN0IHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvICpp dGVyX2lvLAorCQkJCSAgc3RydWN0IHR0bV9kZXZpY2UgKmJkZXYsCisJCQkJICBzdHJ1Y3QgdHRt X3Jlc291cmNlICptZW0pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0vdHRt X3R0LmggYi9pbmNsdWRlL2RybS90dG0vdHRtX3R0LmgKaW5kZXggMTM0ZDA5ZWY3NzY2Li4zMTAy MDU5ZGI3MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fdHQuaAorKysgYi9pbmNs dWRlL2RybS90dG0vdHRtX3R0LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+CiAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fY2FjaGluZy5oPgorI2luY2x1ZGUgPGRy bS90dG0vdHRtX2ttYXBfaXRlci5oPgogCiBzdHJ1Y3QgdHRtX2JvX2RldmljZTsKIHN0cnVjdCB0 dG1fdHQ7CkBAIC02OSw2ICs3MCwxOCBAQCBzdHJ1Y3QgdHRtX3R0IHsKIAllbnVtIHR0bV9jYWNo aW5nIGNhY2hpbmc7CiB9OwogCisvKioKKyAqIHN0cnVjdCB0dG1fa21hcF9pdGVyX3R0IC0gU3Bl Y2lhbGl6YXRpb24gb2YgYSBtYXBwaWcgaXRlcmF0b3IgZm9yIGEgdHQuCisgKiBAYmFzZTogRW1i ZWRkZWQgc3RydWN0IHR0bV9rbWFwX2l0ZXIgcHJvdmlkaW5nIHRoZSB1c2FnZSBpbnRlcmZhY2UK KyAqIEB0dDogQ2FjaGVkIHN0cnVjdCB0dG1fdHQuCisgKiBAcHJvdDogQ2FjaGVkIHBhZ2UgcHJv dGVjdGlvbiBmb3IgbWFwcGluZy4KKyAqLworc3RydWN0IHR0bV9rbWFwX2l0ZXJfdHQgeworCXN0 cnVjdCB0dG1fa21hcF9pdGVyIGJhc2U7CisJc3RydWN0IHR0bV90dCAqdHQ7CisJcGdwcm90X3Qg cHJvdDsKK307CisKIHN0YXRpYyBpbmxpbmUgYm9vbCB0dG1fdHRfaXNfcG9wdWxhdGVkKHN0cnVj dCB0dG1fdHQgKnR0KQogewogCXJldHVybiB0dC0+cGFnZV9mbGFncyAmIFRUTV9QQUdFX0ZMQUdf UFJJVl9QT1BVTEFURUQ7CkBAIC0xNTksNiArMTcyLDkgQEAgdm9pZCB0dG1fdHRfdW5wb3B1bGF0 ZShzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwgc3RydWN0IHR0bV90dCAqdHRtKTsKIAogdm9pZCB0 dG1fdHRfbWdyX2luaXQodW5zaWduZWQgbG9uZyBudW1fcGFnZXMsIHVuc2lnbmVkIGxvbmcgbnVt X2RtYTMyX3BhZ2VzKTsKIAorc3RydWN0IHR0bV9rbWFwX2l0ZXIgKnR0bV9rbWFwX2l0ZXJfdHRf aW5pdChzdHJ1Y3QgdHRtX2ttYXBfaXRlcl90dCAqaXRlcl90dCwKKwkJCQkJICAgIHN0cnVjdCB0 dG1fdHQgKnR0KTsKKwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0FHUCkKICNpbmNsdWRlIDxsaW51 eC9hZ3BfYmFja2VuZC5oPgogCi0tIAoyLjMxLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=