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=-15.9 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 71526C47096 for ; Thu, 3 Jun 2021 15:06:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 50E2560FF2 for ; Thu, 3 Jun 2021 15:06:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231614AbhFCPId (ORCPT ); Thu, 3 Jun 2021 11:08:33 -0400 Received: from relay4-d.mail.gandi.net ([217.70.183.196]:41635 "EHLO relay4-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230138AbhFCPIb (ORCPT ); Thu, 3 Jun 2021 11:08:31 -0400 Received: (Authenticated sender: alex@ghiti.fr) by relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 1FC0CE0004; Thu, 3 Jun 2021 15:06:39 +0000 (UTC) Subject: Re: [PATCH v3 1/3] riscv: Factorize xip and !xip kernel address conversion macros To: Jisheng Zhang , Anup Patel Cc: Paul Walmsley , Palmer Dabbelt , Albert Ou , Jisheng Zhang , Christoph Hellwig , Zong Li , linux-riscv , "linux-kernel@vger.kernel.org List" References: <20210603082749.1256129-1-alex@ghiti.fr> <20210603082749.1256129-2-alex@ghiti.fr> <20210603202748.2775f739@xhacker> <64cdb4f9-06f0-59b9-acf9-6fc298db37d7@ghiti.fr> <20210603215337.4da052e2@xhacker> From: Alex Ghiti Message-ID: Date: Thu, 3 Jun 2021 17:06:39 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.2 MIME-Version: 1.0 In-Reply-To: <20210603215337.4da052e2@xhacker> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le 3/06/2021 à 15:53, Jisheng Zhang a écrit : > On Thu, 3 Jun 2021 18:46:47 +0530 > Anup Patel wrote: > >> On Thu, Jun 3, 2021 at 6:27 PM Alex Ghiti wrote: >>> >>> Hi Jisheng, > > Hi, > >>> >>> Le 3/06/2021 à 14:27, Jisheng Zhang a écrit : >>>> On Thu, 3 Jun 2021 10:27:47 +0200 >>>> Alexandre Ghiti wrote: >>>> >>>>> To simplify the kernel address conversion code, make the same definition of >>>>> kernel_mapping_pa_to_va and kernel_mapping_va_to_pa compatible for both xip >>>>> and !xip kernel by defining XIP_OFFSET to 0 in !xip kernel. >>>>> >>>>> Signed-off-by: Alexandre Ghiti >>>>> --- >>>>> arch/riscv/include/asm/page.h | 14 +++----------- >>>>> arch/riscv/include/asm/pgtable.h | 2 ++ >>>>> 2 files changed, 5 insertions(+), 11 deletions(-) >>>>> >>>>> diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h >>>>> index 6a7761c86ec2..6e004d8fda4d 100644 >>>>> --- a/arch/riscv/include/asm/page.h >>>>> +++ b/arch/riscv/include/asm/page.h >>>>> @@ -93,9 +93,7 @@ extern unsigned long va_pa_offset; >>>>> #ifdef CONFIG_64BIT >>>>> extern unsigned long va_kernel_pa_offset; >>>>> #endif >>>>> -#ifdef CONFIG_XIP_KERNEL >>>>> extern unsigned long va_kernel_xip_pa_offset; >>>>> -#endif >>>>> extern unsigned long pfn_base; >>>>> #define ARCH_PFN_OFFSET (pfn_base) >>>>> #else >>>>> @@ -103,6 +101,7 @@ extern unsigned long pfn_base; >>>>> #ifdef CONFIG_64BIT >>>>> #define va_kernel_pa_offset 0 >>>>> #endif >>>>> +#define va_kernel_xip_pa_offset 0 >>>>> #define ARCH_PFN_OFFSET (PAGE_OFFSET >> PAGE_SHIFT) >>>>> #endif /* CONFIG_MMU */ >>>>> >>>>> @@ -110,29 +109,22 @@ extern unsigned long kernel_virt_addr; >>>>> >>>>> #ifdef CONFIG_64BIT >>>>> #define linear_mapping_pa_to_va(x) ((void *)((unsigned long)(x) + va_pa_offset)) >>>>> -#ifdef CONFIG_XIP_KERNEL >>>>> #define kernel_mapping_pa_to_va(y) ({ \ >>>>> unsigned long _y = y; \ >>>>> (_y >= CONFIG_PHYS_RAM_BASE) ? >>>> >>>> This CONFIG_PHYS_RAM_BASE is only available for XIP, could result in a >>>> compiler error for !XIP? >>> >>> You're right, I have this patch in my branch and forgot to squash it >>> >>>> >>>> I'm also concerned with the unecessary overhead of kernel_mapping_pa_to_va() >>>> for !XIP case, there's a "if" condition branch, and extra symbol: va_kernel_xip_pa_offset >>> >>> I understand your concerns even if I don't find that the overhead is >>> that important here, I prefer the readability improvement. I can always > > For readability, we still can avoid introducing va_kernel_xip_pa_offset > symbol by simply define va_kernel_xip_pa_offset as 0 if XIP as you did > for XIP_OFFSET > > PS: this may need a preparation patch: > http://lists.infradead.org/pipermail/linux-riscv/2021-June/006802.html IIUC, that won't improve readability, just avoid to allocate va_kernel_xip_pa_offset in !XIP kernel right? > >>> add unlikely/likely builtin to improve things or completely remove this >>> patch if others agree with you. >> >> I would also prefer readable code for long-term maintainability. Currently, >> the nested "#ifdefs" are increasing causing developers to easily break >> untested combinations. >> >> Regards, >> Anup >> >>> >>> Thanks, >>> >>> Alex >>> >>>> >>>>> (void *)((unsigned long)(_y) + va_kernel_pa_offset + XIP_OFFSET) : \ >>>>> (void *)((unsigned long)(_y) + va_kernel_xip_pa_offset); \ >>>>> }) >>>>> -#else >>>>> -#define kernel_mapping_pa_to_va(x) ((void *)((unsigned long)(x) + va_kernel_pa_offset)) >>>>> -#endif >>>>> #define __pa_to_va_nodebug(x) linear_mapping_pa_to_va(x) >>>>> >>>>> #define linear_mapping_va_to_pa(x) ((unsigned long)(x) - va_pa_offset) >>>>> -#ifdef CONFIG_XIP_KERNEL >>>>> #define kernel_mapping_va_to_pa(y) ({ \ >>>>> unsigned long _y = y; \ >>>>> (_y < kernel_virt_addr + XIP_OFFSET) ? \ >>>>> ((unsigned long)(_y) - va_kernel_xip_pa_offset) : \ >>>>> ((unsigned long)(_y) - va_kernel_pa_offset - XIP_OFFSET); \ >>>>> }) >>>> >>>> Similar as kernel_mapping_pa_to_va(), an overhead of "if" condition branch >>>> for !XIP and extra va_kernel_xip_pa_offset symbol. >>>> >>>>> -#else >>>>> -#define kernel_mapping_va_to_pa(x) ((unsigned long)(x) - va_kernel_pa_offset) >>>>> -#endif >>>>> + >>>>> #define __va_to_pa_nodebug(x) ({ \ >>>>> unsigned long _x = x; \ >>>>> (_x < kernel_virt_addr) ? \ >>>>> @@ -141,7 +133,7 @@ extern unsigned long kernel_virt_addr; >>>>> #else >>>>> #define __pa_to_va_nodebug(x) ((void *)((unsigned long) (x) + va_pa_offset)) >>>>> #define __va_to_pa_nodebug(x) ((unsigned long)(x) - va_pa_offset) >>>>> -#endif >>>>> +#endif /* CONFIG_64BIT */ >>>>> >>>>> #ifdef CONFIG_DEBUG_VIRTUAL >>>>> extern phys_addr_t __virt_to_phys(unsigned long x); >>>>> diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h >>>>> index bde8ce3bfe7c..d98e931a31e5 100644 >>>>> --- a/arch/riscv/include/asm/pgtable.h >>>>> +++ b/arch/riscv/include/asm/pgtable.h >>>>> @@ -77,6 +77,8 @@ >>>>> >>>>> #ifdef CONFIG_XIP_KERNEL >>>>> #define XIP_OFFSET SZ_8M >>>>> +#else >>>>> +#define XIP_OFFSET 0 >>>>> #endif >>>>> >>>>> #ifndef __ASSEMBLY__ >>>> >>>> >>>> >>>> _______________________________________________ >>>> linux-riscv mailing list >>>> linux-riscv@lists.infradead.org >>>> http://lists.infradead.org/mailman/listinfo/linux-riscv >>>> > > > > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv > 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.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 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 D1B59C47082 for ; Thu, 3 Jun 2021 15:07:17 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 33EF360FF2 for ; Thu, 3 Jun 2021 15:07:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 33EF360FF2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ghiti.fr Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=xiOLgYKUgYaf1eyMh4hIrJkrVAru7HPRUogBUheVqLE=; b=iRtIU0kHHYw25Vgd8NSM5Qydym RzQvtjn3JWWLA7AyFzXz39x/wct4c9BDxP5CURWLibnM69BY5s1INt0vbOyq1VUnZ7Mq6auKadED1 Sbm7Ak3VbdRbY5+NlTqF6mzQjA7AK9iYTc7jO1Lm5WAeCFQKZZorjXoey/1mmblNPYzvIc2atnPrO xT7tY90WpxHMvGj/8xcpW97lCPRpXedK/y+ogkb9P95E7MGRPL1jdmfF6PFnHybWBZLUvTzThpSSV EWtQiC0erZSYA0iT7ejjGXUtRnVAFVQj+CLrvntZtElltzjvkwqgw2yjoQZzpNw12nWlUH3TIUwh3 F/gHQy1g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1loovu-009IYH-Rn; Thu, 03 Jun 2021 15:06:54 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1loovo-009IWo-K6 for linux-riscv@lists.infradead.org; Thu, 03 Jun 2021 15:06:53 +0000 Received: (Authenticated sender: alex@ghiti.fr) by relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 1FC0CE0004; Thu, 3 Jun 2021 15:06:39 +0000 (UTC) Subject: Re: [PATCH v3 1/3] riscv: Factorize xip and !xip kernel address conversion macros To: Jisheng Zhang , Anup Patel Cc: Paul Walmsley , Palmer Dabbelt , Albert Ou , Jisheng Zhang , Christoph Hellwig , Zong Li , linux-riscv , "linux-kernel@vger.kernel.org List" References: <20210603082749.1256129-1-alex@ghiti.fr> <20210603082749.1256129-2-alex@ghiti.fr> <20210603202748.2775f739@xhacker> <64cdb4f9-06f0-59b9-acf9-6fc298db37d7@ghiti.fr> <20210603215337.4da052e2@xhacker> From: Alex Ghiti Message-ID: Date: Thu, 3 Jun 2021 17:06:39 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.2 MIME-Version: 1.0 In-Reply-To: <20210603215337.4da052e2@xhacker> Content-Language: fr X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210603_080648_959419_3E6E93EF X-CRM114-Status: GOOD ( 22.02 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org TGUgMy8wNi8yMDIxIMOgIDE1OjUzLCBKaXNoZW5nIFpoYW5nIGEgw6ljcml0wqA6Cj4gT24gVGh1 LCAzIEp1biAyMDIxIDE4OjQ2OjQ3ICswNTMwCj4gQW51cCBQYXRlbCA8YW51cEBicmFpbmZhdWx0 Lm9yZz4gd3JvdGU6Cj4gCj4+IE9uIFRodSwgSnVuIDMsIDIwMjEgYXQgNjoyNyBQTSBBbGV4IEdo aXRpIDxhbGV4QGdoaXRpLmZyPiB3cm90ZToKPj4+Cj4+PiBIaSBKaXNoZW5nLAo+IAo+IEhpLAo+ IAo+Pj4KPj4+IExlIDMvMDYvMjAyMSDDoCAxNDoyNywgSmlzaGVuZyBaaGFuZyBhIMOpY3JpdCA6 Cj4+Pj4gT24gVGh1LCAgMyBKdW4gMjAyMSAxMDoyNzo0NyArMDIwMAo+Pj4+IEFsZXhhbmRyZSBH aGl0aSA8YWxleEBnaGl0aS5mcj4gd3JvdGU6Cj4+Pj4gICAKPj4+Pj4gVG8gc2ltcGxpZnkgdGhl IGtlcm5lbCBhZGRyZXNzIGNvbnZlcnNpb24gY29kZSwgbWFrZSB0aGUgc2FtZSBkZWZpbml0aW9u IG9mCj4+Pj4+IGtlcm5lbF9tYXBwaW5nX3BhX3RvX3ZhIGFuZCBrZXJuZWxfbWFwcGluZ192YV90 b19wYSBjb21wYXRpYmxlIGZvciBib3RoIHhpcAo+Pj4+PiBhbmQgIXhpcCBrZXJuZWwgYnkgZGVm aW5pbmcgWElQX09GRlNFVCB0byAwIGluICF4aXAga2VybmVsLgo+Pj4+Pgo+Pj4+PiBTaWduZWQt b2ZmLWJ5OiBBbGV4YW5kcmUgR2hpdGkgPGFsZXhAZ2hpdGkuZnI+Cj4+Pj4+IC0tLQo+Pj4+PiAg ICBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BhZ2UuaCAgICB8IDE0ICsrKy0tLS0tLS0tLS0tCj4+ Pj4+ICAgIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIHwgIDIgKysKPj4+Pj4gICAg MiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQo+Pj4+Pgo+ Pj4+PiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3Jp c2N2L2luY2x1ZGUvYXNtL3BhZ2UuaAo+Pj4+PiBpbmRleCA2YTc3NjFjODZlYzIuLjZlMDA0ZDhm ZGE0ZCAxMDA2NDQKPj4+Pj4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wYWdlLmgKPj4+ Pj4gKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wYWdlLmgKPj4+Pj4gQEAgLTkzLDkgKzkz LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmFfcGFfb2Zmc2V0Owo+Pj4+PiAgICAjaWZkZWYg Q09ORklHXzY0QklUCj4+Pj4+ICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHZhX2tlcm5lbF9wYV9v ZmZzZXQ7Cj4+Pj4+ICAgICNlbmRpZgo+Pj4+PiAtI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCj4+ Pj4+ICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHZhX2tlcm5lbF94aXBfcGFfb2Zmc2V0Owo+Pj4+ PiAtI2VuZGlmCj4+Pj4+ICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHBmbl9iYXNlOwo+Pj4+PiAg ICAjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVCAgICAgICAgICAgIChwZm5fYmFzZSkKPj4+Pj4gICAg I2Vsc2UKPj4+Pj4gQEAgLTEwMyw2ICsxMDEsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBwZm5f YmFzZTsKPj4+Pj4gICAgI2lmZGVmIENPTkZJR182NEJJVAo+Pj4+PiAgICAjZGVmaW5lIHZhX2tl cm5lbF9wYV9vZmZzZXQgICAgICAgIDAKPj4+Pj4gICAgI2VuZGlmCj4+Pj4+ICsjZGVmaW5lIHZh X2tlcm5lbF94aXBfcGFfb2Zmc2V0IDAKPj4+Pj4gICAgI2RlZmluZSBBUkNIX1BGTl9PRkZTRVQg ICAgICAgICAgICAoUEFHRV9PRkZTRVQgPj4gUEFHRV9TSElGVCkKPj4+Pj4gICAgI2VuZGlmIC8q IENPTkZJR19NTVUgKi8KPj4+Pj4KPj4+Pj4gQEAgLTExMCwyOSArMTA5LDIyIEBAIGV4dGVybiB1 bnNpZ25lZCBsb25nIGtlcm5lbF92aXJ0X2FkZHI7Cj4+Pj4+Cj4+Pj4+ICAgICNpZmRlZiBDT05G SUdfNjRCSVQKPj4+Pj4gICAgI2RlZmluZSBsaW5lYXJfbWFwcGluZ19wYV90b192YSh4KSAoKHZv aWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpICsgdmFfcGFfb2Zmc2V0KSkKPj4+Pj4gLSNpZmRlZiBD T05GSUdfWElQX0tFUk5FTAo+Pj4+PiAgICAjZGVmaW5lIGtlcm5lbF9tYXBwaW5nX3BhX3RvX3Zh KHkpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4+ Pj4gICAgICAgdW5zaWduZWQgbG9uZyBfeSA9IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+Pj4+ICAgICAgIChfeSA+PSBDT05G SUdfUEhZU19SQU1fQkFTRSkgPwo+Pj4+Cj4+Pj4gVGhpcyBDT05GSUdfUEhZU19SQU1fQkFTRSBp cyBvbmx5IGF2YWlsYWJsZSBmb3IgWElQLCBjb3VsZCByZXN1bHQgaW4gYQo+Pj4+IGNvbXBpbGVy IGVycm9yIGZvciAhWElQPwo+Pj4KPj4+IFlvdSdyZSByaWdodCwgSSBoYXZlIHRoaXMgcGF0Y2gg aW4gbXkgYnJhbmNoIGFuZCBmb3Jnb3QgdG8gc3F1YXNoIGl0Cj4+PiAgIAo+Pj4+Cj4+Pj4gSSdt IGFsc28gY29uY2VybmVkIHdpdGggdGhlIHVuZWNlc3Nhcnkgb3ZlcmhlYWQgb2Yga2VybmVsX21h cHBpbmdfcGFfdG9fdmEoKQo+Pj4+IGZvciAhWElQIGNhc2UsIHRoZXJlJ3MgYSAiaWYiIGNvbmRp dGlvbiBicmFuY2gsIGFuZCBleHRyYSBzeW1ib2w6IHZhX2tlcm5lbF94aXBfcGFfb2Zmc2V0Cj4+ Pgo+Pj4gSSB1bmRlcnN0YW5kIHlvdXIgY29uY2VybnMgZXZlbiBpZiBJIGRvbid0IGZpbmQgdGhh dCB0aGUgb3ZlcmhlYWQgaXMKPj4+IHRoYXQgaW1wb3J0YW50IGhlcmUsIEkgcHJlZmVyIHRoZSBy ZWFkYWJpbGl0eSBpbXByb3ZlbWVudC4gSSBjYW4gYWx3YXlzCj4gCj4gRm9yIHJlYWRhYmlsaXR5 LCB3ZSBzdGlsbCBjYW4gYXZvaWQgaW50cm9kdWNpbmcgdmFfa2VybmVsX3hpcF9wYV9vZmZzZXQK PiBzeW1ib2wgYnkgc2ltcGx5IGRlZmluZSB2YV9rZXJuZWxfeGlwX3BhX29mZnNldCBhcyAwIGlm IFhJUCBhcyB5b3UgZGlkCj4gZm9yIFhJUF9PRkZTRVQKPiAKPiBQUzogdGhpcyBtYXkgbmVlZCBh IHByZXBhcmF0aW9uIHBhdGNoOgo+IGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL3BpcGVybWFp bC9saW51eC1yaXNjdi8yMDIxLUp1bmUvMDA2ODAyLmh0bWwKCklJVUMsIHRoYXQgd29uJ3QgaW1w cm92ZSByZWFkYWJpbGl0eSwganVzdCBhdm9pZCB0byBhbGxvY2F0ZSAKdmFfa2VybmVsX3hpcF9w YV9vZmZzZXQgaW4gIVhJUCBrZXJuZWwgcmlnaHQ/Cgo+IAo+Pj4gYWRkIHVubGlrZWx5L2xpa2Vs eSBidWlsdGluIHRvIGltcHJvdmUgdGhpbmdzIG9yIGNvbXBsZXRlbHkgcmVtb3ZlIHRoaXMKPj4+ IHBhdGNoIGlmIG90aGVycyBhZ3JlZSB3aXRoIHlvdS4KPj4KPj4gSSB3b3VsZCBhbHNvIHByZWZl ciByZWFkYWJsZSBjb2RlIGZvciBsb25nLXRlcm0gbWFpbnRhaW5hYmlsaXR5LiBDdXJyZW50bHks Cj4+IHRoZSBuZXN0ZWQgIiNpZmRlZnMiIGFyZSBpbmNyZWFzaW5nIGNhdXNpbmcgZGV2ZWxvcGVy cyB0byBlYXNpbHkgYnJlYWsKPj4gdW50ZXN0ZWQgY29tYmluYXRpb25zLgo+Pgo+PiBSZWdhcmRz LAo+PiBBbnVwCj4+Cj4+Pgo+Pj4gVGhhbmtzLAo+Pj4KPj4+IEFsZXgKPj4+ICAgCj4+Pj4gICAK Pj4+Pj4gICAgICAgICAgICAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZykoX3kpICsgdmFfa2Vy bmVsX3BhX29mZnNldCArIFhJUF9PRkZTRVQpIDogICAgICBcCj4+Pj4+ICAgICAgICAgICAgICAg KHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKF95KSArIHZhX2tlcm5lbF94aXBfcGFfb2Zmc2V0KTsg ICAgICAgICAgICAgICAgXAo+Pj4+PiAgICAgICB9KQo+Pj4+PiAtI2Vsc2UKPj4+Pj4gLSNkZWZp bmUga2VybmVsX21hcHBpbmdfcGFfdG9fdmEoeCkgICgodm9pZCAqKSgodW5zaWduZWQgbG9uZyko eCkgKyB2YV9rZXJuZWxfcGFfb2Zmc2V0KSkKPj4+Pj4gLSNlbmRpZgo+Pj4+PiAgICAjZGVmaW5l IF9fcGFfdG9fdmFfbm9kZWJ1Zyh4KSAgICAgICAgICAgICAgbGluZWFyX21hcHBpbmdfcGFfdG9f dmEoeCkKPj4+Pj4KPj4+Pj4gICAgI2RlZmluZSBsaW5lYXJfbWFwcGluZ192YV90b19wYSh4KSAo KHVuc2lnbmVkIGxvbmcpKHgpIC0gdmFfcGFfb2Zmc2V0KQo+Pj4+PiAtI2lmZGVmIENPTkZJR19Y SVBfS0VSTkVMCj4+Pj4+ICAgICNkZWZpbmUga2VybmVsX21hcHBpbmdfdmFfdG9fcGEoeSkgKHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+Pj4+PiAgICAg ICB1bnNpZ25lZCBsb25nIF95ID0geTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4+Pj4+ICAgICAgIChfeSA8IGtlcm5lbF92aXJ0X2FkZHIgKyBY SVBfT0ZGU0VUKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4+Pj4gICAg ICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpKF95KSAtIHZhX2tlcm5lbF94aXBfcGFfb2Zmc2V0 KSA6ICAgICAgICAgICAgICAgXAo+Pj4+PiAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyko X3kpIC0gdmFfa2VybmVsX3BhX29mZnNldCAtIFhJUF9PRkZTRVQpOyAgICAgICBcCj4+Pj4+ICAg ICAgIH0pCj4+Pj4KPj4+PiBTaW1pbGFyIGFzIGtlcm5lbF9tYXBwaW5nX3BhX3RvX3ZhKCksIGFu IG92ZXJoZWFkIG9mICJpZiIgY29uZGl0aW9uIGJyYW5jaAo+Pj4+IGZvciAhWElQIGFuZCBleHRy YSB2YV9rZXJuZWxfeGlwX3BhX29mZnNldCBzeW1ib2wuCj4+Pj4gICAKPj4+Pj4gLSNlbHNlCj4+ Pj4+IC0jZGVmaW5lIGtlcm5lbF9tYXBwaW5nX3ZhX3RvX3BhKHgpICAoKHVuc2lnbmVkIGxvbmcp KHgpIC0gdmFfa2VybmVsX3BhX29mZnNldCkKPj4+Pj4gLSNlbmRpZgo+Pj4+PiArCj4+Pj4+ICAg ICNkZWZpbmUgX192YV90b19wYV9ub2RlYnVnKHgpICAgICAgKHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+Pj4+PiAgICAgICB1bnNpZ25lZCBsb25nIF94 ID0geDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4+Pj4+ICAgICAgIChfeCA8IGtlcm5lbF92aXJ0X2FkZHIpID8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4+Pj4gQEAgLTE0MSw3ICsxMzMsNyBAQCBl eHRlcm4gdW5zaWduZWQgbG9uZyBrZXJuZWxfdmlydF9hZGRyOwo+Pj4+PiAgICAjZWxzZQo+Pj4+ PiAgICAjZGVmaW5lIF9fcGFfdG9fdmFfbm9kZWJ1Zyh4KSAgKCh2b2lkICopKCh1bnNpZ25lZCBs b25nKSAoeCkgKyB2YV9wYV9vZmZzZXQpKQo+Pj4+PiAgICAjZGVmaW5lIF9fdmFfdG9fcGFfbm9k ZWJ1Zyh4KSAgKCh1bnNpZ25lZCBsb25nKSh4KSAtIHZhX3BhX29mZnNldCkKPj4+Pj4gLSNlbmRp Zgo+Pj4+PiArI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwo+Pj4+Pgo+Pj4+PiAgICAjaWZkZWYg Q09ORklHX0RFQlVHX1ZJUlRVQUwKPj4+Pj4gICAgZXh0ZXJuIHBoeXNfYWRkcl90IF9fdmlydF90 b19waHlzKHVuc2lnbmVkIGxvbmcgeCk7Cj4+Pj4+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2lu Y2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCj4+ Pj4+IGluZGV4IGJkZThjZTNiZmU3Yy4uZDk4ZTkzMWEzMWU1IDEwMDY0NAo+Pj4+PiAtLS0gYS9h cmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaAo+Pj4+PiArKysgYi9hcmNoL3Jpc2N2L2lu Y2x1ZGUvYXNtL3BndGFibGUuaAo+Pj4+PiBAQCAtNzcsNiArNzcsOCBAQAo+Pj4+Pgo+Pj4+PiAg ICAjaWZkZWYgQ09ORklHX1hJUF9LRVJORUwKPj4+Pj4gICAgI2RlZmluZSBYSVBfT0ZGU0VUICAg ICAgICAgU1pfOE0KPj4+Pj4gKyNlbHNlCj4+Pj4+ICsjZGVmaW5lIFhJUF9PRkZTRVQgICAgICAg ICAgMAo+Pj4+PiAgICAjZW5kaWYKPj4+Pj4KPj4+Pj4gICAgI2lmbmRlZiBfX0FTU0VNQkxZX18K Pj4+Pgo+Pj4+Cj4+Pj4KPj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+Pj4+IGxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdAo+Pj4+IGxpbnV4LXJpc2N2 QGxpc3RzLmluZnJhZGVhZC5vcmcKPj4+PiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cj4+Pj4gICAKPiAKPiAKPiAKPiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGxpbnV4LXJpc2N2IG1haWxpbmcg bGlzdAo+IGxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKPiBodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cj4gCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxp c3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==