From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (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 2B71A19E7F5 for ; Thu, 15 Aug 2024 13:34:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723728862; cv=none; b=p58Kf5NvH+bHwK65kkc1M6M/5/FzvuD/buYazI5+wZljhkgwi4Mlek6AiSFYrc8XX19qdTpaEQ4q2F9uogsztqTMIFatthIW4GC87dnUXlSheB2Fklf10M44eKjR9DNkZMr2/7rcH/mmMdR4TcHEreY5Skii1gOu/FXiA8ac5HE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723728862; c=relaxed/simple; bh=tbWsNgYrDIbnSK7YKq4tQxF5j6rIWuV0/RYeKfcHhxE=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=kQz/3xFBuWIOOCVGM6xLXc5RrNFmbUdegfaLmxq98yCOZP8eLDuCky1tcf0AAOx9ywgEibMiJJhvPVYkqmTFKmDM5dsnnIhYW8tkzS9Fy+/SnKQDgBuV+4ydUzrciMP4lneNGRlZcLOz6zE6a23I4JqQNmZ7N5+40s4h5c0R1II= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ventanamicro.com; spf=pass smtp.mailfrom=ventanamicro.com; dkim=pass (2048-bit key) header.d=ventanamicro.com header.i=@ventanamicro.com header.b=U22Ze9XJ; arc=none smtp.client-ip=209.85.208.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ventanamicro.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ventanamicro.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ventanamicro.com header.i=@ventanamicro.com header.b="U22Ze9XJ" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-5bba25c1e15so1319505a12.2 for ; Thu, 15 Aug 2024 06:34:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1723728858; x=1724333658; 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=uf+s/T5xCp+3fTbJjT+zyzmVlfgDLq1GD3LsWtGwKVU=; b=U22Ze9XJbVvkv6fIeuFD6h5ShFOWFYbcwAROPf8lDoI66/dGxabt+9O0q/54Skb8w1 ThLky3gN+kGI12A/fANjMZsAnz1XXS0FoHD2vbgnDTzANJ9tLA1Zu5+gEWW2IMEaj54a wUlLo4lpfKdqmBAWeizdZpkrYCLQfy4dktvtpjYNYdFBsW+ypuKqMS8S/8xzlsd463H6 YmO/hC7nWRthhkm3cY+XZujEDa14C7mr8PiTeNEPdiCRlej453AlluSF0K+Wx62el8/N Oaaw6ZtX0PQaXncYpdOci18B49WZvtvwgkGqtDXjS5X0He1pVRbrYj28sN40+o+fdQ6r YJPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723728858; x=1724333658; 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=uf+s/T5xCp+3fTbJjT+zyzmVlfgDLq1GD3LsWtGwKVU=; b=jC+p2GH1ZmG1TCc+vn6n2J1pBc5ySErKiOkRn6U9anABv4SiL0zV767crsY3rSSsy9 fOvl5VNJhVzqBa7/2hFuQzCiNhkLvxR6OufefEpuUcOA//2fxHxDO31md/LZn3RCMOvN FrMylmKNGyrsrochv1Dc/2AGXySo8PWMGEam3Mzx5vySpPAHkfsHG5hPgrhl62S8Iz2M qQJd7KSdyO9nybfuzP0yfDHZ9cYJnKU4TAt/SwK30Idlcxp4O5UoKkdZzEn09Fy/S8Zj 9uMKYYHwuK1SZtW5X2N35gLGVwvumQpQI18Omjuz34pFbA5Y03kQoFzl/d7m8dqTdeOX qBtQ== X-Forwarded-Encrypted: i=1; AJvYcCVksaVxIW9plHrhPqZc8MjkWHRta1TG6jhZRq2h635Yb36Ok3X0M+bBA7FzkyCXrhOHwrJZ7raDZVJbki6lWS+pSP2r3tnyhSy5Jg== X-Gm-Message-State: AOJu0YyrjODsCaM7KNjaY1hnQoTQXo0CSdxNbXRFIucF/nyebAJEIbMH qZmNwQVJdT34YlJcnlGyG0AVsXJrPRhyWyXEyv/OvYv2B7TIdLKa2JAF/ZjyLG4= X-Google-Smtp-Source: AGHT+IGJZeX9x/BRQJo3d2wjrrZWdO+Zhhlxj0cF6zy/2fP9OXjfT0TWw6RvV17Cu+G0YZEVeHbTUw== X-Received: by 2002:a05:6402:50cf:b0:5be:a05a:2e38 with SMTP id 4fb4d7f45d1cf-5bea1cad0a2mr4777968a12.27.1723728857600; Thu, 15 Aug 2024 06:34:17 -0700 (PDT) Received: from localhost (2001-1ae9-1c2-4c00-20f-c6b4-1e57-7965.ip6.tmcz.cz. [2001:1ae9:1c2:4c00:20f:c6b4:1e57:7965]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5bebbbe2707sm910747a12.7.2024.08.15.06.34.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Aug 2024 06:34:16 -0700 (PDT) Date: Thu, 15 Aug 2024 15:34:16 +0200 From: Andrew Jones To: Alexandre Ghiti Cc: Alexandre Ghiti , Jonathan Corbet , Paul Walmsley , Palmer Dabbelt , Albert Ou , Conor Dooley , Rob Herring , Krzysztof Kozlowski , Andrea Parri , Nathan Chancellor , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Boqun Feng , Arnd Bergmann , Leonardo Bras , Guo Ren , linux-doc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-arch@vger.kernel.org Subject: Re: [PATCH v4 13/13] riscv: Add qspinlock support Message-ID: <20240815-17cff9794dd6fb3440478622@orel> References: <20240731072405.197046-1-alexghiti@rivosinc.com> <20240731072405.197046-14-alexghiti@rivosinc.com> <20240731-ce25dcdc5ce9ccc6c82912c0@orel> <6f1bcc9b-1812-4e8c-9050-a750bfadd008@ghiti.fr> Precedence: bulk X-Mailing-List: linux-arch@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: <6f1bcc9b-1812-4e8c-9050-a750bfadd008@ghiti.fr> On Thu, Aug 15, 2024 at 03:27:31PM GMT, Alexandre Ghiti wrote: > Hi Andrew, > > On 01/08/2024 08:53, Alexandre Ghiti wrote: > > On Wed, Jul 31, 2024 at 5:29 PM Andrew Jones wrote: > > > On Wed, Jul 31, 2024 at 09:24:05AM GMT, Alexandre Ghiti wrote: > > > > In order to produce a generic kernel, a user can select > > > > CONFIG_COMBO_SPINLOCKS which will fallback at runtime to the ticket > > > > spinlock implementation if Zabha or Ziccrse are not present. > > > > > > > > Note that we can't use alternatives here because the discovery of > > > > extensions is done too late and we need to start with the qspinlock > > > > implementation because the ticket spinlock implementation would pollute > > > > the spinlock value, so let's use static keys. > > > > > > > > This is largely based on Guo's work and Leonardo reviews at [1]. > > > > > > > > Link: https://lore.kernel.org/linux-riscv/20231225125847.2778638-1-guoren@kernel.org/ [1] > > > > Signed-off-by: Guo Ren > > > > Signed-off-by: Alexandre Ghiti > > > > --- > > > > .../locking/queued-spinlocks/arch-support.txt | 2 +- > > > > arch/riscv/Kconfig | 29 +++++++++++++ > > > > arch/riscv/include/asm/Kbuild | 4 +- > > > > arch/riscv/include/asm/spinlock.h | 43 +++++++++++++++++++ > > > > arch/riscv/kernel/setup.c | 38 ++++++++++++++++ > > > > include/asm-generic/qspinlock.h | 2 + > > > > include/asm-generic/ticket_spinlock.h | 2 + > > > > 7 files changed, 118 insertions(+), 2 deletions(-) > > > > create mode 100644 arch/riscv/include/asm/spinlock.h > > > > > > > > diff --git a/Documentation/features/locking/queued-spinlocks/arch-support.txt b/Documentation/features/locking/queued-spinlocks/arch-support.txt > > > > index 22f2990392ff..cf26042480e2 100644 > > > > --- a/Documentation/features/locking/queued-spinlocks/arch-support.txt > > > > +++ b/Documentation/features/locking/queued-spinlocks/arch-support.txt > > > > @@ -20,7 +20,7 @@ > > > > | openrisc: | ok | > > > > | parisc: | TODO | > > > > | powerpc: | ok | > > > > - | riscv: | TODO | > > > > + | riscv: | ok | > > > > | s390: | TODO | > > > > | sh: | TODO | > > > > | sparc: | ok | > > > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > > > > index ef55ab94027e..c9ff8081efc1 100644 > > > > --- a/arch/riscv/Kconfig > > > > +++ b/arch/riscv/Kconfig > > > > @@ -79,6 +79,7 @@ config RISCV > > > > select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP > > > > select ARCH_WANTS_NO_INSTR > > > > select ARCH_WANTS_THP_SWAP if HAVE_ARCH_TRANSPARENT_HUGEPAGE > > > > + select ARCH_WEAK_RELEASE_ACQUIRE if ARCH_USE_QUEUED_SPINLOCKS > > > Why do we need this? Also, we presumably would prefer not to have it > > > when we end up using ticket spinlocks when combo spinlocks is selected. > > > Is there no way to avoid it? > > I'll let Andrea answer this as he asked for it. > > > > > > select BINFMT_FLAT_NO_DATA_START_OFFSET if !MMU > > > > select BUILDTIME_TABLE_SORT if MMU > > > > select CLINT_TIMER if RISCV_M_MODE > > > > @@ -488,6 +489,34 @@ config NODES_SHIFT > > > > Specify the maximum number of NUMA Nodes available on the target > > > > system. Increases memory reserved to accommodate various tables. > > > > > > > > +choice > > > > + prompt "RISC-V spinlock type" > > > > + default RISCV_COMBO_SPINLOCKS > > > > + > > > > +config RISCV_TICKET_SPINLOCKS > > > > + bool "Using ticket spinlock" > > > > + > > > > +config RISCV_QUEUED_SPINLOCKS > > > > + bool "Using queued spinlock" > > > > + depends on SMP && MMU && NONPORTABLE > > > > + select ARCH_USE_QUEUED_SPINLOCKS > > > > + help > > > > + The queued spinlock implementation requires the forward progress > > > > + guarantee of cmpxchg()/xchg() atomic operations: CAS with Zabha or > > > > + LR/SC with Ziccrse provide such guarantee. > > > > + > > > > + Select this if and only if Zabha or Ziccrse is available on your > > > > + platform. > > > Maybe some text recommending combo spinlocks here? As it stands it sounds > > > like enabling queued spinlocks is a bad idea for anybody that doesn't know > > > what platforms will run the kernel they're building, which is all distros. > > That's NONPORTABLE, so people enabling this config are supposed to > > know that right? > > > > > > + > > > > +config RISCV_COMBO_SPINLOCKS > > > > + bool "Using combo spinlock" > > > > + depends on SMP && MMU > > > > + select ARCH_USE_QUEUED_SPINLOCKS > > > > + help > > > > + Embed both queued spinlock and ticket lock so that the spinlock > > > > + implementation can be chosen at runtime. > > > nit: Add a blank line here > > Done > > > > > > +endchoice > > > > + > > > > config RISCV_ALTERNATIVE > > > > bool > > > > depends on !XIP_KERNEL > > > > diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild > > > > index 5c589770f2a8..1c2618c964f0 100644 > > > > --- a/arch/riscv/include/asm/Kbuild > > > > +++ b/arch/riscv/include/asm/Kbuild > > > > @@ -5,10 +5,12 @@ syscall-y += syscall_table_64.h > > > > generic-y += early_ioremap.h > > > > generic-y += flat.h > > > > generic-y += kvm_para.h > > > > +generic-y += mcs_spinlock.h > > > > generic-y += parport.h > > > > -generic-y += spinlock.h > > > > generic-y += spinlock_types.h > > > > +generic-y += ticket_spinlock.h > > > > generic-y += qrwlock.h > > > > generic-y += qrwlock_types.h > > > > +generic-y += qspinlock.h > > > > generic-y += user.h > > > > generic-y += vmlinux.lds.h > > > > diff --git a/arch/riscv/include/asm/spinlock.h b/arch/riscv/include/asm/spinlock.h > > > > new file mode 100644 > > > > index 000000000000..503aef31db83 > > > > --- /dev/null > > > > +++ b/arch/riscv/include/asm/spinlock.h > > > > @@ -0,0 +1,43 @@ > > > > +/* SPDX-License-Identifier: GPL-2.0 */ > > > > + > > > > +#ifndef __ASM_RISCV_SPINLOCK_H > > > > +#define __ASM_RISCV_SPINLOCK_H > > > > + > > > > +#ifdef CONFIG_RISCV_COMBO_SPINLOCKS > > > > +#define _Q_PENDING_LOOPS (1 << 9) > > > > + > > > > +#define __no_arch_spinlock_redefine > > > > +#include > > > > +#include > > > > +#include > > > We need asm/jump_label.h instead of asm/alternative.h, but... > > > > > > > + > > > > +DECLARE_STATIC_KEY_TRUE(qspinlock_key); > > > > + > > > > +#define SPINLOCK_BASE_DECLARE(op, type, type_lock) \ > > > > +static __always_inline type arch_spin_##op(type_lock lock) \ > > > > +{ \ > > > > + if (static_branch_unlikely(&qspinlock_key)) \ > > > > + return queued_spin_##op(lock); \ > > > > + return ticket_spin_##op(lock); \ > > > > +} > > > ...do you know what impact this inlined static key check has on the > > > kernel size? > > No, I'll check, thanks. > > > So I have just checked the size of the jump table section: > > * defconfig: > > - ticket: 26928 bytes > - combo: 28320 bytes > > So that's a ~5% increase. > > * ubuntu config > > - ticket: 107840 bytes > - combo: 174752 bytes > > And that's a ~62% increase. > > This is the ELF size difference between ticket and combo spinlocks: > > * ticket: 776915592 bytes > * combo: 786958968 bytes > > So that's an increase of ~1.3% on the ELF. > > And the .text section size: > > * ticket: 12290960 bytes > * combo: 12366644 bytes > > And that's a ~0.6% increase! > > Finally, I'd say the impact is very limited :) Thanks for checking! drew 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 12D02C52D7C for ; Thu, 15 Aug 2024 13:34:25 +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=L8dsLisvOp9oCtPYKnkJHQvhcxd3yHT2ceuAibe9iak=; b=KfdJSzy6euHoIB K31HL7pMdJZkSkb/TJPfORUKMV0aerVjB8N+8pl7tb96S5EC9waT9HzQu4TOYTl3BABBgu1vpsQBE iqF9EMkpB2H3uZcv0WJ0yFxBpFBgPl9rOndyylxZ5vI92eAy0S3gaZutCWLx9Rcy06mMVLrYfKkKL P/wgKLRoqWMGv+EAtrxoI6c6Bvg3QyUI8P5JarNtGmpwuCsIGUiGYTpOR4y7ux/LcgHrw5DE2tQKL /doQpTtSWP4eK5rtDqhJ0MySwGDi9+JZdqqlUUWbqGfrtWqxfc4eWJZmb/Dy29DPdpdYHpuGiw+rG 5nBUNnUL3NR9J8EEtyeA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1seacQ-0000000A3Ye-3apH; Thu, 15 Aug 2024 13:34:22 +0000 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1seacO-0000000A3We-1NDy for linux-riscv@lists.infradead.org; Thu, 15 Aug 2024 13:34:22 +0000 Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-5a15692b6f6so1273608a12.0 for ; Thu, 15 Aug 2024 06:34:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1723728858; x=1724333658; 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=uf+s/T5xCp+3fTbJjT+zyzmVlfgDLq1GD3LsWtGwKVU=; b=QOYIFTkAVUc2ar/u+1GfSFHmDWMPK5cyQpzsS5Mk7nkAfqNOjkFLQsLOIbi4s0d3oM /Plc8ShKmtu3xUvrKduGP8krN3MMhPQcy5dEwIvj1fE/CQeieDaCcVuaqf8zG8YzXio+ f1eA4wZ1oqn6jSBNpiZeVJ/r5ZcPqx/qJYa3vA54EbesFdRsL5qLZ0V69u0c3TZCXJR4 SZoyUG6yoZXdAiA1CuVX/0RX3dZ7/H5/0I0HkEForggMfl3vfsXFp7WxR/mzbNnuBRnD gk5jc+exB5xt9KVGwdMg3LFx3FellXkouM/wVkP1kYgi4IfJeSFDbV4Ln8yNkQN3kV4N Jq5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723728858; x=1724333658; 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=uf+s/T5xCp+3fTbJjT+zyzmVlfgDLq1GD3LsWtGwKVU=; b=pH6Yxag8q9d2R9fiAiXyR1rwXj+RGhnV+2ZU4c2J6txftECzd29vbDCs3AJQJ6YLak j2zgO3ggutos7gZE4SL8u3jhEZRmW5qZmuRcfkw3+jPin3AiEt4DHv4bFuBXyS/67d81 dj+6hJJMrqJru+nagOvlpxRILKqAZ9pxV18K3svrheo+CRWSjbafb8Fnm4EQA5okPvDe WGSLo/AiNFsCovfcarc0w9SqTYU/pSs8enXEs/wnlGG3k7rI4UvfRyVWIBqsb5kFJORL 6H+5zENE8tMAzrGDo1q+j3nkMG+iJEZftTi1vff+UNZW8g/vekfOHSC5wGPUprrB5dig yEZQ== X-Forwarded-Encrypted: i=1; AJvYcCULvfxJD1GH9QiLaA3xbK8W8CZCgE/LrvECU7gmMPVVjhvhVB+ghTOmWPFsuRO8ZbLQQpjCNV2EdDEdTP3GVCs/b1rFMYfP0u1dxHARhh4d X-Gm-Message-State: AOJu0Yxczi7GbgH9M0UfrI7jasAlTpmAuVPjL6y1I6x4xuSvqa8u4f/7 jn3woRiPoZnNG3llOa1FBfl8+zus5WM38E7dc5RN2CYosJJ8c97XNHc9dolAe9s= X-Google-Smtp-Source: AGHT+IGJZeX9x/BRQJo3d2wjrrZWdO+Zhhlxj0cF6zy/2fP9OXjfT0TWw6RvV17Cu+G0YZEVeHbTUw== X-Received: by 2002:a05:6402:50cf:b0:5be:a05a:2e38 with SMTP id 4fb4d7f45d1cf-5bea1cad0a2mr4777968a12.27.1723728857600; Thu, 15 Aug 2024 06:34:17 -0700 (PDT) Received: from localhost (2001-1ae9-1c2-4c00-20f-c6b4-1e57-7965.ip6.tmcz.cz. [2001:1ae9:1c2:4c00:20f:c6b4:1e57:7965]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5bebbbe2707sm910747a12.7.2024.08.15.06.34.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Aug 2024 06:34:16 -0700 (PDT) Date: Thu, 15 Aug 2024 15:34:16 +0200 From: Andrew Jones To: Alexandre Ghiti Cc: Alexandre Ghiti , Jonathan Corbet , Paul Walmsley , Palmer Dabbelt , Albert Ou , Conor Dooley , Rob Herring , Krzysztof Kozlowski , Andrea Parri , Nathan Chancellor , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Boqun Feng , Arnd Bergmann , Leonardo Bras , Guo Ren , linux-doc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-arch@vger.kernel.org Subject: Re: [PATCH v4 13/13] riscv: Add qspinlock support Message-ID: <20240815-17cff9794dd6fb3440478622@orel> References: <20240731072405.197046-1-alexghiti@rivosinc.com> <20240731072405.197046-14-alexghiti@rivosinc.com> <20240731-ce25dcdc5ce9ccc6c82912c0@orel> <6f1bcc9b-1812-4e8c-9050-a750bfadd008@ghiti.fr> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <6f1bcc9b-1812-4e8c-9050-a750bfadd008@ghiti.fr> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240815_063420_428595_5836F19E X-CRM114-Status: GOOD ( 47.41 ) 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 T24gVGh1LCBBdWcgMTUsIDIwMjQgYXQgMDM6Mjc6MzFQTSBHTVQsIEFsZXhhbmRyZSBHaGl0aSB3 cm90ZToKPiBIaSBBbmRyZXcsCj4gCj4gT24gMDEvMDgvMjAyNCAwODo1MywgQWxleGFuZHJlIEdo aXRpIHdyb3RlOgo+ID4gT24gV2VkLCBKdWwgMzEsIDIwMjQgYXQgNToyOeKAr1BNIEFuZHJldyBK b25lcyA8YWpvbmVzQHZlbnRhbmFtaWNyby5jb20+IHdyb3RlOgo+ID4gPiBPbiBXZWQsIEp1bCAz MSwgMjAyNCBhdCAwOToyNDowNUFNIEdNVCwgQWxleGFuZHJlIEdoaXRpIHdyb3RlOgo+ID4gPiA+ IEluIG9yZGVyIHRvIHByb2R1Y2UgYSBnZW5lcmljIGtlcm5lbCwgYSB1c2VyIGNhbiBzZWxlY3QK PiA+ID4gPiBDT05GSUdfQ09NQk9fU1BJTkxPQ0tTIHdoaWNoIHdpbGwgZmFsbGJhY2sgYXQgcnVu dGltZSB0byB0aGUgdGlja2V0Cj4gPiA+ID4gc3BpbmxvY2sgaW1wbGVtZW50YXRpb24gaWYgWmFi aGEgb3IgWmljY3JzZSBhcmUgbm90IHByZXNlbnQuCj4gPiA+ID4gCj4gPiA+ID4gTm90ZSB0aGF0 IHdlIGNhbid0IHVzZSBhbHRlcm5hdGl2ZXMgaGVyZSBiZWNhdXNlIHRoZSBkaXNjb3Zlcnkgb2YK PiA+ID4gPiBleHRlbnNpb25zIGlzIGRvbmUgdG9vIGxhdGUgYW5kIHdlIG5lZWQgdG8gc3RhcnQg d2l0aCB0aGUgcXNwaW5sb2NrCj4gPiA+ID4gaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGUgdGlj a2V0IHNwaW5sb2NrIGltcGxlbWVudGF0aW9uIHdvdWxkIHBvbGx1dGUKPiA+ID4gPiB0aGUgc3Bp bmxvY2sgdmFsdWUsIHNvIGxldCdzIHVzZSBzdGF0aWMga2V5cy4KPiA+ID4gPiAKPiA+ID4gPiBU aGlzIGlzIGxhcmdlbHkgYmFzZWQgb24gR3VvJ3Mgd29yayBhbmQgTGVvbmFyZG8gcmV2aWV3cyBh dCBbMV0uCj4gPiA+ID4gCj4gPiA+ID4gTGluazogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGlu dXgtcmlzY3YvMjAyMzEyMjUxMjU4NDcuMjc3ODYzOC0xLWd1b3JlbkBrZXJuZWwub3JnLyBbMV0K PiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBHdW8gUmVuIDxndW9yZW5Aa2VybmVsLm9yZz4KPiA+ID4g PiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcmUgR2hpdGkgPGFsZXhnaGl0aUByaXZvc2luYy5jb20+ Cj4gPiA+ID4gLS0tCj4gPiA+ID4gICAuLi4vbG9ja2luZy9xdWV1ZWQtc3BpbmxvY2tzL2FyY2gt c3VwcG9ydC50eHQgfCAgMiArLQo+ID4gPiA+ICAgYXJjaC9yaXNjdi9LY29uZmlnICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgMjkgKysrKysrKysrKysrKwo+ID4gPiA+ICAgYXJjaC9yaXNj di9pbmNsdWRlL2FzbS9LYnVpbGQgICAgICAgICAgICAgICAgIHwgIDQgKy0KPiA+ID4gPiAgIGFy Y2gvcmlzY3YvaW5jbHVkZS9hc20vc3BpbmxvY2suaCAgICAgICAgICAgICB8IDQzICsrKysrKysr KysrKysrKysrKysKPiA+ID4gPiAgIGFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmMgICAgICAgICAg ICAgICAgICAgICB8IDM4ICsrKysrKysrKysrKysrKysKPiA+ID4gPiAgIGluY2x1ZGUvYXNtLWdl bmVyaWMvcXNwaW5sb2NrLmggICAgICAgICAgICAgICB8ICAyICsKPiA+ID4gPiAgIGluY2x1ZGUv YXNtLWdlbmVyaWMvdGlja2V0X3NwaW5sb2NrLmggICAgICAgICB8ICAyICsKPiA+ID4gPiAgIDcg ZmlsZXMgY2hhbmdlZCwgMTE4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gPiA+ID4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zcGlubG9jay5oCj4g PiA+ID4gCj4gPiA+ID4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZXMvbG9ja2lu Zy9xdWV1ZWQtc3BpbmxvY2tzL2FyY2gtc3VwcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1 cmVzL2xvY2tpbmcvcXVldWVkLXNwaW5sb2Nrcy9hcmNoLXN1cHBvcnQudHh0Cj4gPiA+ID4gaW5k ZXggMjJmMjk5MDM5MmZmLi5jZjI2MDQyNDgwZTIgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvRG9jdW1l bnRhdGlvbi9mZWF0dXJlcy9sb2NraW5nL3F1ZXVlZC1zcGlubG9ja3MvYXJjaC1zdXBwb3J0LnR4 dAo+ID4gPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZXMvbG9ja2luZy9xdWV1ZWQtc3Bp bmxvY2tzL2FyY2gtc3VwcG9ydC50eHQKPiA+ID4gPiBAQCAtMjAsNyArMjAsNyBAQAo+ID4gPiA+ ICAgICAgIHwgICAgb3BlbnJpc2M6IHwgIG9rICB8Cj4gPiA+ID4gICAgICAgfCAgICAgIHBhcmlz YzogfCBUT0RPIHwKPiA+ID4gPiAgICAgICB8ICAgICBwb3dlcnBjOiB8ICBvayAgfAo+ID4gPiA+ IC0gICAgfCAgICAgICByaXNjdjogfCBUT0RPIHwKPiA+ID4gPiArICAgIHwgICAgICAgcmlzY3Y6 IHwgIG9rICB8Cj4gPiA+ID4gICAgICAgfCAgICAgICAgczM5MDogfCBUT0RPIHwKPiA+ID4gPiAg ICAgICB8ICAgICAgICAgIHNoOiB8IFRPRE8gfAo+ID4gPiA+ICAgICAgIHwgICAgICAgc3BhcmM6 IHwgIG9rICB8Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gv cmlzY3YvS2NvbmZpZwo+ID4gPiA+IGluZGV4IGVmNTVhYjk0MDI3ZS4uYzlmZjgwODFlZmMxIDEw MDY0NAo+ID4gPiA+IC0tLSBhL2FyY2gvcmlzY3YvS2NvbmZpZwo+ID4gPiA+ICsrKyBiL2FyY2gv cmlzY3YvS2NvbmZpZwo+ID4gPiA+IEBAIC03OSw2ICs3OSw3IEBAIGNvbmZpZyBSSVNDVgo+ID4g PiA+ICAgICAgICBzZWxlY3QgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUAo+ID4g PiA+ICAgICAgICBzZWxlY3QgQVJDSF9XQU5UU19OT19JTlNUUgo+ID4gPiA+ICAgICAgICBzZWxl Y3QgQVJDSF9XQU5UU19USFBfU1dBUCBpZiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UK PiA+ID4gPiArICAgICBzZWxlY3QgQVJDSF9XRUFLX1JFTEVBU0VfQUNRVUlSRSBpZiBBUkNIX1VT RV9RVUVVRURfU1BJTkxPQ0tTCj4gPiA+IFdoeSBkbyB3ZSBuZWVkIHRoaXM/IEFsc28sIHdlIHBy ZXN1bWFibHkgd291bGQgcHJlZmVyIG5vdCB0byBoYXZlIGl0Cj4gPiA+IHdoZW4gd2UgZW5kIHVw IHVzaW5nIHRpY2tldCBzcGlubG9ja3Mgd2hlbiBjb21ibyBzcGlubG9ja3MgaXMgc2VsZWN0ZWQu Cj4gPiA+IElzIHRoZXJlIG5vIHdheSB0byBhdm9pZCBpdD8KPiA+IEknbGwgbGV0IEFuZHJlYSBh bnN3ZXIgdGhpcyBhcyBoZSBhc2tlZCBmb3IgaXQuCj4gPiAKPiA+ID4gPiAgICAgICAgc2VsZWN0 IEJJTkZNVF9GTEFUX05PX0RBVEFfU1RBUlRfT0ZGU0VUIGlmICFNTVUKPiA+ID4gPiAgICAgICAg c2VsZWN0IEJVSUxEVElNRV9UQUJMRV9TT1JUIGlmIE1NVQo+ID4gPiA+ICAgICAgICBzZWxlY3Qg Q0xJTlRfVElNRVIgaWYgUklTQ1ZfTV9NT0RFCj4gPiA+ID4gQEAgLTQ4OCw2ICs0ODksMzQgQEAg Y29uZmlnIE5PREVTX1NISUZUCj4gPiA+ID4gICAgICAgICAgU3BlY2lmeSB0aGUgbWF4aW11bSBu dW1iZXIgb2YgTlVNQSBOb2RlcyBhdmFpbGFibGUgb24gdGhlIHRhcmdldAo+ID4gPiA+ICAgICAg ICAgIHN5c3RlbS4gIEluY3JlYXNlcyBtZW1vcnkgcmVzZXJ2ZWQgdG8gYWNjb21tb2RhdGUgdmFy aW91cyB0YWJsZXMuCj4gPiA+ID4gCj4gPiA+ID4gK2Nob2ljZQo+ID4gPiA+ICsgICAgIHByb21w dCAiUklTQy1WIHNwaW5sb2NrIHR5cGUiCj4gPiA+ID4gKyAgICAgZGVmYXVsdCBSSVNDVl9DT01C T19TUElOTE9DS1MKPiA+ID4gPiArCj4gPiA+ID4gK2NvbmZpZyBSSVNDVl9USUNLRVRfU1BJTkxP Q0tTCj4gPiA+ID4gKyAgICAgYm9vbCAiVXNpbmcgdGlja2V0IHNwaW5sb2NrIgo+ID4gPiA+ICsK PiA+ID4gPiArY29uZmlnIFJJU0NWX1FVRVVFRF9TUElOTE9DS1MKPiA+ID4gPiArICAgICBib29s ICJVc2luZyBxdWV1ZWQgc3BpbmxvY2siCj4gPiA+ID4gKyAgICAgZGVwZW5kcyBvbiBTTVAgJiYg TU1VICYmIE5PTlBPUlRBQkxFCj4gPiA+ID4gKyAgICAgc2VsZWN0IEFSQ0hfVVNFX1FVRVVFRF9T UElOTE9DS1MKPiA+ID4gPiArICAgICBoZWxwCj4gPiA+ID4gKyAgICAgICBUaGUgcXVldWVkIHNw aW5sb2NrIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIHRoZSBmb3J3YXJkIHByb2dyZXNzCj4gPiA+ ID4gKyAgICAgICBndWFyYW50ZWUgb2YgY21weGNoZygpL3hjaGcoKSBhdG9taWMgb3BlcmF0aW9u czogQ0FTIHdpdGggWmFiaGEgb3IKPiA+ID4gPiArICAgICAgIExSL1NDIHdpdGggWmljY3JzZSBw cm92aWRlIHN1Y2ggZ3VhcmFudGVlLgo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIFNlbGVjdCB0 aGlzIGlmIGFuZCBvbmx5IGlmIFphYmhhIG9yIFppY2Nyc2UgaXMgYXZhaWxhYmxlIG9uIHlvdXIK PiA+ID4gPiArICAgICAgIHBsYXRmb3JtLgo+ID4gPiBNYXliZSBzb21lIHRleHQgcmVjb21tZW5k aW5nIGNvbWJvIHNwaW5sb2NrcyBoZXJlPyBBcyBpdCBzdGFuZHMgaXQgc291bmRzCj4gPiA+IGxp a2UgZW5hYmxpbmcgcXVldWVkIHNwaW5sb2NrcyBpcyBhIGJhZCBpZGVhIGZvciBhbnlib2R5IHRo YXQgZG9lc24ndCBrbm93Cj4gPiA+IHdoYXQgcGxhdGZvcm1zIHdpbGwgcnVuIHRoZSBrZXJuZWwg dGhleSdyZSBidWlsZGluZywgd2hpY2ggaXMgYWxsIGRpc3Ryb3MuCj4gPiBUaGF0J3MgTk9OUE9S VEFCTEUsIHNvIHBlb3BsZSBlbmFibGluZyB0aGlzIGNvbmZpZyBhcmUgc3VwcG9zZWQgdG8KPiA+ IGtub3cgdGhhdCByaWdodD8KPiA+IAo+ID4gPiA+ICsKPiA+ID4gPiArY29uZmlnIFJJU0NWX0NP TUJPX1NQSU5MT0NLUwo+ID4gPiA+ICsgICAgIGJvb2wgIlVzaW5nIGNvbWJvIHNwaW5sb2NrIgo+ ID4gPiA+ICsgICAgIGRlcGVuZHMgb24gU01QICYmIE1NVQo+ID4gPiA+ICsgICAgIHNlbGVjdCBB UkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTCj4gPiA+ID4gKyAgICAgaGVscAo+ID4gPiA+ICsgICAg ICAgRW1iZWQgYm90aCBxdWV1ZWQgc3BpbmxvY2sgYW5kIHRpY2tldCBsb2NrIHNvIHRoYXQgdGhl IHNwaW5sb2NrCj4gPiA+ID4gKyAgICAgICBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY2hvc2VuIGF0 IHJ1bnRpbWUuCj4gPiA+IG5pdDogQWRkIGEgYmxhbmsgbGluZSBoZXJlCj4gPiBEb25lCj4gPiAK PiA+ID4gPiArZW5kY2hvaWNlCj4gPiA+ID4gKwo+ID4gPiA+ICAgY29uZmlnIFJJU0NWX0FMVEVS TkFUSVZFCj4gPiA+ID4gICAgICAgIGJvb2wKPiA+ID4gPiAgICAgICAgZGVwZW5kcyBvbiAhWElQ X0tFUk5FTAo+ID4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL0tidWls ZCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vS2J1aWxkCj4gPiA+ID4gaW5kZXggNWM1ODk3NzBm MmE4Li4xYzI2MThjOTY0ZjAgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRl L2FzbS9LYnVpbGQKPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL0tidWlsZAo+ ID4gPiA+IEBAIC01LDEwICs1LDEyIEBAIHN5c2NhbGwteSArPSBzeXNjYWxsX3RhYmxlXzY0LmgK PiA+ID4gPiAgIGdlbmVyaWMteSArPSBlYXJseV9pb3JlbWFwLmgKPiA+ID4gPiAgIGdlbmVyaWMt eSArPSBmbGF0LmgKPiA+ID4gPiAgIGdlbmVyaWMteSArPSBrdm1fcGFyYS5oCj4gPiA+ID4gK2dl bmVyaWMteSArPSBtY3Nfc3BpbmxvY2suaAo+ID4gPiA+ICAgZ2VuZXJpYy15ICs9IHBhcnBvcnQu aAo+ID4gPiA+IC1nZW5lcmljLXkgKz0gc3BpbmxvY2suaAo+ID4gPiA+ICAgZ2VuZXJpYy15ICs9 IHNwaW5sb2NrX3R5cGVzLmgKPiA+ID4gPiArZ2VuZXJpYy15ICs9IHRpY2tldF9zcGlubG9jay5o Cj4gPiA+ID4gICBnZW5lcmljLXkgKz0gcXJ3bG9jay5oCj4gPiA+ID4gICBnZW5lcmljLXkgKz0g cXJ3bG9ja190eXBlcy5oCj4gPiA+ID4gK2dlbmVyaWMteSArPSBxc3BpbmxvY2suaAo+ID4gPiA+ ICAgZ2VuZXJpYy15ICs9IHVzZXIuaAo+ID4gPiA+ICAgZ2VuZXJpYy15ICs9IHZtbGludXgubGRz LmgKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zcGlubG9jay5o IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zcGlubG9jay5oCj4gPiA+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiA+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjUwM2FlZjMxZGI4Mwo+ID4gPiA+ IC0tLSAvZGV2L251bGwKPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3NwaW5s b2NrLmgKPiA+ID4gPiBAQCAtMCwwICsxLDQzIEBACj4gPiA+ID4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wICovCj4gPiA+ID4gKwo+ID4gPiA+ICsjaWZuZGVmIF9fQVNNX1JJ U0NWX1NQSU5MT0NLX0gKPiA+ID4gPiArI2RlZmluZSBfX0FTTV9SSVNDVl9TUElOTE9DS19ICj4g PiA+ID4gKwo+ID4gPiA+ICsjaWZkZWYgQ09ORklHX1JJU0NWX0NPTUJPX1NQSU5MT0NLUwo+ID4g PiA+ICsjZGVmaW5lIF9RX1BFTkRJTkdfTE9PUFMgICAgICgxIDw8IDkpCj4gPiA+ID4gKwo+ID4g PiA+ICsjZGVmaW5lIF9fbm9fYXJjaF9zcGlubG9ja19yZWRlZmluZQo+ID4gPiA+ICsjaW5jbHVk ZSA8YXNtL3RpY2tldF9zcGlubG9jay5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8YXNtL3FzcGlubG9j ay5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+Cj4gPiA+IFdlIG5lZWQg YXNtL2p1bXBfbGFiZWwuaCBpbnN0ZWFkIG9mIGFzbS9hbHRlcm5hdGl2ZS5oLCBidXQuLi4KPiA+ ID4gCj4gPiA+ID4gKwo+ID4gPiA+ICtERUNMQVJFX1NUQVRJQ19LRVlfVFJVRShxc3BpbmxvY2tf a2V5KTsKPiA+ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUgU1BJTkxPQ0tfQkFTRV9ERUNMQVJFKG9w LCB0eXBlLCB0eXBlX2xvY2spICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiArc3RhdGljIF9f YWx3YXlzX2lubGluZSB0eXBlIGFyY2hfc3Bpbl8jI29wKHR5cGVfbG9jayBsb2NrKSAgICAgICAg ICAgXAo+ID4gPiA+ICt7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gKyAgICAgaWYgKHN0YXRpY19icmFu Y2hfdW5saWtlbHkoJnFzcGlubG9ja19rZXkpKSAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4g PiArICAgICAgICAgICAgIHJldHVybiBxdWV1ZWRfc3Bpbl8jI29wKGxvY2spOyAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+ID4gPiA+ICsgICAgIHJldHVybiB0aWNrZXRfc3Bpbl8jI29wKGxv Y2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gK30KPiA+ID4g Li4uZG8geW91IGtub3cgd2hhdCBpbXBhY3QgdGhpcyBpbmxpbmVkIHN0YXRpYyBrZXkgY2hlY2sg aGFzIG9uIHRoZQo+ID4gPiBrZXJuZWwgc2l6ZT8KPiA+IE5vLCBJJ2xsIGNoZWNrLCB0aGFua3Mu Cj4gCj4gCj4gU28gSSBoYXZlIGp1c3QgY2hlY2tlZCB0aGUgc2l6ZSBvZiB0aGUganVtcCB0YWJs ZSBzZWN0aW9uOgo+IAo+ICogZGVmY29uZmlnOgo+IAo+IC0gdGlja2V0OiAyNjkyOCBieXRlcwo+ IC0gY29tYm86IDI4MzIwIGJ5dGVzCj4gCj4gU28gdGhhdCdzIGEgfjUlIGluY3JlYXNlLgo+IAo+ ICogdWJ1bnR1IGNvbmZpZwo+IAo+IC0gdGlja2V0OiAxMDc4NDAgYnl0ZXMKPiAtIGNvbWJvOiAx NzQ3NTIgYnl0ZXMKPiAKPiBBbmQgdGhhdCdzIGEgfjYyJSBpbmNyZWFzZS4KPiAKPiBUaGlzIGlz IHRoZSBFTEYgc2l6ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGlja2V0IGFuZCBjb21ibyBzcGlubG9j a3M6Cj4gCj4gKiB0aWNrZXQ6IDc3NjkxNTU5MiBieXRlcwo+ICogY29tYm86IDc4Njk1ODk2OCBi eXRlcwo+IAo+IFNvIHRoYXQncyBhbiBpbmNyZWFzZSBvZiB+MS4zJSBvbiB0aGUgRUxGLgo+IAo+ IEFuZCB0aGUgLnRleHQgc2VjdGlvbiBzaXplOgo+IAo+ICogdGlja2V0OiAxMjI5MDk2MCBieXRl cwo+ICogY29tYm86IDEyMzY2NjQ0IGJ5dGVzCj4gCj4gQW5kIHRoYXQncyBhIH4wLjYlIGluY3Jl YXNlIQo+IAo+IEZpbmFsbHksIEknZCBzYXkgdGhlIGltcGFjdCBpcyB2ZXJ5IGxpbWl0ZWQgOikK ClRoYW5rcyBmb3IgY2hlY2tpbmchCgpkcmV3CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LXJpc2N2Cg==