From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 653A923D0 for ; Tue, 9 Jan 2024 02:20:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="1F2wpBk7" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-1d409bcb0e7so9469315ad.1 for ; Mon, 08 Jan 2024 18:20:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1704766858; x=1705371658; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=GVG8c40f68G3korcyEKi0z8ULvfpyOFV+s3GtOXVEHo=; b=1F2wpBk7F5WZV0KDV4EUPOhKPnarcGdL1A8WWZtSUqfjZJ/70wewamBM8hRj7c1ib3 V1HKJiagBjCylBltt5spy9lKJdy5ad3TYNBWwcC5Sftk0zBn00VXvxG14awwN16trbsr Hu8gOnGYgwt1OuPb+P7D25h96NL3awnoxOACJ1XLxNdlCB5pmGE6krw4bnyjkIfZR4a6 x1dx+FBp3BwSCbvKbSf1GLZDEsBEbAXsDKtKth99gjehjL1+I31QvRJfXQT0576kGXNP DTLxtb9gRr/IsjRWkot8v6OAJ7FnKHSdpF3DSjTtouMT+OLyG+rSD2LzsWJQynKduqUv Jbtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704766858; x=1705371658; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=GVG8c40f68G3korcyEKi0z8ULvfpyOFV+s3GtOXVEHo=; b=i/3OKoP4QXrCQeCM88gqMi61JL8kVx1kPkZpj9lyp+l0wMNLQI0eiLtMU4luviiUaS cB9AfMrPbC8E9NdHZE5dQKS/tS0Pzar26/Z1TLxvytyg9oiYVngA4R4UxdDKGMBC/U76 LS6xw1CCx9o5+JlOQlZPYDKgi805r/IxM5VNA8eOnZNSm9s1p67gKijJxmmKbZZhPE7r K4hrUbBWRv/YrVNqF/KSxhgZj5BTHOpN96UlQSLKx2K2UHnAgutJK7XLwXm4T6sJBQFN qArC8uzimxeap/f+soBKW9LVvBCoYPbdT+d5/ISrLyrHWpcyZCmlcZOPA6YueiDxkOco YlvQ== X-Gm-Message-State: AOJu0Yy4phl3peHnBrKJ8YO1dXaMUO0NQQ5v4oPp3WkPVhEX/PDuR7c6 /UTpBuxK5Q+7KP/B6CTz2PZwS2obWbvuiA== X-Google-Smtp-Source: AGHT+IGXYRm5IEE3b4P8Xco9rGgrHSS8TganxZJswq3boRda5meQG0P0cEGLQN2/znprRxf6er9ZaQ== X-Received: by 2002:a17:902:740b:b0:1d3:ec6f:3c47 with SMTP id g11-20020a170902740b00b001d3ec6f3c47mr2406282pll.71.1704766858597; Mon, 08 Jan 2024 18:20:58 -0800 (PST) Received: from ghost ([12.44.203.122]) by smtp.gmail.com with ESMTPSA id d19-20020a170902c19300b001bc930d4517sm567240pld.42.2024.01.08.18.20.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 18:20:58 -0800 (PST) Date: Mon, 8 Jan 2024 18:20:55 -0800 From: Charlie Jenkins To: Atish Patra Cc: Paul Walmsley , Palmer Dabbelt , Albert Ou , Jonathan Corbet , Conor Dooley , =?iso-8859-1?Q?Cl=E9ment_L=E9ger?= , Randy Dunlap , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Subject: Re: [PATCH v5 2/2] documentation: Document PR_RISCV_SET_ICACHE_FLUSH_CTX prctl Message-ID: References: <20240108-fencei-v5-0-aa1e51d7222f@rivosinc.com> <20240108-fencei-v5-2-aa1e51d7222f@rivosinc.com> Precedence: bulk X-Mailing-List: linux-doc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Mon, Jan 08, 2024 at 05:24:47PM -0800, Atish Patra wrote: > On Mon, Jan 8, 2024 at 10:42 AM Charlie Jenkins wrote: > > > > Provide documentation that explains how to properly do CMODX in riscv. > > > > Signed-off-by: Charlie Jenkins > > --- > > Documentation/arch/riscv/cmodx.rst | 88 ++++++++++++++++++++++++++++++++++++++ > > Documentation/arch/riscv/index.rst | 1 + > > 2 files changed, 89 insertions(+) > > > > diff --git a/Documentation/arch/riscv/cmodx.rst b/Documentation/arch/riscv/cmodx.rst > > new file mode 100644 > > index 000000000000..afd7086c222c > > --- /dev/null > > +++ b/Documentation/arch/riscv/cmodx.rst > > @@ -0,0 +1,88 @@ > > +.. SPDX-License-Identifier: GPL-2.0 > > + > > +============================================================================== > > +Concurrent Modification and Execution of Instructions (CMODX) for RISC-V Linux > > +============================================================================== > > + > > +CMODX is a programming technique where a program executes instructions that were > > +modified by the program itself. Instruction storage and the instruction cache > > +(icache) are not guaranteed to be synchronized on RISC-V hardware. Therefore, the > > +program must enforce its own synchronization with the unprivileged fence.i > > +instruction. > > + > > +However, the default Linux ABI prohibits the use of fence.i in userspace > > +applications. At any point the scheduler may migrate a task onto a new hart. If > > +migration occurs after the userspace synchronized the icache and instruction > > +storage with fence.i, the icache will no longer be clean. This is due to the > > +behavior of fence.i only affecting the hart that it is called on. Thus, the hart > > +that the task has been migrated to may not have synchronized instruction storage > > +and icache. > > + > > +There are two ways to solve this problem: use the riscv_flush_icache() syscall, > > +or use the ``PR_RISCV_SET_ICACHE_FLUSH_CTX`` prctl() and emit fence.i in > > +userspace. The syscall performs a one-off icache flushing operation. The prctl > > +changes the Linux ABI to allow userspace to emit icache flushing operations. > > + > > +prctl() Interface > > +--------------------- > > + > > +Call prctl() with ``PR_RISCV_SET_ICACHE_FLUSH_CTX`` as the first argument. The > > +remaining arguments will be delegated to the riscv_set_icache_flush_ctx > > +function detailed below. > > + > > +.. kernel-doc:: arch/riscv/mm/cacheflush.c > > + :identifiers: riscv_set_icache_flush_ctx > > + > > Document the arguments of the prctl as well ? Do you mean to include the ``PR_RISCV_SET_ICACHE_FLUSH_CTX`` key in the comment of riscv_set_icache_flush_ctx? The args to riscv_set_icache_flush_ctx are the args to the prctl except for the key. - Charlie > > > +Example usage: > > + > > +The following files are meant to be compiled and linked with each other. The > > +modify_instruction() function replaces an add with 0 with an add with one, > > +causing the instruction sequence in get_value() to change from returning a zero > > +to returning a one. > > + > > +cmodx.c:: > > + > > + #include > > + #include > > + > > + extern int get_value(); > > + extern void modify_instruction(); > > + > > + int main() > > + { > > + int value = get_value(); > > + printf("Value before cmodx: %d\n", value); > > + > > + // Call prctl before first fence.i is called inside modify_instruction > > + prctl(PR_RISCV_SET_ICACHE_FLUSH_CTX_ON, PR_RISCV_CTX_SW_FENCEI, 0); > > + modify_instruction(); > > + > > + value = get_value(); > > + printf("Value after cmodx: %d\n", value); > > + return 0; > > + } > > + > > +cmodx.S:: > > + > > + .option norvc > > + > > + .text > > + .global modify_instruction > > + modify_instruction: > > + lw a0, new_insn > > + lui a5,%hi(old_insn) > > + sw a0,%lo(old_insn)(a5) > > + fence.i > > + ret > > + > > + .section modifiable, "awx" > > + .global get_value > > + get_value: > > + li a0, 0 > > + old_insn: > > + addi a0, a0, 0 > > + ret > > + > > + .data > > + new_insn: > > + addi a0, a0, 1 > > diff --git a/Documentation/arch/riscv/index.rst b/Documentation/arch/riscv/index.rst > > index 4dab0cb4b900..eecf347ce849 100644 > > --- a/Documentation/arch/riscv/index.rst > > +++ b/Documentation/arch/riscv/index.rst > > @@ -13,6 +13,7 @@ RISC-V architecture > > patch-acceptance > > uabi > > vector > > + cmodx > > > > features > > > > > > -- > > 2.43.0 > > > > > -- > 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 E198EC3DA6E for ; Tue, 9 Jan 2024 02:21:23 +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=ieKRM8SuHRAVbRHTwl7e891YnOP6+RVUaQwSGaFCA4Q=; b=bMzhvSnPKeFChe 0oyyvDmfqIJq05k8lSf0TYmlivOuq5+X2zTIn3MMw5ei1sywYaBUPfafyy9ZtA/Mp0BR2Kz0ieuKk 1wepgTUqRY0rSeYfMnYFv5XGUyKdyhpL5HvwveY1oRLUGi/+QenHK+076Mkydbll7eSkYKiWCW9qL V1Cf1/55jELD7oxP+dnPZKPxDAFyQ8gksE7UB0v4ifRrB4VJEVNdc4me9vqW7iDlE7iO6+Kgk9Ygm FwMxDepO8W38xORwYlpMgQawXjYv2A66Y/B4Ebx0CqLbzhXwN7a9fjJw+qfaYXXbuTy4CMjMPXr2S 6DHWP4+aAiHVaKZgj5jQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rN1jk-006gf6-19; Tue, 09 Jan 2024 02:21:04 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rN1jh-006geM-1a for linux-riscv@lists.infradead.org; Tue, 09 Jan 2024 02:21:02 +0000 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-1d3f3ee00a2so9434685ad.3 for ; Mon, 08 Jan 2024 18:20:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1704766858; x=1705371658; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=GVG8c40f68G3korcyEKi0z8ULvfpyOFV+s3GtOXVEHo=; b=14NdFOslF33oXb3rF7DN7amzn9m8g0dAYhnBCup/26N73Yos4bbSgav78105CGUTe0 nuU6Z0rcKGOML+VKaJ5RXSd89emFIX7u3W7P45XMSjtvp/ay+5jWVeVRT89U8G8knxVu 0Ep7HAgTi6Yq6djQ9NDkSMujn71275Z2Gwb4OXptY+fM3o0u2o4YJF0B9JRFFgcve4lo groIOovYdQG+S6YYUk9UKHxKwUxcXqzrVsB5gjh2CGlvWFK3puZ5Od8HLStGf1Xp1R8+ VYAb94mnKqKvV48wQUE7+yev0SEatYRZhnJs2SToEonX8iC2YneghvpfjNS3ZRjXiUbN 2IPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704766858; x=1705371658; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=GVG8c40f68G3korcyEKi0z8ULvfpyOFV+s3GtOXVEHo=; b=ByV+Rs837yJCX88crVLgCZn9kK/ivhdAbKCwZJWr3JE6IU28JZ2B9gn6URdEqhSU6i scL+ZzFlVtGkD0zALv+omyRqCh/RxB/V5HaV4htaBNA3AYUEEt0wqJ7R8bUXoA+VOyDi Alciya76Ct/uGQ+YUTnrMRIxRAdwTaEirO53znLB/TOgDJy4WYP4maJkOHViWa8uoSaw 90NmHksgjDzT2bqLR6gNbjRSAtMOPtOZsWPCs/qIdPZrCANFxxWrr0WBpaPLk3lx21x7 cZuMTXLYAc2kf/9EYiGcdmRp7tj6T1NYS3HgMSoYBb7g82mlPwwub92Yi9ibRaEzpMt6 1f7g== X-Gm-Message-State: AOJu0Ywzt74CRdtRiUCCAhc5z66WtEiUfVlV2I89WtPNxrEP/6pjeYFa V45KMEKsox9uR3r3sG01UFA0jxZaPwekyQ== X-Google-Smtp-Source: AGHT+IGXYRm5IEE3b4P8Xco9rGgrHSS8TganxZJswq3boRda5meQG0P0cEGLQN2/znprRxf6er9ZaQ== X-Received: by 2002:a17:902:740b:b0:1d3:ec6f:3c47 with SMTP id g11-20020a170902740b00b001d3ec6f3c47mr2406282pll.71.1704766858597; Mon, 08 Jan 2024 18:20:58 -0800 (PST) Received: from ghost ([12.44.203.122]) by smtp.gmail.com with ESMTPSA id d19-20020a170902c19300b001bc930d4517sm567240pld.42.2024.01.08.18.20.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 18:20:58 -0800 (PST) Date: Mon, 8 Jan 2024 18:20:55 -0800 From: Charlie Jenkins To: Atish Patra Cc: Paul Walmsley , Palmer Dabbelt , Albert Ou , Jonathan Corbet , Conor Dooley , =?iso-8859-1?Q?Cl=E9ment_L=E9ger?= , Randy Dunlap , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Subject: Re: [PATCH v5 2/2] documentation: Document PR_RISCV_SET_ICACHE_FLUSH_CTX prctl Message-ID: References: <20240108-fencei-v5-0-aa1e51d7222f@rivosinc.com> <20240108-fencei-v5-2-aa1e51d7222f@rivosinc.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240108_182101_529131_09FB578B X-CRM114-Status: GOOD ( 31.73 ) 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 T24gTW9uLCBKYW4gMDgsIDIwMjQgYXQgMDU6MjQ6NDdQTSAtMDgwMCwgQXRpc2ggUGF0cmEgd3Jv dGU6Cj4gT24gTW9uLCBKYW4gOCwgMjAyNCBhdCAxMDo0MuKAr0FNIENoYXJsaWUgSmVua2lucyA8 Y2hhcmxpZUByaXZvc2luYy5jb20+IHdyb3RlOgo+ID4KPiA+IFByb3ZpZGUgZG9jdW1lbnRhdGlv biB0aGF0IGV4cGxhaW5zIGhvdyB0byBwcm9wZXJseSBkbyBDTU9EWCBpbiByaXNjdi4KPiA+Cj4g PiBTaWduZWQtb2ZmLWJ5OiBDaGFybGllIEplbmtpbnMgPGNoYXJsaWVAcml2b3NpbmMuY29tPgo+ ID4gLS0tCj4gPiAgRG9jdW1lbnRhdGlvbi9hcmNoL3Jpc2N2L2Ntb2R4LnJzdCB8IDg4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgRG9jdW1lbnRhdGlvbi9hcmNo L3Jpc2N2L2luZGV4LnJzdCB8ICAxICsKPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDg5IGluc2VydGlv bnMoKykKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcmNoL3Jpc2N2L2Ntb2R4 LnJzdCBiL0RvY3VtZW50YXRpb24vYXJjaC9yaXNjdi9jbW9keC5yc3QKPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmFmZDcwODZjMjIyYwo+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9hcmNoL3Jpc2N2L2Ntb2R4LnJzdAo+ID4g QEAgLTAsMCArMSw4OCBAQAo+ID4gKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Cj4gPiArCj4gPiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gPiArQ29uY3VycmVudCBNb2RpZmlj YXRpb24gYW5kIEV4ZWN1dGlvbiBvZiBJbnN0cnVjdGlvbnMgKENNT0RYKSBmb3IgUklTQy1WIExp bnV4Cj4gPiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gPiArCj4gPiArQ01PRFggaXMgYSBwcm9n cmFtbWluZyB0ZWNobmlxdWUgd2hlcmUgYSBwcm9ncmFtIGV4ZWN1dGVzIGluc3RydWN0aW9ucyB0 aGF0IHdlcmUKPiA+ICttb2RpZmllZCBieSB0aGUgcHJvZ3JhbSBpdHNlbGYuIEluc3RydWN0aW9u IHN0b3JhZ2UgYW5kIHRoZSBpbnN0cnVjdGlvbiBjYWNoZQo+ID4gKyhpY2FjaGUpIGFyZSBub3Qg Z3VhcmFudGVlZCB0byBiZSBzeW5jaHJvbml6ZWQgb24gUklTQy1WIGhhcmR3YXJlLiBUaGVyZWZv cmUsIHRoZQo+ID4gK3Byb2dyYW0gbXVzdCBlbmZvcmNlIGl0cyBvd24gc3luY2hyb25pemF0aW9u IHdpdGggdGhlIHVucHJpdmlsZWdlZCBmZW5jZS5pCj4gPiAraW5zdHJ1Y3Rpb24uCj4gPiArCj4g PiArSG93ZXZlciwgdGhlIGRlZmF1bHQgTGludXggQUJJIHByb2hpYml0cyB0aGUgdXNlIG9mIGZl bmNlLmkgaW4gdXNlcnNwYWNlCj4gPiArYXBwbGljYXRpb25zLiBBdCBhbnkgcG9pbnQgdGhlIHNj aGVkdWxlciBtYXkgbWlncmF0ZSBhIHRhc2sgb250byBhIG5ldyBoYXJ0LiBJZgo+ID4gK21pZ3Jh dGlvbiBvY2N1cnMgYWZ0ZXIgdGhlIHVzZXJzcGFjZSBzeW5jaHJvbml6ZWQgdGhlIGljYWNoZSBh bmQgaW5zdHJ1Y3Rpb24KPiA+ICtzdG9yYWdlIHdpdGggZmVuY2UuaSwgdGhlIGljYWNoZSB3aWxs IG5vIGxvbmdlciBiZSBjbGVhbi4gVGhpcyBpcyBkdWUgdG8gdGhlCj4gPiArYmVoYXZpb3Igb2Yg ZmVuY2UuaSBvbmx5IGFmZmVjdGluZyB0aGUgaGFydCB0aGF0IGl0IGlzIGNhbGxlZCBvbi4gVGh1 cywgdGhlIGhhcnQKPiA+ICt0aGF0IHRoZSB0YXNrIGhhcyBiZWVuIG1pZ3JhdGVkIHRvIG1heSBu b3QgaGF2ZSBzeW5jaHJvbml6ZWQgaW5zdHJ1Y3Rpb24gc3RvcmFnZQo+ID4gK2FuZCBpY2FjaGUu Cj4gPiArCj4gPiArVGhlcmUgYXJlIHR3byB3YXlzIHRvIHNvbHZlIHRoaXMgcHJvYmxlbTogdXNl IHRoZSByaXNjdl9mbHVzaF9pY2FjaGUoKSBzeXNjYWxsLAo+ID4gK29yIHVzZSB0aGUgYGBQUl9S SVNDVl9TRVRfSUNBQ0hFX0ZMVVNIX0NUWGBgIHByY3RsKCkgYW5kIGVtaXQgZmVuY2UuaSBpbgo+ ID4gK3VzZXJzcGFjZS4gVGhlIHN5c2NhbGwgcGVyZm9ybXMgYSBvbmUtb2ZmIGljYWNoZSBmbHVz aGluZyBvcGVyYXRpb24uIFRoZSBwcmN0bAo+ID4gK2NoYW5nZXMgdGhlIExpbnV4IEFCSSB0byBh bGxvdyB1c2Vyc3BhY2UgdG8gZW1pdCBpY2FjaGUgZmx1c2hpbmcgb3BlcmF0aW9ucy4KPiA+ICsK PiA+ICtwcmN0bCgpIEludGVyZmFjZQo+ID4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gKwo+ ID4gK0NhbGwgcHJjdGwoKSB3aXRoIGBgUFJfUklTQ1ZfU0VUX0lDQUNIRV9GTFVTSF9DVFhgYCBh cyB0aGUgZmlyc3QgYXJndW1lbnQuIFRoZQo+ID4gK3JlbWFpbmluZyBhcmd1bWVudHMgd2lsbCBi ZSBkZWxlZ2F0ZWQgdG8gdGhlIHJpc2N2X3NldF9pY2FjaGVfZmx1c2hfY3R4Cj4gPiArZnVuY3Rp b24gZGV0YWlsZWQgYmVsb3cuCj4gPiArCj4gPiArLi4ga2VybmVsLWRvYzo6IGFyY2gvcmlzY3Yv bW0vY2FjaGVmbHVzaC5jCj4gPiArICAgICAgIDppZGVudGlmaWVyczogcmlzY3Zfc2V0X2ljYWNo ZV9mbHVzaF9jdHgKPiA+ICsKPiAKPiBEb2N1bWVudCB0aGUgYXJndW1lbnRzIG9mIHRoZSBwcmN0 bCBhcyB3ZWxsID8KCkRvIHlvdSBtZWFuIHRvIGluY2x1ZGUgdGhlIGBgUFJfUklTQ1ZfU0VUX0lD QUNIRV9GTFVTSF9DVFhgYCBrZXkgaW4gdGhlCmNvbW1lbnQgb2YgcmlzY3Zfc2V0X2ljYWNoZV9m bHVzaF9jdHg/IFRoZSBhcmdzIHRvCnJpc2N2X3NldF9pY2FjaGVfZmx1c2hfY3R4IGFyZSB0aGUg YXJncyB0byB0aGUgcHJjdGwgZXhjZXB0IGZvciB0aGUga2V5LgoKLSBDaGFybGllCgo+IAo+ID4g K0V4YW1wbGUgdXNhZ2U6Cj4gPiArCj4gPiArVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgbWVhbnQg dG8gYmUgY29tcGlsZWQgYW5kIGxpbmtlZCB3aXRoIGVhY2ggb3RoZXIuIFRoZQo+ID4gK21vZGlm eV9pbnN0cnVjdGlvbigpIGZ1bmN0aW9uIHJlcGxhY2VzIGFuIGFkZCB3aXRoIDAgd2l0aCBhbiBh ZGQgd2l0aCBvbmUsCj4gPiArY2F1c2luZyB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgaW4gZ2V0 X3ZhbHVlKCkgdG8gY2hhbmdlIGZyb20gcmV0dXJuaW5nIGEgemVybwo+ID4gK3RvIHJldHVybmlu ZyBhIG9uZS4KPiA+ICsKPiA+ICtjbW9keC5jOjoKPiA+ICsKPiA+ICsgICAgICAgI2luY2x1ZGUg PHN0ZGlvLmg+Cj4gPiArICAgICAgICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KPiA+ICsKPiA+ICsg ICAgICAgZXh0ZXJuIGludCBnZXRfdmFsdWUoKTsKPiA+ICsgICAgICAgZXh0ZXJuIHZvaWQgbW9k aWZ5X2luc3RydWN0aW9uKCk7Cj4gPiArCj4gPiArICAgICAgIGludCBtYWluKCkKPiA+ICsgICAg ICAgewo+ID4gKyAgICAgICAgICAgICAgIGludCB2YWx1ZSA9IGdldF92YWx1ZSgpOwo+ID4gKyAg ICAgICAgICAgICAgIHByaW50ZigiVmFsdWUgYmVmb3JlIGNtb2R4OiAlZFxuIiwgdmFsdWUpOwo+ ID4gKwo+ID4gKyAgICAgICAgICAgICAgIC8vIENhbGwgcHJjdGwgYmVmb3JlIGZpcnN0IGZlbmNl LmkgaXMgY2FsbGVkIGluc2lkZSBtb2RpZnlfaW5zdHJ1Y3Rpb24KPiA+ICsgICAgICAgICAgICAg ICBwcmN0bChQUl9SSVNDVl9TRVRfSUNBQ0hFX0ZMVVNIX0NUWF9PTiwgUFJfUklTQ1ZfQ1RYX1NX X0ZFTkNFSSwgMCk7Cj4gPiArICAgICAgICAgICAgICAgbW9kaWZ5X2luc3RydWN0aW9uKCk7Cj4g PiArCj4gPiArICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRfdmFsdWUoKTsKPiA+ICsgICAgICAg ICAgICAgICBwcmludGYoIlZhbHVlIGFmdGVyIGNtb2R4OiAlZFxuIiwgdmFsdWUpOwo+ID4gKyAg ICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArY21vZHguUzo6 Cj4gPiArCj4gPiArICAgICAgIC5vcHRpb24gbm9ydmMKPiA+ICsKPiA+ICsgICAgICAgLnRleHQK PiA+ICsgICAgICAgLmdsb2JhbCBtb2RpZnlfaW5zdHJ1Y3Rpb24KPiA+ICsgICAgICAgbW9kaWZ5 X2luc3RydWN0aW9uOgo+ID4gKyAgICAgICBsdyBhMCwgbmV3X2luc24KPiA+ICsgICAgICAgbHVp IGE1LCVoaShvbGRfaW5zbikKPiA+ICsgICAgICAgc3cgIGEwLCVsbyhvbGRfaW5zbikoYTUpCj4g PiArICAgICAgIGZlbmNlLmkKPiA+ICsgICAgICAgcmV0Cj4gPiArCj4gPiArICAgICAgIC5zZWN0 aW9uIG1vZGlmaWFibGUsICJhd3giCj4gPiArICAgICAgIC5nbG9iYWwgZ2V0X3ZhbHVlCj4gPiAr ICAgICAgIGdldF92YWx1ZToKPiA+ICsgICAgICAgbGkgYTAsIDAKPiA+ICsgICAgICAgb2xkX2lu c246Cj4gPiArICAgICAgIGFkZGkgYTAsIGEwLCAwCj4gPiArICAgICAgIHJldAo+ID4gKwo+ID4g KyAgICAgICAuZGF0YQo+ID4gKyAgICAgICBuZXdfaW5zbjoKPiA+ICsgICAgICAgYWRkaSBhMCwg YTAsIDEKPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gvcmlzY3YvaW5kZXgucnN0 IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3Jpc2N2L2luZGV4LnJzdAo+ID4gaW5kZXggNGRhYjBjYjRi OTAwLi5lZWNmMzQ3Y2U4NDkgMTAwNjQ0Cj4gPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gvcmlz Y3YvaW5kZXgucnN0Cj4gPiArKysgYi9Eb2N1bWVudGF0aW9uL2FyY2gvcmlzY3YvaW5kZXgucnN0 Cj4gPiBAQCAtMTMsNiArMTMsNyBAQCBSSVNDLVYgYXJjaGl0ZWN0dXJlCj4gPiAgICAgIHBhdGNo LWFjY2VwdGFuY2UKPiA+ICAgICAgdWFiaQo+ID4gICAgICB2ZWN0b3IKPiA+ICsgICAgY21vZHgK PiA+Cj4gPiAgICAgIGZlYXR1cmVzCj4gPgo+ID4KPiA+IC0tCj4gPiAyLjQzLjAKPiA+Cj4gCj4g Cj4gLS0KPiBSZWdhcmRzLAo+IEF0aXNoCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LXJpc2N2Cg==