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 29395C369D3 for ; Tue, 22 Apr 2025 11:20:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=zxqES11p4EiVrBTYvYCVYNGopV2xQccc40IbBsfS598=; b=ue44HJ2kPAIx2Dj8nZOBF5E5cD B09pDN4Ni1Td25geq/qXJhYJGZd/GaOylm0gyJr9k2IVyC7S8iVZnovRox/fAunxAwSUfbAfGBYQW gfUzRPIUMBElcjbYWZYmW6gY3qSkgKsP9v9JEq6IWY/jM+csYfr4Zam1gi0iJd/syAp2xUNf6oUUN nJS+HBBAZAB11Jrg1pV852wSp1dwUFUo2W7y1sqGOkJtVKYLWqjEXHHDtuwwe6SkZ74httcmnYY03 kHAbWQ7aqYJhbJoYVsYhca6Mt6uygeteoY04giok6o4ImZ6/VrwyxZBgXpfpN1aFkrpVgZRGzUCZ0 LzFymvlQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u7BgI-00000006utX-3C6k; Tue, 22 Apr 2025 11:20:50 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u7BB0-00000006pX3-0aPD; Tue, 22 Apr 2025 10:48:30 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id B458E61366; Tue, 22 Apr 2025 10:48:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4E3B7C4CEE9; Tue, 22 Apr 2025 10:48:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745318909; bh=Nxxr7vBFU8FcnvRnUe/AM1RnfGX4ty+9rU8S7zXzDM8=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=XGsjdzUi2VwUj++IdwTvinPgoSH+eiFDhQj0EsxyQcuAwxbOyqcX49sEbI+HZO2MQ s2BSWnKdyHpGtiKHCBRVsiOybaRcIh14xZhN69vTkBv9KvTwbmG84IQq0g+qBzK+Nw eF83voi410y+9dZxuVTaIcuq6CTJyQtbZpAdjGRUGH2/Z2rEoISiCr3KHGeI/USEP0 SBw0kAgSf2tXlilWn0LD9Z2rysYmySISk5ky+Lx9J2/Jms1CZt93azAyBtZBWgaeTw Ys8yhnIjbVs0hQaIq5zJio/QdehOQr5aYe44j8xb0V+mQTOt7ms+spt/LmtQWT6v9Q dK7Puk0r4qKzQ== Date: Tue, 22 Apr 2025 11:48:25 +0100 From: Simon Horman To: =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= Cc: Nick Kossifidis , Song Shuai , Li Zhengyu , kexec@lists.infradead.org, Dave Young , Yixun Lan , Xianting Tian , linux-riscv@lists.infradead.org, =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= Subject: Re: [PATCH 1/4] RISC-V: Add support for riscv kexec/kdump on kexec-tools Message-ID: <20250422104825.GT2789685@horms.kernel.org> References: <20250409201428.648717-1-bjorn@kernel.org> <20250409201428.648717-2-bjorn@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20250409201428.648717-2-bjorn@kernel.org> X-BeenThere: kexec@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "kexec" Errors-To: kexec-bounces+kexec=archiver.kernel.org@lists.infradead.org On Wed, Apr 09, 2025 at 10:14:23PM +0200, Björn Töpel wrote: > From: Nick Kossifidis > > This patch adds support for loading the ELF kernel image. It parses > the current/provided device tree to determine the system's memory > layout, and /proc/iomem for the various kernel segments. > > Tested on Qemu's rv64 virt machine and SoC of T-Head RISC-V Xuantie > 910 CPU. > > Now, some history: The first stab at supporting kexec-tools on RISC-V > was done by Nick Kossifidis. The initial patch has since then had a > number of improvements/fixes by other authors. Given, this is the > first commit for RISC-V, carrying the fixes/changes commits in the > upstream tree does not really add anything (bisectability). > > Instead all the fixes that were applied to Nick's first commit is > outlined below: > > Yixun Lan, and Xianting Tian: > * Fixed a failure to fail to find free memory area for dtb load when > using initrd image [1]. > * Fixed memory range size calculation in > kexec/arch/riscv/crashdump-riscv.c:85 > > Simon Horman: > * RISC-V: distribute purgatory/riscv/Makefile > > Include purgatory/riscv/Makefile in distribution tarball. > > Local patch as it is planned to suggest this as a fix for the > patch that introduced this problem. [2] > > Song Shuai: > * RISC-V: Fix the undeclared ‘EM_RISCV’ build failure > > Use local `elf.h` instead of `linux/elf.h` to fix this build > error: > > ``` > kexec/arch/riscv/crashdump-riscv.c:17:13: error: ‘EM_RISCV’ undeclared here (not in a function); did you mean ‘EM_CRIS’? > .machine = EM_RISCV, > ^~~~~~~~ > EM_CRIS > ``` > > * RISC-V: Correct the usage of command line option > > RISC-V process OPT_CMDLINE with the "command-line" partten, but > the riscv_opts_usage shows the "cmdline" option. So correct the > usage's output. > > * RISC-V: Use linux,usable-memory-range for crash kernel > > Now we use "memeory::linux,usable-memory" to indicate the > available memory for the crash kernel. > > While booting with UEFI, the crash kernel would use efi.memmap to > re-populate memblock and then first kernel's memory would be > corrputed. Consequently, the /proc/vmcore file failed to create in > my local test. > > And according to "chosen" dtschema [3], the available memory for > the crash kernel should be held via > "chosen::linux,usable-memory-range" property which will re-cap > memblock even after UEFI's re-population. > > * RISC-V: Get memory ranges from iomem > > When booting with UEFI, Linux marks the Runtime Code/Data memory > as no-map and then exports it to "Reserved" iomem_resource. > > Kexc-tools uses dtb_get_memory_ranges() function to get memory > ranges via parsing dtb, but it can't see the Reserved EFI Runtime > memory. That would corrupt EFI Runtime memory and fail the kexeced > kernel to deal EFI stuff. > > In my test, the kexeced kernel warned "efi: System table signature > incorrect!" and then paniced at efi_call_rts() due to the null > efi.runtime. > > So we should use /proc/iomem to get memory ranges. > > Björn Töpel: > * Massaged this commit message! > * Fixed up the build, by adding missing RV stub. > * RISC-V: Only cap the upper/end usable memory window > > When loading the initrd in the kexec_load flow, memory for the > segments are searched from end to start. Only the max_usable > should be capped, after a successful initrd addtion. > > Currently min/max usable is set to the same value, making it > impossible from subsequent segment allocations to success. > > * RISC-V: Make get_memory_ranges() properly exclude "Reserved" > regions > > The get_memory_ranges() did not exclude "Reserved" regions from > "System RAM" regions. It simply added "Reserved" as IOMEM, and > IOMEM is not considered when looking for holes to place kexec > segments. > > Instead, do a two pass of the /proc/iomem file. First pass, adds > all the "System RAM" memory, and the second pass removes all > intersecting "Reserved" regions. > > [1] https://lore.kernel.org/linux-riscv/CALecT5gQWn0PRO4Q24b6qkrfVE5OxsCp65TuhWTb30ceK_OJ0A@mail.gmail.com/ > [2] https://lore.kernel.org/kexec/20221020031548.47587-1-xianting.tian@linux.alibaba.com/ > [3] https://github.com/devicetree-org/dt-schema/blob/main/dtschema/schemas/chosen.yaml > > Tested-by: Yixun Lan > Co-developed-by: Xianting Tian > Co-developed-by: Yixun Lan > Signed-off-by: Nick Kossifidis > Signed-off-by: Simon Horman > Signed-off-by: Song Shuai > Signed-off-by: Björn Töpel Thanks Björn, Overall I am happy with this patchset. But there are a few minor points I'd like addressed, which relate strictly to build coverage and the CI. I can handle these myself if you prefer. Firstly, it would be really great if the following could be included at the end of the series, so there is some build coverage of RISC-V in the CI. (Feel free to rewrite or attribute however you see fit - it is a trival one liner.) From: Simon Horman Subject: [PATCH] workflow: Add riscv64 Add riscv64 to matrix of build architectures. Signed-off-by: Simon Horman --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fd9ea6c8eca7..d1b3e74391ff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,6 +19,7 @@ jobs: - powerpc - powerpc64 - powerpc64le + - riscv64 - sh4 - s390x - x86_64-x32 ... > diff --git a/kexec/arch/riscv/Makefile b/kexec/arch/riscv/Makefile > new file mode 100644 > index 000000000000..f26cc9025e77 > --- /dev/null > +++ b/kexec/arch/riscv/Makefile > @@ -0,0 +1,35 @@ > +# > +# kexec riscv > +# > +riscv_KEXEC_SRCS = kexec/arch/riscv/kexec-riscv.c > +riscv_KEXEC_SRCS += kexec/arch/riscv/kexec-elf-riscv.c > +riscv_KEXEC_SRCS += kexec/arch/riscv/crashdump-riscv.c > + > +riscv_MEM_REGIONS = kexec/mem_regions.c > + > +riscv_DT_OPS += kexec/dt-ops.c > + > +riscv_ARCH_REUSE_INITRD = > + > +riscv_CPPFLAGS += -I $(srcdir)/kexec/ > + > +dist += kexec/arch/riscv/Makefile $(riscv_KEXEC_SRCS) \ kexec/arch/riscv/iomem.h also needs to be added to dist so that it shows up in the distribution tarball. > + kexec/arch/riscv/kexec-riscv.h \ > + kexec/arch/riscv/include/arch/options.h Also, it would be nice to sort these lines alphabetically. > + > +ifdef HAVE_LIBFDT > + > +LIBS += -lfdt > + > +else > + > +include $(srcdir)/kexec/libfdt/Makefile.libfdt > + > +libfdt_SRCS += $(LIBFDT_SRCS:%=kexec/libfdt/%) > + > +riscv_CPPFLAGS += -I$(srcdir)/kexec/libfdt > + > +riscv_KEXEC_SRCS += $(libfdt_SRCS) > + > +endif > + ... > diff --git a/kexec/dt-ops.c b/kexec/dt-ops.c > index 0a96b75f65aa..3e285ab2043b 100644 > --- a/kexec/dt-ops.c > +++ b/kexec/dt-ops.c > @@ -4,9 +4,11 @@ > #include > #include > #include > +#include > > #include "kexec.h" > #include "dt-ops.h" > +#include "mem_regions.h" As dt-ops.c will now use symbols that are implemented in mem_regions.c when the former is compiled the latter now must be compiled too. In practice it is only mips where that is not the case. And I believe that can be addressed by squashing the following into this patch. diff --git a/kexec/arch/mips/Makefile b/kexec/arch/mips/Makefile index 1fe788608fbe..fa87fbdb7897 100644 --- a/kexec/arch/mips/Makefile +++ b/kexec/arch/mips/Makefile @@ -11,6 +11,8 @@ mips_FS2DT_INCLUDE = \ -include $(srcdir)/kexec/arch/mips/crashdump-mips.h \ -include $(srcdir)/kexec/arch/mips/kexec-mips.h +mips_MEM_REGIONS = kexec/mem_regions.c + mips_DT_OPS += kexec/dt-ops.c include $(srcdir)/kexec/libfdt/Makefile.libfdt FTR, I believe this is the same mem_regions_alloc_and_add issue that I flagged in the thread [2]. And at the link below you can see a build failure with this patch, but not the fix above, applied: https://github.com/horms/kexec-tools/actions/runs/14591381633/job/40927219243 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 DA110C369D3 for ; Tue, 22 Apr 2025 11:21:04 +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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ddDwAH6buYZohdvMzu93YHU2w+fYp7qsIgaZlgeD8BA=; b=XdYlWpEQGgmW7r 8OZhLtdHRDZoDqWaG1kvAZgari8zsSOvZVWhtToEgTCqJGAijpDyuQNW8WA31QZKV0KXFBNayxxZi kZ218Mbptxj8OKDyLOMcPxAWIw+B36XMRVwDnL5nFVI4VnGApKfXGK6Jf5NcQzHQPypgvykL3EZRv 7xhx8DaB3dCgi0O/vJz0GEjJF8psKUIFF1l1VIHpYKi7f7gTRDbpCg+bpflQLtF8nfMs+PF5ovYJh Ot5tR84B0dW/zLfZxp+MjIV/YBSCzSe7fNYcE9pOi3Vdr/h2qCL4RCbJ+9+rqoHrkYtJk/lorUXT8 JbsVeFiHE5/wsvwiFP3A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u7BgJ-00000006utk-0iv6; Tue, 22 Apr 2025 11:20:51 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u7BB0-00000006pX3-0aPD; Tue, 22 Apr 2025 10:48:30 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id B458E61366; Tue, 22 Apr 2025 10:48:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4E3B7C4CEE9; Tue, 22 Apr 2025 10:48:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745318909; bh=Nxxr7vBFU8FcnvRnUe/AM1RnfGX4ty+9rU8S7zXzDM8=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=XGsjdzUi2VwUj++IdwTvinPgoSH+eiFDhQj0EsxyQcuAwxbOyqcX49sEbI+HZO2MQ s2BSWnKdyHpGtiKHCBRVsiOybaRcIh14xZhN69vTkBv9KvTwbmG84IQq0g+qBzK+Nw eF83voi410y+9dZxuVTaIcuq6CTJyQtbZpAdjGRUGH2/Z2rEoISiCr3KHGeI/USEP0 SBw0kAgSf2tXlilWn0LD9Z2rysYmySISk5ky+Lx9J2/Jms1CZt93azAyBtZBWgaeTw Ys8yhnIjbVs0hQaIq5zJio/QdehOQr5aYe44j8xb0V+mQTOt7ms+spt/LmtQWT6v9Q dK7Puk0r4qKzQ== Date: Tue, 22 Apr 2025 11:48:25 +0100 From: Simon Horman To: =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= Cc: Nick Kossifidis , Song Shuai , Li Zhengyu , kexec@lists.infradead.org, Dave Young , Yixun Lan , Xianting Tian , linux-riscv@lists.infradead.org, =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= Subject: Re: [PATCH 1/4] RISC-V: Add support for riscv kexec/kdump on kexec-tools Message-ID: <20250422104825.GT2789685@horms.kernel.org> References: <20250409201428.648717-1-bjorn@kernel.org> <20250409201428.648717-2-bjorn@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20250409201428.648717-2-bjorn@kernel.org> X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gV2VkLCBBcHIgMDksIDIwMjUgYXQgMTA6MTQ6MjNQTSArMDIwMCwgQmrDtnJuIFTDtnBlbCB3 cm90ZToKPiBGcm9tOiBOaWNrIEtvc3NpZmlkaXMgPG1pY2tAaWNzLmZvcnRoLmdyPgo+IAo+IFRo aXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBsb2FkaW5nIHRoZSBFTEYga2VybmVsIGltYWdlLiBJ dCBwYXJzZXMKPiB0aGUgY3VycmVudC9wcm92aWRlZCBkZXZpY2UgdHJlZSB0byBkZXRlcm1pbmUg dGhlIHN5c3RlbSdzIG1lbW9yeQo+IGxheW91dCwgYW5kIC9wcm9jL2lvbWVtIGZvciB0aGUgdmFy aW91cyBrZXJuZWwgc2VnbWVudHMuCj4gCj4gVGVzdGVkIG9uIFFlbXUncyBydjY0IHZpcnQgbWFj aGluZSBhbmQgU29DIG9mIFQtSGVhZCBSSVNDLVYgWHVhbnRpZQo+IDkxMCBDUFUuCj4gCj4gTm93 LCBzb21lIGhpc3Rvcnk6IFRoZSBmaXJzdCBzdGFiIGF0IHN1cHBvcnRpbmcga2V4ZWMtdG9vbHMg b24gUklTQy1WCj4gd2FzIGRvbmUgYnkgTmljayBLb3NzaWZpZGlzLiBUaGUgaW5pdGlhbCBwYXRj aCBoYXMgc2luY2UgdGhlbiBoYWQgYQo+IG51bWJlciBvZiBpbXByb3ZlbWVudHMvZml4ZXMgYnkg b3RoZXIgYXV0aG9ycy4gR2l2ZW4sIHRoaXMgaXMgdGhlCj4gZmlyc3QgY29tbWl0IGZvciBSSVND LVYsIGNhcnJ5aW5nIHRoZSBmaXhlcy9jaGFuZ2VzIGNvbW1pdHMgaW4gdGhlCj4gdXBzdHJlYW0g dHJlZSBkb2VzIG5vdCByZWFsbHkgYWRkIGFueXRoaW5nIChiaXNlY3RhYmlsaXR5KS4KPiAKPiBJ bnN0ZWFkIGFsbCB0aGUgZml4ZXMgdGhhdCB3ZXJlIGFwcGxpZWQgdG8gTmljaydzIGZpcnN0IGNv bW1pdCBpcwo+IG91dGxpbmVkIGJlbG93Ogo+IAo+IFlpeHVuIExhbiwgYW5kIFhpYW50aW5nIFRp YW46Cj4gICAqIEZpeGVkIGEgZmFpbHVyZSB0byBmYWlsIHRvIGZpbmQgZnJlZSBtZW1vcnkgYXJl YSBmb3IgZHRiIGxvYWQgd2hlbgo+ICAgICB1c2luZyBpbml0cmQgaW1hZ2UgWzFdLgo+ICAgKiBG aXhlZCBtZW1vcnkgcmFuZ2Ugc2l6ZSBjYWxjdWxhdGlvbiBpbgo+ICAgICBrZXhlYy9hcmNoL3Jp c2N2L2NyYXNoZHVtcC1yaXNjdi5jOjg1Cj4gCj4gU2ltb24gSG9ybWFuOgo+ICAgKiBSSVNDLVY6 IGRpc3RyaWJ1dGUgcHVyZ2F0b3J5L3Jpc2N2L01ha2VmaWxlCj4gCj4gICAgIEluY2x1ZGUgcHVy Z2F0b3J5L3Jpc2N2L01ha2VmaWxlIGluIGRpc3RyaWJ1dGlvbiB0YXJiYWxsLgo+IAo+ICAgICBM b2NhbCBwYXRjaCBhcyBpdCBpcyBwbGFubmVkIHRvIHN1Z2dlc3QgdGhpcyBhcyBhIGZpeCBmb3Ig dGhlCj4gICAgIHBhdGNoIHRoYXQgaW50cm9kdWNlZCB0aGlzIHByb2JsZW0uIFsyXQo+IAo+IFNv bmcgU2h1YWk6Cj4gICAqIFJJU0MtVjogRml4IHRoZSB1bmRlY2xhcmVkIOKAmEVNX1JJU0NW4oCZ IGJ1aWxkIGZhaWx1cmUKPiAKPiAgICAgVXNlIGxvY2FsIGBlbGYuaGAgaW5zdGVhZCBvZiBgbGlu dXgvZWxmLmhgIHRvIGZpeCB0aGlzIGJ1aWxkCj4gICAgIGVycm9yOgo+IAo+ICAgICBgYGAKPiAg ICAga2V4ZWMvYXJjaC9yaXNjdi9jcmFzaGR1bXAtcmlzY3YuYzoxNzoxMzogZXJyb3I6IOKAmEVN X1JJU0NW4oCZIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pOyBkaWQgeW91IG1l YW4g4oCYRU1fQ1JJU+KAmT8KPiAgICAgICAubWFjaGluZSA9IEVNX1JJU0NWLAo+ICAgICAgICAg ICAgICAgICAgXn5+fn5+fn4KPiAgICAgICAgICAgICAgICAgIEVNX0NSSVMKPiAgICAgYGBgCj4g Cj4gICAqIFJJU0MtVjogQ29ycmVjdCB0aGUgdXNhZ2Ugb2YgY29tbWFuZCBsaW5lIG9wdGlvbgo+ IAo+ICAgICBSSVNDLVYgcHJvY2VzcyBPUFRfQ01ETElORSB3aXRoIHRoZSAiY29tbWFuZC1saW5l IiBwYXJ0dGVuLCBidXQKPiAgICAgdGhlIHJpc2N2X29wdHNfdXNhZ2Ugc2hvd3MgdGhlICJjbWRs aW5lIiBvcHRpb24uIFNvIGNvcnJlY3QgdGhlCj4gICAgIHVzYWdlJ3Mgb3V0cHV0Lgo+IAo+ICAg KiBSSVNDLVY6IFVzZSBsaW51eCx1c2FibGUtbWVtb3J5LXJhbmdlIGZvciBjcmFzaCBrZXJuZWwK PiAKPiAgICAgTm93IHdlIHVzZSAibWVtZW9yeTo6bGludXgsdXNhYmxlLW1lbW9yeSIgdG8gaW5k aWNhdGUgdGhlCj4gICAgIGF2YWlsYWJsZSBtZW1vcnkgZm9yIHRoZSBjcmFzaCBrZXJuZWwuCj4g Cj4gICAgIFdoaWxlIGJvb3Rpbmcgd2l0aCBVRUZJLCB0aGUgY3Jhc2gga2VybmVsIHdvdWxkIHVz ZSBlZmkubWVtbWFwIHRvCj4gICAgIHJlLXBvcHVsYXRlIG1lbWJsb2NrIGFuZCB0aGVuIGZpcnN0 IGtlcm5lbCdzIG1lbW9yeSB3b3VsZCBiZQo+ICAgICBjb3JycHV0ZWQuIENvbnNlcXVlbnRseSwg dGhlIC9wcm9jL3ZtY29yZSBmaWxlIGZhaWxlZCB0byBjcmVhdGUgaW4KPiAgICAgbXkgbG9jYWwg dGVzdC4KPiAKPiAgICAgQW5kIGFjY29yZGluZyB0byAiY2hvc2VuIiBkdHNjaGVtYSBbM10sIHRo ZSBhdmFpbGFibGUgbWVtb3J5IGZvcgo+ICAgICB0aGUgY3Jhc2gga2VybmVsIHNob3VsZCBiZSBo ZWxkIHZpYQo+ICAgICAiY2hvc2VuOjpsaW51eCx1c2FibGUtbWVtb3J5LXJhbmdlIiBwcm9wZXJ0 eSB3aGljaCB3aWxsIHJlLWNhcAo+ICAgICBtZW1ibG9jayBldmVuIGFmdGVyIFVFRkkncyByZS1w b3B1bGF0aW9uLgo+IAo+ICAgKiBSSVNDLVY6IEdldCBtZW1vcnkgcmFuZ2VzIGZyb20gaW9tZW0K PiAKPiAgICAgV2hlbiBib290aW5nIHdpdGggVUVGSSwgTGludXggbWFya3MgdGhlIFJ1bnRpbWUg Q29kZS9EYXRhIG1lbW9yeQo+ICAgICBhcyBuby1tYXAgYW5kIHRoZW4gZXhwb3J0cyBpdCB0byAi UmVzZXJ2ZWQiIGlvbWVtX3Jlc291cmNlLgo+IAo+ICAgICBLZXhjLXRvb2xzIHVzZXMgZHRiX2dl dF9tZW1vcnlfcmFuZ2VzKCkgZnVuY3Rpb24gdG8gZ2V0IG1lbW9yeQo+ICAgICByYW5nZXMgdmlh IHBhcnNpbmcgZHRiLCBidXQgaXQgY2FuJ3Qgc2VlIHRoZSBSZXNlcnZlZCBFRkkgUnVudGltZQo+ ICAgICBtZW1vcnkuIFRoYXQgd291bGQgY29ycnVwdCBFRkkgUnVudGltZSBtZW1vcnkgYW5kIGZh aWwgdGhlIGtleGVjZWQKPiAgICAga2VybmVsIHRvIGRlYWwgRUZJIHN0dWZmLgo+IAo+ICAgICBJ biBteSB0ZXN0LCB0aGUga2V4ZWNlZCBrZXJuZWwgd2FybmVkICJlZmk6IFN5c3RlbSB0YWJsZSBz aWduYXR1cmUKPiAgICAgaW5jb3JyZWN0ISIgYW5kIHRoZW4gcGFuaWNlZCBhdCBlZmlfY2FsbF9y dHMoKSBkdWUgdG8gdGhlIG51bGwKPiAgICAgZWZpLnJ1bnRpbWUuCj4gCj4gICAgIFNvIHdlIHNo b3VsZCB1c2UgL3Byb2MvaW9tZW0gdG8gZ2V0IG1lbW9yeSByYW5nZXMuCj4gCj4gQmrDtnJuIFTD tnBlbDoKPiAgICogTWFzc2FnZWQgdGhpcyBjb21taXQgbWVzc2FnZSEKPiAgICogRml4ZWQgdXAg dGhlIGJ1aWxkLCBieSBhZGRpbmcgbWlzc2luZyBSViBzdHViLgo+ICAgKiBSSVNDLVY6IE9ubHkg Y2FwIHRoZSB1cHBlci9lbmQgdXNhYmxlIG1lbW9yeSB3aW5kb3cKPiAKPiAgICAgV2hlbiBsb2Fk aW5nIHRoZSBpbml0cmQgaW4gdGhlIGtleGVjX2xvYWQgZmxvdywgbWVtb3J5IGZvciB0aGUKPiAg ICAgc2VnbWVudHMgYXJlIHNlYXJjaGVkIGZyb20gZW5kIHRvIHN0YXJ0LiBPbmx5IHRoZSBtYXhf dXNhYmxlCj4gICAgIHNob3VsZCBiZSBjYXBwZWQsIGFmdGVyIGEgc3VjY2Vzc2Z1bCBpbml0cmQg YWRkdGlvbi4KPiAKPiAgICAgQ3VycmVudGx5IG1pbi9tYXggdXNhYmxlIGlzIHNldCB0byB0aGUg c2FtZSB2YWx1ZSwgbWFraW5nIGl0Cj4gICAgIGltcG9zc2libGUgZnJvbSBzdWJzZXF1ZW50IHNl Z21lbnQgYWxsb2NhdGlvbnMgdG8gc3VjY2Vzcy4KPiAKPiAgICogUklTQy1WOiBNYWtlIGdldF9t ZW1vcnlfcmFuZ2VzKCkgcHJvcGVybHkgZXhjbHVkZSAiUmVzZXJ2ZWQiCj4gICAgIHJlZ2lvbnMK PiAKPiAgICAgVGhlIGdldF9tZW1vcnlfcmFuZ2VzKCkgZGlkIG5vdCBleGNsdWRlICJSZXNlcnZl ZCIgcmVnaW9ucyBmcm9tCj4gICAgICJTeXN0ZW0gUkFNIiByZWdpb25zLiBJdCBzaW1wbHkgYWRk ZWQgIlJlc2VydmVkIiBhcyBJT01FTSwgYW5kCj4gICAgIElPTUVNIGlzIG5vdCBjb25zaWRlcmVk IHdoZW4gbG9va2luZyBmb3IgaG9sZXMgdG8gcGxhY2Uga2V4ZWMKPiAgICAgc2VnbWVudHMuCj4g Cj4gICAgIEluc3RlYWQsIGRvIGEgdHdvIHBhc3Mgb2YgdGhlIC9wcm9jL2lvbWVtIGZpbGUuIEZp cnN0IHBhc3MsIGFkZHMKPiAgICAgYWxsIHRoZSAiU3lzdGVtIFJBTSIgbWVtb3J5LCBhbmQgdGhl IHNlY29uZCBwYXNzIHJlbW92ZXMgYWxsCj4gICAgIGludGVyc2VjdGluZyAiUmVzZXJ2ZWQiIHJl Z2lvbnMuCj4gCj4gWzFdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LXJpc2N2L0NBTGVj VDVnUVduMFBSTzRRMjRiNnFrcmZWRTVPeHNDcDY1VHVoV1RiMzBjZUtfT0owQUBtYWlsLmdtYWls LmNvbS8KPiBbMl0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcva2V4ZWMvMjAyMjEwMjAwMzE1NDgu NDc1ODctMS14aWFudGluZy50aWFuQGxpbnV4LmFsaWJhYmEuY29tLwo+IFszXSBodHRwczovL2dp dGh1Yi5jb20vZGV2aWNldHJlZS1vcmcvZHQtc2NoZW1hL2Jsb2IvbWFpbi9kdHNjaGVtYS9zY2hl bWFzL2Nob3Nlbi55YW1sCj4gCj4gVGVzdGVkLWJ5OiBZaXh1biBMYW4gPHlpeHVuLmxhbkBnbWFp bC5jb20+Cj4gQ28tZGV2ZWxvcGVkLWJ5OiBYaWFudGluZyBUaWFuIDx4aWFudGluZy50aWFuQGxp bnV4LmFsaWJhYmEuY29tPgo+IENvLWRldmVsb3BlZC1ieTogWWl4dW4gTGFuIDx5aXh1bi5sYW5A Z21haWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IE5pY2sgS29zc2lmaWRpcyA8bWlja0BpY3MuZm9y dGguZ3I+Cj4gU2lnbmVkLW9mZi1ieTogU2ltb24gSG9ybWFuIDxob3Jtc0BrZXJuZWwub3JnPgo+ IFNpZ25lZC1vZmYtYnk6IFNvbmcgU2h1YWkgPHNvbmdzaHVhaXNodWFpQHRpbnlsYWIub3JnPgo+ IFNpZ25lZC1vZmYtYnk6IEJqw7ZybiBUw7ZwZWwgPGJqb3JuQHJpdm9zaW5jLmNvbT4KClRoYW5r cyBCasO2cm4sCgpPdmVyYWxsIEkgYW0gaGFwcHkgd2l0aCB0aGlzIHBhdGNoc2V0LiBCdXQgdGhl cmUgYXJlIGEgZmV3IG1pbm9yIHBvaW50cwpJJ2QgbGlrZSBhZGRyZXNzZWQsIHdoaWNoIHJlbGF0 ZSBzdHJpY3RseSB0byBidWlsZCBjb3ZlcmFnZSBhbmQgdGhlIENJLgpJIGNhbiBoYW5kbGUgdGhl c2UgbXlzZWxmIGlmIHlvdSBwcmVmZXIuCgpGaXJzdGx5LCBpdCB3b3VsZCBiZSByZWFsbHkgZ3Jl YXQgaWYgdGhlIGZvbGxvd2luZyBjb3VsZCBiZSBpbmNsdWRlZCBhdCB0aGUKZW5kIG9mIHRoZSBz ZXJpZXMsIHNvIHRoZXJlIGlzIHNvbWUgYnVpbGQgY292ZXJhZ2Ugb2YgUklTQy1WIGluIHRoZSBD SS4KKEZlZWwgZnJlZSB0byByZXdyaXRlIG9yIGF0dHJpYnV0ZSBob3dldmVyIHlvdSBzZWUgZml0 IC0gaXQgaXMgYSB0cml2YWwgb25lCmxpbmVyLikKCkZyb206IFNpbW9uIEhvcm1hbiA8aG9ybXNA a2VybmVsLm9yZz4KU3ViamVjdDogW1BBVENIXSB3b3JrZmxvdzogQWRkIHJpc2N2NjQKCkFkZCBy aXNjdjY0IHRvIG1hdHJpeCBvZiBidWlsZCBhcmNoaXRlY3R1cmVzLgoKU2lnbmVkLW9mZi1ieTog U2ltb24gSG9ybWFuIDxob3Jtc0BrZXJuZWwub3JnPgotLS0KIC5naXRodWIvd29ya2Zsb3dzL2J1 aWxkLnltbCB8IDEgKwogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCgpkaWZmIC0tZ2l0 IGEvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQueW1sIGIvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQu eW1sCmluZGV4IGZkOWVhNmM4ZWNhNy4uZDFiM2U3NDM5MWZmIDEwMDY0NAotLS0gYS8uZ2l0aHVi L3dvcmtmbG93cy9idWlsZC55bWwKKysrIGIvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQueW1sCkBA IC0xOSw2ICsxOSw3IEBAIGpvYnM6CiAgICAgICAgIC0gcG93ZXJwYwogICAgICAgICAtIHBvd2Vy cGM2NAogICAgICAgICAtIHBvd2VycGM2NGxlCisgICAgICAgIC0gcmlzY3Y2NAogICAgICAgICAt IHNoNAogICAgICAgICAtIHMzOTB4CiAgICAgICAgIC0geDg2XzY0LXgzMgoKLi4uCgo+IGRpZmYg LS1naXQgYS9rZXhlYy9hcmNoL3Jpc2N2L01ha2VmaWxlIGIva2V4ZWMvYXJjaC9yaXNjdi9NYWtl ZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mMjZjYzkw MjVlNzcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIva2V4ZWMvYXJjaC9yaXNjdi9NYWtlZmlsZQo+ IEBAIC0wLDAgKzEsMzUgQEAKPiArIwo+ICsjIGtleGVjIHJpc2N2Cj4gKyMKPiArcmlzY3ZfS0VY RUNfU1JDUyA9ICBrZXhlYy9hcmNoL3Jpc2N2L2tleGVjLXJpc2N2LmMKPiArcmlzY3ZfS0VYRUNf U1JDUyArPSBrZXhlYy9hcmNoL3Jpc2N2L2tleGVjLWVsZi1yaXNjdi5jCj4gK3Jpc2N2X0tFWEVD X1NSQ1MgKz0ga2V4ZWMvYXJjaC9yaXNjdi9jcmFzaGR1bXAtcmlzY3YuYwo+ICsKPiArcmlzY3Zf TUVNX1JFR0lPTlMgPSBrZXhlYy9tZW1fcmVnaW9ucy5jCj4gKwo+ICtyaXNjdl9EVF9PUFMgKz0g a2V4ZWMvZHQtb3BzLmMKPiArCj4gK3Jpc2N2X0FSQ0hfUkVVU0VfSU5JVFJEID0KPiArCj4gK3Jp c2N2X0NQUEZMQUdTICs9IC1JICQoc3JjZGlyKS9rZXhlYy8KPiArCj4gK2Rpc3QgKz0ga2V4ZWMv YXJjaC9yaXNjdi9NYWtlZmlsZSAkKHJpc2N2X0tFWEVDX1NSQ1MpCQkJXAoKa2V4ZWMvYXJjaC9y aXNjdi9pb21lbS5oIGFsc28gbmVlZHMgdG8gYmUgYWRkZWQgdG8gZGlzdApzbyB0aGF0IGl0IHNo b3dzIHVwIGluIHRoZSBkaXN0cmlidXRpb24gdGFyYmFsbC4KCj4gKwlrZXhlYy9hcmNoL3Jpc2N2 L2tleGVjLXJpc2N2LmgJCQkJCVwKPiArCWtleGVjL2FyY2gvcmlzY3YvaW5jbHVkZS9hcmNoL29w dGlvbnMuaAoKQWxzbywgaXQgd291bGQgYmUgbmljZSB0byBzb3J0IHRoZXNlIGxpbmVzIGFscGhh YmV0aWNhbGx5LgoKPiArCj4gK2lmZGVmIEhBVkVfTElCRkRUCj4gKwo+ICtMSUJTICs9IC1sZmR0 Cj4gKwo+ICtlbHNlCj4gKwo+ICtpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9saWJmZHQvTWFrZWZp bGUubGliZmR0Cj4gKwo+ICtsaWJmZHRfU1JDUyArPSAkKExJQkZEVF9TUkNTOiU9a2V4ZWMvbGli ZmR0LyUpCj4gKwo+ICtyaXNjdl9DUFBGTEFHUyArPSAtSSQoc3JjZGlyKS9rZXhlYy9saWJmZHQK PiArCj4gK3Jpc2N2X0tFWEVDX1NSQ1MgKz0gJChsaWJmZHRfU1JDUykKPiArCj4gK2VuZGlmCj4g KwoKLi4uCgo+IGRpZmYgLS1naXQgYS9rZXhlYy9kdC1vcHMuYyBiL2tleGVjL2R0LW9wcy5jCj4g aW5kZXggMGE5NmI3NWY2NWFhLi4zZTI4NWFiMjA0M2IgMTAwNjQ0Cj4gLS0tIGEva2V4ZWMvZHQt b3BzLmMKPiArKysgYi9rZXhlYy9kdC1vcHMuYwo+IEBAIC00LDkgKzQsMTEgQEAKPiAgI2luY2x1 ZGUgPGxpYmZkdC5oPgo+ICAjaW5jbHVkZSA8c3RkaW8uaD4KPiAgI2luY2x1ZGUgPHN0ZGxpYi5o Pgo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICAKPiAgI2luY2x1ZGUgImtleGVjLmgiCj4gICNp bmNsdWRlICJkdC1vcHMuaCIKPiArI2luY2x1ZGUgIm1lbV9yZWdpb25zLmgiCgpBcyBkdC1vcHMu YyB3aWxsIG5vdyB1c2Ugc3ltYm9scyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBpbiBtZW1fcmVnaW9u cy5jCndoZW4gdGhlIGZvcm1lciBpcyBjb21waWxlZCB0aGUgbGF0dGVyIG5vdyBtdXN0IGJlIGNv bXBpbGVkIHRvby4KCkluIHByYWN0aWNlIGl0IGlzIG9ubHkgbWlwcyB3aGVyZSB0aGF0IGlzIG5v dCB0aGUgY2FzZS4KQW5kIEkgYmVsaWV2ZSB0aGF0IGNhbiBiZSBhZGRyZXNzZWQgYnkgc3F1YXNo aW5nIHRoZSBmb2xsb3dpbmcgaW50bwp0aGlzIHBhdGNoLgoKZGlmZiAtLWdpdCBhL2tleGVjL2Fy Y2gvbWlwcy9NYWtlZmlsZSBiL2tleGVjL2FyY2gvbWlwcy9NYWtlZmlsZQppbmRleCAxZmU3ODg2 MDhmYmUuLmZhODdmYmRiNzg5NyAxMDA2NDQKLS0tIGEva2V4ZWMvYXJjaC9taXBzL01ha2VmaWxl CisrKyBiL2tleGVjL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtMTEsNiArMTEsOCBAQCBtaXBzX0ZT MkRUX0lOQ0xVREUgPSBcCiAJLWluY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvbWlwcy9jcmFz aGR1bXAtbWlwcy5oIFwKIAktaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9taXBzL2tleGVj LW1pcHMuaAogCittaXBzX01FTV9SRUdJT05TID0ga2V4ZWMvbWVtX3JlZ2lvbnMuYworCiBtaXBz X0RUX09QUyArPSBrZXhlYy9kdC1vcHMuYwogCiBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9saWJm ZHQvTWFrZWZpbGUubGliZmR0CgpGVFIsIEkgYmVsaWV2ZSB0aGlzIGlzIHRoZSBzYW1lIG1lbV9y ZWdpb25zX2FsbG9jX2FuZF9hZGQgaXNzdWUgdGhhdApJIGZsYWdnZWQgaW4gdGhlIHRocmVhZCBb Ml0uCgpBbmQgYXQgdGhlIGxpbmsgYmVsb3cgeW91IGNhbiBzZWUgYSBidWlsZCBmYWlsdXJlIHdp dGggdGhpcyBwYXRjaCwgYnV0IG5vdAp0aGUgZml4IGFib3ZlLCBhcHBsaWVkOgoKaHR0cHM6Ly9n aXRodWIuY29tL2hvcm1zL2tleGVjLXRvb2xzL2FjdGlvbnMvcnVucy8xNDU5MTM4MTYzMy9qb2Iv NDA5MjcyMTkyNDMKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJp c2N2Cg==