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 83140C02192 for ; Mon, 3 Feb 2025 19:12:43 +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=cyfbwvFmwKUpZjERldtxs3aR9Kd6rRKOaqTO1fRJJNM=; b=zYHvg//MavjZKE MDSJNw5AMj3FFZGIOeHPkkiUpRhIXtVcGAkxwDcmZIVzUuRa6kIZMAGjIyT3IbdL8QUn15OH2rSpG TdwwJf0o8inkU6cxzBN93KxJC3geHe02Fus9l26tZtIZqmUR2fDyB4PCC9lVd3MLKEu4jY5sKjD0Z gT1boH443BaOUKOGFGr7KBudkyKySZPasOWkvHt3UmU1FF0Q/VhRaE7Jx73gNJquGU0iQTO2eHZvu /gcGCh+uEItTettc4U3OywsqvVbtQLECTxAnP3Y4zazaxzC58EYLyOaiGfG7MHElwzfZ85fjifGz1 mDhEqHeZj7wo1d85z4sA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tf1s7-0000000GPmD-11EM; Mon, 03 Feb 2025 19:12:39 +0000 Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tf1s4-0000000GPlB-2ZDO for linux-riscv@lists.infradead.org; Mon, 03 Feb 2025 19:12:38 +0000 Received: by mail-pl1-x642.google.com with SMTP id d9443c01a7336-21619108a6bso80307735ad.3 for ; Mon, 03 Feb 2025 11:12:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1738609956; x=1739214756; 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=kVc14ds/3vaHuIcp1SH+yhV8K9Dwrclk14FkpIfc60U=; b=v9LbHYZ/r5ukTr5P7nYBut0P2EnJVaBEGq6igYmIUvo4n9CxgLNd2vUefSCd0zjh4K WpjmUiNHunIn9gjmgTEowBEuA9RE5WqPPem2JChbrqfvXUuSdsEVAvw/btJkfrSTpz3Z DHUWbuQ0NjVXrUWCs6SL1Yrg/j8GsE6hfM0i20iDf4UHjy0D8YO4duCZEDcNgs3q0p5B BvQk/WYLc5W7XNseg2ES/UeoyNRNb1cYGafIjvK9ozPUu88jnEu1ng8uWxrWLLQB1yCd NEL3kNL8YfT8GFb+SK8vEFZ9JoP/kmn8y4hDpknSHx2LZ9SNTvzMOauQ8bNpiYfE2QUH 7tjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738609956; x=1739214756; 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=kVc14ds/3vaHuIcp1SH+yhV8K9Dwrclk14FkpIfc60U=; b=p+03ZnnPoFup+DOQBvHeQuw8g16I2dlLVSiPQbKkxrwgrlkqAOEBSYTqdumgrayA6n 4P7ODM5yCLEOwEgxhedx6vO6sHuKUfL46u8Nd+aRoruus6E8kErR7fsX9uKgtPVixuPV cz71BfbSNQq/dAs3tji87incZub2ZKUgEEsbbVyaoC2x0a+R0MJFDb13glyF6blVzKes OlzkFHzyAbXj2e68Ba4KuJztqp24ExZCjbPuu790eGDRWJlAbtJkkxZyz3e2//Hp/z8s JAUPPwXflYnelUUqsH6fOyHq6ZzIb6H8T0M04MG7QNl4menq4KSLaDfbupP1duOaoMHf 5vLg== X-Forwarded-Encrypted: i=1; AJvYcCUGw0pFnFVXJnx3FXOFrwS3UTVLRYX7+yZNYiUvFTbml57mIYj1fVawH9P8evMRIuapgMmAODspIbTBxA==@lists.infradead.org X-Gm-Message-State: AOJu0Yyf1bdcpUut4OFQwHQusYKmz/kwmXixykMKwXcSMkSJvxO3OPEv LIXM9DyjxwcJ6AhDntIkpjtRN10wBE57+dQ7AVaCjl87FYmU7CWh3uwSyiq+dNw= X-Gm-Gg: ASbGncsAeY+Me/6/ZjU0fPPpeS/UA/d7VGeiGEbJbBECQIOK18IcAOYeOXd2YoQPyXZ lldpq/P1fcHidnE4hjKUu4vP19bnFJ1zZ0Po+yr1DJ+Wm2mg4l2YVRKMplNvcHhRrCfWOu+a8K5 KlkHzX36rzyvdPXVpk9G7nHpruAXYnCNf7bd68ep0WjHj5kWX1x8WW2QX9VSJD3UqxZEjKIlOVR CSX8ZL+iYK9Yq5Fmy286AtS9Krz4Ue6DVktYijxC+4Y1IXAUP7L3L/DrXGPdbhE5CilrobylcHu f+/Jnx+gNe4= X-Google-Smtp-Source: AGHT+IEW8VYVGX/g0scUPbicx0lQjpuuIy+guiEpo7CMV8fy/V1CEhg6ljnMr8yc4V2gECuckVXG0A== X-Received: by 2002:a05:6a21:6da4:b0:1e1:b727:1801 with SMTP id adf61e73a8af0-1ed7a5ef9demr35727915637.27.1738609955803; Mon, 03 Feb 2025 11:12:35 -0800 (PST) Received: from ghost ([2601:647:6700:64d0:4f63:f9d5:2cbd:2947]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72fe69bbb7esm9134416b3a.106.2025.02.03.11.12.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 11:12:35 -0800 (PST) Date: Mon, 3 Feb 2025 11:12:32 -0800 From: Charlie Jenkins To: Conor Dooley Cc: Aleksandar Rikalo , linux-riscv@lists.infradead.org, Paul Walmsley , Palmer Dabbelt , Albert Ou , Will Deacon , Peter Zijlstra , Boqun Feng , Mark Rutland , Yury Norov , Rasmus Villemoes , Andrea Parri , Leonardo Bras , Guo Ren , Samuel Holland , Eric Chan , linux-kernel@vger.kernel.org, Djordje Todorovic Subject: Re: [PATCH v2] riscv: Use Zalrsc extension to implement atomic functions Message-ID: References: <20241225082412.36727-1-arikalo@gmail.com> <20250202-clammy-skewed-eb0a0fce18f1@spud> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20250202-clammy-skewed-eb0a0fce18f1@spud> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250203_111236_664659_99BFF5B3 X-CRM114-Status: GOOD ( 46.94 ) 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 T24gU3VuLCBGZWIgMDIsIDIwMjUgYXQgMDg6MDg6NTBQTSArMDAwMCwgQ29ub3IgRG9vbGV5IHdy b3RlOgo+IE9uIFNhdCwgRmViIDAxLCAyMDI1IGF0IDAxOjA0OjI1UE0gKzAxMDAsIEFsZWtzYW5k YXIgUmlrYWxvIHdyb3RlOgo+ID4gT24gRnJpLCBKYW4gMTAsIDIwMjUgYXQgNDoyM+KAr0FNIENo YXJsaWUgSmVua2lucyA8Y2hhcmxpZUByaXZvc2luYy5jb20+IHdyb3RlOgo+ID4gCj4gPiA+ID4g RnJvbTogQ2hhby15aW5nIEZ1IDxjZnVAbWlwcy5jb20+Cj4gPiA+ID4KPiA+ID4gPiBVc2Ugb25s eSBMUi9TQyBpbnN0cnVjdGlvbnMgdG8gaW1wbGVtZW50IGF0b21pYyBmdW5jdGlvbnMuCj4gPiA+ Cj4gPiA+IEluIHRoZSBwcmV2aW91cyBwYXRjaCB5b3UgbWVudGlvbiB0aGF0IHRoaXMgaXMgdG8g c3VwcG9ydCBNSVBTIFA4NzAwLiBDYW4KPiA+ID4geW91IGV4cGFuZCBvbiB3aHkgdGhpcyBjaGFu Z2UgaXMgcmVxdWlyZWQ/IFRoZSBkYXRhc2hlZXQgYXQgWzFdIHNheXM6Cj4gPiA+Cj4gPiA+ICJU aGUgUDg3MDAgY29yZSBpcyBjb25maWd1cmVkIHRvIHN1cHBvcnQgdGhlIFJWNjRHQ1piYV9aYmIg KEcgPSBJTUFGRCkKPiA+ID4gU3RhbmRhcmQgSVNBLiBJdCBpbmNsdWRlcyB0aGUgUlY2NEkgYmFz ZSBJU0EsIE11bHRpcGx5IChNKSwgQXRvbWljIChBKSwKPiA+ID4gU2luZ2xlLVByZWNpc2lvbiBG bG9hdGluZyBQb2ludCAoRiksIERvdWJsZSAoRCksIENvbXByZXNzZWQgKEMpIFJJU0MtVgo+ID4g PiBleHRlbnNpb25zLCBhcyB3ZWxsIGFzIHRoZSBhcyB3ZWxsIGFzIHRoZSBiaXQtbWFuaXB1bGF0 aW9uIGV4dGVuc2lvbnMKPiA+ID4gKFpiYSkgYW5kIChaYmIpIgo+ID4gPgo+ID4gPiBUaGUgIkEi IGV4dGVuc2lvbiBpcyBhIHBhcnQgb2YgIkciIHdoaWNoIGlzIG1vc3RseSBhc3N1bWVkIHRvIGV4 aXN0IGluCj4gPiA+IHRoZSBrZXJuZWwuIEFkZGl0aW9uYWxseSwgaGF2aW5nIHRoaXMgYmUgYSBj b21waWxhdGlvbiBmbGFnIHdpbGwgY2F1c2UKPiA+ID4gdHJhcHMgb24gZ2VuZXJpYyBrZXJuZWxz LiBXZSBnZW5lcmFsbHkgdHJ5IHRvIHB1c2ggZXZlcnl0aGluZyB3ZSBjYW4KPiA+ID4gaW50byBy dW50aW1lIGZlYXR1cmUgZGV0ZWN0aW9uIHNpbmNlIHRoZXJlIGFyZSBzbyBtYW55IHBvc3NpYmxl IHZhcmlhbnRzCj4gPiA+IG9mIHJpc2N2Lgo+ID4gPgo+ID4gPiBFeHByZXNzaW5nIG5vdCBiZWlu ZyBhYmxlIHRvIHBlcmZvcm0gYSBmZWF0dXJlIGxpa2UgdGhpcyBpcyBub3JtYWxseQo+ID4gPiBi ZXR0ZXIgZXhwcmVzc2VkIGFzIGFuIGVycmF0YS4gVGhlbiBnZW5lcmljIGtlcm5lbHMgd2lsbCBi ZSBhYmxlIHRvCj4gPiA+IGluY2x1ZGUgdGhpcywgYW5kIGFueWJvZHkgd2hvIGRvZXNuJ3Qgd2Fu dCB0byBoYXZlIHRoZSBleHRyYSBub3BzCj4gPiA+IGludHJvZHVjZWQgY2FuIGRpc2FibGUgdGhl IGVycmF0YS4gQSBzaW1pbGFyIGFwcHJvYWNoIHRvIHdoYXQgSSBwb2ludGVkCj4gPiA+IG91dCBs YXN0IHRpbWUgc2hvdWxkIHdvcmsgaGVyZSB0b28gKGJ1dCB3aXRoIG1vcmUgcGxhY2VzIHRvIHJl cGxhY2UpCj4gPiA+IFsyXS4KPiA+ID4KPiA+ID4gWzFdIGh0dHBzOi8vbWlwcy5jb20vd3AtY29u dGVudC91cGxvYWRzLzIwMjQvMTEvUDg3MDBfRGF0YV9TaGVldC5wZGYKPiA+ID4gWzJdIGh0dHBz Oi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvWjItVU5md2NBUVlacVZCVUBnaG9zdC9ULwo+ID4gCj4g PiBTbyBmYXIgd2UgaGF2ZW4ndCBmb3VuZCBhIHdheSB0byBkbyB0aGlzIHVzaW5nIGVycmF0YS4K PiAKPiBZb3UgbWVhbiB1c2luZyBhbHRlcm5hdGl2ZXM/IE5vdCBpbXBsZW1lbnRpbmcgQSwgYnV0 IGluc3RlYWQKPiBpbXBsZW1lbnRpbmcgWmFscnNjLCBpcyBub3QgYW4gZXJyYXR1bS4gSXQncyBh IGRlc2lnbiBkZWNpc2lvbi4KCldlIGNvdWxkIGRvIHRoZSBzYW1lIHRoaW5nIHdlIGRvIHdpdGgg bWlzYWxpZ25lZCBhY2Nlc3MgZGV0ZWN0aW9uIGFuZApydW4gc29tZSBpbnN0cnVjdGlvbnMgdG8g ZGV0ZXJtaW5lIGlmIHRoZXNlIGluc3RydWN0aW9ucyBhcmUgYmVpbmcKZW11bGF0ZWQuICBJZiB0 aGV5IGFyZSBiZWluZyBlbXVsYXRlZCwgcGF0Y2ggYWxsIG9mIHRoZSBwbGFjZXMgdG8gdXNlCnph bHJzYy4KCi0gQ2hhcmxpZQoKPiAKPiA+IFRoZXJlJ3Mgbm8gd2F5Cj4gPiB0byBwYXRjaCBvbmUg aW5zdHJ1Y3Rpb24gd2l0aCBtdWx0aXBsZSBvbmVzLAo+IAo+IEhhdmUgeW91IGxvb2tlZCBhdCBo b3cgdGhlIGFsdGVybmF0aXZlcyB3b3JrPyBUaGVyZSdzIG5vIHJlcXVpcmVtZW50Cj4gdGhhdCB0 aGUgc2VxdWVuY2VzIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGluc3RydWN0aW9ucywgcGFkZGlu ZyBpcwo+IGFsbG93ZWQuCj4gCj4gPiBhbmQgd2UgYWxzbyBuZWVkIGFuIGV4dHJhCj4gPiAodGVt cG9yYXJ5KSByZWdpc3Rlci4KPiA+IAo+ID4gQSBDUFUgY2FuIGltcGxlbWVudCB0aGUgWmFscnNj IGV4dGVuc2lvbiBbMV0gaW5zdGVhZCBvZiAiY29tcGxldGUgQSIKPiA+ICh3aGljaCBQODcwMCBk b2VzKS4KPiA+ID5Gcm9tICJaYWFtbyBhbmQgWmFscnNjIEV4dGVuc2lvbnMiIHNwZWM6Cj4gCj4g V2h5IGRvZXMgdGhpcyBzdGF0ZW1lbnQgZGlmZmVyIGZyb20gdGhlIFA4NzAwIGRhdGFzaGVldCBs aW5rZWQgYWJvdmU/Cj4gCj4gQ2hlZXJzLAo+IENvbm9yLgo+IAo+ID4gCj4gPiAiVGhlIGZldGNo LWFuZC1vcCBzdHlsZSBhdG9taWMgcHJpbWl0aXZlcyBwcm92aWRlZCBieSB0aGUgQSBleHRlbnNp b24KPiA+IHN1cHBvcnQgYmV0dGVyIHNjYWxpbmcgZm9yIGhpZ2hseSBwYXJhbGxlbCBzeXN0ZW1z LiBTaW1wbGVyCj4gPiBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBub3QgaGF2ZSBzdWNoIHNjYWxp bmcgcmVxdWlyZW1lbnRzIG1heQo+ID4gaW1wbGVtZW50IHRoZSBaYWxyc2Mgc3Vic2V0IG9mIHRo ZSBBIGV4dGVuc2lvbiB0byBzdXBwb3J0IGF0b21pYwo+ID4gcHJpbWl0aXZlcy4iCj4gPiAKPiA+ IFRoZXJlZm9yZSwgd2UgYmVsaWV2ZSB0aGlzIHdvdWxkIGJlIGEgdXNlZnVsIG9wdGlvbiBmb3Ig d2lkZXIgdXNlLgo+ID4gCj4gPiBbMV0gaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LXph YW1vLXphbHJzYy9yZWxlYXNlcy9kb3dubG9hZC92MS4wLXJjMi9yaXNjdi16YWFtby16YWxyc2Mu cGRmCj4gPiAKPiA+ID4gPgo+ID4gPiA+IEFkZCBjb25maWcgUklTQ1ZfQU1PX1VTRV9aQUxSU0Mu Cj4gPiA+ID4KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBDaGFvLXlpbmcgRnUgPGNmdUBtaXBzLmNv bT4KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBBbGVrc2FuZGFyIFJpa2FsbyA8YXJpa2Fsb0BnbWFp bC5jb20+Cj4gPiA+ID4gLS0tCj4gPiA+ID4gIGFyY2gvcmlzY3YvS2NvbmZpZyAgICAgICAgICAg ICAgIHwgMTEgKysrKysrKwo+ID4gPiA+ICBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2F0b21pYy5o ICB8IDUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gPiA+ID4gIGFyY2gvcmlz Y3YvaW5jbHVkZS9hc20vYml0b3BzLmggIHwgNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gPiA+ID4gIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vY21weGNoZy5oIHwgMTYgKysrKysrKysr Kwo+ID4gPiA+ICBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2Z1dGV4LmggICB8IDQ2ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysKPiA+ID4gPiAgNSBmaWxlcyBjaGFuZ2VkLCAxNjkgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4gPiA+Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gv cmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZwo+ID4gPiA+IGluZGV4IGNjNjNhZWY0 MWU5NC4uOWZiMDIwYjQ5NDA4IDEwMDY0NAo+ID4gPiA+IC0tLSBhL2FyY2gvcmlzY3YvS2NvbmZp Zwo+ID4gPiA+ICsrKyBiL2FyY2gvcmlzY3YvS2NvbmZpZwo+ID4gPiA+IEBAIC03MTUsNiArNzE1 LDE3IEBAIGNvbmZpZyBSSVNDVl9JU0FfWkFDQVMKPiA+ID4gPgo+ID4gPiA+ICAgICAgICAgSWYg eW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS4KPiA+ID4gPgo+ID4gPiA+ICtj b25maWcgUklTQ1ZfQU1PX1VTRV9aQUxSU0MKPiA+ID4gPiArICAgICBib29sICJVc2UgWmFscnNj IGV4dGVuc2lvbiB0byBpbXBsZW1lbnQgYXRvbWljIGZ1bmN0aW9ucyIKPiA+ID4gPiArICAgICBo ZWxwCj4gPiA+ID4gKyAgICAgICAgS2VybmVsIHVzZXMgb25seSBMUi9TQyBpbnN0cnVjdGlvbnMg dG8gaW1wbGVtZW50IGF0b21pYyBmdW5jdGlvbnMuCj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAg IEl0IG1ha2VzIHNlbnNlIHRvIGVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3VyIHBsYXRmb3JtIG9u bHkKPiA+ID4gPiArICAgICAgICBpbXBsZW1lbnRzIHRoZSBaYWxyc2MgZXh0ZW5zaW9uIChhIHN1 YnNldCBvZiB0aGUgQSBleHRlbnNpb24pLAo+ID4gPiA+ICsgICAgICAgIGFuZCBub3QgdGhlIGNv bXBsZXRlIEEgZXh0ZW5zaW9uLgo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgICBJZiB5b3UgZG9u J3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgo+ID4gPiA+ICsKPiA+ID4gPiAgY29uZmln IFRPT0xDSEFJTl9IQVNfWkJCCj4gPiA+ID4gICAgICAgYm9vbAo+ID4gPiA+ICAgICAgIGRlZmF1 bHQgeQo+ID4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2F0b21pYy5o IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hdG9taWMuaAo+ID4gPiA+IGluZGV4IDViOTZjMmY2 MWFkYi4uODhmNjJlMzNhNTQ1IDEwMDY0NAo+ID4gPiA+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVk ZS9hc20vYXRvbWljLmgKPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2F0b21p Yy5oCj4gPiA+ID4gQEAgLTUwLDYgKzUwLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lk IGFyY2hfYXRvbWljNjRfc2V0KGF0b21pYzY0X3QgKnYsIHM2NCBpKQo+ID4gPiA+ICAgKiBoYXZl IHRoZSBBUSBvciBSTCBiaXRzIHNldC4gIFRoZXNlIGRvbid0IHJldHVybiBhbnl0aGluZywgc28g dGhlcmUncyBvbmx5Cj4gPiA+ID4gICAqIG9uZSB2ZXJzaW9uIHRvIHdvcnJ5IGFib3V0Lgo+ID4g PiA+ICAgKi8KPiA+ID4gPiArI2lmbmRlZiBSSVNDVl9BTU9fVVNFX1pBTFJTQwo+ID4gPiA+ICAj ZGVmaW5lIEFUT01JQ19PUChvcCwgYXNtX29wLCBJLCBhc21fdHlwZSwgY190eXBlLCBwcmVmaXgp ICAgICAgICAgICBcCj4gPiA+ID4gIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICB2b2lk IGFyY2hfYXRvbWljIyNwcmVmaXgjI18jI29wKGNfdHlwZSBpLCBhdG9taWMjI3ByZWZpeCMjX3Qg KnYpICAgICBcCj4gPiA+ID4gQEAgLTU5LDcgKzYwLDIzIEBAIHZvaWQgYXJjaF9hdG9taWMjI3By ZWZpeCMjXyMjb3AoY190eXBlIGksIGF0b21pYyMjcHJlZml4IyNfdCAqdikgICBcCj4gPiA+ID4g ICAgICAgICAgICAgICA6ICIrQSIgKHYtPmNvdW50ZXIpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiA+ID4gPiAgICAgICAgICAgICAgIDogInIiIChJKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICAgICAgICAgICAg ICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gPiA+ID4gLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiArfQo+ID4gPiA+ICsjZWxzZQo+ID4g PiA+ICsjZGVmaW5lIEFUT01JQ19PUChvcCwgYXNtX29wLCBJLCBhc21fdHlwZSwgY190eXBlLCBw cmVmaXgpICAgICAgICAgICBcCj4gPiA+ID4gK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ ICt2b2lkIGFyY2hfYXRvbWljIyNwcmVmaXgjI18jI29wKGNfdHlwZSBpLCBhdG9taWMjI3ByZWZp eCMjX3QgKnYpICAgICBcCj4gPiA+ID4gK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiArICAgICByZWdp c3RlciBjX3R5cGUgcmV0LCB0ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ID4gPiA+ICsgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgICAgICAgICAiMTogICAg IGxyLiIgI2FzbV90eXBlICIgJTEsICUwXG4iICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4g PiArICAgICAgICAgICAgICIgICAgICAgIiAjYXNtX29wICIgJTIsICUxLCAlM1xuIiAgICAgICAg ICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAgIiAgICAgICBzYy4iICNhc21f dHlwZSAiICUyLCAlMiwgJTBcbiIgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgICAg ICAgICAiICAgICAgIGJuZXogJTIsIDFiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPiA+ID4gPiArICAgICAgICAgICAgIDogIitBIiAodi0+Y291bnRlciksICI9JnIiIChy ZXQpLCAiPSZyIiAodGVtcCkgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAgOiAiciIg KEkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ ID4gKyAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPiA+ID4gPiArfQo+ID4gPiA+ICsjZW5kaWYKPiA+ID4gPgo+ID4g PiA+ICAjaWZkZWYgQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQKPiA+ID4gPiAgI2RlZmluZSBBVE9N SUNfT1BTKG9wLCBhc21fb3AsIEkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+ID4gPiA+IEBAIC04NCw2ICsxMDEsNyBAQCBBVE9NSUNfT1BTKHhvciwgeG9yLCAgaSkKPiA+ ID4gPiAgICogVGhlcmUncyB0d28gZmxhdm9ycyBvZiB0aGVzZTogdGhlIGFyaXRobWF0aWMgb3Bz IGhhdmUgYm90aCBmZXRjaCBhbmQgcmV0dXJuCj4gPiA+ID4gICAqIHZlcnNpb25zLCB3aGlsZSB0 aGUgbG9naWNhbCBvcHMgb25seSBoYXZlIGZldGNoIHZlcnNpb25zLgo+ID4gPiA+ICAgKi8KPiA+ ID4gPiArI2lmbmRlZiBSSVNDVl9BTU9fVVNFX1pBTFJTQwo+ID4gPiA+ICAjZGVmaW5lIEFUT01J Q19GRVRDSF9PUChvcCwgYXNtX29wLCBJLCBhc21fdHlwZSwgY190eXBlLCBwcmVmaXgpICAgICBc Cj4gPiA+ID4gIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICBjX3R5cGUgYXJjaF9hdG9t aWMjI3ByZWZpeCMjX2ZldGNoXyMjb3AjI19yZWxheGVkKGNfdHlwZSBpLCAgICAgICAgICBcCj4g PiA+ID4gQEAgLTEwOCw2ICsxMjYsMzggQEAgY190eXBlIGFyY2hfYXRvbWljIyNwcmVmaXgjI19m ZXRjaF8jI29wKGNfdHlwZSBpLCBhdG9taWMjI3ByZWZpeCMjX3QgKnYpIFwKPiA+ID4gPiAgICAg ICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+ID4gPiA+ICAgICAgIHJldHVybiByZXQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gIH0KPiA+ID4gPiArI2Vs c2UKPiA+ID4gPiArI2RlZmluZSBBVE9NSUNfRkVUQ0hfT1Aob3AsIGFzbV9vcCwgSSwgYXNtX3R5 cGUsIGNfdHlwZSwgcHJlZml4KSAgICAgXAo+ID4gPiA+ICtzdGF0aWMgX19hbHdheXNfaW5saW5l ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiA+ID4gPiArY190eXBlIGFyY2hfYXRvbWljIyNwcmVmaXgjI19mZXRjaF8jI29wIyNfcmVsYXhl ZChjX3R5cGUgaSwgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhdG9taWMjI3ByZWZpeCMjX3QgKnYpICAgICBcCj4gPiA+ID4gK3sg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKPiA+ID4gPiArICAgICByZWdpc3RlciBjX3R5cGUgcmV0LCB0ZW1wOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgIF9fYXNtX18g X192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gPiA+ID4gKyAgICAgICAgICAgICAiMTogICAgIGxyLiIgI2FzbV90eXBlICIgJTEsICUwXG4i ICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiArICAgICAgICAgICAgICIgICAgICAgIiAj YXNtX29wICIgJTIsICUxLCAlM1xuIiAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsg ICAgICAgICAgICAgIiAgICAgICBzYy4iICNhc21fdHlwZSAiICUyLCAlMiwgJTBcbiIgICAgICAg ICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgICAgICAgICAiICAgICAgIGJuZXogJTIsIDFiXG4i ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiArICAgICAgICAgICAg IDogIitBIiAodi0+Y291bnRlciksICI9JnIiIChyZXQpLCAiPSZyIiAodGVtcCkgICAgICAgICAg XAo+ID4gPiA+ICsgICAgICAgICAgICAgOiAiciIgKEkpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgICAgICAgICA6ICJtZW1vcnki KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiAr ICAgICByZXR1cm4gcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ID4gPiA+ICt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gK3N0YXRpYyBfX2Fs d2F5c19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+ID4gPiA+ICtjX3R5cGUgYXJjaF9hdG9taWMjI3ByZWZpeCMjX2ZldGNoXyMj b3AoY190eXBlIGksIGF0b21pYyMjcHJlZml4IyNfdCAqdikgICAgIFwKPiA+ID4gPiAreyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAo+ID4gPiA+ICsgICAgIHJlZ2lzdGVyIGNfdHlwZSByZXQsIHRlbXA7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgX19hc21fXyBfX3Zv bGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ ID4gPiArICAgICAgICAgICAgICIxOiAgICAgbHIuIiAjYXNtX3R5cGUgIi5hcXJsICUxLCAlMFxu IiAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAgIiAgICAgICAiICNhc21f b3AgIiAlMiwgJTEsICUzXG4iICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAg ICAgICAgICAiICAgICAgIHNjLiIgI2FzbV90eXBlICIuYXFybCAlMiwgJTIsICUwXG4iICAgICAg ICAgICAgIFwKPiA+ID4gPiArICAgICAgICAgICAgICIgICAgICAgYm5leiAlMiwgMWJcbiIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAgOiAi K0EiICh2LT5jb3VudGVyKSwgIj0mciIgKHJldCksICI9JnIiICh0ZW1wKSAgICAgICAgICBcCj4g PiA+ID4gKyAgICAgICAgICAgICA6ICJyIiAoSSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiArICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAg IHJldHVybiByZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4gPiA+ID4gK30KPiA+ID4gPiArI2VuZGlmCj4gPiA+ID4KPiA+ID4gPiAgI2Rl ZmluZSBBVE9NSUNfT1BfUkVUVVJOKG9wLCBhc21fb3AsIGNfb3AsIEksIGFzbV90eXBlLCBjX3R5 cGUsIHByZWZpeCkgICAgICBcCj4gPiA+ID4gIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9yaXNj di9pbmNsdWRlL2FzbS9iaXRvcHMuaAo+ID4gPiA+IGluZGV4IGZhZTE1MmVhMDUwOC4uMDA1MWRl MWNmNDcxIDEwMDY0NAo+ID4gPiA+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vYml0b3Bz LmgKPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2JpdG9wcy5oCj4gPiA+ID4g QEAgLTE4NywxMiArMTg3LDE3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHZhcmlhYmxl X2Zscyh1bnNpZ25lZCBpbnQgeCkKPiA+ID4gPgo+ID4gPiA+ICAjaWYgKEJJVFNfUEVSX0xPTkcg PT0gNjQpCj4gPiA+ID4gICNkZWZpbmUgX19BTU8ob3ApICAgICJhbW8iICNvcCAiLmQiCj4gPiA+ ID4gKyNkZWZpbmUgX19MUiAibHIuZCIKPiA+ID4gPiArI2RlZmluZSBfX1NDICJzYy5kIgo+ID4g PiA+ICAjZWxpZiAoQklUU19QRVJfTE9ORyA9PSAzMikKPiA+ID4gPiAgI2RlZmluZSBfX0FNTyhv cCkgICAgImFtbyIgI29wICIudyIKPiA+ID4gPiArI2RlZmluZSBfX0xSICJsci53Igo+ID4gPiA+ ICsjZGVmaW5lIF9fU0MgInNjLnciCj4gPiA+ID4gICNlbHNlCj4gPiA+ID4gICNlcnJvciAiVW5l eHBlY3RlZCBCSVRTX1BFUl9MT05HIgo+ID4gPiA+ICAjZW5kaWYKPiA+ID4gPgo+ID4gPiA+ICsj aWZuZGVmIFJJU0NWX0FNT19VU0VfWkFMUlNDCj4gPiA+ID4gICNkZWZpbmUgX190ZXN0X2FuZF9v cF9iaXRfb3JkKG9wLCBtb2QsIG5yLCBhZGRyLCBvcmQpICAgICAgICAgICAgICAgIFwKPiA+ID4g PiAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKPiA+ID4gPiAgICAgICB1bnNpZ25lZCBsb25nIF9fcmVzLCBfX21hc2s7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiBAQCAtMjExLDYgKzIxNiwzMyBAQCBzdGF0 aWMgX19hbHdheXNfaW5saW5lIGludCB2YXJpYWJsZV9mbHModW5zaWduZWQgaW50IHgpCj4gPiA+ ID4gICAgICAgICAgICAgICA6ICIrQSIgKGFkZHJbQklUX1dPUkQobnIpXSkgICAgICAgICAgICAg ICAgICAgICBcCj4gPiA+ID4gICAgICAgICAgICAgICA6ICJyIiAobW9kKEJJVF9NQVNLKG5yKSkp ICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gICAgICAgICAgICAgICA6ICJtZW1vcnki KTsKPiA+ID4gPiArI2Vsc2UKPiA+ID4gPiArI2RlZmluZSBfX3Rlc3RfYW5kX29wX2JpdF9vcmQo b3AsIG1vZCwgbnIsIGFkZHIsIG9yZCkgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsoeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ ID4gPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgX19yZXMsIF9fbWFzaywgX190ZW1wOyAgICAgICAg ICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgIF9fbWFzayA9IEJJVF9NQVNLKG5yKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgIF9fYXNtX18gX192b2xh dGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAg ICAgICAgICAgIjE6ICIgX19MUiAjb3JkICIgJTAsICUxXG4iICAgICAgICAgICAgICAgICAgICAg XAo+ID4gPiA+ICsgICAgICAgICAgICAgI29wICIgJTIsICUwLCAlM1xuIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAgX19TQyAjb3JkICIgJTIsICUy LCAlMVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAgImJu ZXogJTIsIDFiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsg ICAgICAgICAgICAgOiAiPSZyIiAoX19yZXMpLCAiK0EiIChhZGRyW0JJVF9XT1JEKG5yKV0pLCAi PSZyIiAoX190ZW1wKSAgICAgIFwKPiA+ID4gPiArICAgICAgICAgICAgIDogInIiIChtb2QoX19t YXNrKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiArICAgICAgICAgICAg IDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4g PiArICAgICAoKF9fcmVzICYgX19tYXNrKSAhPSAwKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKPiA+ID4gPiArfSkKPiA+ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUgX19vcF9iaXRf b3JkKG9wLCBtb2QsIG5yLCBhZGRyLCBvcmQpICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAg ICAgdW5zaWduZWQgbG9uZyBfX3JlcywgX190ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gPiA+ID4gKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgICAgICAgICAiMTogIiBfX0xSICNvcmQg IiAlMCwgJTFcbiIgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgICAgICAgICAj b3AgIiAlMiwgJTAsICUzXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4g KyAgICAgICAgICAgICBfX1NDICNvcmQgIiAlMiwgJTIsICUxXG4iICAgICAgICAgICAgICAgICAg ICAgICBcCj4gPiA+ID4gKyAgICAgICAgICAgICAiYm5leiAlMiwgMWJcbiIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgICAgICAgICA6ICI9JnIiIChfX3Jl cyksICIrQSIgKGFkZHJbQklUX1dPUkQobnIpXSksICI9JnIiIChfX3RlbXApICAgICAgXAo+ID4g PiA+ICsgICAgICAgICAgICAgOiAiciIgKG1vZChCSVRfTUFTSyhucikpKSAgICAgICAgICAgICAg ICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAgOiAibWVtb3J5IikKPiA+ID4gPiArI2Vu ZGlmCj4gPiA+ID4KPiA+ID4gPiAgI2RlZmluZSBfX3Rlc3RfYW5kX29wX2JpdChvcCwgbW9kLCBu ciwgYWRkcikgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICAgICAgIF9fdGVzdF9h bmRfb3BfYml0X29yZChvcCwgbW9kLCBuciwgYWRkciwgLmFxcmwpCj4gPiA+ID4gQEAgLTM1NCwx MiArMzg2LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX19fY2xlYXJfYml0X3VubG9jaygK PiA+ID4gPiAgc3RhdGljIGlubGluZSBib29sIGFyY2hfeG9yX3VubG9ja19pc19uZWdhdGl2ZV9i eXRlKHVuc2lnbmVkIGxvbmcgbWFzaywKPiA+ID4gPiAgICAgICAgICAgICAgIHZvbGF0aWxlIHVu c2lnbmVkIGxvbmcgKmFkZHIpCj4gPiA+ID4gIHsKPiA+ID4gPiArI2lmbmRlZiBSSVNDVl9BTU9f VVNFX1pBTFJTQwo+ID4gPiA+ICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzOwo+ID4gPiA+ICAgICAg IF9fYXNtX18gX192b2xhdGlsZV9fICgKPiA+ID4gPiAgICAgICAgICAgICAgIF9fQU1PKHhvcikg Ii5ybCAlMCwgJTIsICUxIgo+ID4gPiA+ICAgICAgICAgICAgICAgOiAiPXIiIChyZXMpLCAiK0Ei ICgqYWRkcikKPiA+ID4gPiAgICAgICAgICAgICAgIDogInIiIChfX05PUChtYXNrKSkKPiA+ID4g PiAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwo+ID4gPiA+ICsjZWxzZQo+ID4gPiA+ICsgICAg IHVuc2lnbmVkIGxvbmcgcmVzLCB0ZW1wOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICBfX2FzbV9f IF9fdm9sYXRpbGVfXyAoCj4gPiA+ID4gKyAgICAgICAgICAgICAiMTogIiBfX0xSICIucmwgJTAs ICUxXG4iCj4gPiA+ID4gKyAgICAgICAgICAgICAieG9yICUyLCAlMCwgJTNcbiIKPiA+ID4gPiAr ICAgICAgICAgICAgIF9fU0MgIi5ybCAlMiwgJTIsICUxXG4iCj4gPiA+ID4gKyAgICAgICAgICAg ICAiYm5leiAlMiwgMWJcbiIKPiA+ID4gPiArICAgICAgICAgICAgIDogIj0mciIgKHJlcyksICIr QSIgKCphZGRyKSwgIj0mciIgKHRlbXApCj4gPiA+ID4gKyAgICAgICAgICAgICA6ICJyIiAoX19O T1AobWFzaykpCj4gPiA+ID4gKyAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKPiA+ID4gPiArI2Vu ZGlmCj4gPiA+ID4gICAgICAgcmV0dXJuIChyZXMgJiBCSVQoNykpICE9IDA7Cj4gPiA+ID4gIH0K PiA+ID4gPgo+ID4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2NtcHhj aGcuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY21weGNoZy5oCj4gPiA+ID4gaW5kZXggNGNh ZGM1NjIyMGZlLi5hYmE2MGY0MjcwNjAgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvYXJjaC9yaXNjdi9p bmNsdWRlL2FzbS9jbXB4Y2hnLmgKPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNt L2NtcHhjaGcuaAo+ID4gPiA+IEBAIC01MSw2ICs1MSw3IEBACj4gPiA+ID4gICAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+ID4gPiA+ICB9KQo+ID4gPiA+Cj4gPiA+ID4gKyNpZm5kZWYgUklTQ1ZfQU1P X1VTRV9aQUxSU0MKPiA+ID4gPiAgI2RlZmluZSBfX2FyY2hfeGNoZyhzZngsIHByZXBlbmQsIGFw cGVuZCwgciwgcCwgbikgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICAoeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gPiA+ID4gICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiBAQCAtNjEsNiArNjIsMjEgQEAKPiA+ID4g PiAgICAgICAgICAgICAgIDogInIiIChuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+ID4gPiA+ICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gIH0pCj4gPiA+ ID4gKyNlbHNlCj4gPiA+ID4gKyNkZWZpbmUgX19hcmNoX3hjaGcoc2Z4LCBwcmVwZW5kLCBhcHBl bmQsIHIsIHAsIG4pICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiArKHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ ID4gPiA+ICsgICAgIF9fdHlwZW9mX18oKihfX3B0cikpIHRlbXA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18g KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiArICAg ICAgICAgICAgIHByZXBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAgIjE6ICAgICBsciIgc2Z4ICIgJTAsICUx XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgICAgICAgICAi ICAgICAgIHNjIiBzZnggIiAlMiwgJTMsICUxXG4iICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiA+ID4gPiArICAgICAgICAgICAgICIgICAgICAgYm5leiAlMiwgMWJcbiIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAgYXBwZW5kICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAg ICAgICAgICAgICA6ICI9JnIiIChyKSwgIitBIiAoKihwKSksICI9JnIiICh0ZW1wKSAgICAgICAg ICAgICAgICAgIFwKPiA+ID4gPiArICAgICAgICAgICAgIDogInIiIChuKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgICAgICAg OiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gPiA+ID4gK30pCj4gPiA+ID4gKyNlbmRpZgo+ID4gPiA+Cj4gPiA+ID4gICNkZWZpbmUgX2Fy Y2hfeGNoZyhwdHIsIG5ldywgc2Nfc2Z4LCBzd2FwX3NmeCwgcHJlcGVuZCwgICAgICAgICAgICAg ICAgICAgICAgXAo+ID4gPiA+ICAgICAgICAgICAgICAgICAgc2NfYXBwZW5kLCBzd2FwX2FwcGVu ZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2Fy Y2gvcmlzY3YvaW5jbHVkZS9hc20vZnV0ZXguaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vZnV0 ZXguaAo+ID4gPiA+IGluZGV4IGZjODEzMGY5OTVjMS4uZGM2MzA2NWU3MDdlIDEwMDY0NAo+ID4g PiA+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vZnV0ZXguaAo+ID4gPiA+ICsrKyBiL2Fy Y2gvcmlzY3YvaW5jbHVkZS9hc20vZnV0ZXguaAo+ID4gPiA+IEBAIC0xOSw2ICsxOSw3IEBACj4g PiA+ID4gICNkZWZpbmUgX19kaXNhYmxlX3VzZXJfYWNjZXNzKCkgICAgICAgICAgICAgIGRvIHsg fSB3aGlsZSAoMCkKPiA+ID4gPiAgI2VuZGlmCj4gPiA+ID4KPiA+ID4gPiArI2lmbmRlZiBSSVND Vl9BTU9fVVNFX1pBTFJTQwo+ID4gPiA+ICAjZGVmaW5lIF9fZnV0ZXhfYXRvbWljX29wKGluc24s IHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpICAgXAo+ID4gPiA+ICB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICAg ICAgIF9fZW5hYmxlX3VzZXJfYWNjZXNzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ID4gPiA+IEBAIC0zMiwxNiArMzMsMzkgQEAKPiA+ID4gPiAgICAgICA6ICJtZW1vcnki KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiAg ICAgICBfX2Rpc2FibGVfdXNlcl9hY2Nlc3MoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPiA+ID4gPiAgfQo+ID4gPiA+ICsjZWxzZQo+ID4gPiA+ICsjZGVmaW5lIF9fZnV0ZXhf YXRvbWljX29wKGluc24sIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpICAgXAo+ID4gPiA+ICt7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ID4gPiA+ICsgICAgIF9fZW5hYmxlX3VzZXJfYWNjZXNzKCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICIxOiAgICAg bHIudy5hcXJsICVbb3ZdLCAlW3VdXG4iICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ ICsgICAgICIgICAgICAgIiBpbnNuICJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAo+ID4gPiA+ICsgICAgICIgICAgICAgc2Mudy5hcXJsICVbdF0sICVbdF0sICVbdV1c biIgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICIgICAgICAgYm5leiAlW3RdLCAx YlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICIyOlxu IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4g PiA+ICsgICAgIF9BU01fRVhUQUJMRV9VQUNDRVNTX0VSUigxYiwgMmIsICVbcl0pICAgICAgICAg ICAgICAgICAgXAo+ID4gPiA+ICsgICAgIDogW3JdICIrciIgKHJldCksIFtvdl0gIj0mciIgKG9s ZHZhbCksICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgICAgW3RdICI9JnIiICh0ZW1w KSwgW3VdICIrbSIgKCp1YWRkcikgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgIDog W29wXSAiSnIiIChvcGFyZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ ID4gPiA+ICsgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgIF9fZGlzYWJsZV91c2VyX2FjY2VzcygpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ICt9Cj4gPiA+ID4gKyNlbmRpZgo+ ID4gPiA+Cj4gPiA+ID4gIHN0YXRpYyBpbmxpbmUgaW50Cj4gPiA+ID4gIGFyY2hfZnV0ZXhfYXRv bWljX29wX2ludXNlcihpbnQgb3AsIGludCBvcGFyZywgaW50ICpvdmFsLCB1MzIgX191c2VyICp1 YWRkcikKPiA+ID4gPiAgewo+ID4gPiA+ICsjaWZuZGVmIFJJU0NWX0FNT19VU0VfWkFMUlNDCj4g PiA+ID4gICAgICAgaW50IG9sZHZhbCA9IDAsIHJldCA9IDA7Cj4gPiA+ID4gKyNlbHNlCj4gPiA+ ID4gKyAgICAgaW50IG9sZHZhbCA9IDAsIHJldCA9IDAsIHRlbXAgPSAwOwo+ID4gPgo+ID4gPiBJ IHRoaW5rIGl0J3MgYmV0dGVyIHRvIGRlZmluZSB0aGlzIHRlbXAgdmFyaWFibGUgaW5zaWRlIG9m Cj4gPiA+IF9fZnV0ZXhfYXRvbWljX29wKCkgaW5zdGVhZCBvZiByZXF1aXJpbmcgaXQgdG8gYmUg ZGVmaW5lZCBpbiB0aGUgc2NvcGUKPiA+ID4gd2hlcmUgdGhlIG1hY3JvIGlzIGNhbGxlZC4KPiA+ ID4KPiA+ID4gLSBDaGFybGllCj4gPiA+Cj4gPiA+ID4gKyNlbmRpZgo+ID4gPiA+Cj4gPiA+ID4g ICAgICAgaWYgKCFhY2Nlc3Nfb2sodWFkZHIsIHNpemVvZih1MzIpKSkKPiA+ID4gPiAgICAgICAg ICAgICAgIHJldHVybiAtRUZBVUxUOwo+ID4gPiA+Cj4gPiA+ID4gICAgICAgc3dpdGNoIChvcCkg ewo+ID4gPiA+ICsjaWZuZGVmIFJJU0NWX0FNT19VU0VfWkFMUlNDCj4gPiA+ID4gICAgICAgY2Fz ZSBGVVRFWF9PUF9TRVQ6Cj4gPiA+ID4gICAgICAgICAgICAgICBfX2Z1dGV4X2F0b21pY19vcCgi YW1vc3dhcC53LmFxcmwgJVtvdl0sJXpbb3BdLCVbdV0iLAo+ID4gPiA+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7Cj4gPiA+ID4gQEAg LTYyLDYgKzg2LDI4IEBAIGFyY2hfZnV0ZXhfYXRvbWljX29wX2ludXNlcihpbnQgb3AsIGludCBv cGFyZywgaW50ICpvdmFsLCB1MzIgX191c2VyICp1YWRkcikKPiA+ID4gPiAgICAgICAgICAgICAg IF9fZnV0ZXhfYXRvbWljX29wKCJhbW94b3Iudy5hcXJsICVbb3ZdLCV6W29wXSwlW3VdIiwKPiA+ ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCwgb2xkdmFsLCB1YWRkciwg b3BhcmcpOwo+ID4gPiA+ICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiA+ID4gKyNlbHNlCj4gPiA+ ID4gKyAgICAgY2FzZSBGVVRFWF9PUF9TRVQ6Cj4gPiA+ID4gKyAgICAgICAgICAgICBfX2Z1dGV4 X2F0b21pY19vcCgibXYgJVt0XSwgJXpbb3BdIiwKPiA+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOwo+ID4gPiA+ICsgICAgICAg ICAgICAgYnJlYWs7Cj4gPiA+ID4gKyAgICAgY2FzZSBGVVRFWF9PUF9BREQ6Cj4gPiA+ID4gKyAg ICAgICAgICAgICBfX2Z1dGV4X2F0b21pY19vcCgiYWRkICVbdF0sICVbb3ZdLCAleltvcF0iLAo+ ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LCBvbGR2YWwsIHVhZGRy LCBvcGFyZyk7Cj4gPiA+ID4gKyAgICAgICAgICAgICBicmVhazsKPiA+ID4gPiArICAgICBjYXNl IEZVVEVYX09QX09SOgo+ID4gPiA+ICsgICAgICAgICAgICAgX19mdXRleF9hdG9taWNfb3AoIm9y ICVbdF0sICVbb3ZdLCAleltvcF0iLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7Cj4gPiA+ID4gKyAgICAgICAgICAgICBi cmVhazsKPiA+ID4gPiArICAgICBjYXNlIEZVVEVYX09QX0FORE46Cj4gPiA+ID4gKyAgICAgICAg ICAgICBfX2Z1dGV4X2F0b21pY19vcCgiYW5kICVbdF0sICVbb3ZdLCAleltvcF0iLAo+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LCBvbGR2YWwsIHVhZGRyLCB+b3Bh cmcpOwo+ID4gPiA+ICsgICAgICAgICAgICAgYnJlYWs7Cj4gPiA+ID4gKyAgICAgY2FzZSBGVVRF WF9PUF9YT1I6Cj4gPiA+ID4gKyAgICAgICAgICAgICBfX2Z1dGV4X2F0b21pY19vcCgieG9yICVb dF0sICVbb3ZdLCAleltvcF0iLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7Cj4gPiA+ID4gKyAgICAgICAgICAgICBicmVh azsKPiA+ID4gPiArI2VuZGlmCj4gPiA+ID4gICAgICAgZGVmYXVsdDoKPiA+ID4gPiAgICAgICAg ICAgICAgIHJldCA9IC1FTk9TWVM7Cj4gPiA+ID4gICAgICAgfQo+ID4gPiA+IC0tCgoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1h aWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) (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 C6AEB1D5CC4 for ; Mon, 3 Feb 2025 19:12:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.196 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738609959; cv=none; b=Ey77HGOkuTYaOEKZNqz/HjovskcpahBCggGLfSGetmKzqsykUQIPefEBbmrNbIiMnbsBgkpvQm+vFLtwefDQe5PT6cYoeUYTuAWZVEt69IKNZ78zUXpLIV+vQrelKIGI9jslGP8q+1WG6b4ByyFMBy943XYd1OHUrClqyIFqokQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738609959; c=relaxed/simple; bh=0YIx1PbgS3FF4tCyzyjCdDht5tGWuphem1k8UpXZvPQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ny2WCPN5K1kcXYxZNQfHehrWn3Ts//bgd8L2NHr4w3xB5ek5dP6JIZa3OxQ9el+kMzH3c2ebQCTCgeQbs9VlvAmYGxASF2Ol6asaawbiP+ELWmbdyK/7cJVIj0+2s4cKLfyapSUELBAww7L9B2mpeNO01ZA0fRjtW16k8BLhXaw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=A+S/SN6Y; arc=none smtp.client-ip=209.85.214.196 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="A+S/SN6Y" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2165cb60719so85979545ad.0 for ; Mon, 03 Feb 2025 11:12:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1738609956; x=1739214756; 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=kVc14ds/3vaHuIcp1SH+yhV8K9Dwrclk14FkpIfc60U=; b=A+S/SN6Y25P3z0LhVUkzjVBJdgr0NHiU+Z789wZ8ybTv9bfDPUxoh4PCQwsB2/MfGb GoUGtWctUOgoFp/OTkyXYSHWIilEkNboLbHetyjwwlkNiVjqS2JUMo5dGb23kR5WH1GL H/iulaq8hdBUSz7duEdGxqke9yMly5ylScjlnTE5A/prkoIpQ9vl9Z9p+v5WNSjZpglU qR67uYRTKUcTvpzcBTwHRgmT/5yzw+veTLkbypl5p04ERKYRWFA1wtK0Js0cp5HTmGcS 8YRJ8kCIcfVJNoT4vcaVzk9Lnnlnr3l3o6LvpUZ1Xoeo7GmFaBfbR3hUbso37dJnnLCu H39g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738609956; x=1739214756; 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=kVc14ds/3vaHuIcp1SH+yhV8K9Dwrclk14FkpIfc60U=; b=ufGuKHkWVli2BVoc5SYKl9+ZsB0nxsn8ZeGgtJwqFXl3LOvmtsBNiq+4XDYIFOrNqM Wb/NGBtCBBbzJbjmEcwK1wV1p5RO2I2jCf67OfGcR+4nQF+7zVBqkTbOwdzDF+aFewoP NSryEZVfvbwvPndcFkmRc/5nWLg80PJQ+WsMhNIRo07JNQgLok1zEOoL92acfWZWDWVf k4rsu7H2Mhefm20BkxbopZGtao6g2/PYeuCs6j6euCc/GAvuUE491Jw2DxTn4GY0Wzj1 OPDlMHLC7IogqUbZ7cu6nZCVUXE8dcoiAYhVa7GZjhitP28VWfRG7DFsh1MhdDaVs3Uy NJ/Q== X-Forwarded-Encrypted: i=1; AJvYcCXzgvNOvkxFq3oMJGXAw7dtN668A15N5/c3J1KzceUcz4ZeZAudLJklzVEH1eFLlLIhjQckfSazxgg3ve8=@vger.kernel.org X-Gm-Message-State: AOJu0YxNk9pnZBtqpXyI9AOWWxQT7DQBV9g5cSxwrlr3oNzmPJ5gmWzI q6Ix4a6krIAZqqOpVy/pTgHmheMuHC9Huo0KlNG846vkKwqD1vjlo81Z/EU01OA= X-Gm-Gg: ASbGncuq//ze+vscyEmjZxYcygER3R42EaJVyoprdp90nJQmQfOVQVdQV8HNhlDlmJ/ VM5aWvaNBcEzuUkWqMeM/yxH1KyymkTLI59BbRzAlmm8RkDBPIKIJdwcFdKFqi/HZE2Zx4jR29f fQ6dahfCUus5Dj+Cxp0D8RlQMpPtuAIae4PULxORN4IRLtIMRbtkDm8BdvJStPMQ/FXGS5OJNrO TgfcNDRzTwrLQGwN4sPGCO1JDaBLtqBx7/xs/xrQlKahBJy9en7TrA/9pNSAwYuyXSSXse9ZjV0 UUiB7wd7ph8= X-Google-Smtp-Source: AGHT+IEW8VYVGX/g0scUPbicx0lQjpuuIy+guiEpo7CMV8fy/V1CEhg6ljnMr8yc4V2gECuckVXG0A== X-Received: by 2002:a05:6a21:6da4:b0:1e1:b727:1801 with SMTP id adf61e73a8af0-1ed7a5ef9demr35727915637.27.1738609955803; Mon, 03 Feb 2025 11:12:35 -0800 (PST) Received: from ghost ([2601:647:6700:64d0:4f63:f9d5:2cbd:2947]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72fe69bbb7esm9134416b3a.106.2025.02.03.11.12.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 11:12:35 -0800 (PST) Date: Mon, 3 Feb 2025 11:12:32 -0800 From: Charlie Jenkins To: Conor Dooley Cc: Aleksandar Rikalo , linux-riscv@lists.infradead.org, Paul Walmsley , Palmer Dabbelt , Albert Ou , Will Deacon , Peter Zijlstra , Boqun Feng , Mark Rutland , Yury Norov , Rasmus Villemoes , Andrea Parri , Leonardo Bras , Guo Ren , Samuel Holland , Eric Chan , linux-kernel@vger.kernel.org, Djordje Todorovic Subject: Re: [PATCH v2] riscv: Use Zalrsc extension to implement atomic functions Message-ID: References: <20241225082412.36727-1-arikalo@gmail.com> <20250202-clammy-skewed-eb0a0fce18f1@spud> Precedence: bulk X-Mailing-List: linux-kernel@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: <20250202-clammy-skewed-eb0a0fce18f1@spud> On Sun, Feb 02, 2025 at 08:08:50PM +0000, Conor Dooley wrote: > On Sat, Feb 01, 2025 at 01:04:25PM +0100, Aleksandar Rikalo wrote: > > On Fri, Jan 10, 2025 at 4:23 AM Charlie Jenkins wrote: > > > > > > From: Chao-ying Fu > > > > > > > > Use only LR/SC instructions to implement atomic functions. > > > > > > In the previous patch you mention that this is to support MIPS P8700. Can > > > you expand on why this change is required? The datasheet at [1] says: > > > > > > "The P8700 core is configured to support the RV64GCZba_Zbb (G = IMAFD) > > > Standard ISA. It includes the RV64I base ISA, Multiply (M), Atomic (A), > > > Single-Precision Floating Point (F), Double (D), Compressed (C) RISC-V > > > extensions, as well as the as well as the bit-manipulation extensions > > > (Zba) and (Zbb)" > > > > > > The "A" extension is a part of "G" which is mostly assumed to exist in > > > the kernel. Additionally, having this be a compilation flag will cause > > > traps on generic kernels. We generally try to push everything we can > > > into runtime feature detection since there are so many possible variants > > > of riscv. > > > > > > Expressing not being able to perform a feature like this is normally > > > better expressed as an errata. Then generic kernels will be able to > > > include this, and anybody who doesn't want to have the extra nops > > > introduced can disable the errata. A similar approach to what I pointed > > > out last time should work here too (but with more places to replace) > > > [2]. > > > > > > [1] https://mips.com/wp-content/uploads/2024/11/P8700_Data_Sheet.pdf > > > [2] https://lore.kernel.org/lkml/Z2-UNfwcAQYZqVBU@ghost/T/ > > > > So far we haven't found a way to do this using errata. > > You mean using alternatives? Not implementing A, but instead > implementing Zalrsc, is not an erratum. It's a design decision. We could do the same thing we do with misaligned access detection and run some instructions to determine if these instructions are being emulated. If they are being emulated, patch all of the places to use zalrsc. - Charlie > > > There's no way > > to patch one instruction with multiple ones, > > Have you looked at how the alternatives work? There's no requirement > that the sequences have the same number of instructions, padding is > allowed. > > > and we also need an extra > > (temporary) register. > > > > A CPU can implement the Zalrsc extension [1] instead of "complete A" > > (which P8700 does). > > >From "Zaamo and Zalrsc Extensions" spec: > > Why does this statement differ from the P8700 datasheet linked above? > > Cheers, > Conor. > > > > > "The fetch-and-op style atomic primitives provided by the A extension > > support better scaling for highly parallel systems. Simpler > > implementations that do not have such scaling requirements may > > implement the Zalrsc subset of the A extension to support atomic > > primitives." > > > > Therefore, we believe this would be a useful option for wider use. > > > > [1] https://github.com/riscv/riscv-zaamo-zalrsc/releases/download/v1.0-rc2/riscv-zaamo-zalrsc.pdf > > > > > > > > > > Add config RISCV_AMO_USE_ZALRSC. > > > > > > > > Signed-off-by: Chao-ying Fu > > > > Signed-off-by: Aleksandar Rikalo > > > > --- > > > > arch/riscv/Kconfig | 11 +++++++ > > > > arch/riscv/include/asm/atomic.h | 52 +++++++++++++++++++++++++++++++- > > > > arch/riscv/include/asm/bitops.h | 45 +++++++++++++++++++++++++++ > > > > arch/riscv/include/asm/cmpxchg.h | 16 ++++++++++ > > > > arch/riscv/include/asm/futex.h | 46 ++++++++++++++++++++++++++++ > > > > 5 files changed, 169 insertions(+), 1 deletion(-) > > > > > > > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > > > > index cc63aef41e94..9fb020b49408 100644 > > > > --- a/arch/riscv/Kconfig > > > > +++ b/arch/riscv/Kconfig > > > > @@ -715,6 +715,17 @@ config RISCV_ISA_ZACAS > > > > > > > > If you don't know what to do here, say Y. > > > > > > > > +config RISCV_AMO_USE_ZALRSC > > > > + bool "Use Zalrsc extension to implement atomic functions" > > > > + help > > > > + Kernel uses only LR/SC instructions to implement atomic functions. > > > > + > > > > + It makes sense to enable this option if your platform only > > > > + implements the Zalrsc extension (a subset of the A extension), > > > > + and not the complete A extension. > > > > + > > > > + If you don't know what to do here, say N. > > > > + > > > > config TOOLCHAIN_HAS_ZBB > > > > bool > > > > default y > > > > diff --git a/arch/riscv/include/asm/atomic.h b/arch/riscv/include/asm/atomic.h > > > > index 5b96c2f61adb..88f62e33a545 100644 > > > > --- a/arch/riscv/include/asm/atomic.h > > > > +++ b/arch/riscv/include/asm/atomic.h > > > > @@ -50,6 +50,7 @@ static __always_inline void arch_atomic64_set(atomic64_t *v, s64 i) > > > > * have the AQ or RL bits set. These don't return anything, so there's only > > > > * one version to worry about. > > > > */ > > > > +#ifndef RISCV_AMO_USE_ZALRSC > > > > #define ATOMIC_OP(op, asm_op, I, asm_type, c_type, prefix) \ > > > > static __always_inline \ > > > > void arch_atomic##prefix##_##op(c_type i, atomic##prefix##_t *v) \ > > > > @@ -59,7 +60,23 @@ void arch_atomic##prefix##_##op(c_type i, atomic##prefix##_t *v) \ > > > > : "+A" (v->counter) \ > > > > : "r" (I) \ > > > > : "memory"); \ > > > > -} \ > > > > +} > > > > +#else > > > > +#define ATOMIC_OP(op, asm_op, I, asm_type, c_type, prefix) \ > > > > +static __always_inline \ > > > > +void arch_atomic##prefix##_##op(c_type i, atomic##prefix##_t *v) \ > > > > +{ \ > > > > + register c_type ret, temp; \ > > > > + __asm__ __volatile__ ( \ > > > > + "1: lr." #asm_type " %1, %0\n" \ > > > > + " " #asm_op " %2, %1, %3\n" \ > > > > + " sc." #asm_type " %2, %2, %0\n" \ > > > > + " bnez %2, 1b\n" \ > > > > + : "+A" (v->counter), "=&r" (ret), "=&r" (temp) \ > > > > + : "r" (I) \ > > > > + : "memory"); \ > > > > +} > > > > +#endif > > > > > > > > #ifdef CONFIG_GENERIC_ATOMIC64 > > > > #define ATOMIC_OPS(op, asm_op, I) \ > > > > @@ -84,6 +101,7 @@ ATOMIC_OPS(xor, xor, i) > > > > * There's two flavors of these: the arithmatic ops have both fetch and return > > > > * versions, while the logical ops only have fetch versions. > > > > */ > > > > +#ifndef RISCV_AMO_USE_ZALRSC > > > > #define ATOMIC_FETCH_OP(op, asm_op, I, asm_type, c_type, prefix) \ > > > > static __always_inline \ > > > > c_type arch_atomic##prefix##_fetch_##op##_relaxed(c_type i, \ > > > > @@ -108,6 +126,38 @@ c_type arch_atomic##prefix##_fetch_##op(c_type i, atomic##prefix##_t *v) \ > > > > : "memory"); \ > > > > return ret; \ > > > > } > > > > +#else > > > > +#define ATOMIC_FETCH_OP(op, asm_op, I, asm_type, c_type, prefix) \ > > > > +static __always_inline \ > > > > +c_type arch_atomic##prefix##_fetch_##op##_relaxed(c_type i, \ > > > > + atomic##prefix##_t *v) \ > > > > +{ \ > > > > + register c_type ret, temp; \ > > > > + __asm__ __volatile__ ( \ > > > > + "1: lr." #asm_type " %1, %0\n" \ > > > > + " " #asm_op " %2, %1, %3\n" \ > > > > + " sc." #asm_type " %2, %2, %0\n" \ > > > > + " bnez %2, 1b\n" \ > > > > + : "+A" (v->counter), "=&r" (ret), "=&r" (temp) \ > > > > + : "r" (I) \ > > > > + : "memory"); \ > > > > + return ret; \ > > > > +} \ > > > > +static __always_inline \ > > > > +c_type arch_atomic##prefix##_fetch_##op(c_type i, atomic##prefix##_t *v) \ > > > > +{ \ > > > > + register c_type ret, temp; \ > > > > + __asm__ __volatile__ ( \ > > > > + "1: lr." #asm_type ".aqrl %1, %0\n" \ > > > > + " " #asm_op " %2, %1, %3\n" \ > > > > + " sc." #asm_type ".aqrl %2, %2, %0\n" \ > > > > + " bnez %2, 1b\n" \ > > > > + : "+A" (v->counter), "=&r" (ret), "=&r" (temp) \ > > > > + : "r" (I) \ > > > > + : "memory"); \ > > > > + return ret; \ > > > > +} > > > > +#endif > > > > > > > > #define ATOMIC_OP_RETURN(op, asm_op, c_op, I, asm_type, c_type, prefix) \ > > > > static __always_inline \ > > > > diff --git a/arch/riscv/include/asm/bitops.h b/arch/riscv/include/asm/bitops.h > > > > index fae152ea0508..0051de1cf471 100644 > > > > --- a/arch/riscv/include/asm/bitops.h > > > > +++ b/arch/riscv/include/asm/bitops.h > > > > @@ -187,12 +187,17 @@ static __always_inline int variable_fls(unsigned int x) > > > > > > > > #if (BITS_PER_LONG == 64) > > > > #define __AMO(op) "amo" #op ".d" > > > > +#define __LR "lr.d" > > > > +#define __SC "sc.d" > > > > #elif (BITS_PER_LONG == 32) > > > > #define __AMO(op) "amo" #op ".w" > > > > +#define __LR "lr.w" > > > > +#define __SC "sc.w" > > > > #else > > > > #error "Unexpected BITS_PER_LONG" > > > > #endif > > > > > > > > +#ifndef RISCV_AMO_USE_ZALRSC > > > > #define __test_and_op_bit_ord(op, mod, nr, addr, ord) \ > > > > ({ \ > > > > unsigned long __res, __mask; \ > > > > @@ -211,6 +216,33 @@ static __always_inline int variable_fls(unsigned int x) > > > > : "+A" (addr[BIT_WORD(nr)]) \ > > > > : "r" (mod(BIT_MASK(nr))) \ > > > > : "memory"); > > > > +#else > > > > +#define __test_and_op_bit_ord(op, mod, nr, addr, ord) \ > > > > +({ \ > > > > + unsigned long __res, __mask, __temp; \ > > > > + __mask = BIT_MASK(nr); \ > > > > + __asm__ __volatile__ ( \ > > > > + "1: " __LR #ord " %0, %1\n" \ > > > > + #op " %2, %0, %3\n" \ > > > > + __SC #ord " %2, %2, %1\n" \ > > > > + "bnez %2, 1b\n" \ > > > > + : "=&r" (__res), "+A" (addr[BIT_WORD(nr)]), "=&r" (__temp) \ > > > > + : "r" (mod(__mask)) \ > > > > + : "memory"); \ > > > > + ((__res & __mask) != 0); \ > > > > +}) > > > > + > > > > +#define __op_bit_ord(op, mod, nr, addr, ord) \ > > > > + unsigned long __res, __temp; \ > > > > + __asm__ __volatile__ ( \ > > > > + "1: " __LR #ord " %0, %1\n" \ > > > > + #op " %2, %0, %3\n" \ > > > > + __SC #ord " %2, %2, %1\n" \ > > > > + "bnez %2, 1b\n" \ > > > > + : "=&r" (__res), "+A" (addr[BIT_WORD(nr)]), "=&r" (__temp) \ > > > > + : "r" (mod(BIT_MASK(nr))) \ > > > > + : "memory") > > > > +#endif > > > > > > > > #define __test_and_op_bit(op, mod, nr, addr) \ > > > > __test_and_op_bit_ord(op, mod, nr, addr, .aqrl) > > > > @@ -354,12 +386,25 @@ static inline void arch___clear_bit_unlock( > > > > static inline bool arch_xor_unlock_is_negative_byte(unsigned long mask, > > > > volatile unsigned long *addr) > > > > { > > > > +#ifndef RISCV_AMO_USE_ZALRSC > > > > unsigned long res; > > > > __asm__ __volatile__ ( > > > > __AMO(xor) ".rl %0, %2, %1" > > > > : "=r" (res), "+A" (*addr) > > > > : "r" (__NOP(mask)) > > > > : "memory"); > > > > +#else > > > > + unsigned long res, temp; > > > > + > > > > + __asm__ __volatile__ ( > > > > + "1: " __LR ".rl %0, %1\n" > > > > + "xor %2, %0, %3\n" > > > > + __SC ".rl %2, %2, %1\n" > > > > + "bnez %2, 1b\n" > > > > + : "=&r" (res), "+A" (*addr), "=&r" (temp) > > > > + : "r" (__NOP(mask)) > > > > + : "memory"); > > > > +#endif > > > > return (res & BIT(7)) != 0; > > > > } > > > > > > > > diff --git a/arch/riscv/include/asm/cmpxchg.h b/arch/riscv/include/asm/cmpxchg.h > > > > index 4cadc56220fe..aba60f427060 100644 > > > > --- a/arch/riscv/include/asm/cmpxchg.h > > > > +++ b/arch/riscv/include/asm/cmpxchg.h > > > > @@ -51,6 +51,7 @@ > > > > } \ > > > > }) > > > > > > > > +#ifndef RISCV_AMO_USE_ZALRSC > > > > #define __arch_xchg(sfx, prepend, append, r, p, n) \ > > > > ({ \ > > > > __asm__ __volatile__ ( \ > > > > @@ -61,6 +62,21 @@ > > > > : "r" (n) \ > > > > : "memory"); \ > > > > }) > > > > +#else > > > > +#define __arch_xchg(sfx, prepend, append, r, p, n) \ > > > > +({ \ > > > > + __typeof__(*(__ptr)) temp; \ > > > > + __asm__ __volatile__ ( \ > > > > + prepend \ > > > > + "1: lr" sfx " %0, %1\n" \ > > > > + " sc" sfx " %2, %3, %1\n" \ > > > > + " bnez %2, 1b\n" \ > > > > + append \ > > > > + : "=&r" (r), "+A" (*(p)), "=&r" (temp) \ > > > > + : "r" (n) \ > > > > + : "memory"); \ > > > > +}) > > > > +#endif > > > > > > > > #define _arch_xchg(ptr, new, sc_sfx, swap_sfx, prepend, \ > > > > sc_append, swap_append) \ > > > > diff --git a/arch/riscv/include/asm/futex.h b/arch/riscv/include/asm/futex.h > > > > index fc8130f995c1..dc63065e707e 100644 > > > > --- a/arch/riscv/include/asm/futex.h > > > > +++ b/arch/riscv/include/asm/futex.h > > > > @@ -19,6 +19,7 @@ > > > > #define __disable_user_access() do { } while (0) > > > > #endif > > > > > > > > +#ifndef RISCV_AMO_USE_ZALRSC > > > > #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ > > > > { \ > > > > __enable_user_access(); \ > > > > @@ -32,16 +33,39 @@ > > > > : "memory"); \ > > > > __disable_user_access(); \ > > > > } > > > > +#else > > > > +#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ > > > > +{ \ > > > > + __enable_user_access(); \ > > > > + __asm__ __volatile__ ( \ > > > > + "1: lr.w.aqrl %[ov], %[u]\n" \ > > > > + " " insn "\n" \ > > > > + " sc.w.aqrl %[t], %[t], %[u]\n" \ > > > > + " bnez %[t], 1b\n" \ > > > > + "2:\n" \ > > > > + _ASM_EXTABLE_UACCESS_ERR(1b, 2b, %[r]) \ > > > > + : [r] "+r" (ret), [ov] "=&r" (oldval), \ > > > > + [t] "=&r" (temp), [u] "+m" (*uaddr) \ > > > > + : [op] "Jr" (oparg) \ > > > > + : "memory"); \ > > > > + __disable_user_access(); \ > > > > +} > > > > +#endif > > > > > > > > static inline int > > > > arch_futex_atomic_op_inuser(int op, int oparg, int *oval, u32 __user *uaddr) > > > > { > > > > +#ifndef RISCV_AMO_USE_ZALRSC > > > > int oldval = 0, ret = 0; > > > > +#else > > > > + int oldval = 0, ret = 0, temp = 0; > > > > > > I think it's better to define this temp variable inside of > > > __futex_atomic_op() instead of requiring it to be defined in the scope > > > where the macro is called. > > > > > > - Charlie > > > > > > > +#endif > > > > > > > > if (!access_ok(uaddr, sizeof(u32))) > > > > return -EFAULT; > > > > > > > > switch (op) { > > > > +#ifndef RISCV_AMO_USE_ZALRSC > > > > case FUTEX_OP_SET: > > > > __futex_atomic_op("amoswap.w.aqrl %[ov],%z[op],%[u]", > > > > ret, oldval, uaddr, oparg); > > > > @@ -62,6 +86,28 @@ arch_futex_atomic_op_inuser(int op, int oparg, int *oval, u32 __user *uaddr) > > > > __futex_atomic_op("amoxor.w.aqrl %[ov],%z[op],%[u]", > > > > ret, oldval, uaddr, oparg); > > > > break; > > > > +#else > > > > + case FUTEX_OP_SET: > > > > + __futex_atomic_op("mv %[t], %z[op]", > > > > + ret, oldval, uaddr, oparg); > > > > + break; > > > > + case FUTEX_OP_ADD: > > > > + __futex_atomic_op("add %[t], %[ov], %z[op]", > > > > + ret, oldval, uaddr, oparg); > > > > + break; > > > > + case FUTEX_OP_OR: > > > > + __futex_atomic_op("or %[t], %[ov], %z[op]", > > > > + ret, oldval, uaddr, oparg); > > > > + break; > > > > + case FUTEX_OP_ANDN: > > > > + __futex_atomic_op("and %[t], %[ov], %z[op]", > > > > + ret, oldval, uaddr, ~oparg); > > > > + break; > > > > + case FUTEX_OP_XOR: > > > > + __futex_atomic_op("xor %[t], %[ov], %z[op]", > > > > + ret, oldval, uaddr, oparg); > > > > + break; > > > > +#endif > > > > default: > > > > ret = -ENOSYS; > > > > } > > > > --