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=-5.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,TVD_SPACE_RATIO autolearn=no 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 9AA55C433ED for ; Tue, 18 May 2021 21:08:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6B8BE611BD for ; Tue, 18 May 2021 21:08:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352347AbhERVJe (ORCPT ); Tue, 18 May 2021 17:09:34 -0400 Received: from mail.kernel.org ([198.145.29.99]:40612 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240342AbhERVJd (ORCPT ); Tue, 18 May 2021 17:09:33 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 05BFF6124C; Tue, 18 May 2021 21:08:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1621372094; bh=5F36P6GJ2cH+YLKS4+76wGDbLT++C5F+KKvgkYB/6wc=; h=Date:From:To:Subject:From; b=jEKbG5bEj7ElDZJHmgg4tWGDkrfk962Q4e+H+Sr4rwLQ+frmuVPh6G8UjDss647h9 2WkkBS1XT5vIABTeSgDO9u18c3jmjg3eeckXBUfdQrSLmwdnWIvnpUe2DgWQUrQEf5 98Mfctpw140GgLV0G0gzGbHiPVQwyOJLhLpB4DVA= Date: Tue, 18 May 2021 14:08:13 -0700 From: akpm@linux-foundation.org To: borntraeger@de.ibm.com, gerald.schaefer@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, hughd@google.com, kirill.shutemov@linux.intel.com, mgorman@suse.de, mhocko@suse.com, mm-commits@vger.kernel.org, shy828301@gmail.com, ying.huang@intel.com, ziy@nvidia.com Subject: + mm-thp-refactor-numa-fault-handling.patch added to -mm tree Message-ID: <20210518210813.pkGKWrMO5%akpm@linux-foundation.org> User-Agent: s-nail v14.8.16 MIME-Version: 1.0 Content-Type: application/octet-stream; charset=binary Content-Transfer-Encoding: base64 Precedence: bulk Reply-To: linux-kernel@vger.kernel.org List-ID: X-Mailing-List: mm-commits@vger.kernel.org ClRoZSBwYXRjaCB0aXRsZWQKICAgICBTdWJqZWN0OiBtbTogdGhwOiByZWZhY3RvciBOVU1BIGZh dWx0IGhhbmRsaW5nCmhhcyBiZWVuIGFkZGVkIHRvIHRoZSAtbW0gdHJlZS4gIEl0cyBmaWxlbmFt ZSBpcwogICAgIG1tLXRocC1yZWZhY3Rvci1udW1hLWZhdWx0LWhhbmRsaW5nLnBhdGNoCgpUaGlz IHBhdGNoIHNob3VsZCBzb29uIGFwcGVhciBhdAogICAgaHR0cHM6Ly9vemxhYnMub3JnL35ha3Bt L21tb3RzL2Jyb2tlbi1vdXQvbW0tdGhwLXJlZmFjdG9yLW51bWEtZmF1bHQtaGFuZGxpbmcucGF0 Y2gKYW5kIGxhdGVyIGF0CiAgICBodHRwczovL296bGFicy5vcmcvfmFrcG0vbW1vdG0vYnJva2Vu LW91dC9tbS10aHAtcmVmYWN0b3ItbnVtYS1mYXVsdC1oYW5kbGluZy5wYXRjaAoKQmVmb3JlIHlv dSBqdXN0IGdvIGFuZCBoaXQgInJlcGx5IiwgcGxlYXNlOgogICBhKSBDb25zaWRlciB3aG8gZWxz ZSBzaG91bGQgYmUgY2MnZWQKICAgYikgUHJlZmVyIHRvIGNjIGEgc3VpdGFibGUgbWFpbGluZyBs aXN0IGFzIHdlbGwKICAgYykgSWRlYWxseTogZmluZCB0aGUgb3JpZ2luYWwgcGF0Y2ggb24gdGhl IG1haWxpbmcgbGlzdCBhbmQgZG8gYQogICAgICByZXBseS10by1hbGwgdG8gdGhhdCwgYWRkaW5n IHN1aXRhYmxlIGFkZGl0aW9uYWwgY2MncwoKKioqIFJlbWVtYmVyIHRvIHVzZSBEb2N1bWVudGF0 aW9uL3Byb2Nlc3Mvc3VibWl0LWNoZWNrbGlzdC5yc3Qgd2hlbiB0ZXN0aW5nIHlvdXIgY29kZSAq KioKClRoZSAtbW0gdHJlZSBpcyBpbmNsdWRlZCBpbnRvIGxpbnV4LW5leHQgYW5kIGlzIHVwZGF0 ZWQKdGhlcmUgZXZlcnkgMy00IHdvcmtpbmcgZGF5cwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyb206IFlhbmcgU2hpIDxzaHk4MjgzMDFA Z21haWwuY29tPgpTdWJqZWN0OiBtbTogdGhwOiByZWZhY3RvciBOVU1BIGZhdWx0IGhhbmRsaW5n CgoQV2hlbiB0aGUgVEhQIE5VTUEgZmF1bHQgc3VwcG9ydCB3YXMgYWRkZWQgVEhQIG1pZ3JhdGlv biB3YXMgbm90IHN1cHBvcnRlZCB5ZXQuClNvIHRoZSBhZCBob2MgVEhQIG1pZ3JhdGlvbiB3YXMg aW1wbGVtZW50ZWQgaW4gTlVNQSBmYXVsdCBoYW5kbGluZy4gIFNpbmNlIHY0LjE0ClRIUCBtaWdy YXRpb24gaGFzIGJlZW4gc3VwcG9ydGVkIHNvIGl0IGRvZXNuJ3QgbWFrZSB0b28gbXVjaCBzZW5z ZSB0byBzdGlsbCBrZWVwCmFub3RoZXIgVEhQIG1pZ3JhdGlvbiBpbXBsZW1lbnRhdGlvbiByYXRo ZXIgdGhhbiB1c2luZyB0aGUgZ2VuZXJpYyBtaWdyYXRpb24KY29kZS4KClRoaXMgcGF0Y2ggcmV3 b3JrcyB0aGUgTlVNQSBmYXVsdCBoYW5kbGluZyB0byB1c2UgZ2VuZXJpYyBtaWdyYXRpb24KaW1w bGVtZW50YXRpb24gdG8gbWlncmF0ZSBtaXNwbGFjZWQgcGFnZS4gIFRoZXJlIGlzIG5vIGZ1bmN0 aW9uYWwgY2hhbmdlLgoKQWZ0ZXIgdGhlIHJlZmFjdG9yIHRoZSBmbG93IG9mIE5VTUEgZmF1bHQg aGFuZGxpbmcgbG9va3MganVzdCBsaWtlIGl0cwpQVEUgY291bnRlcnBhcnQ6CiAgQWNxdWlyZSBw dGwKICBQcmVwYXJlIGZvciBtaWdyYXRpb24gKGVsZXZhdGUgcGFnZSByZWZjb3VudCkKICBSZWxl YXNlIHB0bAogIElzb2xhdGUgcGFnZSBmcm9tIGxydSBhbmQgZWxldmF0ZSBwYWdlIHJlZmNvdW50 CiAgTWlncmF0ZSB0aGUgbWlzcGxhY2VkIFRIUAoKSWYgbWlncmF0aW9uIGZhaWxzIGp1c3QgcmVz dG9yZSB0aGUgb2xkIG5vcm1hbCBQTUQuCgpJbiB0aGUgb2xkIGNvZGUgYW5vbl92bWEgbG9jayB3 YXMgbmVlZGVkIHRvIHNlcmlhbGl6ZSBUSFAgbWlncmF0aW9uCmFnYWluc3QgVEhQIHNwbGl0LCBi dXQgc2luY2UgdGhlbiB0aGUgVEhQIGNvZGUgaGFzIGJlZW4gcmV3b3JrZWQgYSBsb3QsIGl0CnNl ZW1zIGFub25fdm1hIGxvY2sgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUgdG8gYXZvaWQgdGhlIHJh Y2UuCgpUaGUgcGFnZSByZWZjb3VudCBlbGV2YXRpb24gd2hlbiBob2xkaW5nIHB0bCBzaG91bGQg cHJldmVudCBmcm9tIFRIUApzcGxpdC4KClVzZSBtaWdyYXRlX21pc3BsYWNlZF9wYWdlKCkgZm9y IGJvdGggYmFzZSBwYWdlIGFuZCBUSFAgTlVNQSBoaW50aW5nIGZhdWx0CmFuZCByZW1vdmUgYWxs IHRoZSBkZWFkIGFuZCBkdXBsaWNhdGUgY29kZS4KCkxpbms6IGh0dHBzOi8vbGttbC5rZXJuZWwu b3JnL3IvMjAyMTA1MTgyMDA4MDEuNzQxMy00LXNoeTgyODMwMUBnbWFpbC5jb20KU2lnbmVkLW9m Zi1ieTogWWFuZyBTaGkgPHNoeTgyODMwMUBnbWFpbC5jb20+CkFja2VkLWJ5OiBNZWwgR29ybWFu IDxtZ29ybWFuQHN1c2UuZGU+CkNjOiBDaHJpc3RpYW4gQm9ybnRyYWVnZXIgPGJvcm50cmFlZ2Vy QGRlLmlibS5jb20+CkNjOiBHZXJhbGQgU2NoYWVmZXIgPGdlcmFsZC5zY2hhZWZlckBsaW51eC5p Ym0uY29tPgpDYzogSGVpa28gQ2Fyc3RlbnMgPGhjYUBsaW51eC5pYm0uY29tPgpDYzogSHVhbmcg WWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CkNjOiBIdWdoIERpY2tpbnMgPGh1Z2hkQGdvb2ds ZS5jb20+CkNjOiBLaXJpbGwgQS4gU2h1dGVtb3YgPGtpcmlsbC5zaHV0ZW1vdkBsaW51eC5pbnRl bC5jb20+CkNjOiBNaWNoYWwgSG9ja28gPG1ob2Nrb0BzdXNlLmNvbT4KQ2M6IFZhc2lseSBHb3Ji aWsgPGdvckBsaW51eC5pYm0uY29tPgpDYzogWmkgWWFuIDx6aXlAbnZpZGlhLmNvbT4KU2lnbmVk LW9mZi1ieTogQW5kcmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZz4KLS0tCgog aW5jbHVkZS9saW51eC9taWdyYXRlLmggfCAgIDIzIC0tLS0KIG1tL2h1Z2VfbWVtb3J5LmMgICAg ICAgIHwgIDE0NyArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBtbS9pbnRlcm5hbC5o ICAgICAgICAgICB8ICAgMTggLS0tCiBtbS9taWdyYXRlLmMgICAgICAgICAgICB8ICAxNzcgKysr KysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgNzkg aW5zZXJ0aW9ucygrKSwgMjg2IGRlbGV0aW9ucygtKQoKLS0tIGEvaW5jbHVkZS9saW51eC9taWdy YXRlLmh+bW0tdGhwLXJlZmFjdG9yLW51bWEtZmF1bHQtaGFuZGxpbmcKKysrIGEvaW5jbHVkZS9s aW51eC9taWdyYXRlLmgKQEAgLTk1LDE0ICs5NSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX0Ns ZWFyUGFnZU1vdmFibGUoc3QKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5H Ci1leHRlcm4gYm9vbCBwbWRfdHJhbnNfbWlncmF0aW5nKHBtZF90IHBtZCk7CiBleHRlcm4gaW50 IG1pZ3JhdGVfbWlzcGxhY2VkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJICBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSwgaW50IG5vZGUpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9v bCBwbWRfdHJhbnNfbWlncmF0aW5nKHBtZF90IHBtZCkKLXsKLQlyZXR1cm4gZmFsc2U7Ci19CiBz dGF0aWMgaW5saW5lIGludCBtaWdyYXRlX21pc3BsYWNlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdl LAogCQkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGludCBub2RlKQogewpAQCAtMTEw LDI0ICsxMDUsNiBAQCBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX21pc3BsYWNlZF9wYWdlCiB9 CiAjZW5kaWYgLyogQ09ORklHX05VTUFfQkFMQU5DSU5HICovCiAKLSNpZiBkZWZpbmVkKENPTkZJ R19OVU1BX0JBTEFOQ0lORykgJiYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Up Ci1leHRlcm4gaW50IG1pZ3JhdGVfbWlzcGxhY2VkX3RyYW5zaHVnZV9wYWdlKHN0cnVjdCBtbV9z dHJ1Y3QgKm1tLAotCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQlwbWRfdCAqcG1k LCBwbWRfdCBlbnRyeSwKLQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCXN0cnVjdCBwYWdl ICpwYWdlLCBpbnQgbm9kZSk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9taXNw bGFjZWRfdHJhbnNodWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQlzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCXBtZF90ICpwbWQsIHBtZF90IGVudHJ5LAotCQkJdW5zaWdu ZWQgbG9uZyBhZGRyZXNzLAotCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBub2RlKQotewotCXJl dHVybiAtRUFHQUlOOwotfQotI2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAmJiBDT05G SUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UqLwotCi0KICNpZmRlZiBDT05GSUdfTUlHUkFUSU9OCiAK IC8qCi0tLSBhL21tL2h1Z2VfbWVtb3J5LmN+bW0tdGhwLXJlZmFjdG9yLW51bWEtZmF1bHQtaGFu ZGxpbmcKKysrIGEvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTQyMCw5MiArMTQyMCwyMCBAQCBvdXQ6 CiB2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikK IHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+dm1hOwotCXBtZF90IHBtZCA9 IHZtZi0+b3JpZ19wbWQ7Ci0Jc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IE5VTEw7CisJcG1k X3Qgb2xkcG1kID0gdm1mLT5vcmlnX3BtZDsKKwlwbWRfdCBwbWQ7CiAJc3RydWN0IHBhZ2UgKnBh Z2U7CiAJdW5zaWduZWQgbG9uZyBoYWRkciA9IHZtZi0+YWRkcmVzcyAmIEhQQUdFX1BNRF9NQVNL OwotCWludCBwYWdlX25pZCA9IE5VTUFfTk9fTk9ERSwgdGhpc19uaWQgPSBudW1hX25vZGVfaWQo KTsKKwlpbnQgcGFnZV9uaWQgPSBOVU1BX05PX05PREU7CiAJaW50IHRhcmdldF9uaWQsIGxhc3Rf Y3B1cGlkID0gLTE7Ci0JYm9vbCBwYWdlX2xvY2tlZDsKIAlib29sIG1pZ3JhdGVkID0gZmFsc2U7 Ci0JYm9vbCB3YXNfd3JpdGFibGU7CisJYm9vbCB3YXNfd3JpdGFibGUgPSBwbWRfc2F2ZWR3cml0 ZShvbGRwbWQpOwogCWludCBmbGFncyA9IDA7CiAKIAl2bWYtPnB0bCA9IHBtZF9sb2NrKHZtYS0+ dm1fbW0sIHZtZi0+cG1kKTsKLQlpZiAodW5saWtlbHkoIXBtZF9zYW1lKHBtZCwgKnZtZi0+cG1k KSkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIHBvdGVudGlh bCBtaWdyYXRpb25zLCB3YWl0IGZvciBjb21wbGV0aW9uIGFuZCByZXRyeQotCSAqIHdpdGhvdXQg ZGlzcnVwdGluZyBOVU1BIGhpbnRpbmcgaW5mb3JtYXRpb24uIERvIG5vdCByZWxvY2sgYW5kCi0J ICogY2hlY2tfc2FtZSBhcyB0aGUgcGFnZSBtYXkgbm8gbG9uZ2VyIGJlIG1hcHBlZC4KLQkgKi8K LQlpZiAodW5saWtlbHkocG1kX3RyYW5zX21pZ3JhdGluZygqdm1mLT5wbWQpKSkgewotCQlwYWdl ID0gcG1kX3BhZ2UoKnZtZi0+cG1kKTsKLQkJaWYgKCFnZXRfcGFnZV91bmxlc3NfemVybyhwYWdl KSkKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJc3Bpbl91bmxvY2sodm1mLT5wdGwpOwotCQlwdXRf YW5kX3dhaXRfb25fcGFnZV9sb2NrZWQocGFnZSwgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQln b3RvIG91dDsKLQl9Ci0KLQlwYWdlID0gcG1kX3BhZ2UocG1kKTsKLQlCVUdfT04oaXNfaHVnZV96 ZXJvX3BhZ2UocGFnZSkpOwotCXBhZ2VfbmlkID0gcGFnZV90b19uaWQocGFnZSk7Ci0JbGFzdF9j cHVwaWQgPSBwYWdlX2NwdXBpZF9sYXN0KHBhZ2UpOwotCWNvdW50X3ZtX251bWFfZXZlbnQoTlVN QV9ISU5UX0ZBVUxUUyk7Ci0JaWYgKHBhZ2VfbmlkID09IHRoaXNfbmlkKSB7Ci0JCWNvdW50X3Zt X251bWFfZXZlbnQoTlVNQV9ISU5UX0ZBVUxUU19MT0NBTCk7Ci0JCWZsYWdzIHw9IFRORl9GQVVM VF9MT0NBTDsKLQl9Ci0KLQkvKiBTZWUgc2ltaWxhciBjb21tZW50IGluIGRvX251bWFfcGFnZSBm b3IgZXhwbGFuYXRpb24gKi8KLQlpZiAoIXBtZF9zYXZlZHdyaXRlKHBtZCkpCi0JCWZsYWdzIHw9 IFRORl9OT19HUk9VUDsKLQotCS8qCi0JICogQWNxdWlyZSB0aGUgcGFnZSBsb2NrIHRvIHNlcmlh bGlzZSBUSFAgbWlncmF0aW9ucyBidXQgYXZvaWQgZHJvcHBpbmcKLQkgKiBwYWdlX3RhYmxlX2xv Y2sgaWYgYXQgYWxsIHBvc3NpYmxlCi0JICovCi0JcGFnZV9sb2NrZWQgPSB0cnlsb2NrX3BhZ2Uo cGFnZSk7Ci0JdGFyZ2V0X25pZCA9IG1wb2xfbWlzcGxhY2VkKHBhZ2UsIHZtYSwgaGFkZHIpOwot CS8qIE1pZ3JhdGlvbiBjb3VsZCBoYXZlIHN0YXJ0ZWQgc2luY2UgdGhlIHBtZF90cmFuc19taWdy YXRpbmcgY2hlY2sgKi8KLQlpZiAoIXBhZ2VfbG9ja2VkKSB7Ci0JCXBhZ2VfbmlkID0gTlVNQV9O T19OT0RFOwotCQlpZiAoIWdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKQotCQkJZ290byBvdXRf dW5sb2NrOworCWlmICh1bmxpa2VseSghcG1kX3NhbWUob2xkcG1kLCAqdm1mLT5wbWQpKSkgewog CQlzcGluX3VubG9jayh2bWYtPnB0bCk7Ci0JCXB1dF9hbmRfd2FpdF9vbl9wYWdlX2xvY2tlZChw YWdlLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAodGFy Z2V0X25pZCA9PSBOVU1BX05PX05PREUpIHsKLQkJLyogVGhlcmUgYXJlIG5vIHBhcmFsbGVsIG1p Z3JhdGlvbnMgYW5kIHBhZ2UgaXMgaW4gdGhlIHJpZ2h0Ci0JCSAqIG5vZGUuIENsZWFyIHRoZSBu dW1hIGhpbnRpbmcgaW5mbyBpbiB0aGlzIHBtZC4KLQkJICovCi0JCWdvdG8gY2xlYXJfcG1kbnVt YTsKLQl9Ci0KLQkvKgotCSAqIFBhZ2UgaXMgbWlzcGxhY2VkLiBQYWdlIGxvY2sgc2VyaWFsaXNl cyBtaWdyYXRpb25zLiBBY3F1aXJlIGFub25fdm1hCi0JICogdG8gc2VyaWFsaXNlcyBzcGxpdHMK LQkgKi8KLQlnZXRfcGFnZShwYWdlKTsKLQlzcGluX3VubG9jayh2bWYtPnB0bCk7Ci0JYW5vbl92 bWEgPSBwYWdlX2xvY2tfYW5vbl92bWFfcmVhZChwYWdlKTsKLQotCS8qIENvbmZpcm0gdGhlIFBN RCBkaWQgbm90IGNoYW5nZSB3aGlsZSBwYWdlX3RhYmxlX2xvY2sgd2FzIHJlbGVhc2VkICovCi0J c3Bpbl9sb2NrKHZtZi0+cHRsKTsKLQlpZiAodW5saWtlbHkoIXBtZF9zYW1lKHBtZCwgKnZtZi0+ cG1kKSkpIHsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXB1dF9wYWdlKHBhZ2UpOwotCQlwYWdl X25pZCA9IE5VTUFfTk9fTk9ERTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCS8qIEJhaWwg aWYgd2UgZmFpbCB0byBwcm90ZWN0IGFnYWluc3QgVEhQIHNwbGl0cyBmb3IgYW55IHJlYXNvbiAq LwotCWlmICh1bmxpa2VseSghYW5vbl92bWEpKSB7Ci0JCXB1dF9wYWdlKHBhZ2UpOwotCQlwYWdl X25pZCA9IE5VTUFfTk9fTk9ERTsKLQkJZ290byBjbGVhcl9wbWRudW1hOwogCX0KIAogCS8qCkBA IC0xNTM0LDQzICsxNDYyLDYwIEBAIHZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfbnVtYV9wYWdlKHN0 cnVjdAogCQkJCQkgICAgICBoYWRkciArIEhQQUdFX1BNRF9TSVpFKTsKIAl9CiAKLQkvKgotCSAq IE1pZ3JhdGUgdGhlIFRIUCB0byB0aGUgcmVxdWVzdGVkIG5vZGUsIHJldHVybnMgd2l0aCBwYWdl IHVubG9ja2VkCi0JICogYW5kIGFjY2VzcyByaWdodHMgcmVzdG9yZWQuCi0JICovCisJcG1kID0g cG1kX21vZGlmeShvbGRwbWQsIHZtYS0+dm1fcGFnZV9wcm90KTsKKwlwYWdlID0gdm1fbm9ybWFs X3BhZ2VfcG1kKHZtYSwgaGFkZHIsIHBtZCk7CisJaWYgKCFwYWdlKSB7CisJCXNwaW5fdW5sb2Nr KHZtZi0+cHRsKTsKKwkJZ290byBvdXRfbWFwOworCX0KKworCS8qIFNlZSBzaW1pbGFyIGNvbW1l bnQgaW4gZG9fbnVtYV9wYWdlIGZvciBleHBsYW5hdGlvbiAqLworCWlmICghd2FzX3dyaXRhYmxl KQorCQlmbGFncyB8PSBUTkZfTk9fR1JPVVA7CisKKwlwYWdlX25pZCA9IHBhZ2VfdG9fbmlkKHBh Z2UpOworCWxhc3RfY3B1cGlkID0gcGFnZV9jcHVwaWRfbGFzdChwYWdlKTsKKwl0YXJnZXRfbmlk ID0gbnVtYV9taWdyYXRlX3ByZXAocGFnZSwgdm1hLCBoYWRkciwgcGFnZV9uaWQsCisJCQkJICAg ICAgICZmbGFncyk7CisKKwlpZiAodGFyZ2V0X25pZCA9PSBOVU1BX05PX05PREUpIHsKKwkJcHV0 X3BhZ2UocGFnZSk7CisJCWdvdG8gb3V0X21hcDsKKwl9CisKIAlzcGluX3VubG9jayh2bWYtPnB0 bCk7CiAKLQltaWdyYXRlZCA9IG1pZ3JhdGVfbWlzcGxhY2VkX3RyYW5zaHVnZV9wYWdlKHZtYS0+ dm1fbW0sIHZtYSwKLQkJCQl2bWYtPnBtZCwgcG1kLCB2bWYtPmFkZHJlc3MsIHBhZ2UsIHRhcmdl dF9uaWQpOworCW1pZ3JhdGVkID0gbWlncmF0ZV9taXNwbGFjZWRfcGFnZShwYWdlLCB2bWEsIHRh cmdldF9uaWQpOwogCWlmIChtaWdyYXRlZCkgewogCQlmbGFncyB8PSBUTkZfTUlHUkFURUQ7CiAJ CXBhZ2VfbmlkID0gdGFyZ2V0X25pZDsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlmbGFncyB8PSBU TkZfTUlHUkFURV9GQUlMOwotCi0JZ290byBvdXQ7Ci1jbGVhcl9wbWRudW1hOgotCUJVR19PTigh UGFnZUxvY2tlZChwYWdlKSk7Ci0Jd2FzX3dyaXRhYmxlID0gcG1kX3NhdmVkd3JpdGUocG1kKTsK LQlwbWQgPSBwbWRfbW9kaWZ5KHBtZCwgdm1hLT52bV9wYWdlX3Byb3QpOwotCXBtZCA9IHBtZF9t a3lvdW5nKHBtZCk7Ci0JaWYgKHdhc193cml0YWJsZSkKLQkJcG1kID0gcG1kX21rd3JpdGUocG1k KTsKLQlzZXRfcG1kX2F0KHZtYS0+dm1fbW0sIGhhZGRyLCB2bWYtPnBtZCwgcG1kKTsKLQl1cGRh dGVfbW11X2NhY2hlX3BtZCh2bWEsIHZtZi0+YWRkcmVzcywgdm1mLT5wbWQpOwotCXVubG9ja19w YWdlKHBhZ2UpOwotb3V0X3VubG9jazoKLQlzcGluX3VubG9jayh2bWYtPnB0bCk7CisJCXZtZi0+ cHRsID0gcG1kX2xvY2sodm1hLT52bV9tbSwgdm1mLT5wbWQpOworCQlpZiAodW5saWtlbHkoIXBt ZF9zYW1lKG9sZHBtZCwgKnZtZi0+cG1kKSkpIHsKKwkJCXNwaW5fdW5sb2NrKHZtZi0+cHRsKTsK KwkJCWdvdG8gb3V0OworCQl9CisJCWdvdG8gb3V0X21hcDsKKwl9CiAKIG91dDoKLQlpZiAoYW5v bl92bWEpCi0JCXBhZ2VfdW5sb2NrX2Fub25fdm1hX3JlYWQoYW5vbl92bWEpOwotCiAJaWYgKHBh Z2VfbmlkICE9IE5VTUFfTk9fTk9ERSkKIAkJdGFza19udW1hX2ZhdWx0KGxhc3RfY3B1cGlkLCBw YWdlX25pZCwgSFBBR0VfUE1EX05SLAogCQkJCWZsYWdzKTsKIAogCXJldHVybiAwOworCitvdXRf bWFwOgorCS8qIFJlc3RvcmUgdGhlIFBNRCAqLworCXBtZCA9IHBtZF9tb2RpZnkob2xkcG1kLCB2 bWEtPnZtX3BhZ2VfcHJvdCk7CisJcG1kID0gcG1kX21reW91bmcocG1kKTsKKwlpZiAod2FzX3dy aXRhYmxlKQorCQlwbWQgPSBwbWRfbWt3cml0ZShwbWQpOworCXNldF9wbWRfYXQodm1hLT52bV9t bSwgaGFkZHIsIHZtZi0+cG1kLCBwbWQpOworCXVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgdm1m LT5hZGRyZXNzLCB2bWYtPnBtZCk7CisJc3Bpbl91bmxvY2sodm1mLT5wdGwpOworCWdvdG8gb3V0 OwogfQogCiAvKgotLS0gYS9tbS9pbnRlcm5hbC5ofm1tLXRocC1yZWZhY3Rvci1udW1hLWZhdWx0 LWhhbmRsaW5nCisrKyBhL21tL2ludGVybmFsLmgKQEAgLTM2OSwyMyArMzY5LDYgQEAgZXh0ZXJu IHVuc2lnbmVkIGludCBtdW5sb2NrX3ZtYV9wYWdlKHN0cgogICovCiBleHRlcm4gdm9pZCBjbGVh cl9wYWdlX21sb2NrKHN0cnVjdCBwYWdlICpwYWdlKTsKIAotLyoKLSAqIG1sb2NrX21pZ3JhdGVf cGFnZSAtIGNhbGxlZCBvbmx5IGZyb20gbWlncmF0ZV9taXNwbGFjZWRfdHJhbnNodWdlX3BhZ2Uo KQotICogKGJlY2F1c2UgdGhhdCBkb2VzIG5vdCBnbyB0aHJvdWdoIHRoZSBmdWxsIHByb2NlZHVy ZSBvZiBtaWdyYXRpb24gcHRlcyk6Ci0gKiB0byBtaWdyYXRlIHRoZSBNbG9ja2VkIHBhZ2UgZmxh ZzsgdXBkYXRlIHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19taWdy YXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCWlm IChUZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKSkgewotCQlpbnQgbnJfcGFnZXMgPSB0aHBfbnJf cGFnZXMocGFnZSk7Ci0KLQkJLyogSG9sZGluZyBwbWQgbG9jaywgbm8gY2hhbmdlIGluIGlycSBj b250ZXh0OiBfX21vZCBpcyBzYWZlICovCi0JCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZShwYWdlX3pv bmUocGFnZSksIE5SX01MT0NLLCAtbnJfcGFnZXMpOwotCQlTZXRQYWdlTWxvY2tlZChuZXdwYWdl KTsKLQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHBhZ2Vfem9uZShuZXdwYWdlKSwgTlJfTUxPQ0ss IG5yX3BhZ2VzKTsKLQl9Ci19Ci0KIGV4dGVybiBwbWRfdCBtYXliZV9wbWRfbWt3cml0ZShwbWRf dCBwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIAogLyoKQEAgLTQzNiw3ICs0MTks NiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICptYXliZV91bmxvY2tfCiAjZWxzZSAvKiAh Q09ORklHX01NVSAqLwogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2VfbWxvY2soc3RydWN0 IHBhZ2UgKnBhZ2UpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIG1sb2NrX3ZtYV9wYWdlKHN0cnVj dCBwYWdlICpwYWdlKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19taWdyYXRlX3BhZ2Uo c3RydWN0IHBhZ2UgKm5ldywgc3RydWN0IHBhZ2UgKm9sZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZv aWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9u ZyBlbmQpCiB7CiB9Ci0tLSBhL21tL21pZ3JhdGUuY35tbS10aHAtcmVmYWN0b3ItbnVtYS1mYXVs dC1oYW5kbGluZworKysgYS9tbS9taWdyYXRlLmMKQEAgLTIwNDcsNiArMjA0NywyMyBAQCBzdGF0 aWMgc3RydWN0IHBhZ2UgKmFsbG9jX21pc3BsYWNlZF9kc3RfCiAJcmV0dXJuIG5ld3BhZ2U7CiB9 CiAKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfbWlzcGxhY2VkX2RzdF9wYWdlX3RocChzdHJ1 Y3QgcGFnZSAqcGFnZSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaW50IG5pZCA9 IChpbnQpIGRhdGE7CisJc3RydWN0IHBhZ2UgKm5ld3BhZ2U7CisKKwluZXdwYWdlID0gYWxsb2Nf cGFnZXNfbm9kZShuaWQsIChHRlBfVFJBTlNIVUdFX0xJR0hUIHwgX19HRlBfVEhJU05PREUpLAor CQkJCSAgIEhQQUdFX1BNRF9PUkRFUik7CisJaWYgKCFuZXdwYWdlKQorCQlnb3RvIG91dDsKKwor CXByZXBfdHJhbnNodWdlX3BhZ2UobmV3cGFnZSk7CisKK291dDoKKwlyZXR1cm4gbmV3cGFnZTsK K30KKwogc3RhdGljIGludCBudW1hbWlncmF0ZV9pc29sYXRlX3BhZ2UocGdfZGF0YV90ICpwZ2Rh dCwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJaW50IHBhZ2VfbHJ1OwpAQCAtMjA4NSwxMiArMjEw Miw2IEBAIHN0YXRpYyBpbnQgbnVtYW1pZ3JhdGVfaXNvbGF0ZV9wYWdlKHBnX2QKIAlyZXR1cm4g MTsKIH0KIAotYm9vbCBwbWRfdHJhbnNfbWlncmF0aW5nKHBtZF90IHBtZCkKLXsKLQlzdHJ1Y3Qg cGFnZSAqcGFnZSA9IHBtZF9wYWdlKHBtZCk7Ci0JcmV0dXJuIFBhZ2VMb2NrZWQocGFnZSk7Ci19 Ci0KIC8qCiAgKiBBdHRlbXB0IHRvIG1pZ3JhdGUgYSBtaXNwbGFjZWQgcGFnZSB0byB0aGUgc3Bl Y2lmaWVkIGRlc3RpbmF0aW9uCiAgKiBub2RlLiBDYWxsZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBh biBlbGV2YXRlZCByZWZlcmVuY2UgY291bnQgb24KQEAgLTIxMDMsNiArMjExNCwyMCBAQCBpbnQg bWlncmF0ZV9taXNwbGFjZWRfcGFnZShzdHJ1Y3QgcGFnZSAqCiAJaW50IGlzb2xhdGVkOwogCWlu dCBucl9yZW1haW5pbmc7CiAJTElTVF9IRUFEKG1pZ3JhdGVwYWdlcyk7CisJbmV3X3BhZ2VfdCAq bmV3OworCWJvb2wgY29tcG91bmQ7CisKKwkvKgorCSAqIFBURSBtYXBwZWQgVEhQIG9yIEh1Z2VU TEIgcGFnZSBjYW4ndCByZWFjaCBoZXJlIHNvIHRoZSBwYWdlIGNvdWxkCisJICogYmUgZWl0aGVy IGJhc2UgcGFnZSBvciBUSFAuICBBbmQgaXQgbXVzdCBiZSBoZWFkIHBhZ2UgaWYgaXQgaXMKKwkg KiBUSFAuCisJICovCisJY29tcG91bmQgPSBQYWdlVHJhbnNIdWdlKHBhZ2UpOworCisJaWYgKGNv bXBvdW5kKQorCQluZXcgPSBhbGxvY19taXNwbGFjZWRfZHN0X3BhZ2VfdGhwOworCWVsc2UKKwkJ bmV3ID0gYWxsb2NfbWlzcGxhY2VkX2RzdF9wYWdlOwogCiAJLyoKIAkgKiBEb24ndCBtaWdyYXRl IGZpbGUgcGFnZXMgdGhhdCBhcmUgbWFwcGVkIGluIG11bHRpcGxlIHByb2Nlc3NlcwpAQCAtMjEy NCw5ICsyMTQ5LDggQEAgaW50IG1pZ3JhdGVfbWlzcGxhY2VkX3BhZ2Uoc3RydWN0IHBhZ2UgKgog CQlnb3RvIG91dDsKIAogCWxpc3RfYWRkKCZwYWdlLT5scnUsICZtaWdyYXRlcGFnZXMpOwotCW5y X3JlbWFpbmluZyA9IG1pZ3JhdGVfcGFnZXMoJm1pZ3JhdGVwYWdlcywgYWxsb2NfbWlzcGxhY2Vk X2RzdF9wYWdlLAotCQkJCSAgICAgTlVMTCwgbm9kZSwgTUlHUkFURV9BU1lOQywKLQkJCQkgICAg IE1SX05VTUFfTUlTUExBQ0VEKTsKKwlucl9yZW1haW5pbmcgPSBtaWdyYXRlX3BhZ2VzKCZtaWdy YXRlcGFnZXMsICpuZXcsIE5VTEwsIG5vZGUsCisJCQkJICAgICBNSUdSQVRFX0FTWU5DLCBNUl9O VU1BX01JU1BMQUNFRCk7CiAJaWYgKG5yX3JlbWFpbmluZykgewogCQlpZiAoIWxpc3RfZW1wdHko Jm1pZ3JhdGVwYWdlcykpIHsKIAkJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwpAQCAtMjE0NSwxNDEg KzIxNjksNiBAQCBvdXQ6CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX05VTUFfQkFM QU5DSU5HICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19OVU1BX0JBTEFOQ0lORykgJiYgZGVmaW5l ZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpCi0vKgotICogTWlncmF0ZXMgYSBUSFAgdG8g YSBnaXZlbiB0YXJnZXQgbm9kZS4gcGFnZSBtdXN0IGJlIGxvY2tlZCBhbmQgaXMgdW5sb2NrZWQK LSAqIGJlZm9yZSByZXR1cm5pbmcuCi0gKi8KLWludCBtaWdyYXRlX21pc3BsYWNlZF90cmFuc2h1 Z2VfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSwKLQkJCQlwbWRfdCAqcG1kLCBwbWRfdCBlbnRyeSwKLQkJCQl1bnNpZ25lZCBsb25nIGFk ZHJlc3MsCi0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBub2RlKQotewotCXNwaW5sb2NrX3Qg KnB0bDsKLQlwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5vZGUpOwotCWludCBpc29sYXRl ZCA9IDA7Ci0Jc3RydWN0IHBhZ2UgKm5ld19wYWdlID0gTlVMTDsKLQlpbnQgcGFnZV9scnUgPSBw YWdlX2lzX2ZpbGVfbHJ1KHBhZ2UpOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyZXNzICYg SFBBR0VfUE1EX01BU0s7Ci0KLQluZXdfcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwKLQkJ KEdGUF9UUkFOU0hVR0VfTElHSFQgfCBfX0dGUF9USElTTk9ERSksCi0JCUhQQUdFX1BNRF9PUkRF Uik7Ci0JaWYgKCFuZXdfcGFnZSkKLQkJZ290byBvdXRfZmFpbDsKLQlwcmVwX3RyYW5zaHVnZV9w YWdlKG5ld19wYWdlKTsKLQotCWlzb2xhdGVkID0gbnVtYW1pZ3JhdGVfaXNvbGF0ZV9wYWdlKHBn ZGF0LCBwYWdlKTsKLQlpZiAoIWlzb2xhdGVkKSB7Ci0JCXB1dF9wYWdlKG5ld19wYWdlKTsKLQkJ Z290byBvdXRfZmFpbDsKLQl9Ci0KLQkvKiBQcmVwYXJlIGEgcGFnZSBhcyBhIG1pZ3JhdGlvbiB0 YXJnZXQgKi8KLQlfX1NldFBhZ2VMb2NrZWQobmV3X3BhZ2UpOwotCWlmIChQYWdlU3dhcEJhY2tl ZChwYWdlKSkKLQkJX19TZXRQYWdlU3dhcEJhY2tlZChuZXdfcGFnZSk7Ci0KLQkvKiBhbm9uIG1h cHBpbmcsIHdlIGNhbiBzaW1wbHkgY29weSBwYWdlLT5tYXBwaW5nIHRvIHRoZSBuZXcgcGFnZTog Ki8KLQluZXdfcGFnZS0+bWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7Ci0JbmV3X3BhZ2UtPmluZGV4 ID0gcGFnZS0+aW5kZXg7Ci0JLyogZmx1c2ggdGhlIGNhY2hlIGJlZm9yZSBjb3B5aW5nIHVzaW5n IHRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzICovCi0JZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBz dGFydCwgc3RhcnQgKyBIUEFHRV9QTURfU0laRSk7Ci0JbWlncmF0ZV9wYWdlX2NvcHkobmV3X3Bh Z2UsIHBhZ2UpOwotCVdBUk5fT04oUGFnZUxSVShuZXdfcGFnZSkpOwotCi0JLyogUmVjaGVjayB0 aGUgdGFyZ2V0IFBNRCAqLwotCXB0bCA9IHBtZF9sb2NrKG1tLCBwbWQpOwotCWlmICh1bmxpa2Vs eSghcG1kX3NhbWUoKnBtZCwgZW50cnkpIHx8ICFwYWdlX3JlZl9mcmVlemUocGFnZSwgMikpKSB7 Ci0JCXNwaW5fdW5sb2NrKHB0bCk7Ci0KLQkJLyogUmV2ZXJzZSBjaGFuZ2VzIG1hZGUgYnkgbWln cmF0ZV9wYWdlX2NvcHkoKSAqLwotCQlpZiAoVGVzdENsZWFyUGFnZUFjdGl2ZShuZXdfcGFnZSkp Ci0JCQlTZXRQYWdlQWN0aXZlKHBhZ2UpOwotCQlpZiAoVGVzdENsZWFyUGFnZVVuZXZpY3RhYmxl KG5ld19wYWdlKSkKLQkJCVNldFBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKLQotCQl1bmxvY2tfcGFn ZShuZXdfcGFnZSk7Ci0JCXB1dF9wYWdlKG5ld19wYWdlKTsJCS8qIEZyZWUgaXQgKi8KLQotCQkv KiBSZXRha2UgdGhlIGNhbGxlcnMgcmVmZXJlbmNlIGFuZCBwdXRiYWNrIG9uIExSVSAqLwotCQln ZXRfcGFnZShwYWdlKTsKLQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKLQkJbW9kX25vZGVfcGFn ZV9zdGF0ZShwYWdlX3BnZGF0KHBhZ2UpLAotCQkJIE5SX0lTT0xBVEVEX0FOT04gKyBwYWdlX2xy dSwgLUhQQUdFX1BNRF9OUik7Ci0KLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCWVudHJ5ID0g bWtfaHVnZV9wbWQobmV3X3BhZ2UsIHZtYS0+dm1fcGFnZV9wcm90KTsKLQllbnRyeSA9IG1heWJl X3BtZF9ta3dyaXRlKHBtZF9ta2RpcnR5KGVudHJ5KSwgdm1hKTsKLQotCS8qCi0JICogT3Zlcndy aXRlIHRoZSBvbGQgZW50cnkgdW5kZXIgcGFnZXRhYmxlIGxvY2sgYW5kIGVzdGFibGlzaAotCSAq IHRoZSBuZXcgUFRFLiBBbnkgcGFyYWxsZWwgR1VQIHdpbGwgZWl0aGVyIG9ic2VydmUgdGhlIG9s ZAotCSAqIHBhZ2UgYmxvY2tpbmcgb24gdGhlIHBhZ2UgbG9jaywgYmxvY2sgb24gdGhlIHBhZ2Ug dGFibGUKLQkgKiBsb2NrIG9yIG9ic2VydmUgdGhlIG5ldyBwYWdlLiBUaGUgU2V0UGFnZVVwdG9k YXRlIG9uIHRoZQotCSAqIG5ldyBwYWdlIGFuZCBwYWdlX2FkZF9uZXdfYW5vbl9ybWFwIGd1YXJh bnRlZSB0aGUgY29weSBpcwotCSAqIHZpc2libGUgYmVmb3JlIHRoZSBwYWdldGFibGUgdXBkYXRl LgotCSAqLwotCXBhZ2VfYWRkX2Fub25fcm1hcChuZXdfcGFnZSwgdm1hLCBzdGFydCwgdHJ1ZSk7 Ci0JLyoKLQkgKiBBdCB0aGlzIHBvaW50IHRoZSBwbWQgaXMgbnVtYS9wcm90bm9uZSAoaS5lLiBu b24gcHJlc2VudCkgYW5kIHRoZSBUTEIKLQkgKiBoYXMgYWxyZWFkeSBiZWVuIGZsdXNoZWQgZ2xv YmFsbHkuICBTbyBubyBUTEIgY2FuIGJlIGN1cnJlbnRseQotCSAqIGNhY2hpbmcgdGhpcyBub24g cHJlc2VudCBwbWQgbWFwcGluZy4gIFRoZXJlJ3Mgbm8gbmVlZCB0byBjbGVhciB0aGUKLQkgKiBw bWQgYmVmb3JlIGRvaW5nIHNldF9wbWRfYXQoKSwgbm9yIHRvIGZsdXNoIHRoZSBUTEIgYWZ0ZXIK LQkgKiBzZXRfcG1kX2F0KCkuICBDbGVhcmluZyB0aGUgcG1kIGhlcmUgd291bGQgaW50cm9kdWNl IGEgcmFjZQotCSAqIGNvbmRpdGlvbiBhZ2FpbnN0IE1BRFZfRE9OVE5FRUQsIGJlY2F1c2UgTUFE Vl9ET05UTkVFRCBvbmx5IGhvbGRzIHRoZQotCSAqIG1tYXBfbG9jayBmb3IgcmVhZGluZy4gIElm IHRoZSBwbWQgaXMgc2V0IHRvIE5VTEwgYXQgYW55IGdpdmVuIHRpbWUsCi0JICogTUFEVl9ET05U TkVFRCB3b24ndCB3YWl0IG9uIHRoZSBwbWQgbG9jayBhbmQgaXQnbGwgc2tpcCBjbGVhcmluZyB0 aGlzCi0JICogcG1kLgotCSAqLwotCXNldF9wbWRfYXQobW0sIHN0YXJ0LCBwbWQsIGVudHJ5KTsK LQl1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsICZlbnRyeSk7Ci0KLQlwYWdlX3Jl Zl91bmZyZWV6ZShwYWdlLCAyKTsKLQltbG9ja19taWdyYXRlX3BhZ2UobmV3X3BhZ2UsIHBhZ2Up OwotCXBhZ2VfcmVtb3ZlX3JtYXAocGFnZSwgdHJ1ZSk7Ci0Jc2V0X3BhZ2Vfb3duZXJfbWlncmF0 ZV9yZWFzb24obmV3X3BhZ2UsIE1SX05VTUFfTUlTUExBQ0VEKTsKLQotCXNwaW5fdW5sb2NrKHB0 bCk7Ci0KLQkvKiBUYWtlIGFuICJpc29sYXRlIiByZWZlcmVuY2UgYW5kIHB1dCBuZXcgcGFnZSBv biB0aGUgTFJVLiAqLwotCWdldF9wYWdlKG5ld19wYWdlKTsKLQlwdXRiYWNrX2xydV9wYWdlKG5l d19wYWdlKTsKLQotCXVubG9ja19wYWdlKG5ld19wYWdlKTsKLQl1bmxvY2tfcGFnZShwYWdlKTsK LQlwdXRfcGFnZShwYWdlKTsJCQkvKiBEcm9wIHRoZSBybWFwIHJlZmVyZW5jZSAqLwotCXB1dF9w YWdlKHBhZ2UpOwkJCS8qIERyb3AgdGhlIExSVSBpc29sYXRpb24gcmVmZXJlbmNlICovCi0KLQlj b3VudF92bV9ldmVudHMoUEdNSUdSQVRFX1NVQ0NFU1MsIEhQQUdFX1BNRF9OUik7Ci0JY291bnRf dm1fbnVtYV9ldmVudHMoTlVNQV9QQUdFX01JR1JBVEUsIEhQQUdFX1BNRF9OUik7Ci0KLQltb2Rf bm9kZV9wYWdlX3N0YXRlKHBhZ2VfcGdkYXQocGFnZSksCi0JCQlOUl9JU09MQVRFRF9BTk9OICsg cGFnZV9scnUsCi0JCQktSFBBR0VfUE1EX05SKTsKLQlyZXR1cm4gaXNvbGF0ZWQ7Ci0KLW91dF9m YWlsOgotCWNvdW50X3ZtX2V2ZW50cyhQR01JR1JBVEVfRkFJTCwgSFBBR0VfUE1EX05SKTsKLQlw dGwgPSBwbWRfbG9jayhtbSwgcG1kKTsKLQlpZiAocG1kX3NhbWUoKnBtZCwgZW50cnkpKSB7Ci0J CWVudHJ5ID0gcG1kX21vZGlmeShlbnRyeSwgdm1hLT52bV9wYWdlX3Byb3QpOwotCQlzZXRfcG1k X2F0KG1tLCBzdGFydCwgcG1kLCBlbnRyeSk7Ci0JCXVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwg YWRkcmVzcywgJmVudHJ5KTsKLQl9Ci0Jc3Bpbl91bmxvY2socHRsKTsKLQotb3V0X3VubG9jazoK LQl1bmxvY2tfcGFnZShwYWdlKTsKLQlwdXRfcGFnZShwYWdlKTsKLQlyZXR1cm4gMDsKLX0KLSNl bmRpZiAvKiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi8KLQogI2VuZGlmIC8qIENPTkZJR19OVU1B ICovCiAKICNpZmRlZiBDT05GSUdfREVWSUNFX1BSSVZBVEUKXwoKUGF0Y2hlcyBjdXJyZW50bHkg aW4gLW1tIHdoaWNoIG1pZ2h0IGJlIGZyb20gc2h5ODI4MzAxQGdtYWlsLmNvbSBhcmUKCm1tLXRo cC1jaGVjay10b3RhbF9tYXBjb3VudC1pbnN0ZWFkLW9mLXBhZ2VfbWFwY291bnQucGF0Y2gKbW0t bWVtb3J5LWFkZC1vcmlnX3BtZC10by1zdHJ1Y3Qtdm1fZmF1bHQucGF0Y2gKbW0tbWVtb3J5LW1h a2UtbnVtYV9taWdyYXRlX3ByZXAtbm9uLXN0YXRpYy5wYXRjaAptbS10aHAtcmVmYWN0b3ItbnVt YS1mYXVsdC1oYW5kbGluZy5wYXRjaAptbS1taWdyYXRlLWFjY291bnQtdGhwLW51bWEtbWlncmF0 aW9uLWNvdW50ZXJzLWNvcnJlY3RseS5wYXRjaAptbS1taWdyYXRlLWRvbnQtc3BsaXQtdGhwLWZv ci1taXNwbGFjZWQtbnVtYS1wYWdlLnBhdGNoCm1tLW1pZ3JhdGUtY2hlY2stbWFwY291bnQtZm9y LXRocC1pbnN0ZWFkLW9mLXJlZmNvdW50LnBhdGNoCm1tLXRocC1za2lwLW1ha2UtcG1kLXByb3Rf bm9uZS1pZi10aHAtbWlncmF0aW9uLWlzLW5vdC1zdXBwb3J0ZWQucGF0Y2gKCg==