From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6285816D9DD; Wed, 24 Apr 2024 17:36:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713980163; cv=none; b=YGEABNFvOnqQS6ywZTm3YZqmt2BAbDKfCOzuC2w7VAyUyHJ3FGk4wSP2ysjCsznq9M6jL7AJ/bjV/Me9AbqYVvwBa2VLBSnn+v80C+n+le9gBiqNMhP4rRaQ9iYFRJF10FfnzTYRyWyn2PMERnPV/CupP9hyIe/XF/PSkA20sbc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713980163; c=relaxed/simple; bh=TbPOTBmS82ynsL8h5jbyPu2ZW+Geh2onSqdzZPRv0KM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=ovUm21U6UTJXtghB9k3fhdgHbJhhPJ/REzt/qsNMlPQHONM+hV6zjpH7fVRAirC5HZ6i8fCQadKPEsQfKe1U3prTqUmiZhFi8+4fd5KCotcuczPSbhocscDkYyGQcacVdXjw4AFruTZpUy/MhnKV0K5ks06uFZ1zQTJZ53TYuQc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JKfgM0ft; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JKfgM0ft" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 98DCAC113CD; Wed, 24 Apr 2024 17:36:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713980162; bh=TbPOTBmS82ynsL8h5jbyPu2ZW+Geh2onSqdzZPRv0KM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JKfgM0ftEZPoaeN/UvrXohkYKSIHZLJOroZar5NdiSmXyCF6rKxzuOZdZ2KppyqRL oa9AT7DLeVcjxOkbrrxIUGMqd8TMkBZSUQV/sygfLlnSekXgyepCYG4FnrIrv9RD+e z/W1m431bgbvtK5653Ho5WlT53xwJqBvpfxu6iYipLNIECpOlexGRnchzCcSxBz0+A uc1aK8XzuECWRsmlEaulD3SslyUQLATMpBVF5noawuNy3R2o25eVC0VvDKTcedQjbT 3oZOFU3P5PYQJKcdG/OAJfXjzkHMK69D63s2C85XUG+vHbTYTInNzmaZsBPg6wTkUc BZJz42GXHai4A== From: Puranjay Mohan To: Catalin Marinas , Will Deacon , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Zi Shen Lim , Xu Kuohai , Florent Revest , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Cc: puranjay12@gmail.com Subject: [PATCH bpf-next v2 1/2] arm64, bpf: add internal-only MOV instruction to resolve per-CPU addrs Date: Wed, 24 Apr 2024 17:35:49 +0000 Message-Id: <20240424173550.16359-2-puranjay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240424173550.16359-1-puranjay@kernel.org> References: <20240424173550.16359-1-puranjay@kernel.org> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Puranjay Mohan Support an instruction for resolving absolute addresses of per-CPU data from their per-CPU offsets. This instruction is internal-only and users are not allowed to use them directly. They will only be used for internal inlining optimizations for now between BPF verifier and BPF JITs. Since commit 7158627686f0 ("arm64: percpu: implement optimised pcpu access using tpidr_el1"), the per-cpu offset for the CPU is stored in the tpidr_el1/2 register of that CPU. To support this BPF instruction in the ARM64 JIT, the following ARM64 instructions are emitted: mov dst, src // Move src to dst, if src != dst mrs tmp, tpidr_el1/2 // Move per-cpu offset of the current cpu in tmp. add dst, dst, tmp // Add the per cpu offset to the dst. To measure the performance improvement provided by this change, the benchmark in [1] was used: Before: glob-arr-inc : 23.597 ± 0.012M/s arr-inc : 23.173 ± 0.019M/s hash-inc : 12.186 ± 0.028M/s After: glob-arr-inc : 23.819 ± 0.034M/s arr-inc : 23.285 ± 0.017M/s hash-inc : 12.419 ± 0.011M/s [1] https://github.com/anakryiko/linux/commit/8dec900975ef Signed-off-by: Puranjay Mohan --- arch/arm64/include/asm/insn.h | 7 +++++++ arch/arm64/lib/insn.c | 11 +++++++++++ arch/arm64/net/bpf_jit.h | 6 ++++++ arch/arm64/net/bpf_jit_comp.c | 14 ++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/arch/arm64/include/asm/insn.h b/arch/arm64/include/asm/insn.h index db1aeacd4cd9..8de0e39b29f3 100644 --- a/arch/arm64/include/asm/insn.h +++ b/arch/arm64/include/asm/insn.h @@ -135,6 +135,11 @@ enum aarch64_insn_special_register { AARCH64_INSN_SPCLREG_SP_EL2 = 0xF210 }; +enum aarch64_insn_system_register { + AARCH64_INSN_SYSREG_TPIDR_EL1 = 0x4684, + AARCH64_INSN_SYSREG_TPIDR_EL2 = 0x6682, +}; + enum aarch64_insn_variant { AARCH64_INSN_VARIANT_32BIT, AARCH64_INSN_VARIANT_64BIT @@ -686,6 +691,8 @@ u32 aarch64_insn_gen_cas(enum aarch64_insn_register result, } #endif u32 aarch64_insn_gen_dmb(enum aarch64_insn_mb_type type); +u32 aarch64_insn_gen_mrs(enum aarch64_insn_register result, + enum aarch64_insn_system_register sysreg); s32 aarch64_get_branch_offset(u32 insn); u32 aarch64_set_branch_offset(u32 insn, s32 offset); diff --git a/arch/arm64/lib/insn.c b/arch/arm64/lib/insn.c index a635ab83fee3..b008a9b46a7f 100644 --- a/arch/arm64/lib/insn.c +++ b/arch/arm64/lib/insn.c @@ -1515,3 +1515,14 @@ u32 aarch64_insn_gen_dmb(enum aarch64_insn_mb_type type) return insn; } + +u32 aarch64_insn_gen_mrs(enum aarch64_insn_register result, + enum aarch64_insn_system_register sysreg) +{ + u32 insn = aarch64_insn_get_mrs_value(); + + insn &= ~GENMASK(19, 0); + insn |= sysreg << 5; + return aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RT, + insn, result); +} diff --git a/arch/arm64/net/bpf_jit.h b/arch/arm64/net/bpf_jit.h index 23b1b34db088..b627ef7188c7 100644 --- a/arch/arm64/net/bpf_jit.h +++ b/arch/arm64/net/bpf_jit.h @@ -297,4 +297,10 @@ #define A64_ADR(Rd, offset) \ aarch64_insn_gen_adr(0, offset, Rd, AARCH64_INSN_ADR_TYPE_ADR) +/* MRS */ +#define A64_MRS_TPIDR_EL1(Rt) \ + aarch64_insn_gen_mrs(Rt, AARCH64_INSN_SYSREG_TPIDR_EL1) +#define A64_MRS_TPIDR_EL2(Rt) \ + aarch64_insn_gen_mrs(Rt, AARCH64_INSN_SYSREG_TPIDR_EL2) + #endif /* _BPF_JIT_H */ diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c index 76b91f36c729..ed8f9716d9d5 100644 --- a/arch/arm64/net/bpf_jit_comp.c +++ b/arch/arm64/net/bpf_jit_comp.c @@ -877,6 +877,15 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, emit(A64_ORR(1, tmp, dst, tmp), ctx); emit(A64_MOV(1, dst, tmp), ctx); break; + } else if (insn_is_mov_percpu_addr(insn)) { + if (dst != src) + emit(A64_MOV(1, dst, src), ctx); + if (cpus_have_cap(ARM64_HAS_VIRT_HOST_EXTN)) + emit(A64_MRS_TPIDR_EL2(tmp), ctx); + else + emit(A64_MRS_TPIDR_EL1(tmp), ctx); + emit(A64_ADD(1, dst, dst, tmp), ctx); + break; } switch (insn->off) { case 0: @@ -2527,6 +2536,11 @@ bool bpf_jit_supports_arena(void) return true; } +bool bpf_jit_supports_percpu_insn(void) +{ + return true; +} + void bpf_jit_free(struct bpf_prog *prog) { if (prog->jited) { -- 2.40.1 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 384D8C07E8E for ; Wed, 24 Apr 2024 17:36:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=8PtGAdaIsqrNvDVGnPzqelH9snApl+sIyYUNioLG8Wg=; b=yYEFW60KSsAKI6 10gszUiJbMQZq1i+mbCtHFc3YgjlEDq1s+nhWG6EYs0yDTHREc/Ai6FxYo8/3nBgxgjgv3h4F9BOF 5iOIOu6tOLkw1+cRnfHJjtbX0AeyqUw/5OqMumkD1N3gHDB41YS8XJ3rbQSo2uUhV67b8L0CATLYi LqaTqF0J+yoHfaA6q6FhOJwJ9ukqT/IZdM99X5q7/OAb4srPyPvTFxNwDTWwEnbOdElXAE/k6gRc8 y1qmT5sZ3fTHhmyktPRj+eLj/Ng7kADV8d8pEgCbrlaCOXQ5WD3eCd3lr6+Zfd8rNc2dnhx3PGmGv pD8mmW0LSPe6eL3SMMgQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rzgXU-000000058cP-02Pv; Wed, 24 Apr 2024 17:36:12 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rzgXL-000000058Yr-3KR9 for linux-arm-kernel@lists.infradead.org; Wed, 24 Apr 2024 17:36:05 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 3448761A5F; Wed, 24 Apr 2024 17:36:03 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 98DCAC113CD; Wed, 24 Apr 2024 17:36:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713980162; bh=TbPOTBmS82ynsL8h5jbyPu2ZW+Geh2onSqdzZPRv0KM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JKfgM0ftEZPoaeN/UvrXohkYKSIHZLJOroZar5NdiSmXyCF6rKxzuOZdZ2KppyqRL oa9AT7DLeVcjxOkbrrxIUGMqd8TMkBZSUQV/sygfLlnSekXgyepCYG4FnrIrv9RD+e z/W1m431bgbvtK5653Ho5WlT53xwJqBvpfxu6iYipLNIECpOlexGRnchzCcSxBz0+A uc1aK8XzuECWRsmlEaulD3SslyUQLATMpBVF5noawuNy3R2o25eVC0VvDKTcedQjbT 3oZOFU3P5PYQJKcdG/OAJfXjzkHMK69D63s2C85XUG+vHbTYTInNzmaZsBPg6wTkUc BZJz42GXHai4A== From: Puranjay Mohan To: Catalin Marinas , Will Deacon , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Zi Shen Lim , Xu Kuohai , Florent Revest , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Cc: puranjay12@gmail.com Subject: [PATCH bpf-next v2 1/2] arm64, bpf: add internal-only MOV instruction to resolve per-CPU addrs Date: Wed, 24 Apr 2024 17:35:49 +0000 Message-Id: <20240424173550.16359-2-puranjay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240424173550.16359-1-puranjay@kernel.org> References: <20240424173550.16359-1-puranjay@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240424_103604_032674_1F002E4D X-CRM114-Status: GOOD ( 13.83 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogUHVyYW5qYXkgTW9oYW4gPHB1cmFuamF5MTJAZ21haWwuY29tPgoKU3VwcG9ydCBhbiBp bnN0cnVjdGlvbiBmb3IgcmVzb2x2aW5nIGFic29sdXRlIGFkZHJlc3NlcyBvZiBwZXItQ1BVCmRh dGEgZnJvbSB0aGVpciBwZXItQ1BVIG9mZnNldHMuIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW50ZXJu YWwtb25seSBhbmQKdXNlcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSB0aGVtIGRpcmVjdGx5LiBU aGV5IHdpbGwgb25seSBiZSB1c2VkIGZvcgppbnRlcm5hbCBpbmxpbmluZyBvcHRpbWl6YXRpb25z IGZvciBub3cgYmV0d2VlbiBCUEYgdmVyaWZpZXIgYW5kIEJQRgpKSVRzLgoKU2luY2UgY29tbWl0 IDcxNTg2Mjc2ODZmMCAoImFybTY0OiBwZXJjcHU6IGltcGxlbWVudCBvcHRpbWlzZWQgcGNwdQph Y2Nlc3MgdXNpbmcgdHBpZHJfZWwxIiksIHRoZSBwZXItY3B1IG9mZnNldCBmb3IgdGhlIENQVSBp cyBzdG9yZWQgaW4KdGhlIHRwaWRyX2VsMS8yIHJlZ2lzdGVyIG9mIHRoYXQgQ1BVLgoKVG8gc3Vw cG9ydCB0aGlzIEJQRiBpbnN0cnVjdGlvbiBpbiB0aGUgQVJNNjQgSklULCB0aGUgZm9sbG93aW5n IEFSTTY0Cmluc3RydWN0aW9ucyBhcmUgZW1pdHRlZDoKCm1vdiBkc3QsIHNyYwkJLy8gTW92ZSBz cmMgdG8gZHN0LCBpZiBzcmMgIT0gZHN0Cm1ycyB0bXAsIHRwaWRyX2VsMS8yCS8vIE1vdmUgcGVy LWNwdSBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgY3B1IGluIHRtcC4KYWRkIGRzdCwgZHN0LCB0bXAJ Ly8gQWRkIHRoZSBwZXIgY3B1IG9mZnNldCB0byB0aGUgZHN0LgoKVG8gbWVhc3VyZSB0aGUgcGVy Zm9ybWFuY2UgaW1wcm92ZW1lbnQgcHJvdmlkZWQgYnkgdGhpcyBjaGFuZ2UsIHRoZQpiZW5jaG1h cmsgaW4gWzFdIHdhcyB1c2VkOgoKQmVmb3JlOgpnbG9iLWFyci1pbmMgICA6ICAgMjMuNTk3IMKx IDAuMDEyTS9zCmFyci1pbmMgICAgICAgIDogICAyMy4xNzMgwrEgMC4wMTlNL3MKaGFzaC1pbmMg ICAgICAgOiAgIDEyLjE4NiDCsSAwLjAyOE0vcwoKQWZ0ZXI6Cmdsb2ItYXJyLWluYyAgIDogICAy My44MTkgwrEgMC4wMzRNL3MKYXJyLWluYyAgICAgICAgOiAgIDIzLjI4NSDCsSAwLjAxN00vcwpo YXNoLWluYyAgICAgICA6ICAgMTIuNDE5IMKxIDAuMDExTS9zCgpbMV0gaHR0cHM6Ly9naXRodWIu Y29tL2FuYWtyeWlrby9saW51eC9jb21taXQvOGRlYzkwMDk3NWVmCgpTaWduZWQtb2ZmLWJ5OiBQ dXJhbmpheSBNb2hhbiA8cHVyYW5qYXkxMkBnbWFpbC5jb20+Ci0tLQogYXJjaC9hcm02NC9pbmNs dWRlL2FzbS9pbnNuLmggfCAgNyArKysrKysrCiBhcmNoL2FybTY0L2xpYi9pbnNuLmMgICAgICAg ICB8IDExICsrKysrKysrKysrCiBhcmNoL2FybTY0L25ldC9icGZfaml0LmggICAgICB8ICA2ICsr KysrKwogYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgfCAxNCArKysrKysrKysrKysrKwog NCBmaWxlcyBjaGFuZ2VkLCAzOCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02 NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaAppbmRl eCBkYjFhZWFjZDRjZDkuLjhkZTBlMzliMjlmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNs dWRlL2FzbS9pbnNuLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmgKQEAgLTEz NSw2ICsxMzUsMTEgQEAgZW51bSBhYXJjaDY0X2luc25fc3BlY2lhbF9yZWdpc3RlciB7CiAJQUFS Q0g2NF9JTlNOX1NQQ0xSRUdfU1BfRUwyCT0gMHhGMjEwCiB9OwogCitlbnVtIGFhcmNoNjRfaW5z bl9zeXN0ZW1fcmVnaXN0ZXIgeworCUFBUkNINjRfSU5TTl9TWVNSRUdfVFBJRFJfRUwxCT0gMHg0 Njg0LAorCUFBUkNINjRfSU5TTl9TWVNSRUdfVFBJRFJfRUwyCT0gMHg2NjgyLAorfTsKKwogZW51 bSBhYXJjaDY0X2luc25fdmFyaWFudCB7CiAJQUFSQ0g2NF9JTlNOX1ZBUklBTlRfMzJCSVQsCiAJ QUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQKQEAgLTY4Niw2ICs2OTEsOCBAQCB1MzIgYWFyY2g2 NF9pbnNuX2dlbl9jYXMoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVzdWx0LAogfQogI2Vu ZGlmCiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kbWIoZW51bSBhYXJjaDY0X2luc25fbWJfdHlwZSB0 eXBlKTsKK3UzMiBhYXJjaDY0X2luc25fZ2VuX21ycyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3Rl ciByZXN1bHQsCisJCQkgZW51bSBhYXJjaDY0X2luc25fc3lzdGVtX3JlZ2lzdGVyIHN5c3JlZyk7 CiAKIHMzMiBhYXJjaDY0X2dldF9icmFuY2hfb2Zmc2V0KHUzMiBpbnNuKTsKIHUzMiBhYXJjaDY0 X3NldF9icmFuY2hfb2Zmc2V0KHUzMiBpbnNuLCBzMzIgb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2Fy Y2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uYwppbmRleCBhNjM1YWI4 M2ZlZTMuLmIwMDhhOWI0NmE3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9saWIvaW5zbi5jCisr KyBiL2FyY2gvYXJtNjQvbGliL2luc24uYwpAQCAtMTUxNSwzICsxNTE1LDE0IEBAIHUzMiBhYXJj aDY0X2luc25fZ2VuX2RtYihlbnVtIGFhcmNoNjRfaW5zbl9tYl90eXBlIHR5cGUpCiAKIAlyZXR1 cm4gaW5zbjsKIH0KKwordTMyIGFhcmNoNjRfaW5zbl9nZW5fbXJzKGVudW0gYWFyY2g2NF9pbnNu X3JlZ2lzdGVyIHJlc3VsdCwKKwkJCSBlbnVtIGFhcmNoNjRfaW5zbl9zeXN0ZW1fcmVnaXN0ZXIg c3lzcmVnKQoreworCXUzMiBpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9tcnNfdmFsdWUoKTsKKwor CWluc24gJj0gfkdFTk1BU0soMTksIDApOworCWluc24gfD0gc3lzcmVnIDw8IDU7CisJcmV0dXJu IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUlQsCisJ CQkJCSAgICBpbnNuLCByZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBm X2ppdC5oIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oCmluZGV4IDIzYjFiMzRkYjA4OC4uYjYy N2VmNzE4OGM3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmgKKysrIGIvYXJj aC9hcm02NC9uZXQvYnBmX2ppdC5oCkBAIC0yOTcsNCArMjk3LDEwIEBACiAjZGVmaW5lIEE2NF9B RFIoUmQsIG9mZnNldCkgXAogCWFhcmNoNjRfaW5zbl9nZW5fYWRyKDAsIG9mZnNldCwgUmQsIEFB UkNINjRfSU5TTl9BRFJfVFlQRV9BRFIpCiAKKy8qIE1SUyAqLworI2RlZmluZSBBNjRfTVJTX1RQ SURSX0VMMShSdCkgXAorCWFhcmNoNjRfaW5zbl9nZW5fbXJzKFJ0LCBBQVJDSDY0X0lOU05fU1lT UkVHX1RQSURSX0VMMSkKKyNkZWZpbmUgQTY0X01SU19UUElEUl9FTDIoUnQpIFwKKwlhYXJjaDY0 X2luc25fZ2VuX21ycyhSdCwgQUFSQ0g2NF9JTlNOX1NZU1JFR19UUElEUl9FTDIpCisKICNlbmRp ZiAvKiBfQlBGX0pJVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2Nv bXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDc2YjkxZjM2YzcyOS4u ZWQ4Zjk3MTZkOWQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYwor KysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYwpAQCAtODc3LDYgKzg3NywxNSBAQCBz dGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qg aml0X2N0eCAqY3R4LAogCQkJZW1pdChBNjRfT1JSKDEsIHRtcCwgZHN0LCB0bXApLCBjdHgpOwog CQkJZW1pdChBNjRfTU9WKDEsIGRzdCwgdG1wKSwgY3R4KTsKIAkJCWJyZWFrOworCQl9IGVsc2Ug aWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7CisJCQlpZiAoZHN0ICE9IHNyYykK KwkJCQllbWl0KEE2NF9NT1YoMSwgZHN0LCBzcmMpLCBjdHgpOworCQkJaWYgKGNwdXNfaGF2ZV9j YXAoQVJNNjRfSEFTX1ZJUlRfSE9TVF9FWFROKSkKKwkJCQllbWl0KEE2NF9NUlNfVFBJRFJfRUwy KHRtcCksIGN0eCk7CisJCQllbHNlCisJCQkJZW1pdChBNjRfTVJTX1RQSURSX0VMMSh0bXApLCBj dHgpOworCQkJZW1pdChBNjRfQUREKDEsIGRzdCwgZHN0LCB0bXApLCBjdHgpOworCQkJYnJlYWs7 CiAJCX0KIAkJc3dpdGNoIChpbnNuLT5vZmYpIHsKIAkJY2FzZSAwOgpAQCAtMjUyNyw2ICsyNTM2 LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKQogCXJldHVybiB0cnVlOwog fQogCitib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZCkKK3sKKwlyZXR1cm4g dHJ1ZTsKK30KKwogdm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKQogewog CWlmIChwcm9nLT5qaXRlZCkgewotLSAKMi40MC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=