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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 59AE6C433EF for ; Fri, 13 May 2022 21:16:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384645AbiEMVQZ (ORCPT ); Fri, 13 May 2022 17:16:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39430 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1384652AbiEMVQX (ORCPT ); Fri, 13 May 2022 17:16:23 -0400 Received: from mail-yw1-x112f.google.com (mail-yw1-x112f.google.com [IPv6:2607:f8b0:4864:20::112f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8F8A92FFF7 for ; Fri, 13 May 2022 14:16:21 -0700 (PDT) Received: by mail-yw1-x112f.google.com with SMTP id 00721157ae682-2f7d7e3b5bfso102760637b3.5 for ; Fri, 13 May 2022 14:16:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atishpatra.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=MRtO0/Q9M+/YZltuvI+O6gptQdPEm7Chns62TBTJqlc=; b=XsaKL/zxEjiTu7bLIUanqsf5HUSHvBat2+niQNEEe7sWSGi5nCS81ON4Sk80OIdusO VWOauFKsK+sOP1mBCWVBrLxtnmsVrQntMWn7YwzXpLegvvq+wjPBmDo2CqHQYl/YU//l oOLn20hynM9LECB8QSe/1i1gZ3NilEwPE5KPw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=MRtO0/Q9M+/YZltuvI+O6gptQdPEm7Chns62TBTJqlc=; b=t31U6eaZYVXIUPGl9nYis288OsBXj5BPMGr4zEoh2lRQIJgzP+s395u00482XIggPz v9o/BezXRTKLLGJc9aOvzcRhbjknwqiRJXp9WzaEtX403SmhcSt2y6g6mBx70LYz4dus XsiSYIs5rocR2UwMpTg8eBGGSrGSTwptWZjfpFJWRFrxs9oucDEv1kzbPTuftLjqBQCq k/uWEr0Z4x0C/RrEOGeJyZKIcvmZHoZ8d00drUHraHszAtmIzCCudpek7p1jGoiXBvY7 rYfiUzpUdPpdey1FC7XNbXt+A1eKQXXRDz/z62gj0ijK7pwkr9wo3I8b24t6LvhyoFY6 kJUQ== X-Gm-Message-State: AOAM531RqypVSUlL2toMOVgDr0W/9OUXCcyULEEjg6vItVYpDraB7CkW J7sUJXYComWV2ZEUFE8QjdXOPmPbkenCK6P5movk X-Google-Smtp-Source: ABdhPJykpwd6++Qrr66Y1B5RF+cba9dVJSWF8myhIJOtMwmcDp+XjSshI91XllrQqxdsxNvOIt02QPk+u9pSluSBgnQ= X-Received: by 2002:a81:1196:0:b0:2f8:ccab:8807 with SMTP id 144-20020a811196000000b002f8ccab8807mr7766773ywr.58.1652476580686; Fri, 13 May 2022 14:16:20 -0700 (PDT) MIME-Version: 1.0 References: <20220512033045.1101909-1-daolu@rivosinc.com> <689ad3c4-0365-bd27-4873-bff8dbe6591b@sholland.org> In-Reply-To: From: Atish Patra Date: Fri, 13 May 2022 14:16:09 -0700 Message-ID: Subject: Re: [PATCH] arch/riscv: Add Zihintpause extension support To: Samuel Holland Cc: Dao Lu , "linux-kernel@vger.kernel.org List" , Paul Walmsley , Palmer Dabbelt , Albert Ou , linux-riscv Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, May 13, 2022 at 12:09 AM Atish Patra wrote: > > On Thu, May 12, 2022 at 6:06 PM Samuel Holland wrot= e: > > > > On 5/11/22 10:30 PM, Dao Lu wrote: > > > This patch: > > > 1. Build with _zihintpause if the toolchain has support for it > > > 2. Detects if the platform supports the extension > > > > This instruction is a hint, meaning it is a harmless no-op if the exten= sion is > > unsupported by the CPU. So we can use it as long as the compiler suppor= ts it. > > There is no need to probe for it at runtime. > > > > Is it guaranteed that the hardware won't throw any error if it sees a > fence instruction with > (pred=3DW, succ=3D0, fm=3D0, rd=3Dx0, and rs1=3Dx0.) ? I couldn't find an= ything > specific related to this in the spec. > Never mind. I found this "The FENCE encoding currently has nine non-trivial combinations of the four bits PR, PW, SR, and SW, plus one extra encoding FENCE.TSO which facilitates mapping of =E2=80=9Cacquire+release=E2=80=9D or RVTSO semantics. The remaining seven combinations have empty predecessor and/or successor sets and hence are no-ops." However, we still need the extension availability check to preserve the older platform's behavior. Currently, the stall in cpu_relax is caused by the div. Without the extension probe, it will just execute "nop" which was not the earlier behavior. > I think using the static key mechanism provides backward compatibility > without any runtime impact. > > > Regards, > > Samuel > > > > > 3. Use PAUSE for cpu_relax if both toolchain and the platform suppo= rt it > > > > > > Signed-off-by: Dao Lu > > > --- > > > arch/riscv/Makefile | 4 ++++ > > > arch/riscv/include/asm/hwcap.h | 1 + > > > arch/riscv/include/asm/vdso/processor.h | 19 ++++++++++++++++--- > > > arch/riscv/kernel/cpu.c | 1 + > > > arch/riscv/kernel/cpufeature.c | 7 +++++++ > > > 5 files changed, 29 insertions(+), 3 deletions(-) > > > > > > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > > > index 7d81102cffd4..900a8fda1a2d 100644 > > > --- a/arch/riscv/Makefile > > > +++ b/arch/riscv/Makefile > > > @@ -56,6 +56,10 @@ riscv-march-$(CONFIG_RISCV_ISA_C) :=3D $(riscv-ma= rch-y)c > > > toolchain-need-zicsr-zifencei :=3D $(call cc-option-yn, -march=3D$(r= iscv-march-y)_zicsr_zifencei) > > > riscv-march-$(toolchain-need-zicsr-zifencei) :=3D $(riscv-march-y)_z= icsr_zifencei > > > > > > +# Check if the toolchain supports Zihintpause extension > > > +toolchain-supports-zihintpause :=3D $(call cc-option-yn, -march=3D$(= riscv-march-y)_zihintpause) > > > +riscv-march-$(toolchain-supports-zihintpause) :=3D $(riscv-march-y)_= zihintpause > > > + > > > KBUILD_CFLAGS +=3D -march=3D$(subst fd,,$(riscv-march-y)) > > > KBUILD_AFLAGS +=3D -march=3D$(riscv-march-y) > > > > > > diff --git a/arch/riscv/include/asm/hwcap.h b/arch/riscv/include/asm/= hwcap.h > > > index 0734e42f74f2..caa9ee5459b4 100644 > > > --- a/arch/riscv/include/asm/hwcap.h > > > +++ b/arch/riscv/include/asm/hwcap.h > > > @@ -52,6 +52,7 @@ extern unsigned long elf_hwcap; > > > */ > > > enum riscv_isa_ext_id { > > > RISCV_ISA_EXT_SSCOFPMF =3D RISCV_ISA_EXT_BASE, > > > + RISCV_ISA_EXT_ZIHINTPAUSE, > > > RISCV_ISA_EXT_ID_MAX =3D RISCV_ISA_EXT_MAX, > > > }; > > > > > > diff --git a/arch/riscv/include/asm/vdso/processor.h b/arch/riscv/inc= lude/asm/vdso/processor.h > > > index 134388cbaaa1..106b35ba8cac 100644 > > > --- a/arch/riscv/include/asm/vdso/processor.h > > > +++ b/arch/riscv/include/asm/vdso/processor.h > > > @@ -4,15 +4,28 @@ > > > > > > #ifndef __ASSEMBLY__ > > > > > > +#include > > > #include > > > +#include > > > > > > +extern struct static_key_false riscv_pause_available; > > > static inline void cpu_relax(void) > > > { > > > + if (!static_branch_likely(&riscv_pause_available)) { > > > #ifdef __riscv_muldiv > > > - int dummy; > > > - /* In lieu of a halt instruction, induce a long-latency stall. = */ > > > - __asm__ __volatile__ ("div %0, %0, zero" : "=3Dr" (dummy)); > > > + int dummy; > > > + /* In lieu of a halt instruction, induce a long-latency= stall. */ > > > + __asm__ __volatile__ ("div %0, %0, zero" : "=3Dr" (dumm= y)); > > > #endif > > > + } else { > > > +#ifdef __riscv_zihintpause > > > + /* > > > + * Reduce instruction retirement. > > > + * This assumes the PC changes. > > > + */ > > > + __asm__ __volatile__ ("pause"); > > > +#endif > > > + } > > > barrier(); > > > } > > > > > > diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c > > > index ccb617791e56..89e563e9c4cc 100644 > > > --- a/arch/riscv/kernel/cpu.c > > > +++ b/arch/riscv/kernel/cpu.c > > > @@ -88,6 +88,7 @@ int riscv_of_parent_hartid(struct device_node *node= ) > > > */ > > > static struct riscv_isa_ext_data isa_ext_arr[] =3D { > > > __RISCV_ISA_EXT_DATA(sscofpmf, RISCV_ISA_EXT_SSCOFPMF), > > > + __RISCV_ISA_EXT_DATA(zihintpause, RISCV_ISA_EXT_ZIHINTPAUSE), > > > __RISCV_ISA_EXT_DATA("", RISCV_ISA_EXT_MAX), > > > }; > > > > > > diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufe= ature.c > > > index 1b2d42d7f589..327c19507dbb 100644 > > > --- a/arch/riscv/kernel/cpufeature.c > > > +++ b/arch/riscv/kernel/cpufeature.c > > > @@ -24,6 +24,8 @@ static DECLARE_BITMAP(riscv_isa, RISCV_ISA_EXT_MAX)= __read_mostly; > > > #ifdef CONFIG_FPU > > > __ro_after_init DEFINE_STATIC_KEY_FALSE(cpu_hwcap_fpu); > > > #endif > > > +DEFINE_STATIC_KEY_FALSE(riscv_pause_available); > > > +EXPORT_SYMBOL_GPL(riscv_pause_available); > > > > > > /** > > > * riscv_isa_extension_base() - Get base extension word > > > @@ -192,6 +194,7 @@ void __init riscv_fill_hwcap(void) > > > set_bit(*ext - 'a', this_isa); > > > } else { > > > SET_ISA_EXT_MAP("sscofpmf", RISCV_ISA_E= XT_SSCOFPMF); > > > + SET_ISA_EXT_MAP("zihintpause", RISCV_IS= A_EXT_ZIHINTPAUSE); > > > } > > > #undef SET_ISA_EXT_MAP > > > } > > > @@ -213,6 +216,10 @@ void __init riscv_fill_hwcap(void) > > > > > > } > > > > > > + if (__riscv_isa_extension_available(riscv_isa, RISCV_ISA_EXT_ZI= HINTPAUSE)) { > > > + static_branch_enable(&riscv_pause_available); > > > + } > > > + > > > /* We don't support systems with F but without D, so mask those= out > > > * here. */ > > > if ((elf_hwcap & COMPAT_HWCAP_ISA_F) && !(elf_hwcap & COMPAT_HW= CAP_ISA_D)) { > > > > > > > > > _______________________________________________ > > linux-riscv mailing list > > linux-riscv@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-riscv > > > > -- > Regards, > Atish --=20 Regards, Atish 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 829E4C433F5 for ; Fri, 13 May 2022 21:16:38 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=nublWEXrboRtItbLuYYsY1UZNhgYpyBBggDmJz3mH9w=; b=cRu/9u1isZvvpG onjm5I1+GGI08ALubSvyBheiPWiTiwprqiBNdA5quKpwFl3ZSFYblolrZ3lK5p5WUDWMoKx1OTh3H GPmokkIg9BkXWJZLIF59YA2ozY1CS45fnE6gBM/O+LLHHukk9vTplfuKWjuyDtDSqQWXlvhS+Km+7 noHevoi4YmMkE+2J6iCjOy8hOFIkHiEXsFMe+sfbkT+IQIqD4M+hGJO/fma6y0HZDnY0E62uZFyuJ 8jzt3NOUaAsOT0jg0fVHmNgacD4u7q6bhdcEfQlYpILvt7ZxNURsgfcxbN8pYhpo8jtBCgVHWGaLv P5Gsa58wVSyV2yWo3OJg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1npceA-0004u0-8W; Fri, 13 May 2022 21:16:26 +0000 Received: from mail-yw1-x1129.google.com ([2607:f8b0:4864:20::1129]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1npce6-0004t8-Ic for linux-riscv@lists.infradead.org; Fri, 13 May 2022 21:16:24 +0000 Received: by mail-yw1-x1129.google.com with SMTP id 00721157ae682-2f83983782fso102837927b3.6 for ; Fri, 13 May 2022 14:16:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atishpatra.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=MRtO0/Q9M+/YZltuvI+O6gptQdPEm7Chns62TBTJqlc=; b=XsaKL/zxEjiTu7bLIUanqsf5HUSHvBat2+niQNEEe7sWSGi5nCS81ON4Sk80OIdusO VWOauFKsK+sOP1mBCWVBrLxtnmsVrQntMWn7YwzXpLegvvq+wjPBmDo2CqHQYl/YU//l oOLn20hynM9LECB8QSe/1i1gZ3NilEwPE5KPw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=MRtO0/Q9M+/YZltuvI+O6gptQdPEm7Chns62TBTJqlc=; b=JLukvwcEU1qPy4OWlqUE7RiK5kkocP2hvBRfKdcE++oFuM1lAKqU39WUJ3KG0N6MU1 xbXQzXFEd2sfwbdUh5JbBWTxOMbsXH2Z+xAZscCGSGfdsWG1/9JSbgGkWEpyo7CwJthf fMT+EsSd9ZZAu+IrC2zGXuaVpXqU6Em/zFa6Gih6HbGlcDW8ZT2lfI5wtgpHXECB/ssF Qoh0rJ7X5hclHiyG6b2YT7X/6qafnmUBJ6OOSleCuoDxFSQg0qfCcnrS7zBGeRSwBhsV DRMhubkfXmJAityQyAbtndNChXTGh+Ob3Di7GnSyEbK/+pru4M00ytUpxF9iUSm/1L5c eKDg== X-Gm-Message-State: AOAM532SDOreL/+ExunQKQQK4iLYz1Kms+w5hdJ3vqLWdzQNM0rtBeg3 0J1hzFFvU3X5Pp6O+TmerExaY/bPAfqTBGdKl7UI X-Google-Smtp-Source: ABdhPJykpwd6++Qrr66Y1B5RF+cba9dVJSWF8myhIJOtMwmcDp+XjSshI91XllrQqxdsxNvOIt02QPk+u9pSluSBgnQ= X-Received: by 2002:a81:1196:0:b0:2f8:ccab:8807 with SMTP id 144-20020a811196000000b002f8ccab8807mr7766773ywr.58.1652476580686; Fri, 13 May 2022 14:16:20 -0700 (PDT) MIME-Version: 1.0 References: <20220512033045.1101909-1-daolu@rivosinc.com> <689ad3c4-0365-bd27-4873-bff8dbe6591b@sholland.org> In-Reply-To: From: Atish Patra Date: Fri, 13 May 2022 14:16:09 -0700 Message-ID: Subject: Re: [PATCH] arch/riscv: Add Zihintpause extension support To: Samuel Holland Cc: Dao Lu , "linux-kernel@vger.kernel.org List" , Paul Walmsley , Palmer Dabbelt , Albert Ou , linux-riscv X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220513_141622_846506_C9BBC870 X-CRM114-Status: GOOD ( 34.04 ) 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 T24gRnJpLCBNYXkgMTMsIDIwMjIgYXQgMTI6MDkgQU0gQXRpc2ggUGF0cmEgPGF0aXNocEBhdGlz aHBhdHJhLm9yZz4gd3JvdGU6Cj4KPiBPbiBUaHUsIE1heSAxMiwgMjAyMiBhdCA2OjA2IFBNIFNh bXVlbCBIb2xsYW5kIDxzYW11ZWxAc2hvbGxhbmQub3JnPiB3cm90ZToKPiA+Cj4gPiBPbiA1LzEx LzIyIDEwOjMwIFBNLCBEYW8gTHUgd3JvdGU6Cj4gPiA+IFRoaXMgcGF0Y2g6Cj4gPiA+ICAgMS4g QnVpbGQgd2l0aCBfemloaW50cGF1c2UgaWYgdGhlIHRvb2xjaGFpbiBoYXMgc3VwcG9ydCBmb3Ig aXQKPiA+ID4gICAyLiBEZXRlY3RzIGlmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyB0aGUgZXh0ZW5z aW9uCj4gPgo+ID4gVGhpcyBpbnN0cnVjdGlvbiBpcyBhIGhpbnQsIG1lYW5pbmcgaXQgaXMgYSBo YXJtbGVzcyBuby1vcCBpZiB0aGUgZXh0ZW5zaW9uIGlzCj4gPiB1bnN1cHBvcnRlZCBieSB0aGUg Q1BVLiBTbyB3ZSBjYW4gdXNlIGl0IGFzIGxvbmcgYXMgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGl0 Lgo+ID4gVGhlcmUgaXMgbm8gbmVlZCB0byBwcm9iZSBmb3IgaXQgYXQgcnVudGltZS4KPiA+Cj4K PiBJcyBpdCBndWFyYW50ZWVkIHRoYXQgdGhlIGhhcmR3YXJlIHdvbid0IHRocm93IGFueSBlcnJv ciBpZiBpdCBzZWVzIGEKPiBmZW5jZSBpbnN0cnVjdGlvbiB3aXRoCj4gKHByZWQ9Vywgc3VjYz0w LCBmbT0wLCByZD14MCwgYW5kIHJzMT14MC4pID8gSSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nCj4g c3BlY2lmaWMgcmVsYXRlZCB0byB0aGlzIGluIHRoZSBzcGVjLgo+CgpOZXZlciBtaW5kLiBJIGZv dW5kIHRoaXMKCiJUaGUgRkVOQ0UgZW5jb2RpbmcgY3VycmVudGx5IGhhcyBuaW5lIG5vbi10cml2 aWFsIGNvbWJpbmF0aW9ucyBvZiB0aGUKZm91ciBiaXRzIFBSLCBQVywgU1IsCmFuZCBTVywgcGx1 cyBvbmUgZXh0cmEgZW5jb2RpbmcgRkVOQ0UuVFNPIHdoaWNoIGZhY2lsaXRhdGVzIG1hcHBpbmcg b2YK4oCcYWNxdWlyZStyZWxlYXNl4oCdIG9yClJWVFNPIHNlbWFudGljcy4gVGhlIHJlbWFpbmlu ZyBzZXZlbiBjb21iaW5hdGlvbnMgaGF2ZSBlbXB0eQpwcmVkZWNlc3NvciBhbmQvb3Igc3VjY2Vz c29yCnNldHMgYW5kIGhlbmNlIGFyZSBuby1vcHMuIgoKSG93ZXZlciwgd2Ugc3RpbGwgbmVlZCB0 aGUgZXh0ZW5zaW9uIGF2YWlsYWJpbGl0eSBjaGVjayB0byBwcmVzZXJ2ZQp0aGUgb2xkZXIgcGxh dGZvcm0ncyBiZWhhdmlvci4KQ3VycmVudGx5LCB0aGUgc3RhbGwgaW4gY3B1X3JlbGF4IGlzIGNh dXNlZCBieSB0aGUgZGl2LiBXaXRob3V0IHRoZQpleHRlbnNpb24gcHJvYmUsIGl0IHdpbGwganVz dCBleGVjdXRlCiJub3AiIHdoaWNoIHdhcyBub3QgdGhlIGVhcmxpZXIgYmVoYXZpb3IuCgo+IEkg dGhpbmsgdXNpbmcgdGhlIHN0YXRpYyBrZXkgbWVjaGFuaXNtIHByb3ZpZGVzIGJhY2t3YXJkIGNv bXBhdGliaWxpdHkKPiB3aXRob3V0IGFueSBydW50aW1lIGltcGFjdC4KPgo+ID4gUmVnYXJkcywK PiA+IFNhbXVlbAo+ID4KPiA+ID4gICAzLiBVc2UgUEFVU0UgZm9yIGNwdV9yZWxheCBpZiBib3Ro IHRvb2xjaGFpbiBhbmQgdGhlIHBsYXRmb3JtIHN1cHBvcnQgaXQKPiA+ID4KPiA+ID4gU2lnbmVk LW9mZi1ieTogRGFvIEx1IDxkYW9sdUByaXZvc2luYy5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgYXJj aC9yaXNjdi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgIDQgKysrKwo+ID4gPiAgYXJj aC9yaXNjdi9pbmNsdWRlL2FzbS9od2NhcC5oICAgICAgICAgIHwgIDEgKwo+ID4gPiAgYXJjaC9y aXNjdi9pbmNsdWRlL2FzbS92ZHNvL3Byb2Nlc3Nvci5oIHwgMTkgKysrKysrKysrKysrKysrKy0t LQo+ID4gPiAgYXJjaC9yaXNjdi9rZXJuZWwvY3B1LmMgICAgICAgICAgICAgICAgIHwgIDEgKwo+ ID4gPiAgYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jICAgICAgICAgIHwgIDcgKysrKysr Kwo+ID4gPiAgNSBmaWxlcyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygt KQo+ID4gPgo+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9NYWtlZmlsZSBiL2FyY2gvcmlz Y3YvTWFrZWZpbGUKPiA+ID4gaW5kZXggN2Q4MTEwMmNmZmQ0Li45MDBhOGZkYTFhMmQgMTAwNjQ0 Cj4gPiA+IC0tLSBhL2FyY2gvcmlzY3YvTWFrZWZpbGUKPiA+ID4gKysrIGIvYXJjaC9yaXNjdi9N YWtlZmlsZQo+ID4gPiBAQCAtNTYsNiArNTYsMTAgQEAgcmlzY3YtbWFyY2gtJChDT05GSUdfUklT Q1ZfSVNBX0MpICA6PSAkKHJpc2N2LW1hcmNoLXkpYwo+ID4gPiAgdG9vbGNoYWluLW5lZWQtemlj c3ItemlmZW5jZWkgOj0gJChjYWxsIGNjLW9wdGlvbi15biwgLW1hcmNoPSQocmlzY3YtbWFyY2gt eSlfemljc3JfemlmZW5jZWkpCj4gPiA+ICByaXNjdi1tYXJjaC0kKHRvb2xjaGFpbi1uZWVkLXpp Y3NyLXppZmVuY2VpKSA6PSAkKHJpc2N2LW1hcmNoLXkpX3ppY3NyX3ppZmVuY2VpCj4gPiA+Cj4g PiA+ICsjIENoZWNrIGlmIHRoZSB0b29sY2hhaW4gc3VwcG9ydHMgWmloaW50cGF1c2UgZXh0ZW5z aW9uCj4gPiA+ICt0b29sY2hhaW4tc3VwcG9ydHMtemloaW50cGF1c2UgOj0gJChjYWxsIGNjLW9w dGlvbi15biwgLW1hcmNoPSQocmlzY3YtbWFyY2gteSlfemloaW50cGF1c2UpCj4gPiA+ICtyaXNj di1tYXJjaC0kKHRvb2xjaGFpbi1zdXBwb3J0cy16aWhpbnRwYXVzZSkgOj0gJChyaXNjdi1tYXJj aC15KV96aWhpbnRwYXVzZQo+ID4gPiArCj4gPiA+ICBLQlVJTERfQ0ZMQUdTICs9IC1tYXJjaD0k KHN1YnN0IGZkLCwkKHJpc2N2LW1hcmNoLXkpKQo+ID4gPiAgS0JVSUxEX0FGTEFHUyArPSAtbWFy Y2g9JChyaXNjdi1tYXJjaC15KQo+ID4gPgo+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9p bmNsdWRlL2FzbS9od2NhcC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9od2NhcC5oCj4gPiA+ IGluZGV4IDA3MzRlNDJmNzRmMi4uY2FhOWVlNTQ1OWI0IDEwMDY0NAo+ID4gPiAtLS0gYS9hcmNo L3Jpc2N2L2luY2x1ZGUvYXNtL2h3Y2FwLmgKPiA+ID4gKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRl L2FzbS9od2NhcC5oCj4gPiA+IEBAIC01Miw2ICs1Miw3IEBAIGV4dGVybiB1bnNpZ25lZCBsb25n IGVsZl9od2NhcDsKPiA+ID4gICAqLwo+ID4gPiAgZW51bSByaXNjdl9pc2FfZXh0X2lkIHsKPiA+ ID4gICAgICAgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRiA9IFJJU0NWX0lTQV9FWFRfQkFTRSwKPiA+ ID4gKyAgICAgUklTQ1ZfSVNBX0VYVF9aSUhJTlRQQVVTRSwKPiA+ID4gICAgICAgUklTQ1ZfSVNB X0VYVF9JRF9NQVggPSBSSVNDVl9JU0FfRVhUX01BWCwKPiA+ID4gIH07Cj4gPiA+Cj4gPiA+IGRp ZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Zkc28vcHJvY2Vzc29yLmggYi9hcmNo L3Jpc2N2L2luY2x1ZGUvYXNtL3Zkc28vcHJvY2Vzc29yLmgKPiA+ID4gaW5kZXggMTM0Mzg4Y2Jh YWExLi4xMDZiMzViYThjYWMgMTAwNjQ0Cj4gPiA+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9h c20vdmRzby9wcm9jZXNzb3IuaAo+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Zk c28vcHJvY2Vzc29yLmgKPiA+ID4gQEAgLTQsMTUgKzQsMjggQEAKPiA+ID4KPiA+ID4gICNpZm5k ZWYgX19BU1NFTUJMWV9fCj4gPiA+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5o Pgo+ID4gPiAgI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+Cj4gPiA+ICsjaW5jbHVkZSA8YXNtL2h3 Y2FwLmg+Cj4gPiA+Cj4gPiA+ICtleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmlzY3Zf cGF1c2VfYXZhaWxhYmxlOwo+ID4gPiAgc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lk KQo+ID4gPiAgewo+ID4gPiArICAgICBpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZyaXNjdl9w YXVzZV9hdmFpbGFibGUpKSB7Cj4gPiA+ICAjaWZkZWYgX19yaXNjdl9tdWxkaXYKPiA+ID4gLSAg ICAgaW50IGR1bW15Owo+ID4gPiAtICAgICAvKiBJbiBsaWV1IG9mIGEgaGFsdCBpbnN0cnVjdGlv biwgaW5kdWNlIGEgbG9uZy1sYXRlbmN5IHN0YWxsLiAqLwo+ID4gPiAtICAgICBfX2FzbV9fIF9f dm9sYXRpbGVfXyAoImRpdiAlMCwgJTAsIHplcm8iIDogIj1yIiAoZHVtbXkpKTsKPiA+ID4gKyAg ICAgICAgICAgICBpbnQgZHVtbXk7Cj4gPiA+ICsgICAgICAgICAgICAgLyogSW4gbGlldSBvZiBh IGhhbHQgaW5zdHJ1Y3Rpb24sIGluZHVjZSBhIGxvbmctbGF0ZW5jeSBzdGFsbC4gKi8KPiA+ID4g KyAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImRpdiAlMCwgJTAsIHplcm8iIDog Ij1yIiAoZHVtbXkpKTsKPiA+ID4gICNlbmRpZgo+ID4gPiArICAgICB9IGVsc2Ugewo+ID4gPiAr I2lmZGVmIF9fcmlzY3ZfemloaW50cGF1c2UKPiA+ID4gKyAgICAgICAgICAgICAvKgo+ID4gPiAr ICAgICAgICAgICAgICAqIFJlZHVjZSBpbnN0cnVjdGlvbiByZXRpcmVtZW50Lgo+ID4gPiArICAg ICAgICAgICAgICAqIFRoaXMgYXNzdW1lcyB0aGUgUEMgY2hhbmdlcy4KPiA+ID4gKyAgICAgICAg ICAgICAgKi8KPiA+ID4gKyAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInBhdXNl Iik7Cj4gPiA+ICsjZW5kaWYKPiA+ID4gKyAgICAgfQo+ID4gPiAgICAgICBiYXJyaWVyKCk7Cj4g PiA+ICB9Cj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9jcHUuYyBi L2FyY2gvcmlzY3Yva2VybmVsL2NwdS5jCj4gPiA+IGluZGV4IGNjYjYxNzc5MWU1Ni4uODllNTYz ZTljNGNjIDEwMDY0NAo+ID4gPiAtLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9jcHUuYwo+ID4gPiAr KysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9jcHUuYwo+ID4gPiBAQCAtODgsNiArODgsNyBAQCBpbnQg cmlzY3Zfb2ZfcGFyZW50X2hhcnRpZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCj4gPiA+ICAg Ki8KPiA+ID4gIHN0YXRpYyBzdHJ1Y3QgcmlzY3ZfaXNhX2V4dF9kYXRhIGlzYV9leHRfYXJyW10g PSB7Cj4gPiA+ICAgICAgIF9fUklTQ1ZfSVNBX0VYVF9EQVRBKHNzY29mcG1mLCBSSVNDVl9JU0Ff RVhUX1NTQ09GUE1GKSwKPiA+ID4gKyAgICAgX19SSVNDVl9JU0FfRVhUX0RBVEEoemloaW50cGF1 c2UsIFJJU0NWX0lTQV9FWFRfWklISU5UUEFVU0UpLAo+ID4gPiAgICAgICBfX1JJU0NWX0lTQV9F WFRfREFUQSgiIiwgUklTQ1ZfSVNBX0VYVF9NQVgpLAo+ID4gPiAgfTsKPiA+ID4KPiA+ID4gZGlm ZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYyBiL2FyY2gvcmlzY3Yva2Vy bmVsL2NwdWZlYXR1cmUuYwo+ID4gPiBpbmRleCAxYjJkNDJkN2Y1ODkuLjMyN2MxOTUwN2RiYiAx MDA2NDQKPiA+ID4gLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jCj4gPiA+ICsr KyBiL2FyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYwo+ID4gPiBAQCAtMjQsNiArMjQsOCBA QCBzdGF0aWMgREVDTEFSRV9CSVRNQVAocmlzY3ZfaXNhLCBSSVNDVl9JU0FfRVhUX01BWCkgX19y ZWFkX21vc3RseTsKPiA+ID4gICNpZmRlZiBDT05GSUdfRlBVCj4gPiA+ICBfX3JvX2FmdGVyX2lu aXQgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoY3B1X2h3Y2FwX2ZwdSk7Cj4gPiA+ICAjZW5kaWYK PiA+ID4gK0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHJpc2N2X3BhdXNlX2F2YWlsYWJsZSk7Cj4g PiA+ICtFWFBPUlRfU1lNQk9MX0dQTChyaXNjdl9wYXVzZV9hdmFpbGFibGUpOwo+ID4gPgo+ID4g PiAgLyoqCj4gPiA+ICAgKiByaXNjdl9pc2FfZXh0ZW5zaW9uX2Jhc2UoKSAtIEdldCBiYXNlIGV4 dGVuc2lvbiB3b3JkCj4gPiA+IEBAIC0xOTIsNiArMTk0LDcgQEAgdm9pZCBfX2luaXQgcmlzY3Zf ZmlsbF9od2NhcCh2b2lkKQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRf Yml0KCpleHQgLSAnYScsIHRoaXNfaXNhKTsKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7Cj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9JU0FfRVhUX01B UCgic3Njb2ZwbWYiLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKTsKPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU0VUX0lTQV9FWFRfTUFQKCJ6aWhpbnRwYXVzZSIsIFJJU0NWX0lT QV9FWFRfWklISU5UUEFVU0UpOwo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgfQo+ID4gPiAg I3VuZGVmIFNFVF9JU0FfRVhUX01BUAo+ID4gPiAgICAgICAgICAgICAgIH0KPiA+ID4gQEAgLTIx Myw2ICsyMTYsMTAgQEAgdm9pZCBfX2luaXQgcmlzY3ZfZmlsbF9od2NhcCh2b2lkKQo+ID4gPgo+ ID4gPiAgICAgICB9Cj4gPiA+Cj4gPiA+ICsgICAgIGlmIChfX3Jpc2N2X2lzYV9leHRlbnNpb25f YXZhaWxhYmxlKHJpc2N2X2lzYSwgUklTQ1ZfSVNBX0VYVF9aSUhJTlRQQVVTRSkpIHsKPiA+ID4g KyAgICAgICAgICAgICBzdGF0aWNfYnJhbmNoX2VuYWJsZSgmcmlzY3ZfcGF1c2VfYXZhaWxhYmxl KTsKPiA+ID4gKyAgICAgfQo+ID4gPiArCj4gPiA+ICAgICAgIC8qIFdlIGRvbid0IHN1cHBvcnQg c3lzdGVtcyB3aXRoIEYgYnV0IHdpdGhvdXQgRCwgc28gbWFzayB0aG9zZSBvdXQKPiA+ID4gICAg ICAgICogaGVyZS4gKi8KPiA+ID4gICAgICAgaWYgKChlbGZfaHdjYXAgJiBDT01QQVRfSFdDQVBf SVNBX0YpICYmICEoZWxmX2h3Y2FwICYgQ09NUEFUX0hXQ0FQX0lTQV9EKSkgewo+ID4gPgo+ID4K PiA+Cj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ ID4gbGludXgtcmlzY3YgbWFpbGluZyBsaXN0Cj4gPiBsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRl YWQub3JnCj4gPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LXJpc2N2Cj4KPgo+Cj4gLS0KPiBSZWdhcmRzLAo+IEF0aXNoCgoKCi0tIApSZWdhcmRzLApB dGlzaAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo=