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 50841C47078 for ; Fri, 21 May 2021 15:33: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 17EA4613D6 for ; Fri, 21 May 2021 15:33:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 17EA4613D6 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 D03786E192; Fri, 21 May 2021 15:33:20 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 003518975F; Fri, 21 May 2021 15:33:17 +0000 (UTC) IronPort-SDR: WM3LBLNBIANu1LBxB3+Aw3bi6W3l0PMmHiKg0EOGD4hwM8AtypGnVUB6+kbpuJtl9h7W+Os++5 bsop1SPnwHkA== X-IronPort-AV: E=McAfee;i="6200,9189,9990"; a="265415713" X-IronPort-AV: E=Sophos;i="5.82,319,1613462400"; d="scan'208";a="265415713" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 May 2021 08:33:17 -0700 IronPort-SDR: sfc/apIKV83/qFNEM6FzEMhDbIRsPWAZpyeE2+2iJw3exdj09X5cEPon61LLSu1TjE+/UdgQGf ngHeJqxtJ+mQ== X-IronPort-AV: E=Sophos;i="5.82,319,1613462400"; d="scan'208";a="441125414" Received: from imarinmo-mobl1.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.34]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 May 2021 08:33:15 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Fri, 21 May 2021 17:32:47 +0200 Message-Id: <20210521153253.518037-7-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210521153253.518037-1-thomas.hellstrom@linux.intel.com> References: <20210521153253.518037-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v3 06/12] 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 c3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KLS0tCnYzOgotIFNwbGl0 IHVwIGluIHZhcmlvdXMgVFRNIGZpbGVzIGFuZCBhZGRyZXNzZWQgcmV2aWV3IGNvbW1lbnRzIGJ5 CiAgQ2hyaXN0aWFuIEvDtm5pZy4gVGVzdGVkIGFuZCBmaXhlZCBsZWdhY3kgaW9tYXAgbWVtY3B5 IHBhdGggb24gaTkxNS4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMgIHwg Mjc4ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0 bV9tb2R1bGUuYyAgIHwgIDM1ICsrKysKIGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3Jlc291cmNl LmMgfCAxNjYgKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMg ICAgICAgfCAgNDIgKysrKysKIGluY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmggICAgfCAg MjggKysrCiBpbmNsdWRlL2RybS90dG0vdHRtX2NhY2hpbmcuaCAgICAgIHwgICAyICsKIGluY2x1 ZGUvZHJtL3R0bS90dG1fa21hcF9pdGVyLmggICAgfCAgNjEgKysrKysrKwogaW5jbHVkZS9kcm0v dHRtL3R0bV9yZXNvdXJjZS5oICAgICB8ICA2MSArKysrKysrCiBpbmNsdWRlL2RybS90dG0vdHRt X3R0LmggICAgICAgICAgIHwgIDE2ICsrCiA5IGZpbGVzIGNoYW5nZWQsIDUwOCBpbnNlcnRpb25z KCspLCAxODEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vdHRt L3R0bV9rbWFwX2l0ZXIuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2Jv X3V0aWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYwppbmRleCBhZThiNjE0 NjA3MjQuLjkxMmNiZThlNjBhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1f Ym9fdXRpbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYwpAQCAtNzIs MTkwICs3MiwxMjYgQEAgdm9pZCB0dG1fbWVtX2lvX2ZyZWUoc3RydWN0IHR0bV9kZXZpY2UgKmJk ZXYsCiAJbWVtLT5idXMuYWRkciA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgdHRtX3Jlc291cmNl X2lvcmVtYXAoc3RydWN0IHR0bV9kZXZpY2UgKmJkZXYsCi0JCQkgICAgICAgc3RydWN0IHR0bV9y ZXNvdXJjZSAqbWVtLAotCQkJICAgICAgIHZvaWQgKip2aXJ0dWFsKQorLyoqCisgKiB0dG1fbW92 ZV9tZW1jcHkgLSBIZWxwZXIgdG8gcGVyZm9ybSBhIG1lbWNweSB0dG0gbW92ZSBvcGVyYXRpb24u CisgKiBAYm86IFRoZSBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QuCisgKiBAbmV3X21lbTogVGhl IHN0cnVjdCB0dG1fcmVzb3VyY2Ugd2UncmUgbW92aW5nIHRvIChjb3B5IGRlc3RpbmF0aW9uKS4K KyAqIEBuZXdfaXRlcjogQSBzdHJ1Y3QgdHRtX2ttYXBfaXRlciByZXByZXNlbnRpbmcgdGhlIGRl c3RpbmF0aW9uIHJlc291cmNlLgorICogQHNyY19pdGVyOiBBIHN0cnVjdCB0dG1fa21hcF9pdGVy IHJlcHJlc2VudGluZyB0aGUgc291cmNlIHJlc291cmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g aXMgaW50ZW5kZWQgdG8gYmUgYWJsZSB0byBtb3ZlIG91dCBhc3luYyB1bmRlciBhCisgKiBkbWEt ZmVuY2UgaWYgZGVzaXJlZC4KKyAqLwordm9pZCB0dG1fbW92ZV9tZW1jcHkoc3RydWN0IHR0bV9i dWZmZXJfb2JqZWN0ICpibywKKwkJICAgICBzdHJ1Y3QgdHRtX3Jlc291cmNlICpkc3RfbWVtLAor CQkgICAgIHN0cnVjdCB0dG1fa21hcF9pdGVyICpkc3RfaXRlciwKKwkJICAgICBzdHJ1Y3QgdHRt X2ttYXBfaXRlciAqc3JjX2l0ZXIpCiB7Ci0JaW50IHJldDsKLQl2b2lkICphZGRyOwotCi0JKnZp cnR1YWwgPSBOVUxMOwotCXJldCA9IHR0bV9tZW1faW9fcmVzZXJ2ZShiZGV2LCBtZW0pOwotCWlm IChyZXQgfHwgIW1lbS0+YnVzLmlzX2lvbWVtKQotCQlyZXR1cm4gcmV0OworCWNvbnN0IHN0cnVj dCB0dG1fa21hcF9pdGVyX29wcyAqZHN0X29wcyA9IGRzdF9pdGVyLT5vcHM7CisJY29uc3Qgc3Ry dWN0IHR0bV9rbWFwX2l0ZXJfb3BzICpzcmNfb3BzID0gc3JjX2l0ZXItPm9wczsKKwlzdHJ1Y3Qg dHRtX3R0ICp0dG0gPSBiby0+dHRtOworCXN0cnVjdCBkbWFfYnVmX21hcCBzcmNfbWFwLCBkc3Rf bWFwOworCXBnb2ZmX3QgaTsKIAotCWlmIChtZW0tPmJ1cy5hZGRyKSB7Ci0JCWFkZHIgPSBtZW0t PmJ1cy5hZGRyOwotCX0gZWxzZSB7Ci0JCXNpemVfdCBidXNfc2l6ZSA9IChzaXplX3QpbWVtLT5u dW1fcGFnZXMgPDwgUEFHRV9TSElGVDsKKwkvKiBTaW5nbGUgVFRNIG1vdmUuIE5PUCAqLworCWlm IChkc3Rfb3BzLT5tYXBzX3R0ICYmIHNyY19vcHMtPm1hcHNfdHQpCisJCXJldHVybjsKIAotCQlp ZiAobWVtLT5idXMuY2FjaGluZyA9PSB0dG1fd3JpdGVfY29tYmluZWQpCi0JCQlhZGRyID0gaW9y ZW1hcF93YyhtZW0tPmJ1cy5vZmZzZXQsIGJ1c19zaXplKTsKLSNpZmRlZiBDT05GSUdfWDg2Ci0J CWVsc2UgaWYgKG1lbS0+YnVzLmNhY2hpbmcgPT0gdHRtX2NhY2hlZCkKLQkJCWFkZHIgPSBpb3Jl bWFwX2NhY2hlKG1lbS0+YnVzLm9mZnNldCwgYnVzX3NpemUpOwotI2VuZGlmCi0JCWVsc2UKLQkJ CWFkZHIgPSBpb3JlbWFwKG1lbS0+YnVzLm9mZnNldCwgYnVzX3NpemUpOwotCQlpZiAoIWFkZHIp IHsKLQkJCXR0bV9tZW1faW9fZnJlZShiZGV2LCBtZW0pOwotCQkJcmV0dXJuIC1FTk9NRU07CisJ LyogRG9uJ3QgbW92ZSBub25leGlzdGVudCBkYXRhLiBDbGVhciBkZXN0aW5hdGlvbiBpbnN0ZWFk LiAqLworCWlmIChzcmNfb3BzLT5tYXBzX3R0ICYmICghdHRtIHx8ICF0dG1fdHRfaXNfcG9wdWxh dGVkKHR0bSkpKSB7CisJCWlmICh0dG0gJiYgISh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9G TEFHX1pFUk9fQUxMT0MpKQorCQkJcmV0dXJuOworCisJCWZvciAoaSA9IDA7IGkgPCBkc3RfbWVt LT5udW1fcGFnZXM7ICsraSkgeworCQkJZHN0X29wcy0+bWFwX2xvY2FsKGRzdF9pdGVyLCAmZHN0 X21hcCwgaSk7CisJCQlpZiAoZHN0X21hcC5pc19pb21lbSkKKwkJCQltZW1zZXRfaW8oZHN0X21h cC52YWRkcl9pb21lbSwgMCwgUEFHRV9TSVpFKTsKKwkJCWVsc2UKKwkJCQltZW1zZXQoZHN0X21h cC52YWRkciwgMCwgUEFHRV9TSVpFKTsKKwkJCWlmIChkc3Rfb3BzLT51bm1hcF9sb2NhbCkKKwkJ CQlkc3Rfb3BzLT51bm1hcF9sb2NhbChkc3RfaXRlciwgJmRzdF9tYXApOwogCQl9CisJCXJldHVy bjsKIAl9Ci0JKnZpcnR1YWwgPSBhZGRyOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0 dG1fcmVzb3VyY2VfaW91bm1hcChzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwKLQkJCQlzdHJ1Y3Qg dHRtX3Jlc291cmNlICptZW0sCi0JCQkJdm9pZCAqdmlydHVhbCkKLXsKLQlpZiAodmlydHVhbCAm JiBtZW0tPmJ1cy5hZGRyID09IE5VTEwpCi0JCWlvdW5tYXAodmlydHVhbCk7Ci0JdHRtX21lbV9p b19mcmVlKGJkZXYsIG1lbSk7Ci19Ci0KLXN0YXRpYyBpbnQgdHRtX2NvcHlfaW9fcGFnZSh2b2lk ICpkc3QsIHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBwYWdlKQotewotCXVpbnQzMl90ICpkc3RQ ID0KLQkgICAgKHVpbnQzMl90ICopICgodW5zaWduZWQgbG9uZylkc3QgKyAocGFnZSA8PCBQQUdF X1NISUZUKSk7Ci0JdWludDMyX3QgKnNyY1AgPQotCSAgICAodWludDMyX3QgKikgKCh1bnNpZ25l ZCBsb25nKXNyYyArIChwYWdlIDw8IFBBR0VfU0hJRlQpKTsKLQotCWludCBpOwotCWZvciAoaSA9 IDA7IGkgPCBQQUdFX1NJWkUgLyBzaXplb2YodWludDMyX3QpOyArK2kpCi0JCWlvd3JpdGUzMihp b3JlYWQzMihzcmNQKyspLCBkc3RQKyspOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHR0 bV9jb3B5X2lvX3R0bV9wYWdlKHN0cnVjdCB0dG1fdHQgKnR0bSwgdm9pZCAqc3JjLAotCQkJCXVu c2lnbmVkIGxvbmcgcGFnZSwKLQkJCQlwZ3Byb3RfdCBwcm90KQotewotCXN0cnVjdCBwYWdlICpk ID0gdHRtLT5wYWdlc1twYWdlXTsKLQl2b2lkICpkc3Q7Ci0KLQlpZiAoIWQpCi0JCXJldHVybiAt RU5PTUVNOwotCi0Jc3JjID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpc3JjICsgKHBhZ2UgPDwg UEFHRV9TSElGVCkpOwotCWRzdCA9IGttYXBfYXRvbWljX3Byb3QoZCwgcHJvdCk7Ci0JaWYgKCFk c3QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5X2Zyb21pbyhkc3QsIHNyYywgUEFHRV9T SVpFKTsKLQotCWt1bm1hcF9hdG9taWMoZHN0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IHR0bV9jb3B5X3R0bV9pb19wYWdlKHN0cnVjdCB0dG1fdHQgKnR0bSwgdm9pZCAqZHN0LAot CQkJCXVuc2lnbmVkIGxvbmcgcGFnZSwKLQkJCQlwZ3Byb3RfdCBwcm90KQotewotCXN0cnVjdCBw YWdlICpzID0gdHRtLT5wYWdlc1twYWdlXTsKLQl2b2lkICpzcmM7Ci0KLQlpZiAoIXMpCi0JCXJl dHVybiAtRU5PTUVNOwotCi0JZHN0ID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpZHN0ICsgKHBh Z2UgPDwgUEFHRV9TSElGVCkpOwotCXNyYyA9IGttYXBfYXRvbWljX3Byb3QocywgcHJvdCk7Ci0J aWYgKCFzcmMpCi0JCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5X3RvaW8oZHN0LCBzcmMsIFBB R0VfU0laRSk7Ci0KLQlrdW5tYXBfYXRvbWljKHNyYyk7CisJZm9yIChpID0gMDsgaSA8IGRzdF9t ZW0tPm51bV9wYWdlczsgKytpKSB7CisJCWRzdF9vcHMtPm1hcF9sb2NhbChkc3RfaXRlciwgJmRz dF9tYXAsIGkpOworCQlzcmNfb3BzLT5tYXBfbG9jYWwoc3JjX2l0ZXIsICZzcmNfbWFwLCBpKTsK KworCQlpZiAoIXNyY19tYXAuaXNfaW9tZW0gJiYgIWRzdF9tYXAuaXNfaW9tZW0pIHsKKwkJCW1l bWNweShkc3RfbWFwLnZhZGRyLCBzcmNfbWFwLnZhZGRyLCBQQUdFX1NJWkUpOworCQl9IGVsc2Ug aWYgKCFzcmNfbWFwLmlzX2lvbWVtKSB7CisJCQlkbWFfYnVmX21hcF9tZW1jcHlfdG8oJmRzdF9t YXAsIHNyY19tYXAudmFkZHIsCisJCQkJCSAgICAgIFBBR0VfU0laRSk7CisJCX0gZWxzZSBpZiAo IWRzdF9tYXAuaXNfaW9tZW0pIHsKKwkJCW1lbWNweV9mcm9taW8oZHN0X21hcC52YWRkciwgc3Jj X21hcC52YWRkcl9pb21lbSwKKwkJCQkgICAgICBQQUdFX1NJWkUpOworCQl9IGVsc2UgeworCQkJ aW50IGo7CisJCQl1MzIgX19pb21lbSAqc3JjID0gc3JjX21hcC52YWRkcl9pb21lbTsKKwkJCXUz MiBfX2lvbWVtICpkc3QgPSBkc3RfbWFwLnZhZGRyX2lvbWVtOwogCi0JcmV0dXJuIDA7CisJCQlm b3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSA+PiAyKTsgKytqKQorCQkJCWlvd3JpdGUzMihpb3Jl YWQzMihzcmMrKyksIGRzdCsrKTsKKwkJfQorCQlpZiAoc3JjX29wcy0+dW5tYXBfbG9jYWwpCisJ CQlzcmNfb3BzLT51bm1hcF9sb2NhbChzcmNfaXRlciwgJnNyY19tYXApOworCQlpZiAoZHN0X29w cy0+dW5tYXBfbG9jYWwpCisJCQlkc3Rfb3BzLT51bm1hcF9sb2NhbChkc3RfaXRlciwgJmRzdF9t YXApOworCX0KIH0KK0VYUE9SVF9TWU1CT0wodHRtX21vdmVfbWVtY3B5KTsKIAogaW50IHR0bV9i b19tb3ZlX21lbWNweShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQkgICAgICAgc3Ry dWN0IHR0bV9vcGVyYXRpb25fY3R4ICpjdHgsCi0JCSAgICAgICBzdHJ1Y3QgdHRtX3Jlc291cmNl ICpuZXdfbWVtKQorCQkgICAgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqZHN0X21lbSkKIHsKIAlz dHJ1Y3QgdHRtX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OwotCXN0cnVjdCB0dG1fcmVzb3VyY2Vf bWFuYWdlciAqbWFuID0gdHRtX21hbmFnZXJfdHlwZShiZGV2LCBuZXdfbWVtLT5tZW1fdHlwZSk7 CisJc3RydWN0IHR0bV9yZXNvdXJjZV9tYW5hZ2VyICpkc3RfbWFuID0KKwkJdHRtX21hbmFnZXJf dHlwZShiby0+YmRldiwgZHN0X21lbS0+bWVtX3R5cGUpOwogCXN0cnVjdCB0dG1fdHQgKnR0bSA9 IGJvLT50dG07Ci0Jc3RydWN0IHR0bV9yZXNvdXJjZSAqb2xkX21lbSA9ICZiby0+bWVtOwotCXN0 cnVjdCB0dG1fcmVzb3VyY2Ugb2xkX2NvcHkgPSAqb2xkX21lbTsKLQl2b2lkICpvbGRfaW9tYXA7 Ci0Jdm9pZCAqbmV3X2lvbWFwOworCXN0cnVjdCB0dG1fcmVzb3VyY2UgKnNyY19tZW0gPSAmYm8t Pm1lbTsKKwlzdHJ1Y3QgdHRtX3Jlc291cmNlX21hbmFnZXIgKnNyY19tYW4gPQorCQl0dG1fbWFu YWdlcl90eXBlKGJkZXYsIHNyY19tZW0tPm1lbV90eXBlKTsKKwlzdHJ1Y3QgdHRtX3Jlc291cmNl IHNyY19jb3B5ID0gKnNyY19tZW07CisJdW5pb24geworCQlzdHJ1Y3QgdHRtX2ttYXBfaXRlcl90 dCB0dDsKKwkJc3RydWN0IHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvIGlvOworCX0gX2RzdF9pdGVy LCBfc3JjX2l0ZXI7CisJc3RydWN0IHR0bV9rbWFwX2l0ZXIgKmRzdF9pdGVyLCAqc3JjX2l0ZXI7 CiAJaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGk7CiAKLQlyZXQgPSB0dG1fYm9fd2FpdF9jdHgo Ym8sIGN0eCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHR0bV9yZXNvdXJj ZV9pb3JlbWFwKGJkZXYsIG9sZF9tZW0sICZvbGRfaW9tYXApOwotCWlmIChyZXQpCi0JCXJldHVy biByZXQ7Ci0JcmV0ID0gdHRtX3Jlc291cmNlX2lvcmVtYXAoYmRldiwgbmV3X21lbSwgJm5ld19p b21hcCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIFNpbmdsZSBUVE0gbW92 ZS4gTk9QLgotCSAqLwotCWlmIChvbGRfaW9tYXAgPT0gTlVMTCAmJiBuZXdfaW9tYXAgPT0gTlVM TCkKLQkJZ290byBvdXQyOwotCi0JLyoKLQkgKiBEb24ndCBtb3ZlIG5vbmV4aXN0ZW50IGRhdGEu IENsZWFyIGRlc3RpbmF0aW9uIGluc3RlYWQuCi0JICovCi0JaWYgKG9sZF9pb21hcCA9PSBOVUxM ICYmCi0JICAgICh0dG0gPT0gTlVMTCB8fCAoIXR0bV90dF9pc19wb3B1bGF0ZWQodHRtKSAmJgot CQkJICAgICAhKHR0bS0+cGFnZV9mbGFncyAmIFRUTV9QQUdFX0ZMQUdfU1dBUFBFRCkpKSkgewot CQltZW1zZXRfaW8obmV3X2lvbWFwLCAwLCBuZXdfbWVtLT5udW1fcGFnZXMqUEFHRV9TSVpFKTsK LQkJZ290byBvdXQyOwotCX0KLQotCS8qCi0JICogVFRNIG1pZ2h0IGJlIG51bGwgZm9yIG1vdmVz IHdpdGhpbiB0aGUgc2FtZSByZWdpb24uCi0JICovCi0JaWYgKHR0bSkgeworCWlmICh0dG0gJiYg KCh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1NXQVBQRUQpIHx8CisJCSAgICBkc3Rf bWFuLT51c2VfdHQpKSB7CiAJCXJldCA9IHR0bV90dF9wb3B1bGF0ZShiZGV2LCB0dG0sIGN0eCk7 CiAJCWlmIChyZXQpCi0JCQlnb3RvIG91dDE7CisJCQlyZXR1cm4gcmV0OwogCX0KIAotCWZvciAo aSA9IDA7IGkgPCBuZXdfbWVtLT5udW1fcGFnZXM7ICsraSkgewotCQlpZiAob2xkX2lvbWFwID09 IE5VTEwpIHsKLQkJCXBncHJvdF90IHByb3QgPSB0dG1faW9fcHJvdChibywgb2xkX21lbSwgUEFH RV9LRVJORUwpOwotCQkJcmV0ID0gdHRtX2NvcHlfdHRtX2lvX3BhZ2UodHRtLCBuZXdfaW9tYXAs IGksCi0JCQkJCQkgICBwcm90KTsKLQkJfSBlbHNlIGlmIChuZXdfaW9tYXAgPT0gTlVMTCkgewot CQkJcGdwcm90X3QgcHJvdCA9IHR0bV9pb19wcm90KGJvLCBuZXdfbWVtLCBQQUdFX0tFUk5FTCk7 Ci0JCQlyZXQgPSB0dG1fY29weV9pb190dG1fcGFnZSh0dG0sIG9sZF9pb21hcCwgaSwKLQkJCQkJ CSAgIHByb3QpOwotCQl9IGVsc2UgewotCQkJcmV0ID0gdHRtX2NvcHlfaW9fcGFnZShuZXdfaW9t YXAsIG9sZF9pb21hcCwgaSk7Ci0JCX0KLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0MTsKKwlkc3Rf aXRlciA9IHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvX2luaXQoJl9kc3RfaXRlci5pbywgYmRldiwg ZHN0X21lbSk7CisJaWYgKFBUUl9FUlIoZHN0X2l0ZXIpID09IC1FSU5WQUwgJiYgZHN0X21hbi0+ dXNlX3R0KQorCQlkc3RfaXRlciA9IHR0bV9rbWFwX2l0ZXJfdHRfaW5pdCgmX2RzdF9pdGVyLnR0 LCBiby0+dHRtKTsKKwlpZiAoSVNfRVJSKGRzdF9pdGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIoZHN0 X2l0ZXIpOworCisJc3JjX2l0ZXIgPSB0dG1fa21hcF9pdGVyX2xpbmVhcl9pb19pbml0KCZfc3Jj X2l0ZXIuaW8sIGJkZXYsIHNyY19tZW0pOworCWlmIChQVFJfRVJSKHNyY19pdGVyKSA9PSAtRUlO VkFMICYmIHNyY19tYW4tPnVzZV90dCkKKwkJc3JjX2l0ZXIgPSB0dG1fa21hcF9pdGVyX3R0X2lu aXQoJl9zcmNfaXRlci50dCwgYm8tPnR0bSk7CisJaWYgKElTX0VSUihzcmNfaXRlcikpIHsKKwkJ cmV0ID0gUFRSX0VSUihzcmNfaXRlcik7CisJCWdvdG8gb3V0X3NyY19pdGVyOwogCX0KLQltYigp Owotb3V0MjoKLQlvbGRfY29weSA9ICpvbGRfbWVtOwogCi0JdHRtX2JvX2Fzc2lnbl9tZW0oYm8s IG5ld19tZW0pOwotCi0JaWYgKCFtYW4tPnVzZV90dCkKLQkJdHRtX2JvX3R0X2Rlc3Ryb3koYm8p OworCXR0bV9tb3ZlX21lbWNweShibywgZHN0X21lbSwgZHN0X2l0ZXIsIHNyY19pdGVyKTsKKwlz cmNfY29weSA9ICpzcmNfbWVtOworCXR0bV9ib19tb3ZlX3N5bmNfY2xlYW51cChibywgZHN0X21l bSk7CiAKLW91dDE6Ci0JdHRtX3Jlc291cmNlX2lvdW5tYXAoYmRldiwgb2xkX21lbSwgbmV3X2lv bWFwKTsKLW91dDoKLQl0dG1fcmVzb3VyY2VfaW91bm1hcChiZGV2LCAmb2xkX2NvcHksIG9sZF9p b21hcCk7CisJaWYgKCFzcmNfaXRlci0+b3BzLT5tYXBzX3R0KQorCQl0dG1fa21hcF9pdGVyX2xp bmVhcl9pb19maW5pKCZfc3JjX2l0ZXIuaW8sIGJkZXYsICZzcmNfY29weSk7CitvdXRfc3JjX2l0 ZXI6CisJaWYgKCFkc3RfaXRlci0+b3BzLT5tYXBzX3R0KQorCQl0dG1fa21hcF9pdGVyX2xpbmVh cl9pb19maW5pKCZfZHN0X2l0ZXIuaW8sIGJkZXYsIGRzdF9tZW0pOwogCi0JLyoKLQkgKiBPbiBl cnJvciwga2VlcCB0aGUgbW0gbm9kZSEKLQkgKi8KLQlpZiAoIXJldCkKLQkJdHRtX3Jlc291cmNl X2ZyZWUoYm8sICZvbGRfY29weSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wodHRt X2JvX21vdmVfbWVtY3B5KTsKQEAgLTMzNiwyNyArMjcyLDcgQEAgcGdwcm90X3QgdHRtX2lvX3By b3Qoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywgc3RydWN0IHR0bV9yZXNvdXJjZSAqcmVz LAogCW1hbiA9IHR0bV9tYW5hZ2VyX3R5cGUoYm8tPmJkZXYsIHJlcy0+bWVtX3R5cGUpOwogCWNh Y2hpbmcgPSBtYW4tPnVzZV90dCA/IGJvLT50dG0tPmNhY2hpbmcgOiByZXMtPmJ1cy5jYWNoaW5n OwogCi0JLyogQ2FjaGVkIG1hcHBpbmdzIG5lZWQgbm8gYWRqdXN0bWVudCAqLwotCWlmIChjYWNo aW5nID09IHR0bV9jYWNoZWQpCi0JCXJldHVybiB0bXA7Ci0KLSNpZiBkZWZpbmVkKF9faTM4Nl9f KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCi0JaWYgKGNhY2hpbmcgPT0gdHRtX3dyaXRlX2NvbWJp bmVkKQotCQl0bXAgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHRtcCk7Ci0JZWxzZSBpZiAoYm9vdF9j cHVfZGF0YS54ODYgPiAzKQotCQl0bXAgPSBwZ3Byb3Rfbm9uY2FjaGVkKHRtcCk7Ci0jZW5kaWYK LSNpZiBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19h YXJjaDY0X18pIHx8IFwKLSAgICBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fbWlw c19fKQotCWlmIChjYWNoaW5nID09IHR0bV93cml0ZV9jb21iaW5lZCkKLQkJdG1wID0gcGdwcm90 X3dyaXRlY29tYmluZSh0bXApOwotCWVsc2UKLQkJdG1wID0gcGdwcm90X25vbmNhY2hlZCh0bXAp OwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX3NwYXJjX18pCi0JdG1wID0gcGdwcm90X25vbmNhY2hl ZCh0bXApOwotI2VuZGlmCi0JcmV0dXJuIHRtcDsKKwlyZXR1cm4gdHRtX3Byb3RfZnJvbV9jYWNo aW5nKGNhY2hpbmcsIHRtcCk7CiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9pb19wcm90KTsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbW9kdWxlLmMgYi9kcml2ZXJzL2dwdS9k cm0vdHRtL3R0bV9tb2R1bGUuYwppbmRleCA1NmIwZWZkYmExYTkuLjk5N2M0NThmNjhhOSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbW9kdWxlLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL3R0bS90dG1fbW9kdWxlLmMKQEAgLTMxLDEyICszMSw0NyBAQAogICovCiAjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8 bGludXgvcGd0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGlu dXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGRybS9kcm1fc3lzZnMuaD4KKyNpbmNsdWRlIDxkcm0v dHRtL3R0bV9jYWNoaW5nLmg+CiAKICNpbmNsdWRlICJ0dG1fbW9kdWxlLmgiCiAKKy8qKgorICog dHRtX3Byb3RfZnJvbV9jYWNoaW5nIC0gTW9kaWZ5IHRoZSBwYWdlIHByb3RlY3Rpb24gYWNjb3Jk aW5nIHRvIHRoZQorICogdHRtIGNhY2luZyBtb2RlCisgKiBAY2FjaGluZzogVGhlIHR0bSBjYWNo aW5nIG1vZGUKKyAqIEB0bXA6IFRoZSBvcmlnaW5hbCBwYWdlIHByb3RlY3Rpb24KKyAqCisgKiBS ZXR1cm46IFRoZSBtb2RpZmllZCBwYWdlIHByb3RlY3Rpb24KKyAqLworcGdwcm90X3QgdHRtX3By b3RfZnJvbV9jYWNoaW5nKGVudW0gdHRtX2NhY2hpbmcgY2FjaGluZywgcGdwcm90X3QgdG1wKQor eworCS8qIENhY2hlZCBtYXBwaW5ncyBuZWVkIG5vIGFkanVzdG1lbnQgKi8KKwlpZiAoY2FjaGlu ZyA9PSB0dG1fY2FjaGVkKQorCQlyZXR1cm4gdG1wOworCisjaWYgZGVmaW5lZChfX2kzODZfXykg fHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCWlmIChjYWNoaW5nID09IHR0bV93cml0ZV9jb21iaW5l ZCkKKwkJdG1wID0gcGdwcm90X3dyaXRlY29tYmluZSh0bXApOworCWVsc2UgaWYgKGJvb3RfY3B1 X2RhdGEueDg2ID4gMykKKwkJdG1wID0gcGdwcm90X25vbmNhY2hlZCh0bXApOworI2VuZGlmCisj aWYgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYWFy Y2g2NF9fKSB8fCBcCisJZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX21pcHNfXykK KwlpZiAoY2FjaGluZyA9PSB0dG1fd3JpdGVfY29tYmluZWQpCisJCXRtcCA9IHBncHJvdF93cml0 ZWNvbWJpbmUodG1wKTsKKwllbHNlCisJCXRtcCA9IHBncHJvdF9ub25jYWNoZWQodG1wKTsKKyNl bmRpZgorI2lmIGRlZmluZWQoX19zcGFyY19fKQorCXRtcCA9IHBncHJvdF9ub25jYWNoZWQodG1w KTsKKyNlbmRpZgorCXJldHVybiB0bXA7Cit9CisKIHN0cnVjdCBkZW50cnkgKnR0bV9kZWJ1Z2Zz X3Jvb3Q7CiAKIHN0YXRpYyBpbnQgX19pbml0IHR0bV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9yZXNvdXJjZS5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90 dG1fcmVzb3VyY2UuYwppbmRleCA1OWUyYjcxNTdlNDEuLmUwNWFlN2UzZDQ3NyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vdHRtL3R0bV9yZXNvdXJjZS5jCkBAIC0yMiw2ICsyMiwxMCBAQAogICogQXV0aG9yczogQ2hy aXN0aWFuIEvDtm5pZwogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLW1hcC5oPgorI2lu Y2x1ZGUgPGxpbnV4L2lvLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5o PgorCiAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxkcm0vdHRt L3R0bV9ib19kcml2ZXIuaD4KIApAQCAtMTQ3LDMgKzE1MSwxNjUgQEAgdm9pZCB0dG1fcmVzb3Vy Y2VfbWFuYWdlcl9kZWJ1ZyhzdHJ1Y3QgdHRtX3Jlc291cmNlX21hbmFnZXIgKm1hbiwKIAkJbWFu LT5mdW5jLT5kZWJ1ZyhtYW4sIHApOwogfQogRVhQT1JUX1NZTUJPTCh0dG1fcmVzb3VyY2VfbWFu YWdlcl9kZWJ1Zyk7CisKK3N0YXRpYyB2b2lkIHR0bV9rbWFwX2l0ZXJfaW9tYXBfbWFwX2xvY2Fs KHN0cnVjdCB0dG1fa21hcF9pdGVyICppdGVyLAorCQkJCQkgIHN0cnVjdCBkbWFfYnVmX21hcCAq ZG1hcCwKKwkJCQkJICBwZ29mZl90IGkpCit7CisJc3RydWN0IHR0bV9rbWFwX2l0ZXJfaW9tYXAg Kml0ZXJfaW8gPQorCQljb250YWluZXJfb2YoaXRlciwgdHlwZW9mKCppdGVyX2lvKSwgYmFzZSk7 CisJdm9pZCBfX2lvbWVtICphZGRyOworCityZXRyeToKKwl3aGlsZSAoaSA+PSBpdGVyX2lvLT5j YWNoZS5lbmQpIHsKKwkJaXRlcl9pby0+Y2FjaGUuc2cgPSBpdGVyX2lvLT5jYWNoZS5zZyA/CisJ CQlzZ19uZXh0KGl0ZXJfaW8tPmNhY2hlLnNnKSA6IGl0ZXJfaW8tPnN0LT5zZ2w7CisJCWl0ZXJf aW8tPmNhY2hlLmkgPSBpdGVyX2lvLT5jYWNoZS5lbmQ7CisJCWl0ZXJfaW8tPmNhY2hlLmVuZCAr PSBzZ19kbWFfbGVuKGl0ZXJfaW8tPmNhY2hlLnNnKSA+PgorCQkJUEFHRV9TSElGVDsKKwkJaXRl cl9pby0+Y2FjaGUub2ZmcyA9IHNnX2RtYV9hZGRyZXNzKGl0ZXJfaW8tPmNhY2hlLnNnKSAtCisJ CQlpdGVyX2lvLT5zdGFydDsKKwl9CisKKwlpZiAoaSA8IGl0ZXJfaW8tPmNhY2hlLmkpIHsKKwkJ aXRlcl9pby0+Y2FjaGUuZW5kID0gMDsKKwkJaXRlcl9pby0+Y2FjaGUuc2cgPSBOVUxMOworCQln b3RvIHJldHJ5OworCX0KKworCWFkZHIgPSBpb19tYXBwaW5nX21hcF9sb2NhbF93YyhpdGVyX2lv LT5pb21hcCwgaXRlcl9pby0+Y2FjaGUub2ZmcyArCisJCQkJICAgICAgICgoKHJlc291cmNlX3Np emVfdClpIC0gaXRlcl9pby0+Y2FjaGUuaSkKKwkJCQkJPDwgUEFHRV9TSElGVCkpOworCWRtYV9i dWZfbWFwX3NldF92YWRkcl9pb21lbShkbWFwLCBhZGRyKTsKK30KKworc3RhdGljIHZvaWQgdHRt X2ttYXBfaXRlcl9pb21hcF91bm1hcF9sb2NhbChzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqaXRlciwK KwkJCQkJICAgIHN0cnVjdCBkbWFfYnVmX21hcCAqbWFwKQoreworCWlvX21hcHBpbmdfdW5tYXBf bG9jYWwobWFwLT52YWRkcl9pb21lbSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHRtX2tt YXBfaXRlcl9vcHMgdHRtX2ttYXBfaXRlcl9pb19vcHMgPSB7CisJLm1hcF9sb2NhbCA9ICB0dG1f a21hcF9pdGVyX2lvbWFwX21hcF9sb2NhbCwKKwkudW5tYXBfbG9jYWwgPSB0dG1fa21hcF9pdGVy X2lvbWFwX3VubWFwX2xvY2FsLAorCS5tYXBzX3R0ID0gZmFsc2UsCit9OworCisvKioKKyAqIHR0 bV9rbWFwX2l0ZXJfaW9tYXBfaW5pdCAtIEluaXRpYWxpemUgYSBzdHJ1Y3QgdHRtX2ttYXBfaXRl cl9pb21hcAorICogQGl0ZXJfaW86IFRoZSBzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9pb21hcCB0byBp bml0aWFsaXplLgorICogQGlvbWFwOiBUaGUgc3RydWN0IGlvX21hcHBpbmcgcmVwcmVzZW50aW5n IHRoZSB1bmRlcmx5aW5nIGxpbmVhciBpb19tZW1vcnkuCisgKiBAc3Q6IHNnX3RhYmxlIGludG8g QGlvbWFwLCByZXByZXNlbnRpbmcgdGhlIG1lbW9yeSBvZiB0aGUgc3RydWN0CisgKiB0dG1fcmVz b3VyY2UuCisgKiBAc3RhcnQ6IE9mZnNldCB0aGF0IG5lZWRzIHRvIGJlIHN1YnRyYWN0ZWQgZnJv bSBAc3QgdG8gbWFrZQorICogc2dfZG1hX2FkZHJlc3Moc3QtPnNnbCkgLSBAc3RhcnQgPT0gMCBm b3IgQGlvbWFwIHN0YXJ0LgorICoKKyAqIFJldHVybjogUG9pbnRlciB0byB0aGUgZW1iZWRkZWQg c3RydWN0IHR0bV9rbWFwX2l0ZXIuCisgKi8KK3N0cnVjdCB0dG1fa21hcF9pdGVyICoKK3R0bV9r bWFwX2l0ZXJfaW9tYXBfaW5pdChzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9pb21hcCAqaXRlcl9pbywK KwkJCSBzdHJ1Y3QgaW9fbWFwcGluZyAqaW9tYXAsCisJCQkgc3RydWN0IHNnX3RhYmxlICpzdCwK KwkJCSByZXNvdXJjZV9zaXplX3Qgc3RhcnQpCit7CisJaXRlcl9pby0+YmFzZS5vcHMgPSAmdHRt X2ttYXBfaXRlcl9pb19vcHM7CisJaXRlcl9pby0+aW9tYXAgPSBpb21hcDsKKwlpdGVyX2lvLT5z dCA9IHN0OworCWl0ZXJfaW8tPnN0YXJ0ID0gc3RhcnQ7CisJbWVtc2V0KCZpdGVyX2lvLT5jYWNo ZSwgMCwgc2l6ZW9mKGl0ZXJfaW8tPmNhY2hlKSk7CisKKwlyZXR1cm4gJml0ZXJfaW8tPmJhc2U7 Cit9CitFWFBPUlRfU1lNQk9MKHR0bV9rbWFwX2l0ZXJfaW9tYXBfaW5pdCk7CisKKy8qKgorICog RE9DOiBMaW5lYXIgaW8gaXRlcmF0b3IKKyAqCisgKiBUaGlzIGNvZGUgc2hvdWxkIGRpZSBpbiB0 aGUgbm90IHRvbyBuZWFyIGZ1dHVyZS4gQmVzdCB3b3VsZCBiZSBpZiB3ZSBjb3VsZAorICogbWFr ZSBpby1tYXBwaW5nIHVzZSBtZW1yZW1hcCBmb3IgYWxsIGlvIG1lbW9yeSwgYW5kIGhhdmUgbWVt cmVtYXAKKyAqIGltcGxlbWVudCBhIGttYXBfbG9jYWwgZnVuY3Rpb25hbGl0eS4gV2UgY291bGQg dGhlbiBzdHJpcCBhIGh1Z2UgYW1vdW50IG9mCisgKiBjb2RlLiBUaGVzZSBsaW5lYXIgaW8gaXRl cmF0b3JzIGFyZSBpbXBsZW1lbnRlZCB0byBtaW1pYyBvbGQgZnVuY3Rpb25hbGl0eSwKKyAqIGFu ZCB0aGV5IGRvbid0IHVzZSBrbWFwX2xvY2FsIHNlbWFudGljcyBhdCBhbGwgaW50ZXJuYWxseS4g UmF0aGVyIGlvcmVtYXAgb3IKKyAqIGZyaWVuZHMsIGFuZCBhdCBsZWFzdCBvbiAzMi1iaXQgdGhl eSBhZGQgZ2xvYmFsIFRMQiBmbHVzaGVzIGFuZCBwb2ludHMKKyAqIG9mIGZhaWx1cmUuCisgKi8K Kworc3RhdGljIHZvaWQgdHRtX2ttYXBfaXRlcl9saW5lYXJfaW9fbWFwX2xvY2FsKHN0cnVjdCB0 dG1fa21hcF9pdGVyICppdGVyLAorCQkJCQkgICAgICBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKmRtYXAs CisJCQkJCSAgICAgIHBnb2ZmX3QgaSkKK3sKKwlzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9saW5lYXJf aW8gKml0ZXJfaW8gPQorCQljb250YWluZXJfb2YoaXRlciwgdHlwZW9mKCppdGVyX2lvKSwgYmFz ZSk7CisKKwkqZG1hcCA9IGl0ZXJfaW8tPmRtYXA7CisJZG1hX2J1Zl9tYXBfaW5jcihkbWFwLCBp ICogUEFHRV9TSVpFKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0dG1fa21hcF9pdGVyX29w cyB0dG1fa21hcF9pdGVyX2xpbmVhcl9pb19vcHMgPSB7CisJLm1hcF9sb2NhbCA9ICB0dG1fa21h cF9pdGVyX2xpbmVhcl9pb19tYXBfbG9jYWwsCisJLm1hcHNfdHQgPSBmYWxzZSwKK307CisKK3N0 cnVjdCB0dG1fa21hcF9pdGVyICoKK3R0bV9rbWFwX2l0ZXJfbGluZWFyX2lvX2luaXQoc3RydWN0 IHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvICppdGVyX2lvLAorCQkJICAgICBzdHJ1Y3QgdHRtX2Rl dmljZSAqYmRldiwKKwkJCSAgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqbWVtKQoreworCWludCBy ZXQ7CisKKwlyZXQgPSB0dG1fbWVtX2lvX3Jlc2VydmUoYmRldiwgbWVtKTsKKwlpZiAocmV0KQor CQlnb3RvIG91dF9lcnI7CisJaWYgKCFtZW0tPmJ1cy5pc19pb21lbSkgeworCQlyZXQgPSAtRUlO VkFMOworCQlnb3RvIG91dF9pb19mcmVlOworCX0KKworCWlmIChtZW0tPmJ1cy5hZGRyKSB7CisJ CWRtYV9idWZfbWFwX3NldF92YWRkcigmaXRlcl9pby0+ZG1hcCwgbWVtLT5idXMuYWRkcik7CisJ CWl0ZXJfaW8tPm5lZWRzX3VubWFwID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJc2l6ZV90IGJ1c19z aXplID0gKHNpemVfdCltZW0tPm51bV9wYWdlcyA8PCBQQUdFX1NISUZUOworCisJCWl0ZXJfaW8t Pm5lZWRzX3VubWFwID0gdHJ1ZTsKKwkJaWYgKG1lbS0+YnVzLmNhY2hpbmcgPT0gdHRtX3dyaXRl X2NvbWJpbmVkKQorCQkJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyX2lvbWVtKCZpdGVyX2lvLT5kbWFw LAorCQkJCQkJICAgIGlvcmVtYXBfd2MobWVtLT5idXMub2Zmc2V0LAorCQkJCQkJCSAgICAgICBi dXNfc2l6ZSkpOworCQllbHNlIGlmIChtZW0tPmJ1cy5jYWNoaW5nID09IHR0bV9jYWNoZWQpCisJ CQlkbWFfYnVmX21hcF9zZXRfdmFkZHIoJml0ZXJfaW8tPmRtYXAsCisJCQkJCSAgICAgIG1lbXJl bWFwKG1lbS0+YnVzLm9mZnNldCwgYnVzX3NpemUsCisJCQkJCQkgICAgICAgTUVNUkVNQVBfV0Ip KTsKKwkJZWxzZQorCQkJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyX2lvbWVtKCZpdGVyX2lvLT5kbWFw LAorCQkJCQkJICAgIGlvcmVtYXAobWVtLT5idXMub2Zmc2V0LAorCQkJCQkJCSAgICBidXNfc2l6 ZSkpOworCQlpZiAoZG1hX2J1Zl9tYXBfaXNfbnVsbCgmaXRlcl9pby0+ZG1hcCkpIHsKKwkJCXJl dCA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9pb19mcmVlOworCQl9CisJfQorCisJaXRlcl9pby0+ YmFzZS5vcHMgPSAmdHRtX2ttYXBfaXRlcl9saW5lYXJfaW9fb3BzOworCXJldHVybiAmaXRlcl9p by0+YmFzZTsKKworb3V0X2lvX2ZyZWU6CisJdHRtX21lbV9pb19mcmVlKGJkZXYsIG1lbSk7Citv dXRfZXJyOgorCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3ZvaWQKK3R0bV9rbWFwX2l0ZXJf bGluZWFyX2lvX2Zpbmkoc3RydWN0IHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvICppdGVyX2lvLAor CQkJICAgICBzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwKKwkJCSAgICAgc3RydWN0IHR0bV9yZXNv dXJjZSAqbWVtKQoreworCWlmIChpdGVyX2lvLT5uZWVkc191bm1hcCAmJiBkbWFfYnVmX21hcF9p c19zZXQoJml0ZXJfaW8tPmRtYXApKSB7CisJCWlmIChpdGVyX2lvLT5kbWFwLmlzX2lvbWVtKQor CQkJaW91bm1hcChpdGVyX2lvLT5kbWFwLnZhZGRyX2lvbWVtKTsKKwkJZWxzZQorCQkJbWVtdW5t YXAoaXRlcl9pby0+ZG1hcC52YWRkcik7CisJfQorCisJdHRtX21lbV9pb19mcmVlKGJkZXYsIG1l bSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jIGIvZHJpdmVy cy9ncHUvZHJtL3R0bS90dG1fdHQuYwppbmRleCA1MzllMDIzMmNiM2IuLjBlNDEyMjcxMTZiMSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vdHRtL3R0bV90dC5jCkBAIC00MzMsMyArNDMzLDQ1IEBAIHZvaWQgdHRtX3R0X21ncl9p bml0KHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzLCB1bnNpZ25lZCBsb25nIG51bV9kbWEzMl9wYWdl cykKIAlpZiAoIXR0bV9kbWEzMl9wYWdlc19saW1pdCkKIAkJdHRtX2RtYTMyX3BhZ2VzX2xpbWl0 ID0gbnVtX2RtYTMyX3BhZ2VzOwogfQorCitzdGF0aWMgdm9pZCB0dG1fa21hcF9pdGVyX3R0X21h cF9sb2NhbChzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqaXRlciwKKwkJCQkgICAgICAgc3RydWN0IGRt YV9idWZfbWFwICpkbWFwLAorCQkJCSAgICAgICBwZ29mZl90IGkpCit7CisJc3RydWN0IHR0bV9r bWFwX2l0ZXJfdHQgKml0ZXJfdHQgPQorCQljb250YWluZXJfb2YoaXRlciwgdHlwZW9mKCppdGVy X3R0KSwgYmFzZSk7CisKKwlkbWFfYnVmX21hcF9zZXRfdmFkZHIoZG1hcCwga21hcF9sb2NhbF9w YWdlX3Byb3QoaXRlcl90dC0+dHQtPnBhZ2VzW2ldLAorCQkJCQkJCSBpdGVyX3R0LT5wcm90KSk7 Cit9CisKK3N0YXRpYyB2b2lkIHR0bV9rbWFwX2l0ZXJfdHRfdW5tYXBfbG9jYWwoc3RydWN0IHR0 bV9rbWFwX2l0ZXIgKml0ZXIsCisJCQkJCSBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKm1hcCkKK3sKKwlr dW5tYXBfbG9jYWwobWFwLT52YWRkcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHRtX2tt YXBfaXRlcl9vcHMgdHRtX2ttYXBfaXRlcl90dF9vcHMgPSB7CisJLm1hcF9sb2NhbCA9IHR0bV9r bWFwX2l0ZXJfdHRfbWFwX2xvY2FsLAorCS51bm1hcF9sb2NhbCA9IHR0bV9rbWFwX2l0ZXJfdHRf dW5tYXBfbG9jYWwsCisJLm1hcHNfdHQgPSB0cnVlLAorfTsKKworLyoqCisgKiB0dG1fa21hcF9p dGVyX3R0X2luaXQgLSBJbml0aWFsaXplIGEgc3RydWN0IHR0bV9rbWFwX2l0ZXJfdHQKKyAqIEBp dGVyX3R0OiBUaGUgc3RydWN0IHR0bV9rbWFwX2l0ZXJfdHQgdG8gaW5pdGlhbGl6ZS4KKyAqIEB0 dDogU3RydWN0IHR0bV90dCBob2xkaW5nIHBhZ2UgcG9pbnRlcnMgb2YgdGhlIHN0cnVjdCB0dG1f cmVzb3VyY2UuCisgKgorICogUmV0dXJuOiBQb2ludGVyIHRvIHRoZSBlbWJlZGRlZCBzdHJ1Y3Qg dHRtX2ttYXBfaXRlci4KKyAqLworc3RydWN0IHR0bV9rbWFwX2l0ZXIgKgordHRtX2ttYXBfaXRl cl90dF9pbml0KHN0cnVjdCB0dG1fa21hcF9pdGVyX3R0ICppdGVyX3R0LAorCQkgICAgICBzdHJ1 Y3QgdHRtX3R0ICp0dCkKK3sKKwlpdGVyX3R0LT5iYXNlLm9wcyA9ICZ0dG1fa21hcF9pdGVyX3R0 X29wczsKKwlpdGVyX3R0LT50dCA9IHR0OworCWl0ZXJfdHQtPnByb3QgPSB0dG1fcHJvdF9mcm9t X2NhY2hpbmcodHQtPmNhY2hpbmcsIFBBR0VfS0VSTkVMKTsKKworCXJldHVybiAmaXRlcl90dC0+ YmFzZTsKK30KK0VYUE9SVF9TWU1CT0wodHRtX2ttYXBfaXRlcl90dF9pbml0KTsKZGlmZiAtLWdp dCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmggYi9pbmNsdWRlL2RybS90dG0vdHRt X2JvX2RyaXZlci5oCmluZGV4IGRiY2NhYzk1N2Y4Zi4uNjFmYTY0OGVlOWU0IDEwMDY0NAotLS0g YS9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCisrKyBiL2luY2x1ZGUvZHJtL3R0bS90 dG1fYm9fZHJpdmVyLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxkcm0vdHRtL3R0bV9k ZXZpY2UuaD4KIAogI2luY2x1ZGUgInR0bV9ib19hcGkuaCIKKyNpbmNsdWRlICJ0dG1fa21hcF9p dGVyLmgiCiAjaW5jbHVkZSAidHRtX3BsYWNlbWVudC5oIgogI2luY2x1ZGUgInR0bV90dC5oIgog I2luY2x1ZGUgInR0bV9wb29sLmgiCkBAIC0yNzIsNiArMjczLDIzIEBAIGludCB0dG1fYm9fbW92 ZV9hY2NlbF9jbGVhbnVwKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCiAJCQkgICAgICBi b29sIHBpcGVsaW5lLAogCQkJICAgICAgc3RydWN0IHR0bV9yZXNvdXJjZSAqbmV3X21lbSk7CiAK Ky8qKgorICogdHRtX2JvX21vdmVfYWNjZWxfY2xlYW51cC4KKyAqCisgKiBAYm86IEEgcG9pbnRl ciB0byBhIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdC4KKyAqIEBuZXdfbWVtOiBzdHJ1Y3QgdHRt X3Jlc291cmNlIGluZGljYXRpbmcgd2hlcmUgdG8gbW92ZS4KKyAqCisgKiBTcGVjaWFsIGNhc2Ug b2YgdHRtX2JvX21vdmVfYWNjZWxfY2xlYW51cCB3aGVyZSB0aGUgYm8gaXMgZ3VhcmFudGVlZAor ICogYnkgdGhlIGNhbGxlciB0byBiZSBpZGxlLiBUeXBpY2FsbHkgdXNlZCBhZnRlciBtZW1jcHkg YnVmZmVyIG1vdmVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdHRtX2JvX21vdmVfc3luY19j bGVhbnVwKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCisJCQkJCSAgICBzdHJ1Y3QgdHRt X3Jlc291cmNlICpuZXdfbWVtKQoreworCWludCByZXQgPSB0dG1fYm9fbW92ZV9hY2NlbF9jbGVh bnVwKGJvLCBOVUxMLCB0cnVlLCBmYWxzZSwgbmV3X21lbSk7CisKKwlXQVJOX09OKHJldCk7Cit9 CisKIC8qKgogICogdHRtX2JvX3BpcGVsaW5lX2d1dHRpbmcuCiAgKgpAQCAtMzMyLDQgKzM1MCwx NCBAQCBpbnQgdHRtX3JhbmdlX21hbl9pbml0KHN0cnVjdCB0dG1fZGV2aWNlICpiZGV2LAogaW50 IHR0bV9yYW5nZV9tYW5fZmluaShzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwKIAkJICAgICAgIHVu c2lnbmVkIHR5cGUpOwogCit2b2lkIHR0bV9tb3ZlX21lbWNweShzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3QgKmJvLAorCQkgICAgIHN0cnVjdCB0dG1fcmVzb3VyY2UgKm5ld19tZW0sCisJCSAgICAg c3RydWN0IHR0bV9rbWFwX2l0ZXIgKmRzdF9pdGVyLAorCQkgICAgIHN0cnVjdCB0dG1fa21hcF9p dGVyICpzcmNfaXRlcik7CisKK3N0cnVjdCB0dG1fa21hcF9pdGVyICoKK3R0bV9rbWFwX2l0ZXJf aW9tYXBfaW5pdChzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9pb21hcCAqaXRlcl9pbywKKwkJCSBzdHJ1 Y3QgaW9fbWFwcGluZyAqaW9tYXAsCisJCQkgc3RydWN0IHNnX3RhYmxlICpzdCwKKwkJCSByZXNv dXJjZV9zaXplX3Qgc3RhcnQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0v dHRtX2NhY2hpbmcuaCBiL2luY2x1ZGUvZHJtL3R0bS90dG1fY2FjaGluZy5oCmluZGV4IGEwYjRh NDlmYTQzMi4uM2M5ZGQ2NWY1YWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS90dG0vdHRtX2Nh Y2hpbmcuaAorKysgYi9pbmNsdWRlL2RybS90dG0vdHRtX2NhY2hpbmcuaApAQCAtMzMsNCArMzMs NiBAQCBlbnVtIHR0bV9jYWNoaW5nIHsKIAl0dG1fY2FjaGVkCiB9OwogCitwZ3Byb3RfdCB0dG1f cHJvdF9mcm9tX2NhY2hpbmcoZW51bSB0dG1fY2FjaGluZyBjYWNoaW5nLCBwZ3Byb3RfdCB0bXAp OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fa21hcF9pdGVyLmgg Yi9pbmNsdWRlL2RybS90dG0vdHRtX2ttYXBfaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uOGJiMDBmZDM5ZDZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVk ZS9kcm0vdHRtL3R0bV9rbWFwX2l0ZXIuaApAQCAtMCwwICsxLDYxIEBACisvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjEgSW50ZWwgQ29y cG9yYXRpb24KKyAqLworI2lmbmRlZiBfX1RUTV9LTUFQX0lURVJfSF9fCisjZGVmaW5lIF9fVFRN X0tNQVBfSVRFUl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCB0dG1f a21hcF9pdGVyOworc3RydWN0IGRtYV9idWZfbWFwOworCisvKioKKyAqIHN0cnVjdCB0dG1fa21h cF9pdGVyX29wcyAtIE9wcyBzdHJ1Y3R1cmUgZm9yIGEgc3RydWN0CisgKiB0dG1fa21hcF9pdGVy LgorICogQG1hcHNfdHQ6IFdoZXRoZXIgdGhlIGl0ZXJhdG9yIG1hcHMgVFQgbWVtb3J5IGRpcmVj dGx5LCBhcyBvcHBvc2VkCisgKiBtYXBwaW5nIGEgVFQgdGhyb3VnaCBhbiBhcGVydHVyZS4gQm90 aCB0aGVzZSBtb2RlcyBoYXZlCisgKiBzdHJ1Y3QgdHRtX3Jlc291cmNlX21hbmFnZXI6OnVzZV90 dCBzZXQsIGJ1dCB0aGUgbGF0dGVyIHR5cGljYWxseQorICogcmV0dXJucyBpc19pb21lbSA9PSB0 cnVlIGZyb20gdHRtX21lbV9pb19yZXNlcnZlLgorICovCitzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9v cHMgeworCS8qKgorCSAqIGttYXBfbG9jYWwoKSAtIE1hcCBhIFBBR0VfU0laRSBwYXJ0IG9mIHRo ZSByZXNvdXJjZSB1c2luZworCSAqIGttYXBfbG9jYWwgc2VtYW50aWNzLgorCSAqIEByZXNfaXRl cjogUG9pbnRlciB0byB0aGUgc3RydWN0IHR0bV9rbWFwX2l0ZXIgcmVwcmVzZW50aW5nCisJICog dGhlIHJlc291cmNlLgorCSAqIEBkbWFwOiBUaGUgc3RydWN0IGRtYV9idWZfbWFwIGhvbGRpbmcg dGhlIHZpcnR1YWwgYWRkcmVzcyBhZnRlcgorCSAqIHRoZSBvcGVyYXRpb24uCisJICogQGk6IFRo ZSBsb2NhdGlvbiB3aXRoaW4gdGhlIHJlc291cmNlIHRvIG1hcC4gUEFHRV9TSVpFIGdyYW51bGFy aXR5LgorCSAqLworCXZvaWQgKCptYXBfbG9jYWwpKHN0cnVjdCB0dG1fa21hcF9pdGVyICpyZXNf aXRlciwKKwkJCSAgc3RydWN0IGRtYV9idWZfbWFwICpkbWFwLCBwZ29mZl90IGkpOworCS8qKgor CSAqIHVubWFwX2xvY2FsKCkgLSBVbm1hcCBhIFBBR0VfU0laRSBwYXJ0IG9mIHRoZSByZXNvdXJj ZSBwcmV2aW91c2x5CisJICogbWFwcGVkIHVzaW5nIGttYXBfbG9jYWwuCisJICogQHJlc19pdGVy OiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3QgdHRtX2ttYXBfaXRlciByZXByZXNlbnRpbmcKKwkgKiB0 aGUgcmVzb3VyY2UuCisJICogQGRtYXA6IFRoZSBzdHJ1Y3QgZG1hX2J1Zl9tYXAgaG9sZGluZyB0 aGUgdmlydHVhbCBhZGRyZXNzIGFmdGVyCisJICogdGhlIG9wZXJhdGlvbi4KKwkgKi8KKwl2b2lk ICgqdW5tYXBfbG9jYWwpKHN0cnVjdCB0dG1fa21hcF9pdGVyICpyZXNfaXRlciwKKwkJCSAgICBz dHJ1Y3QgZG1hX2J1Zl9tYXAgKmRtYXApOworCWJvb2wgbWFwc190dDsKK307CisKKy8qKgorICog c3RydWN0IHR0bV9rbWFwX2l0ZXIgLSBJdGVyYXRvciBmb3Iga21hcF9sb2NhbCB0eXBlIG9wZXJh dGlvbnMgb24gYQorICogcmVzb3VyY2UuCisgKiBAb3BzOiBQb2ludGVyIHRvIHRoZSBvcGVyYXRp b25zIHN0cnVjdC4KKyAqCisgKiBUaGlzIHN0cnVjdCBpcyBpbnRlbmRlZCB0byBiZSBlbWJlZGRl ZCBpbiBhIHJlc291cmNlLXNwZWNpZmljIHNwZWNpYWxpemF0aW9uCisgKiBpbXBsZW1lbnRpbmcg b3BlcmF0aW9ucyBmb3IgdGhlIHJlc291cmNlLgorICoKKyAqIE5vdGhpbmcgc3RvcHMgdXMgZnJv bSBleHRlbmRpbmcgdGhlIG9wZXJhdGlvbnMgdG8gdm1hcCwgdm1hcF9wZm4gZXRjLAorICogcmVw bGFjaW5nIHNvbWUgb3IgcGFydHMgb2YgdGhlIHR0bV9ib191dGlsLiBjcHUtbWFwIGZ1bmN0aW9u YWxpdHkuCisgKi8KK3N0cnVjdCB0dG1fa21hcF9pdGVyIHsKKwljb25zdCBzdHJ1Y3QgdHRtX2tt YXBfaXRlcl9vcHMgKm9wczsKK307CisKKyNlbmRpZiAvKiBfX1RUTV9LTUFQX0lURVJfSF9fICov CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0vdHRtX3Jlc291cmNlLmggYi9pbmNsdWRlL2Ry bS90dG0vdHRtX3Jlc291cmNlLmgKaW5kZXggODkwYjlkMzY5NTE5Li5iOGRjMGJkYjBkYTUgMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fcmVzb3VyY2UuaAorKysgYi9pbmNsdWRlL2Ry bS90dG0vdHRtX3Jlc291cmNlLmgKQEAgLTI3LDkgKzI3LDExIEBACiAKICNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZG1h LWJ1Zi1tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KICNpbmNsdWRlIDxkcm0v ZHJtX3ByaW50Lmg+CiAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fY2FjaGluZy5oPgorI2luY2x1ZGUg PGRybS90dG0vdHRtX2ttYXBfaXRlci5oPgogCiAjZGVmaW5lIFRUTV9NQVhfQk9fUFJJT1JJVFkJ NFUKIApAQCAtMzgsNiArNDAsMTAgQEAgc3RydWN0IHR0bV9yZXNvdXJjZV9tYW5hZ2VyOwogc3Ry dWN0IHR0bV9yZXNvdXJjZTsKIHN0cnVjdCB0dG1fcGxhY2U7CiBzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3Q7CitzdHJ1Y3QgZG1hX2J1Zl9tYXA7CitzdHJ1Y3QgaW9fbWFwcGluZzsKK3N0cnVjdCBz Z190YWJsZTsKK3N0cnVjdCBzY2F0dGVybGlzdDsKIAogc3RydWN0IHR0bV9yZXNvdXJjZV9tYW5h Z2VyX2Z1bmMgewogCS8qKgpAQCAtMTc2LDYgKzE4Miw0NSBAQCBzdHJ1Y3QgdHRtX3Jlc291cmNl IHsKIAlzdHJ1Y3QgdHRtX2J1c19wbGFjZW1lbnQgYnVzOwogfTsKIAorLyoqCisgKiBzdHJ1Y3Qg dHRtX2ttYXBfaXRlcl9pb21hcCAtIFNwZWNpYWxpemF0aW9uIGZvciBhIHN0cnVjdCBpb19tYXBw aW5nICsKKyAqIHN0cnVjdCBzZ190YWJsZSBiYWNrZWQgc3RydWN0IHR0bV9yZXNvdXJjZS4KKyAq IEBiYXNlOiBFbWJlZGRlZCBzdHJ1Y3QgdHRtX2ttYXBfaXRlciBwcm92aWRpbmcgdGhlIHVzYWdl IGludGVyZmFjZS4KKyAqIEBpb21hcDogc3RydWN0IGlvX21hcHBpbmcgcmVwcmVzZW50aW5nIHRo ZSB1bmRlcmx5aW5nIGxpbmVhciBpb19tZW1vcnkuCisgKiBAc3Q6IHNnX3RhYmxlIGludG8gQGlv bWFwLCByZXByZXNlbnRpbmcgdGhlIG1lbW9yeSBvZiB0aGUgc3RydWN0IHR0bV9yZXNvdXJjZS4K KyAqIEBzdGFydDogT2Zmc2V0IHRoYXQgbmVlZHMgdG8gYmUgc3VidHJhY3RlZCBmcm9tIEBzdCB0 byBtYWtlCisgKiBzZ19kbWFfYWRkcmVzcyhzdC0+c2dsKSAtIEBzdGFydCA9PSAwIGZvciBAaW9t YXAgc3RhcnQuCisgKiBAY2FjaGU6IFNjYXR0ZXJsaXN0IHRyYXZlcnNhbCBjYWNoZSBmb3IgZmFz dCBsb29rdXBzLgorICogQGNhY2hlLnNnOiBQb2ludGVyIHRvIHRoZSBjdXJyZW50bHkgY2FjaGVk IHNjYXR0ZXJsaXN0IHNlZ21lbnQuCisgKiBAY2FjaGUuaTogRmlyc3QgaW5kZXggb2YgQHNnLiBQ QUdFX1NJWkUgZ3JhbnVsYXJpdHkuCisgKiBAY2FjaGUuZW5kOiBMYXN0IGluZGV4ICsgMSBvZiBA c2cuIFBBR0VfU0laRSBncmFudWxhcml0eS4KKyAqIEBjYWNoZS5vZmZzOiBGaXJzdCBvZmZzZXQg aW50byBAaW9tYXAgb2YgQHNnLiBQQUdFX1NJWkUgZ3JhbnVsYXJpdHkuCisgKi8KK3N0cnVjdCB0 dG1fa21hcF9pdGVyX2lvbWFwIHsKKwlzdHJ1Y3QgdHRtX2ttYXBfaXRlciBiYXNlOworCXN0cnVj dCBpb19tYXBwaW5nICppb21hcDsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnN0OworCXJlc291cmNlX3Np emVfdCBzdGFydDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCQlwZ29m Zl90IGk7CisJCXBnb2ZmX3QgZW5kOworCQlwZ29mZl90IG9mZnM7CisJfSBjYWNoZTsKK307CisK Ky8qKgorICogc3RydWN0IHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvIC0gSXRlcmF0b3Igc3BlY2lh bGl6YXRpb24gZm9yIGxpbmVhciBpbworICogQGJhc2U6IFRoZSBiYXNlIGl0ZXJhdG9yCisgKiBA ZG1hcDogUG9pbnRzIHRvIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSByZWdpb24KKyAqIEBu ZWVkc191bm1hcDogV2hldGhlciB3ZSBuZWVkIHRvIHVubWFwIG9uIGZpbmkKKyAqLworc3RydWN0 IHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvIHsKKwlzdHJ1Y3QgdHRtX2ttYXBfaXRlciBiYXNlOwor CXN0cnVjdCBkbWFfYnVmX21hcCBkbWFwOworCWJvb2wgbmVlZHNfdW5tYXA7Cit9OworCiAvKioK ICAqIHR0bV9yZXNvdXJjZV9tYW5hZ2VyX3NldF91c2VkCiAgKgpAQCAtMjM3LDQgKzI4MiwyMCBA QCBpbnQgdHRtX3Jlc291cmNlX21hbmFnZXJfZXZpY3RfYWxsKHN0cnVjdCB0dG1fZGV2aWNlICpi ZGV2LAogdm9pZCB0dG1fcmVzb3VyY2VfbWFuYWdlcl9kZWJ1ZyhzdHJ1Y3QgdHRtX3Jlc291cmNl X21hbmFnZXIgKm1hbiwKIAkJCQlzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApOwogCitzdHJ1Y3QgdHRt X2ttYXBfaXRlciAqCit0dG1fa21hcF9pdGVyX2lvbWFwX2luaXQoc3RydWN0IHR0bV9rbWFwX2l0 ZXJfaW9tYXAgKml0ZXJfaW8sCisJCQkgc3RydWN0IGlvX21hcHBpbmcgKmlvbWFwLAorCQkJIHN0 cnVjdCBzZ190YWJsZSAqc3QsCisJCQkgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0KTsKKworc3RydWN0 IHR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvOworCitzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqCit0dG1f a21hcF9pdGVyX2xpbmVhcl9pb19pbml0KHN0cnVjdCB0dG1fa21hcF9pdGVyX2xpbmVhcl9pbyAq aXRlcl9pbywKKwkJCSAgICAgc3RydWN0IHR0bV9kZXZpY2UgKmJkZXYsCisJCQkgICAgIHN0cnVj dCB0dG1fcmVzb3VyY2UgKm1lbSk7CisKK3ZvaWQgdHRtX2ttYXBfaXRlcl9saW5lYXJfaW9fZmlu aShzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9saW5lYXJfaW8gKml0ZXJfaW8sCisJCQkJICBzdHJ1Y3Qg dHRtX2RldmljZSAqYmRldiwKKwkJCQkgIHN0cnVjdCB0dG1fcmVzb3VyY2UgKm1lbSk7CiAjZW5k aWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fdHQuaCBiL2luY2x1ZGUvZHJtL3R0 bS90dG1fdHQuaAppbmRleCAxMzRkMDllZjc3NjYuLjMxMDIwNTlkYjcyNiAxMDA2NDQKLS0tIGEv aW5jbHVkZS9kcm0vdHRtL3R0bV90dC5oCisrKyBiL2luY2x1ZGUvZHJtL3R0bS90dG1fdHQuaApA QCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxk cm0vdHRtL3R0bV9jYWNoaW5nLmg+CisjaW5jbHVkZSA8ZHJtL3R0bS90dG1fa21hcF9pdGVyLmg+ CiAKIHN0cnVjdCB0dG1fYm9fZGV2aWNlOwogc3RydWN0IHR0bV90dDsKQEAgLTY5LDYgKzcwLDE4 IEBAIHN0cnVjdCB0dG1fdHQgewogCWVudW0gdHRtX2NhY2hpbmcgY2FjaGluZzsKIH07CiAKKy8q KgorICogc3RydWN0IHR0bV9rbWFwX2l0ZXJfdHQgLSBTcGVjaWFsaXphdGlvbiBvZiBhIG1hcHBp ZyBpdGVyYXRvciBmb3IgYSB0dC4KKyAqIEBiYXNlOiBFbWJlZGRlZCBzdHJ1Y3QgdHRtX2ttYXBf aXRlciBwcm92aWRpbmcgdGhlIHVzYWdlIGludGVyZmFjZQorICogQHR0OiBDYWNoZWQgc3RydWN0 IHR0bV90dC4KKyAqIEBwcm90OiBDYWNoZWQgcGFnZSBwcm90ZWN0aW9uIGZvciBtYXBwaW5nLgor ICovCitzdHJ1Y3QgdHRtX2ttYXBfaXRlcl90dCB7CisJc3RydWN0IHR0bV9rbWFwX2l0ZXIgYmFz ZTsKKwlzdHJ1Y3QgdHRtX3R0ICp0dDsKKwlwZ3Byb3RfdCBwcm90OworfTsKKwogc3RhdGljIGlu bGluZSBib29sIHR0bV90dF9pc19wb3B1bGF0ZWQoc3RydWN0IHR0bV90dCAqdHQpCiB7CiAJcmV0 dXJuIHR0LT5wYWdlX2ZsYWdzICYgVFRNX1BBR0VfRkxBR19QUklWX1BPUFVMQVRFRDsKQEAgLTE1 OSw2ICsxNzIsOSBAQCB2b2lkIHR0bV90dF91bnBvcHVsYXRlKHN0cnVjdCB0dG1fZGV2aWNlICpi ZGV2LCBzdHJ1Y3QgdHRtX3R0ICp0dG0pOwogCiB2b2lkIHR0bV90dF9tZ3JfaW5pdCh1bnNpZ25l ZCBsb25nIG51bV9wYWdlcywgdW5zaWduZWQgbG9uZyBudW1fZG1hMzJfcGFnZXMpOwogCitzdHJ1 Y3QgdHRtX2ttYXBfaXRlciAqdHRtX2ttYXBfaXRlcl90dF9pbml0KHN0cnVjdCB0dG1fa21hcF9p dGVyX3R0ICppdGVyX3R0LAorCQkJCQkgICAgc3RydWN0IHR0bV90dCAqdHQpOworCiAjaWYgSVNf RU5BQkxFRChDT05GSUdfQUdQKQogI2luY2x1ZGUgPGxpbnV4L2FncF9iYWNrZW5kLmg+CiAKLS0g CjIuMzEuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==