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,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 B52A6C4708F for ; Mon, 31 May 2021 12:20:34 +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 7F8756103E for ; Mon, 31 May 2021 12:20:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7F8756103E 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 F0B086E90A; Mon, 31 May 2021 12:20:20 +0000 (UTC) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0C2116E8F4; Mon, 31 May 2021 12:20:09 +0000 (UTC) IronPort-SDR: Oj3vPgo3xLk3yt8qa3rmv2Vlo+6JskaucTpBwN3SDjji7U4r/vZWge9lQecsEo33yKMRpV+r2R YMrATHiU707A== X-IronPort-AV: E=McAfee;i="6200,9189,10000"; a="183027481" X-IronPort-AV: E=Sophos;i="5.83,237,1616482800"; d="scan'208";a="183027481" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 May 2021 05:20:09 -0700 IronPort-SDR: +6AR8OBEXggAEkOfCZkSuTJVwQivXue2vxlMMChxfyCyJsmK4wzrvY64E+EC/ICRA++F/WoeWA VY1aJKZA1iOQ== X-IronPort-AV: E=Sophos;i="5.83,237,1616482800"; d="scan'208";a="473903885" Received: from fnygreen-mobl1.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.133]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 May 2021 05:20:08 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Mon, 31 May 2021 14:19:31 +0200 Message-Id: <20210531121940.267032-7-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210531121940.267032-1-thomas.hellstrom@linux.intel.com> References: <20210531121940.267032-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v7 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 c3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KLS0tCnYzOgotIFNwbGl0 IHVwIGluIHZhcmlvdXMgVFRNIGZpbGVzIGFuZCBhZGRyZXNzZWQgcmV2aWV3IGNvbW1lbnRzIGJ5 CiAgQ2hyaXN0aWFuIEvDtm5pZy4gVGVzdGVkIGFuZCBmaXhlZCBsZWdhY3kgaW9tYXAgbWVtY3B5 IHBhdGggb24gaTkxNS4KdjQ6Ci0gRml4IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUKICBSZXBv cnRlZCBieToga2VybmVsIHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5jb20+CiAgUmVwb3J0ZWQgYnk6 IERhbiBDYXJwZW50ZXIgPGRhbi5jYXJwZW50ZXJAb3JhY2xlLmNvbT4KLSBNaW5vciBjaGFuZ2Ug dG8gdGhlIHR0bV9tb3ZlX21lbWNweSgpIGludGVyZmFjZS4KLSBHcmFjZWZ1bGx5IGhhbmRsZSBs YWNrIG9mIG1lbXJlbWFwKCkgc3VwcG9ydCBvbiBtZW1jcHkKICAoUmVwb3J0ZWQgYnkgTWF0dGhl dyBBdWxkKQotIE1pbm9yIHN0eWxlIGZpeCAoUmVwb3J0ZWQgYnkgTWF0dGhldyBBdWxkKQotLS0K IGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYyAgfCAyODAgKysrKysrKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX21vZHVsZS5jICAgfCAgMzUg KysrKwogZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcmVzb3VyY2UuYyB8IDE5MyArKysrKysrKysr KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYyAgICAgICB8ICA0MiArKysr KwogaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaCAgICB8ICAyOCArKysKIGluY2x1ZGUv ZHJtL3R0bS90dG1fY2FjaGluZy5oICAgICAgfCAgIDIgKwogaW5jbHVkZS9kcm0vdHRtL3R0bV9r bWFwX2l0ZXIuaCAgICB8ICA2MSArKysrKysrCiBpbmNsdWRlL2RybS90dG0vdHRtX3Jlc291cmNl LmggICAgIHwgIDYxICsrKysrKysKIGluY2x1ZGUvZHJtL3R0bS90dG1fdHQuaCAgICAgICAgICAg fCAgMTYgKysKIDkgZmlsZXMgY2hhbmdlZCwgNTM2IGluc2VydGlvbnMoKyksIDE4MiBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS90dG0vdHRtX2ttYXBfaXRlci5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jIGIvZHJpdmVy cy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCmluZGV4IGFlOGI2MTQ2MDcyNC4uNmFjNzc0NGEx YTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCkBAIC03MiwxOTAgKzcyLDEyNiBAQCB2 b2lkIHR0bV9tZW1faW9fZnJlZShzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiwKIAltZW0tPmJ1cy5h ZGRyID0gTlVMTDsKIH0KIAotc3RhdGljIGludCB0dG1fcmVzb3VyY2VfaW9yZW1hcChzdHJ1Y3Qg dHRtX2RldmljZSAqYmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgdHRtX3Jlc291cmNlICptZW0sCi0J CQkgICAgICAgdm9pZCAqKnZpcnR1YWwpCisvKioKKyAqIHR0bV9tb3ZlX21lbWNweSAtIEhlbHBl ciB0byBwZXJmb3JtIGEgbWVtY3B5IHR0bSBtb3ZlIG9wZXJhdGlvbi4KKyAqIEBibzogVGhlIHN0 cnVjdCB0dG1fYnVmZmVyX29iamVjdC4KKyAqIEBuZXdfbWVtOiBUaGUgc3RydWN0IHR0bV9yZXNv dXJjZSB3ZSdyZSBtb3ZpbmcgdG8gKGNvcHkgZGVzdGluYXRpb24pLgorICogQG5ld19pdGVyOiBB IHN0cnVjdCB0dG1fa21hcF9pdGVyIHJlcHJlc2VudGluZyB0aGUgZGVzdGluYXRpb24gcmVzb3Vy Y2UuCisgKiBAc3JjX2l0ZXI6IEEgc3RydWN0IHR0bV9rbWFwX2l0ZXIgcmVwcmVzZW50aW5nIHRo ZSBzb3VyY2UgcmVzb3VyY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBi ZSBhYmxlIHRvIG1vdmUgb3V0IGFzeW5jIHVuZGVyIGEKKyAqIGRtYS1mZW5jZSBpZiBkZXNpcmVk LgorICovCit2b2lkIHR0bV9tb3ZlX21lbWNweShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJv LAorCQkgICAgIHBnb2ZmX3QgbnVtX3BhZ2VzLAorCQkgICAgIHN0cnVjdCB0dG1fa21hcF9pdGVy ICpkc3RfaXRlciwKKwkJICAgICBzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqc3JjX2l0ZXIpCiB7Ci0J aW50IHJldDsKLQl2b2lkICphZGRyOwotCi0JKnZpcnR1YWwgPSBOVUxMOwotCXJldCA9IHR0bV9t ZW1faW9fcmVzZXJ2ZShiZGV2LCBtZW0pOwotCWlmIChyZXQgfHwgIW1lbS0+YnVzLmlzX2lvbWVt KQotCQlyZXR1cm4gcmV0OworCWNvbnN0IHN0cnVjdCB0dG1fa21hcF9pdGVyX29wcyAqZHN0X29w cyA9IGRzdF9pdGVyLT5vcHM7CisJY29uc3Qgc3RydWN0IHR0bV9rbWFwX2l0ZXJfb3BzICpzcmNf b3BzID0gc3JjX2l0ZXItPm9wczsKKwlzdHJ1Y3QgdHRtX3R0ICp0dG0gPSBiby0+dHRtOworCXN0 cnVjdCBkbWFfYnVmX21hcCBzcmNfbWFwLCBkc3RfbWFwOworCXBnb2ZmX3QgaTsKIAotCWlmICht ZW0tPmJ1cy5hZGRyKSB7Ci0JCWFkZHIgPSBtZW0tPmJ1cy5hZGRyOwotCX0gZWxzZSB7Ci0JCXNp emVfdCBidXNfc2l6ZSA9IChzaXplX3QpbWVtLT5udW1fcGFnZXMgPDwgUEFHRV9TSElGVDsKKwkv KiBTaW5nbGUgVFRNIG1vdmUuIE5PUCAqLworCWlmIChkc3Rfb3BzLT5tYXBzX3R0ICYmIHNyY19v cHMtPm1hcHNfdHQpCisJCXJldHVybjsKIAotCQlpZiAobWVtLT5idXMuY2FjaGluZyA9PSB0dG1f d3JpdGVfY29tYmluZWQpCi0JCQlhZGRyID0gaW9yZW1hcF93YyhtZW0tPmJ1cy5vZmZzZXQsIGJ1 c19zaXplKTsKLSNpZmRlZiBDT05GSUdfWDg2Ci0JCWVsc2UgaWYgKG1lbS0+YnVzLmNhY2hpbmcg PT0gdHRtX2NhY2hlZCkKLQkJCWFkZHIgPSBpb3JlbWFwX2NhY2hlKG1lbS0+YnVzLm9mZnNldCwg YnVzX3NpemUpOwotI2VuZGlmCi0JCWVsc2UKLQkJCWFkZHIgPSBpb3JlbWFwKG1lbS0+YnVzLm9m ZnNldCwgYnVzX3NpemUpOwotCQlpZiAoIWFkZHIpIHsKLQkJCXR0bV9tZW1faW9fZnJlZShiZGV2 LCBtZW0pOwotCQkJcmV0dXJuIC1FTk9NRU07CisJLyogRG9uJ3QgbW92ZSBub25leGlzdGVudCBk YXRhLiBDbGVhciBkZXN0aW5hdGlvbiBpbnN0ZWFkLiAqLworCWlmIChzcmNfb3BzLT5tYXBzX3R0 ICYmICghdHRtIHx8ICF0dG1fdHRfaXNfcG9wdWxhdGVkKHR0bSkpKSB7CisJCWlmICh0dG0gJiYg ISh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1pFUk9fQUxMT0MpKQorCQkJcmV0dXJu OworCisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICsraSkgeworCQkJZHN0X29wcy0+bWFw X2xvY2FsKGRzdF9pdGVyLCAmZHN0X21hcCwgaSk7CisJCQlpZiAoZHN0X21hcC5pc19pb21lbSkK KwkJCQltZW1zZXRfaW8oZHN0X21hcC52YWRkcl9pb21lbSwgMCwgUEFHRV9TSVpFKTsKKwkJCWVs c2UKKwkJCQltZW1zZXQoZHN0X21hcC52YWRkciwgMCwgUEFHRV9TSVpFKTsKKwkJCWlmIChkc3Rf b3BzLT51bm1hcF9sb2NhbCkKKwkJCQlkc3Rfb3BzLT51bm1hcF9sb2NhbChkc3RfaXRlciwgJmRz dF9tYXApOwogCQl9CisJCXJldHVybjsKIAl9Ci0JKnZpcnR1YWwgPSBhZGRyOwotCXJldHVybiAw OwotfQotCi1zdGF0aWMgdm9pZCB0dG1fcmVzb3VyY2VfaW91bm1hcChzdHJ1Y3QgdHRtX2Rldmlj ZSAqYmRldiwKLQkJCQlzdHJ1Y3QgdHRtX3Jlc291cmNlICptZW0sCi0JCQkJdm9pZCAqdmlydHVh bCkKLXsKLQlpZiAodmlydHVhbCAmJiBtZW0tPmJ1cy5hZGRyID09IE5VTEwpCi0JCWlvdW5tYXAo dmlydHVhbCk7Ci0JdHRtX21lbV9pb19mcmVlKGJkZXYsIG1lbSk7Ci19Ci0KLXN0YXRpYyBpbnQg dHRtX2NvcHlfaW9fcGFnZSh2b2lkICpkc3QsIHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBwYWdl KQotewotCXVpbnQzMl90ICpkc3RQID0KLQkgICAgKHVpbnQzMl90ICopICgodW5zaWduZWQgbG9u Zylkc3QgKyAocGFnZSA8PCBQQUdFX1NISUZUKSk7Ci0JdWludDMyX3QgKnNyY1AgPQotCSAgICAo dWludDMyX3QgKikgKCh1bnNpZ25lZCBsb25nKXNyYyArIChwYWdlIDw8IFBBR0VfU0hJRlQpKTsK LQotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBQQUdFX1NJWkUgLyBzaXplb2YodWludDMyX3Qp OyArK2kpCi0JCWlvd3JpdGUzMihpb3JlYWQzMihzcmNQKyspLCBkc3RQKyspOwotCXJldHVybiAw OwotfQotCi1zdGF0aWMgaW50IHR0bV9jb3B5X2lvX3R0bV9wYWdlKHN0cnVjdCB0dG1fdHQgKnR0 bSwgdm9pZCAqc3JjLAotCQkJCXVuc2lnbmVkIGxvbmcgcGFnZSwKLQkJCQlwZ3Byb3RfdCBwcm90 KQotewotCXN0cnVjdCBwYWdlICpkID0gdHRtLT5wYWdlc1twYWdlXTsKLQl2b2lkICpkc3Q7Ci0K LQlpZiAoIWQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3JjID0gKHZvaWQgKikoKHVuc2lnbmVk IGxvbmcpc3JjICsgKHBhZ2UgPDwgUEFHRV9TSElGVCkpOwotCWRzdCA9IGttYXBfYXRvbWljX3By b3QoZCwgcHJvdCk7Ci0JaWYgKCFkc3QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5X2Zy b21pbyhkc3QsIHNyYywgUEFHRV9TSVpFKTsKLQotCWt1bm1hcF9hdG9taWMoZHN0KTsKLQotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IHR0bV9jb3B5X3R0bV9pb19wYWdlKHN0cnVjdCB0dG1f dHQgKnR0bSwgdm9pZCAqZHN0LAotCQkJCXVuc2lnbmVkIGxvbmcgcGFnZSwKLQkJCQlwZ3Byb3Rf dCBwcm90KQotewotCXN0cnVjdCBwYWdlICpzID0gdHRtLT5wYWdlc1twYWdlXTsKLQl2b2lkICpz cmM7CiAKLQlpZiAoIXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZHN0ID0gKHZvaWQgKikoKHVu c2lnbmVkIGxvbmcpZHN0ICsgKHBhZ2UgPDwgUEFHRV9TSElGVCkpOwotCXNyYyA9IGttYXBfYXRv bWljX3Byb3QocywgcHJvdCk7Ci0JaWYgKCFzcmMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVt Y3B5X3RvaW8oZHN0LCBzcmMsIFBBR0VfU0laRSk7Ci0KLQlrdW5tYXBfYXRvbWljKHNyYyk7CisJ Zm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgKytpKSB7CisJCWRzdF9vcHMtPm1hcF9sb2NhbChk c3RfaXRlciwgJmRzdF9tYXAsIGkpOworCQlzcmNfb3BzLT5tYXBfbG9jYWwoc3JjX2l0ZXIsICZz cmNfbWFwLCBpKTsKKworCQlpZiAoIXNyY19tYXAuaXNfaW9tZW0gJiYgIWRzdF9tYXAuaXNfaW9t ZW0pIHsKKwkJCW1lbWNweShkc3RfbWFwLnZhZGRyLCBzcmNfbWFwLnZhZGRyLCBQQUdFX1NJWkUp OworCQl9IGVsc2UgaWYgKCFzcmNfbWFwLmlzX2lvbWVtKSB7CisJCQlkbWFfYnVmX21hcF9tZW1j cHlfdG8oJmRzdF9tYXAsIHNyY19tYXAudmFkZHIsCisJCQkJCSAgICAgIFBBR0VfU0laRSk7CisJ CX0gZWxzZSBpZiAoIWRzdF9tYXAuaXNfaW9tZW0pIHsKKwkJCW1lbWNweV9mcm9taW8oZHN0X21h cC52YWRkciwgc3JjX21hcC52YWRkcl9pb21lbSwKKwkJCQkgICAgICBQQUdFX1NJWkUpOworCQl9 IGVsc2UgeworCQkJaW50IGo7CisJCQl1MzIgX19pb21lbSAqc3JjID0gc3JjX21hcC52YWRkcl9p b21lbTsKKwkJCXUzMiBfX2lvbWVtICpkc3QgPSBkc3RfbWFwLnZhZGRyX2lvbWVtOwogCi0JcmV0 dXJuIDA7CisJCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIHNpemVvZih1MzIpKTsgKytq KQorCQkJCWlvd3JpdGUzMihpb3JlYWQzMihzcmMrKyksIGRzdCsrKTsKKwkJfQorCQlpZiAoc3Jj X29wcy0+dW5tYXBfbG9jYWwpCisJCQlzcmNfb3BzLT51bm1hcF9sb2NhbChzcmNfaXRlciwgJnNy Y19tYXApOworCQlpZiAoZHN0X29wcy0+dW5tYXBfbG9jYWwpCisJCQlkc3Rfb3BzLT51bm1hcF9s b2NhbChkc3RfaXRlciwgJmRzdF9tYXApOworCX0KIH0KK0VYUE9SVF9TWU1CT0wodHRtX21vdmVf bWVtY3B5KTsKIAogaW50IHR0bV9ib19tb3ZlX21lbWNweShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QgKmJvLAogCQkgICAgICAgc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4ICpjdHgsCi0JCSAgICAg ICBzdHJ1Y3QgdHRtX3Jlc291cmNlICpuZXdfbWVtKQorCQkgICAgICAgc3RydWN0IHR0bV9yZXNv dXJjZSAqZHN0X21lbSkKIHsKIAlzdHJ1Y3QgdHRtX2RldmljZSAqYmRldiA9IGJvLT5iZGV2Owot CXN0cnVjdCB0dG1fcmVzb3VyY2VfbWFuYWdlciAqbWFuID0gdHRtX21hbmFnZXJfdHlwZShiZGV2 LCBuZXdfbWVtLT5tZW1fdHlwZSk7CisJc3RydWN0IHR0bV9yZXNvdXJjZV9tYW5hZ2VyICpkc3Rf bWFuID0KKwkJdHRtX21hbmFnZXJfdHlwZShiby0+YmRldiwgZHN0X21lbS0+bWVtX3R5cGUpOwog CXN0cnVjdCB0dG1fdHQgKnR0bSA9IGJvLT50dG07Ci0Jc3RydWN0IHR0bV9yZXNvdXJjZSAqb2xk X21lbSA9ICZiby0+bWVtOwotCXN0cnVjdCB0dG1fcmVzb3VyY2Ugb2xkX2NvcHkgPSAqb2xkX21l bTsKLQl2b2lkICpvbGRfaW9tYXA7Ci0Jdm9pZCAqbmV3X2lvbWFwOwotCWludCByZXQ7Ci0JdW5z aWduZWQgbG9uZyBpOwotCi0JcmV0ID0gdHRtX2JvX3dhaXRfY3R4KGJvLCBjdHgpOwotCWlmIChy ZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB0dG1fcmVzb3VyY2VfaW9yZW1hcChiZGV2LCBv bGRfbWVtLCAmb2xkX2lvbWFwKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXJldCA9IHR0 bV9yZXNvdXJjZV9pb3JlbWFwKGJkZXYsIG5ld19tZW0sICZuZXdfaW9tYXApOwotCWlmIChyZXQp Ci0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBTaW5nbGUgVFRNIG1vdmUuIE5PUC4KLQkgKi8KLQlp ZiAob2xkX2lvbWFwID09IE5VTEwgJiYgbmV3X2lvbWFwID09IE5VTEwpCi0JCWdvdG8gb3V0MjsK LQotCS8qCi0JICogRG9uJ3QgbW92ZSBub25leGlzdGVudCBkYXRhLiBDbGVhciBkZXN0aW5hdGlv biBpbnN0ZWFkLgotCSAqLwotCWlmIChvbGRfaW9tYXAgPT0gTlVMTCAmJgotCSAgICAodHRtID09 IE5VTEwgfHwgKCF0dG1fdHRfaXNfcG9wdWxhdGVkKHR0bSkgJiYKLQkJCSAgICAgISh0dG0tPnBh Z2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1NXQVBQRUQpKSkpIHsKLQkJbWVtc2V0X2lvKG5ld19p b21hcCwgMCwgbmV3X21lbS0+bnVtX3BhZ2VzKlBBR0VfU0laRSk7Ci0JCWdvdG8gb3V0MjsKLQl9 CisJc3RydWN0IHR0bV9yZXNvdXJjZSAqc3JjX21lbSA9ICZiby0+bWVtOworCXN0cnVjdCB0dG1f cmVzb3VyY2VfbWFuYWdlciAqc3JjX21hbiA9CisJCXR0bV9tYW5hZ2VyX3R5cGUoYmRldiwgc3Jj X21lbS0+bWVtX3R5cGUpOworCXN0cnVjdCB0dG1fcmVzb3VyY2Ugc3JjX2NvcHkgPSAqc3JjX21l bTsKKwl1bmlvbiB7CisJCXN0cnVjdCB0dG1fa21hcF9pdGVyX3R0IHR0OworCQlzdHJ1Y3QgdHRt X2ttYXBfaXRlcl9saW5lYXJfaW8gaW87CisJfSBfZHN0X2l0ZXIsIF9zcmNfaXRlcjsKKwlzdHJ1 Y3QgdHRtX2ttYXBfaXRlciAqZHN0X2l0ZXIsICpzcmNfaXRlcjsKKwlpbnQgcmV0ID0gMDsKIAot CS8qCi0JICogVFRNIG1pZ2h0IGJlIG51bGwgZm9yIG1vdmVzIHdpdGhpbiB0aGUgc2FtZSByZWdp b24uCi0JICovCi0JaWYgKHR0bSkgeworCWlmICh0dG0gJiYgKCh0dG0tPnBhZ2VfZmxhZ3MgJiBU VE1fUEFHRV9GTEFHX1NXQVBQRUQpIHx8CisJCSAgICBkc3RfbWFuLT51c2VfdHQpKSB7CiAJCXJl dCA9IHR0bV90dF9wb3B1bGF0ZShiZGV2LCB0dG0sIGN0eCk7CiAJCWlmIChyZXQpCi0JCQlnb3Rv IG91dDE7CisJCQlyZXR1cm4gcmV0OwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBuZXdfbWVtLT5u dW1fcGFnZXM7ICsraSkgewotCQlpZiAob2xkX2lvbWFwID09IE5VTEwpIHsKLQkJCXBncHJvdF90 IHByb3QgPSB0dG1faW9fcHJvdChibywgb2xkX21lbSwgUEFHRV9LRVJORUwpOwotCQkJcmV0ID0g dHRtX2NvcHlfdHRtX2lvX3BhZ2UodHRtLCBuZXdfaW9tYXAsIGksCi0JCQkJCQkgICBwcm90KTsK LQkJfSBlbHNlIGlmIChuZXdfaW9tYXAgPT0gTlVMTCkgewotCQkJcGdwcm90X3QgcHJvdCA9IHR0 bV9pb19wcm90KGJvLCBuZXdfbWVtLCBQQUdFX0tFUk5FTCk7Ci0JCQlyZXQgPSB0dG1fY29weV9p b190dG1fcGFnZSh0dG0sIG9sZF9pb21hcCwgaSwKLQkJCQkJCSAgIHByb3QpOwotCQl9IGVsc2Ug ewotCQkJcmV0ID0gdHRtX2NvcHlfaW9fcGFnZShuZXdfaW9tYXAsIG9sZF9pb21hcCwgaSk7Ci0J CX0KLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0MTsKKwlkc3RfaXRlciA9IHR0bV9rbWFwX2l0ZXJf bGluZWFyX2lvX2luaXQoJl9kc3RfaXRlci5pbywgYmRldiwgZHN0X21lbSk7CisJaWYgKFBUUl9F UlIoZHN0X2l0ZXIpID09IC1FSU5WQUwgJiYgZHN0X21hbi0+dXNlX3R0KQorCQlkc3RfaXRlciA9 IHR0bV9rbWFwX2l0ZXJfdHRfaW5pdCgmX2RzdF9pdGVyLnR0LCBiby0+dHRtKTsKKwlpZiAoSVNf RVJSKGRzdF9pdGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIoZHN0X2l0ZXIpOworCisJc3JjX2l0ZXIg PSB0dG1fa21hcF9pdGVyX2xpbmVhcl9pb19pbml0KCZfc3JjX2l0ZXIuaW8sIGJkZXYsIHNyY19t ZW0pOworCWlmIChQVFJfRVJSKHNyY19pdGVyKSA9PSAtRUlOVkFMICYmIHNyY19tYW4tPnVzZV90 dCkKKwkJc3JjX2l0ZXIgPSB0dG1fa21hcF9pdGVyX3R0X2luaXQoJl9zcmNfaXRlci50dCwgYm8t PnR0bSk7CisJaWYgKElTX0VSUihzcmNfaXRlcikpIHsKKwkJcmV0ID0gUFRSX0VSUihzcmNfaXRl cik7CisJCWdvdG8gb3V0X3NyY19pdGVyOwogCX0KLQltYigpOwotb3V0MjoKLQlvbGRfY29weSA9 ICpvbGRfbWVtOwogCi0JdHRtX2JvX2Fzc2lnbl9tZW0oYm8sIG5ld19tZW0pOwotCi0JaWYgKCFt YW4tPnVzZV90dCkKLQkJdHRtX2JvX3R0X2Rlc3Ryb3koYm8pOworCXR0bV9tb3ZlX21lbWNweShi bywgZHN0X21lbS0+bnVtX3BhZ2VzLCBkc3RfaXRlciwgc3JjX2l0ZXIpOworCXNyY19jb3B5ID0g KnNyY19tZW07CisJdHRtX2JvX21vdmVfc3luY19jbGVhbnVwKGJvLCBkc3RfbWVtKTsKIAotb3V0 MToKLQl0dG1fcmVzb3VyY2VfaW91bm1hcChiZGV2LCBvbGRfbWVtLCBuZXdfaW9tYXApOwotb3V0 OgotCXR0bV9yZXNvdXJjZV9pb3VubWFwKGJkZXYsICZvbGRfY29weSwgb2xkX2lvbWFwKTsKKwlp ZiAoIXNyY19pdGVyLT5vcHMtPm1hcHNfdHQpCisJCXR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvX2Zp bmkoJl9zcmNfaXRlci5pbywgYmRldiwgJnNyY19jb3B5KTsKK291dF9zcmNfaXRlcjoKKwlpZiAo IWRzdF9pdGVyLT5vcHMtPm1hcHNfdHQpCisJCXR0bV9rbWFwX2l0ZXJfbGluZWFyX2lvX2Zpbmko Jl9kc3RfaXRlci5pbywgYmRldiwgZHN0X21lbSk7CiAKLQkvKgotCSAqIE9uIGVycm9yLCBrZWVw IHRoZSBtbSBub2RlIQotCSAqLwotCWlmICghcmV0KQotCQl0dG1fcmVzb3VyY2VfZnJlZShibywg Jm9sZF9jb3B5KTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTCh0dG1fYm9fbW92ZV9t ZW1jcHkpOwpAQCAtMzM2LDI3ICsyNzIsNyBAQCBwZ3Byb3RfdCB0dG1faW9fcHJvdChzdHJ1Y3Qg dHRtX2J1ZmZlcl9vYmplY3QgKmJvLCBzdHJ1Y3QgdHRtX3Jlc291cmNlICpyZXMsCiAJbWFuID0g dHRtX21hbmFnZXJfdHlwZShiby0+YmRldiwgcmVzLT5tZW1fdHlwZSk7CiAJY2FjaGluZyA9IG1h bi0+dXNlX3R0ID8gYm8tPnR0bS0+Y2FjaGluZyA6IHJlcy0+YnVzLmNhY2hpbmc7CiAKLQkvKiBD YWNoZWQgbWFwcGluZ3MgbmVlZCBubyBhZGp1c3RtZW50ICovCi0JaWYgKGNhY2hpbmcgPT0gdHRt X2NhY2hlZCkKLQkJcmV0dXJuIHRtcDsKLQotI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmlu ZWQoX194ODZfNjRfXykKLQlpZiAoY2FjaGluZyA9PSB0dG1fd3JpdGVfY29tYmluZWQpCi0JCXRt cCA9IHBncHJvdF93cml0ZWNvbWJpbmUodG1wKTsKLQllbHNlIGlmIChib290X2NwdV9kYXRhLng4 NiA+IDMpCi0JCXRtcCA9IHBncHJvdF9ub25jYWNoZWQodG1wKTsKLSNlbmRpZgotI2lmIGRlZmlu ZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykg fHwgXAotICAgIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19taXBzX18pCi0JaWYg KGNhY2hpbmcgPT0gdHRtX3dyaXRlX2NvbWJpbmVkKQotCQl0bXAgPSBwZ3Byb3Rfd3JpdGVjb21i aW5lKHRtcCk7Ci0JZWxzZQotCQl0bXAgPSBwZ3Byb3Rfbm9uY2FjaGVkKHRtcCk7Ci0jZW5kaWYK LSNpZiBkZWZpbmVkKF9fc3BhcmNfXykKLQl0bXAgPSBwZ3Byb3Rfbm9uY2FjaGVkKHRtcCk7Ci0j ZW5kaWYKLQlyZXR1cm4gdG1wOworCXJldHVybiB0dG1fcHJvdF9mcm9tX2NhY2hpbmcoY2FjaGlu ZywgdG1wKTsKIH0KIEVYUE9SVF9TWU1CT0wodHRtX2lvX3Byb3QpOwogCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tb2R1bGUuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRt X21vZHVsZS5jCmluZGV4IDU2YjBlZmRiYTFhOS4uOTk3YzQ1OGY2OGE5IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tb2R1bGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRt L3R0bV9tb2R1bGUuYwpAQCAtMzEsMTIgKzMxLDQ3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wZ3Rh YmxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2Zz Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9zeXNmcy5oPgorI2luY2x1ZGUgPGRybS90dG0vdHRtX2Nh Y2hpbmcuaD4KIAogI2luY2x1ZGUgInR0bV9tb2R1bGUuaCIKIAorLyoqCisgKiB0dG1fcHJvdF9m cm9tX2NhY2hpbmcgLSBNb2RpZnkgdGhlIHBhZ2UgcHJvdGVjdGlvbiBhY2NvcmRpbmcgdG8gdGhl CisgKiB0dG0gY2FjaW5nIG1vZGUKKyAqIEBjYWNoaW5nOiBUaGUgdHRtIGNhY2hpbmcgbW9kZQor ICogQHRtcDogVGhlIG9yaWdpbmFsIHBhZ2UgcHJvdGVjdGlvbgorICoKKyAqIFJldHVybjogVGhl IG1vZGlmaWVkIHBhZ2UgcHJvdGVjdGlvbgorICovCitwZ3Byb3RfdCB0dG1fcHJvdF9mcm9tX2Nh Y2hpbmcoZW51bSB0dG1fY2FjaGluZyBjYWNoaW5nLCBwZ3Byb3RfdCB0bXApCit7CisJLyogQ2Fj aGVkIG1hcHBpbmdzIG5lZWQgbm8gYWRqdXN0bWVudCAqLworCWlmIChjYWNoaW5nID09IHR0bV9j YWNoZWQpCisJCXJldHVybiB0bXA7CisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVk KF9feDg2XzY0X18pCisJaWYgKGNhY2hpbmcgPT0gdHRtX3dyaXRlX2NvbWJpbmVkKQorCQl0bXAg PSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHRtcCk7CisJZWxzZSBpZiAoYm9vdF9jcHVfZGF0YS54ODYg PiAzKQorCQl0bXAgPSBwZ3Byb3Rfbm9uY2FjaGVkKHRtcCk7CisjZW5kaWYKKyNpZiBkZWZpbmVk KF9faWE2NF9fKSB8fCBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pIHx8 IFwKKwlkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fbWlwc19fKQorCWlmIChjYWNo aW5nID09IHR0bV93cml0ZV9jb21iaW5lZCkKKwkJdG1wID0gcGdwcm90X3dyaXRlY29tYmluZSh0 bXApOworCWVsc2UKKwkJdG1wID0gcGdwcm90X25vbmNhY2hlZCh0bXApOworI2VuZGlmCisjaWYg ZGVmaW5lZChfX3NwYXJjX18pCisJdG1wID0gcGdwcm90X25vbmNhY2hlZCh0bXApOworI2VuZGlm CisJcmV0dXJuIHRtcDsKK30KKwogc3RydWN0IGRlbnRyeSAqdHRtX2RlYnVnZnNfcm9vdDsKIAog c3RhdGljIGludCBfX2luaXQgdHRtX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS90dG0vdHRtX3Jlc291cmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9yZXNvdXJj ZS5jCmluZGV4IDU5ZTJiNzE1N2U0MS4uOTMxYmNkMWE5YjliIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vdHRtL3R0bV9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRt X3Jlc291cmNlLmMKQEAgLTIyLDYgKzIyLDEwIEBACiAgKiBBdXRob3JzOiBDaHJpc3RpYW4gS8O2 bmlnCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYtbWFwLmg+CisjaW5jbHVkZSA8bGlu dXgvaW8tbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKICNpbmNs dWRlIDxkcm0vdHRtL3R0bV9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPGRybS90dG0vdHRtX2JvX2Ry aXZlci5oPgogCkBAIC0xNDcsMyArMTUxLDE5MiBAQCB2b2lkIHR0bV9yZXNvdXJjZV9tYW5hZ2Vy X2RlYnVnKHN0cnVjdCB0dG1fcmVzb3VyY2VfbWFuYWdlciAqbWFuLAogCQltYW4tPmZ1bmMtPmRl YnVnKG1hbiwgcCk7CiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9yZXNvdXJjZV9tYW5hZ2VyX2RlYnVn KTsKKworc3RhdGljIHZvaWQgdHRtX2ttYXBfaXRlcl9pb21hcF9tYXBfbG9jYWwoc3RydWN0IHR0 bV9rbWFwX2l0ZXIgKml0ZXIsCisJCQkJCSAgc3RydWN0IGRtYV9idWZfbWFwICpkbWFwLAorCQkJ CQkgIHBnb2ZmX3QgaSkKK3sKKwlzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9pb21hcCAqaXRlcl9pbyA9 CisJCWNvbnRhaW5lcl9vZihpdGVyLCB0eXBlb2YoKml0ZXJfaW8pLCBiYXNlKTsKKwl2b2lkIF9f aW9tZW0gKmFkZHI7CisKK3JldHJ5OgorCXdoaWxlIChpID49IGl0ZXJfaW8tPmNhY2hlLmVuZCkg eworCQlpdGVyX2lvLT5jYWNoZS5zZyA9IGl0ZXJfaW8tPmNhY2hlLnNnID8KKwkJCXNnX25leHQo aXRlcl9pby0+Y2FjaGUuc2cpIDogaXRlcl9pby0+c3QtPnNnbDsKKwkJaXRlcl9pby0+Y2FjaGUu aSA9IGl0ZXJfaW8tPmNhY2hlLmVuZDsKKwkJaXRlcl9pby0+Y2FjaGUuZW5kICs9IHNnX2RtYV9s ZW4oaXRlcl9pby0+Y2FjaGUuc2cpID4+CisJCQlQQUdFX1NISUZUOworCQlpdGVyX2lvLT5jYWNo ZS5vZmZzID0gc2dfZG1hX2FkZHJlc3MoaXRlcl9pby0+Y2FjaGUuc2cpIC0KKwkJCWl0ZXJfaW8t PnN0YXJ0OworCX0KKworCWlmIChpIDwgaXRlcl9pby0+Y2FjaGUuaSkgeworCQlpdGVyX2lvLT5j YWNoZS5lbmQgPSAwOworCQlpdGVyX2lvLT5jYWNoZS5zZyA9IE5VTEw7CisJCWdvdG8gcmV0cnk7 CisJfQorCisJYWRkciA9IGlvX21hcHBpbmdfbWFwX2xvY2FsX3djKGl0ZXJfaW8tPmlvbWFwLCBp dGVyX2lvLT5jYWNoZS5vZmZzICsKKwkJCQkgICAgICAgKCgocmVzb3VyY2Vfc2l6ZV90KWkgLSBp dGVyX2lvLT5jYWNoZS5pKQorCQkJCQk8PCBQQUdFX1NISUZUKSk7CisJZG1hX2J1Zl9tYXBfc2V0 X3ZhZGRyX2lvbWVtKGRtYXAsIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCB0dG1fa21hcF9pdGVy X2lvbWFwX3VubWFwX2xvY2FsKHN0cnVjdCB0dG1fa21hcF9pdGVyICppdGVyLAorCQkJCQkgICAg c3RydWN0IGRtYV9idWZfbWFwICptYXApCit7CisJaW9fbWFwcGluZ191bm1hcF9sb2NhbChtYXAt PnZhZGRyX2lvbWVtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0dG1fa21hcF9pdGVyX29w cyB0dG1fa21hcF9pdGVyX2lvX29wcyA9IHsKKwkubWFwX2xvY2FsID0gIHR0bV9rbWFwX2l0ZXJf aW9tYXBfbWFwX2xvY2FsLAorCS51bm1hcF9sb2NhbCA9IHR0bV9rbWFwX2l0ZXJfaW9tYXBfdW5t YXBfbG9jYWwsCisJLm1hcHNfdHQgPSBmYWxzZSwKK307CisKKy8qKgorICogdHRtX2ttYXBfaXRl cl9pb21hcF9pbml0IC0gSW5pdGlhbGl6ZSBhIHN0cnVjdCB0dG1fa21hcF9pdGVyX2lvbWFwCisg KiBAaXRlcl9pbzogVGhlIHN0cnVjdCB0dG1fa21hcF9pdGVyX2lvbWFwIHRvIGluaXRpYWxpemUu CisgKiBAaW9tYXA6IFRoZSBzdHJ1Y3QgaW9fbWFwcGluZyByZXByZXNlbnRpbmcgdGhlIHVuZGVy bHlpbmcgbGluZWFyIGlvX21lbW9yeS4KKyAqIEBzdDogc2dfdGFibGUgaW50byBAaW9tYXAsIHJl cHJlc2VudGluZyB0aGUgbWVtb3J5IG9mIHRoZSBzdHJ1Y3QKKyAqIHR0bV9yZXNvdXJjZS4KKyAq IEBzdGFydDogT2Zmc2V0IHRoYXQgbmVlZHMgdG8gYmUgc3VidHJhY3RlZCBmcm9tIEBzdCB0byBt YWtlCisgKiBzZ19kbWFfYWRkcmVzcyhzdC0+c2dsKSAtIEBzdGFydCA9PSAwIGZvciBAaW9tYXAg c3RhcnQuCisgKgorICogUmV0dXJuOiBQb2ludGVyIHRvIHRoZSBlbWJlZGRlZCBzdHJ1Y3QgdHRt X2ttYXBfaXRlci4KKyAqLworc3RydWN0IHR0bV9rbWFwX2l0ZXIgKgordHRtX2ttYXBfaXRlcl9p b21hcF9pbml0KHN0cnVjdCB0dG1fa21hcF9pdGVyX2lvbWFwICppdGVyX2lvLAorCQkJIHN0cnVj dCBpb19tYXBwaW5nICppb21hcCwKKwkJCSBzdHJ1Y3Qgc2dfdGFibGUgKnN0LAorCQkJIHJlc291 cmNlX3NpemVfdCBzdGFydCkKK3sKKwlpdGVyX2lvLT5iYXNlLm9wcyA9ICZ0dG1fa21hcF9pdGVy X2lvX29wczsKKwlpdGVyX2lvLT5pb21hcCA9IGlvbWFwOworCWl0ZXJfaW8tPnN0ID0gc3Q7CisJ aXRlcl9pby0+c3RhcnQgPSBzdGFydDsKKwltZW1zZXQoJml0ZXJfaW8tPmNhY2hlLCAwLCBzaXpl b2YoaXRlcl9pby0+Y2FjaGUpKTsKKworCXJldHVybiAmaXRlcl9pby0+YmFzZTsKK30KK0VYUE9S VF9TWU1CT0wodHRtX2ttYXBfaXRlcl9pb21hcF9pbml0KTsKKworLyoqCisgKiBET0M6IExpbmVh ciBpbyBpdGVyYXRvcgorICoKKyAqIFRoaXMgY29kZSBzaG91bGQgZGllIGluIHRoZSBub3QgdG9v IG5lYXIgZnV0dXJlLiBCZXN0IHdvdWxkIGJlIGlmIHdlIGNvdWxkCisgKiBtYWtlIGlvLW1hcHBp bmcgdXNlIG1lbXJlbWFwIGZvciBhbGwgaW8gbWVtb3J5LCBhbmQgaGF2ZSBtZW1yZW1hcAorICog aW1wbGVtZW50IGEga21hcF9sb2NhbCBmdW5jdGlvbmFsaXR5LiBXZSBjb3VsZCB0aGVuIHN0cmlw IGEgaHVnZSBhbW91bnQgb2YKKyAqIGNvZGUuIFRoZXNlIGxpbmVhciBpbyBpdGVyYXRvcnMgYXJl IGltcGxlbWVudGVkIHRvIG1pbWljIG9sZCBmdW5jdGlvbmFsaXR5LAorICogYW5kIHRoZXkgZG9u J3QgdXNlIGttYXBfbG9jYWwgc2VtYW50aWNzIGF0IGFsbCBpbnRlcm5hbGx5LiBSYXRoZXIgaW9y ZW1hcCBvcgorICogZnJpZW5kcywgYW5kIGF0IGxlYXN0IG9uIDMyLWJpdCB0aGV5IGFkZCBnbG9i YWwgVExCIGZsdXNoZXMgYW5kIHBvaW50cworICogb2YgZmFpbHVyZS4KKyAqLworCitzdGF0aWMg dm9pZCB0dG1fa21hcF9pdGVyX2xpbmVhcl9pb19tYXBfbG9jYWwoc3RydWN0IHR0bV9rbWFwX2l0 ZXIgKml0ZXIsCisJCQkJCSAgICAgIHN0cnVjdCBkbWFfYnVmX21hcCAqZG1hcCwKKwkJCQkJICAg ICAgcGdvZmZfdCBpKQoreworCXN0cnVjdCB0dG1fa21hcF9pdGVyX2xpbmVhcl9pbyAqaXRlcl9p byA9CisJCWNvbnRhaW5lcl9vZihpdGVyLCB0eXBlb2YoKml0ZXJfaW8pLCBiYXNlKTsKKworCSpk bWFwID0gaXRlcl9pby0+ZG1hcDsKKwlkbWFfYnVmX21hcF9pbmNyKGRtYXAsIGkgKiBQQUdFX1NJ WkUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR0bV9rbWFwX2l0ZXJfb3BzIHR0bV9rbWFw X2l0ZXJfbGluZWFyX2lvX29wcyA9IHsKKwkubWFwX2xvY2FsID0gIHR0bV9rbWFwX2l0ZXJfbGlu ZWFyX2lvX21hcF9sb2NhbCwKKwkubWFwc190dCA9IGZhbHNlLAorfTsKKworLyoqCisgKiB0dG1f a21hcF9pdGVyX2xpbmVhcl9pb19pbml0IC0gSW5pdGlhbGl6ZSBhbiBpdGVyYXRvciBmb3IgbGlu ZWFyIGlvIG1lbW9yeQorICogQGl0ZXJfaW86IFRoZSBpdGVyYXRvciB0byBpbml0aWFsaXplCisg KiBAYmRldjogVGhlIFRUTSBkZXZpY2UKKyAqIEBtZW06IFRoZSB0dG0gcmVzb3VyY2UgcmVwcmVz ZW50aW5nIHRoZSBpb21hcC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBpbnRlcm5hbCBU VE0gdXNlIG9ubHkuIEl0IHNldHMgdXAgYSBtZW1jcHkga21hcCBpdGVyYXRvcgorICogcG9pbnRp bmcgYXQgYSBsaW5lYXIgY2h1bmsgb2YgaW8gbWVtb3J5LgorICoKKyAqIFJldHVybjogQSBwb2lu dGVyIHRvIHRoZSBlbWJlZGRlZCBzdHJ1Y3QgdHRtX2ttYXBfaXRlciBvciBlcnJvciBwb2ludGVy IG9uCisgKiBmYWlsdXJlLgorICovCitzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqCit0dG1fa21hcF9p dGVyX2xpbmVhcl9pb19pbml0KHN0cnVjdCB0dG1fa21hcF9pdGVyX2xpbmVhcl9pbyAqaXRlcl9p bywKKwkJCSAgICAgc3RydWN0IHR0bV9kZXZpY2UgKmJkZXYsCisJCQkgICAgIHN0cnVjdCB0dG1f cmVzb3VyY2UgKm1lbSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdHRtX21lbV9pb19yZXNlcnZl KGJkZXYsIG1lbSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZXJyOworCWlmICghbWVtLT5idXMu aXNfaW9tZW0pIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfaW9fZnJlZTsKKwl9CisK KwlpZiAobWVtLT5idXMuYWRkcikgeworCQlkbWFfYnVmX21hcF9zZXRfdmFkZHIoJml0ZXJfaW8t PmRtYXAsIG1lbS0+YnVzLmFkZHIpOworCQlpdGVyX2lvLT5uZWVkc191bm1hcCA9IGZhbHNlOwor CX0gZWxzZSB7CisJCXNpemVfdCBidXNfc2l6ZSA9IChzaXplX3QpbWVtLT5udW1fcGFnZXMgPDwg UEFHRV9TSElGVDsKKworCQlpdGVyX2lvLT5uZWVkc191bm1hcCA9IHRydWU7CisJCW1lbXNldCgm aXRlcl9pby0+ZG1hcCwgMCwgc2l6ZW9mKGl0ZXJfaW8tPmRtYXApKTsKKwkJaWYgKG1lbS0+YnVz LmNhY2hpbmcgPT0gdHRtX3dyaXRlX2NvbWJpbmVkKQorCQkJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRy X2lvbWVtKCZpdGVyX2lvLT5kbWFwLAorCQkJCQkJICAgIGlvcmVtYXBfd2MobWVtLT5idXMub2Zm c2V0LAorCQkJCQkJCSAgICAgICBidXNfc2l6ZSkpOworCQllbHNlIGlmIChtZW0tPmJ1cy5jYWNo aW5nID09IHR0bV9jYWNoZWQpCisJCQlkbWFfYnVmX21hcF9zZXRfdmFkZHIoJml0ZXJfaW8tPmRt YXAsCisJCQkJCSAgICAgIG1lbXJlbWFwKG1lbS0+YnVzLm9mZnNldCwgYnVzX3NpemUsCisJCQkJ CQkgICAgICAgTUVNUkVNQVBfV0IgfAorCQkJCQkJICAgICAgIE1FTVJFTUFQX1dUIHwKKwkJCQkJ CSAgICAgICBNRU1SRU1BUF9XQykpOworCisJCS8qIElmIHVuY2FjaGVkIHJlcXVlc3RlZCBvciBp ZiBtYXBwaW5nIGNhY2hlZCBvciB3YyBmYWlsZWQgKi8KKwkJaWYgKGRtYV9idWZfbWFwX2lzX251 bGwoJml0ZXJfaW8tPmRtYXApKQorCQkJZG1hX2J1Zl9tYXBfc2V0X3ZhZGRyX2lvbWVtKCZpdGVy X2lvLT5kbWFwLAorCQkJCQkJICAgIGlvcmVtYXAobWVtLT5idXMub2Zmc2V0LAorCQkJCQkJCSAg ICBidXNfc2l6ZSkpOworCisJCWlmIChkbWFfYnVmX21hcF9pc19udWxsKCZpdGVyX2lvLT5kbWFw KSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2lvX2ZyZWU7CisJCX0KKwl9CisK KwlpdGVyX2lvLT5iYXNlLm9wcyA9ICZ0dG1fa21hcF9pdGVyX2xpbmVhcl9pb19vcHM7CisJcmV0 dXJuICZpdGVyX2lvLT5iYXNlOworCitvdXRfaW9fZnJlZToKKwl0dG1fbWVtX2lvX2ZyZWUoYmRl diwgbWVtKTsKK291dF9lcnI6CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKworLyoqCisgKiB0 dG1fa21hcF9pdGVyX2xpbmVhcl9pb19maW5pIC0gQ2xlYW4gdXAgYW4gaXRlcmF0b3IgZm9yIGxp bmVhciBpbyBtZW1vcnkKKyAqIEBpdGVyX2lvOiBUaGUgaXRlcmF0b3IgdG8gaW5pdGlhbGl6ZQor ICogQGJkZXY6IFRoZSBUVE0gZGV2aWNlCisgKiBAbWVtOiBUaGUgdHRtIHJlc291cmNlIHJlcHJl c2VudGluZyB0aGUgaW9tYXAuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgaW50ZXJuYWwg VFRNIHVzZSBvbmx5LiBJdCBjbGVhbnMgdXAgYSBtZW1jcHkga21hcAorICogaXRlcmF0b3IgaW5p dGlhbGl6ZWQgYnkgdHRtX2ttYXBfaXRlcl9saW5lYXJfaW9faW5pdC4KKyAqLwordm9pZAordHRt X2ttYXBfaXRlcl9saW5lYXJfaW9fZmluaShzdHJ1Y3QgdHRtX2ttYXBfaXRlcl9saW5lYXJfaW8g Kml0ZXJfaW8sCisJCQkgICAgIHN0cnVjdCB0dG1fZGV2aWNlICpiZGV2LAorCQkJICAgICBzdHJ1 Y3QgdHRtX3Jlc291cmNlICptZW0pCit7CisJaWYgKGl0ZXJfaW8tPm5lZWRzX3VubWFwICYmIGRt YV9idWZfbWFwX2lzX3NldCgmaXRlcl9pby0+ZG1hcCkpIHsKKwkJaWYgKGl0ZXJfaW8tPmRtYXAu aXNfaW9tZW0pCisJCQlpb3VubWFwKGl0ZXJfaW8tPmRtYXAudmFkZHJfaW9tZW0pOworCQllbHNl CisJCQltZW11bm1hcChpdGVyX2lvLT5kbWFwLnZhZGRyKTsKKwl9CisKKwl0dG1fbWVtX2lvX2Zy ZWUoYmRldiwgbWVtKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0 LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCmluZGV4IDUzOWUwMjMyY2IzYi4uMGU0 MTIyNzExNmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAgLTQzMywzICs0MzMsNDUgQEAgdm9pZCB0 dG1fdHRfbWdyX2luaXQodW5zaWduZWQgbG9uZyBudW1fcGFnZXMsIHVuc2lnbmVkIGxvbmcgbnVt X2RtYTMyX3BhZ2VzKQogCWlmICghdHRtX2RtYTMyX3BhZ2VzX2xpbWl0KQogCQl0dG1fZG1hMzJf cGFnZXNfbGltaXQgPSBudW1fZG1hMzJfcGFnZXM7CiB9CisKK3N0YXRpYyB2b2lkIHR0bV9rbWFw X2l0ZXJfdHRfbWFwX2xvY2FsKHN0cnVjdCB0dG1fa21hcF9pdGVyICppdGVyLAorCQkJCSAgICAg ICBzdHJ1Y3QgZG1hX2J1Zl9tYXAgKmRtYXAsCisJCQkJICAgICAgIHBnb2ZmX3QgaSkKK3sKKwlz dHJ1Y3QgdHRtX2ttYXBfaXRlcl90dCAqaXRlcl90dCA9CisJCWNvbnRhaW5lcl9vZihpdGVyLCB0 eXBlb2YoKml0ZXJfdHQpLCBiYXNlKTsKKworCWRtYV9idWZfbWFwX3NldF92YWRkcihkbWFwLCBr bWFwX2xvY2FsX3BhZ2VfcHJvdChpdGVyX3R0LT50dC0+cGFnZXNbaV0sCisJCQkJCQkJIGl0ZXJf dHQtPnByb3QpKTsKK30KKworc3RhdGljIHZvaWQgdHRtX2ttYXBfaXRlcl90dF91bm1hcF9sb2Nh bChzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqaXRlciwKKwkJCQkJIHN0cnVjdCBkbWFfYnVmX21hcCAq bWFwKQoreworCWt1bm1hcF9sb2NhbChtYXAtPnZhZGRyKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCB0dG1fa21hcF9pdGVyX29wcyB0dG1fa21hcF9pdGVyX3R0X29wcyA9IHsKKwkubWFwX2xv Y2FsID0gdHRtX2ttYXBfaXRlcl90dF9tYXBfbG9jYWwsCisJLnVubWFwX2xvY2FsID0gdHRtX2tt YXBfaXRlcl90dF91bm1hcF9sb2NhbCwKKwkubWFwc190dCA9IHRydWUsCit9OworCisvKioKKyAq IHR0bV9rbWFwX2l0ZXJfdHRfaW5pdCAtIEluaXRpYWxpemUgYSBzdHJ1Y3QgdHRtX2ttYXBfaXRl cl90dAorICogQGl0ZXJfdHQ6IFRoZSBzdHJ1Y3QgdHRtX2ttYXBfaXRlcl90dCB0byBpbml0aWFs aXplLgorICogQHR0OiBTdHJ1Y3QgdHRtX3R0IGhvbGRpbmcgcGFnZSBwb2ludGVycyBvZiB0aGUg c3RydWN0IHR0bV9yZXNvdXJjZS4KKyAqCisgKiBSZXR1cm46IFBvaW50ZXIgdG8gdGhlIGVtYmVk ZGVkIHN0cnVjdCB0dG1fa21hcF9pdGVyLgorICovCitzdHJ1Y3QgdHRtX2ttYXBfaXRlciAqCit0 dG1fa21hcF9pdGVyX3R0X2luaXQoc3RydWN0IHR0bV9rbWFwX2l0ZXJfdHQgKml0ZXJfdHQsCisJ CSAgICAgIHN0cnVjdCB0dG1fdHQgKnR0KQoreworCWl0ZXJfdHQtPmJhc2Uub3BzID0gJnR0bV9r bWFwX2l0ZXJfdHRfb3BzOworCWl0ZXJfdHQtPnR0ID0gdHQ7CisJaXRlcl90dC0+cHJvdCA9IHR0 bV9wcm90X2Zyb21fY2FjaGluZyh0dC0+Y2FjaGluZywgUEFHRV9LRVJORUwpOworCisJcmV0dXJu ICZpdGVyX3R0LT5iYXNlOworfQorRVhQT1JUX1NZTUJPTCh0dG1fa21hcF9pdGVyX3R0X2luaXQp OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaCBiL2luY2x1ZGUv ZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKaW5kZXggZGJjY2FjOTU3ZjhmLi5mZGJlYWM3OGMyMzYg MTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKKysrIGIvaW5jbHVk ZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGRy bS90dG0vdHRtX2RldmljZS5oPgogCiAjaW5jbHVkZSAidHRtX2JvX2FwaS5oIgorI2luY2x1ZGUg InR0bV9rbWFwX2l0ZXIuaCIKICNpbmNsdWRlICJ0dG1fcGxhY2VtZW50LmgiCiAjaW5jbHVkZSAi dHRtX3R0LmgiCiAjaW5jbHVkZSAidHRtX3Bvb2wuaCIKQEAgLTI3Miw2ICsyNzMsMjMgQEAgaW50 IHR0bV9ib19tb3ZlX2FjY2VsX2NsZWFudXAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywK IAkJCSAgICAgIGJvb2wgcGlwZWxpbmUsCiAJCQkgICAgICBzdHJ1Y3QgdHRtX3Jlc291cmNlICpu ZXdfbWVtKTsKIAorLyoqCisgKiB0dG1fYm9fbW92ZV9hY2NlbF9jbGVhbnVwLgorICoKKyAqIEBi bzogQSBwb2ludGVyIHRvIGEgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0LgorICogQG5ld19tZW06 IHN0cnVjdCB0dG1fcmVzb3VyY2UgaW5kaWNhdGluZyB3aGVyZSB0byBtb3ZlLgorICoKKyAqIFNw ZWNpYWwgY2FzZSBvZiB0dG1fYm9fbW92ZV9hY2NlbF9jbGVhbnVwIHdoZXJlIHRoZSBibyBpcyBn dWFyYW50ZWVkCisgKiBieSB0aGUgY2FsbGVyIHRvIGJlIGlkbGUuIFR5cGljYWxseSB1c2VkIGFm dGVyIG1lbWNweSBidWZmZXIgbW92ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0dG1fYm9f bW92ZV9zeW5jX2NsZWFudXAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJCQkJICAg IHN0cnVjdCB0dG1fcmVzb3VyY2UgKm5ld19tZW0pCit7CisJaW50IHJldCA9IHR0bV9ib19tb3Zl X2FjY2VsX2NsZWFudXAoYm8sIE5VTEwsIHRydWUsIGZhbHNlLCBuZXdfbWVtKTsKKworCVdBUk5f T04ocmV0KTsKK30KKwogLyoqCiAgKiB0dG1fYm9fcGlwZWxpbmVfZ3V0dGluZy4KICAqCkBAIC0z MzIsNCArMzUwLDE0IEBAIGludCB0dG1fcmFuZ2VfbWFuX2luaXQoc3RydWN0IHR0bV9kZXZpY2Ug KmJkZXYsCiBpbnQgdHRtX3JhbmdlX21hbl9maW5pKHN0cnVjdCB0dG1fZGV2aWNlICpiZGV2LAog CQkgICAgICAgdW5zaWduZWQgdHlwZSk7CiAKK3ZvaWQgdHRtX21vdmVfbWVtY3B5KHN0cnVjdCB0 dG1fYnVmZmVyX29iamVjdCAqYm8sCisJCSAgICAgcGdvZmZfdCBudW1fcGFnZXMsCisJCSAgICAg 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==