From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (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 473C8163A97 for ; Thu, 1 Aug 2024 07:48:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722498529; cv=none; b=mUu/6Gv1g1g9ZfaJWDSJzeZMh2uzeZASR9djMfN2uAQd1NhvojuGSK6GSIAjIjL1mofhBlfEBprs7zTBpsINcm9QshMKLChFsFArELYv81T+IA/pAm2BW4Z0hDU0SBrscaq3nT2+pLwp+1rHRu1enucqodKFhAL50X+3rdGBlxc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722498529; c=relaxed/simple; bh=7k1tHCj/IigIKmy4+p+WwobnV7zERZgAs34Fzr2SrVI=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=b2F62LPBLoIIhmak5J/o8eONDLMtay0qHhIq8GOXxZ3U4uOR8r1XmtZ/WFMwNnjvQa/eZf7N2YiFHwQ4P3gosMrtfsBmE+tl0XaA5RYqZUWUn1hmGUH5ttt7+U4sllqcpUPUtTCs1Aeo0XEwfq7/TY1MW5OeCNRBKYpL755VmoQ= 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=Ax5xiLot; arc=none smtp.client-ip=209.85.218.42 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="Ax5xiLot" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-a7a8a4f21aeso878129366b.2 for ; Thu, 01 Aug 2024 00:48:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1722498526; x=1723103326; 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=lpgRYBRoCwuCvyWPTeidprozH3XXG59M+x9HHpyT17c=; b=Ax5xiLotZZ+eKmRXiQhW/Wf6baXG5V1OhD2BVf0qkvgSer1B6/Ahpp14MB7FaKwLyM kM4vDraUZBBeg1VPaQm1pxQRgvKPY6/7XmvGP7e01aYD9dYP2wtOMbbv2x5zWK4fWg87 ZGMTcQvgQOlXeYRwI8nOhz70wOszEyV1W8UnP+8eBtaPRMDY6rIYBJ6m/jdfS5rLDIXg DS0lZYWsmOILPbXEkFUnlQdrFFOSkWvQL8VZkCTgxioawsFXroZ/pKNOG3SneKqTctAE 9g3UrOXtEd8b1gGsor2Pvx1hWfqqLmI9fz8FlfgQ6cFsQXz0OfU7Jk+5hSYnjpuPH+nE E2oQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722498526; x=1723103326; 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=lpgRYBRoCwuCvyWPTeidprozH3XXG59M+x9HHpyT17c=; b=VxNwLJQThmWoj6T6ztbE086maaScvRxpXukJ5GGDkz8Mj3kap/pxhbQGjF5WeyvlD4 WuW12/ypmFhuwDP1dqRxU9Jpp1C3gHNlc2zdzBLRdMsLtUwnW1xj4l7oIASQZ76JHlmG +3Yotiiyw7PImQPfb75s23k1zKwvsvCXtlgrvb8IEPsfI1WrqV0nz7t2e7H+8i82ItUz h2X4a+uEFn0ovFJV8OhcMFlJ4jfAcxzlhm2dqyknPjCRa7Rc+4ZO+eqbPJ/4wIVLs8dM 1ys9Zub0CWSF3+ilakD2JPidkmsIRKFYpnXsEwde7G0dkgGLbH3OCa5fcTl2fFC8lkLw QwYg== X-Forwarded-Encrypted: i=1; AJvYcCXdGkiFaGxZLBXEGOodwzM1cAf6NPNEDwHMWLJ6Dggz3ySFKt2GZ71oM7/kGc3jXwNBWPUnjr6jEam82QGof/WLnBVQ7fbG8JX1qw== X-Gm-Message-State: AOJu0YxTuagi9AX+DBo/cW52u3X5On+CBk7sLsBg68OP9m+A60xUvn5o 98wJ95pt3hc+IAeR4+2IeQwfcdFqM7nIt1KnYotfKjQH2gN0T6draoE3mnArc9E= X-Google-Smtp-Source: AGHT+IGJv3Ero2PFVW3HYlIFYvhbjq3izkAroXjPAXo8JMZv78p6fmd7ZKLSN2GEo8xLlJkmY0TzFw== X-Received: by 2002:a17:907:6e9e:b0:a79:8318:288f with SMTP id a640c23a62f3a-a7daf51bca7mr126973566b.16.1722498525027; Thu, 01 Aug 2024 00:48:45 -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 a640c23a62f3a-a7acab4de06sm859070366b.71.2024.08.01.00.48.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Aug 2024 00:48:44 -0700 (PDT) Date: Thu, 1 Aug 2024 09:48:43 +0200 From: Andrew Jones To: Alexandre Ghiti Cc: 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: <20240801-45b47eced3011c8a400ff836@orel> References: <20240731072405.197046-1-alexghiti@rivosinc.com> <20240731072405.197046-14-alexghiti@rivosinc.com> <20240731-ce25dcdc5ce9ccc6c82912c0@orel> 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: On Thu, Aug 01, 2024 at 08:53:06AM GMT, 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? Yes, both the NONPORTABLE and the scary text will imply that qspinlocks shouldn't be selected. I'm asking for text which points people configuring kernels to COMBO. Something like qspinlocks provides performance enhancements on platforms which support Zabha or Ziccrse. RISCV_QUEUED_SPINLOCKS should not be selected for platforms without one of those extensions. If unsure, select RISCV_COMBO_SPINLOCKS, which will use qspinlocks when supported and otherwise ticket spinlocks. > > > > > > + > > > +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. > > > > > Actually, why not use ALTERNATIVE with any nonzero cpufeature value. > > Then add code to riscv_cpufeature_patch_check() to return true when > > qspinlocks should be enabled (based on the value of some global set > > during riscv_spinlock_init)? > > As discussed with Guo in the previous iteration, the patching of the > alternatives intervenes far after the first use of the spinlocks and > the ticket spinlock implementation pollutes the spinlock value, so > we'd have to unconditionally start with the qspinlock implementation > and after switch to the ticket implementation if not supported by the > platform. It works but it's dirty, I really don't like this hack. > > We could though: > - add an initial value to the alternatives (not sure it's feasible though) > - make the patching of alternatives happen sooner by parsing the isa > string sooner, either in DT or ACPI (I have a working PoC for very > early parsing of ACPI). > > I intend to do the latter as I think we should be aware of the > extensions sooner in the boot process, so I'll change that to the > alternatives when it's done. WDYT, any other idea? Yes, we'll likely want early patching for other extensions as well, so that's a good idea in general. Putting a TODO on this static key to be changed to an ALTERNATIVE later when possible sounds reasonable to me. Thanks, 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 0D4D1C3DA4A for ; Thu, 1 Aug 2024 07:49:17 +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=xsr1ChNnOZZf8gWQgkXaHahd19xVP1z8duZADjkdIa0=; b=wsbzi8GpQb2C+M wsMEovrzsQ2K7LcAYuMKYuufvMj7juOlTWWtL4tnifi+nuBp4s7bo15p/lGUSf8nPLlqjn5+gPlZt ONvr1/SyFdgy1MCpIPVY3uZbDN+2fbj0T4T4YMqsvAXRvgaVA7kBLeOJTjiM6t0/NXnn+jlVQdpO9 Ja+kExLwWDAeDF0CCHkQG7NVPu58sHMJLlw1KoKpzkthGrRWK/tXQmNWh2QfKTB9r7NYCQg3vmspD KgsoJguP8YjKIgs2dkuJ/gfMN3oXqNOt89DvS1vPRp4KR0TAulC//Glj2Z0pZKglVWciPK5/SOeSn iUhExRdhxRnDGqk7xDWQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sZQYi-00000004EFw-3eXs; Thu, 01 Aug 2024 07:49:12 +0000 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sZQYJ-00000004E84-2M6l for linux-riscv@lists.infradead.org; Thu, 01 Aug 2024 07:48:49 +0000 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-a7ac449a0e6so556229066b.1 for ; Thu, 01 Aug 2024 00:48:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1722498525; x=1723103325; 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=lpgRYBRoCwuCvyWPTeidprozH3XXG59M+x9HHpyT17c=; b=IyxukPZZkMx98uf4itMiyT9YCTgvaUfD+jM0rECk0BvhpaSgYwJJr0sFvIKKfA1VOK U7/dCfBwhzd9n12ZtqKLlU8W7HZWAXOKDxqe4kAe5hU9ipRIkPD/fSUcsIcIt7Mk8ecu eouwJ66XOyXtL9kP6TQeBwnXsK3PtdMJKEb+nji1MeF0X91+AWw4ggckRFWCOKR8UPVb qZICX11iZzfuuGdOVcr4BS6lVyNpy+nxZs8uO0KjXZb7SKbwBUTdkOzghAjNtiPBLEwz /E97+HlZDmh8vv3gCAX3mtQeqe7whfrvUiDzRkmcmaxJRY9c6lArKy5wt85DvZf8pYm/ /vmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722498526; x=1723103326; 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=lpgRYBRoCwuCvyWPTeidprozH3XXG59M+x9HHpyT17c=; b=oB/wezePatC/8ycLDLJ3gNT4qRvcAuXtXs+d+mBQaqqPoeGSgFPKJtqVs/EMr5eAl8 p0PuY9ZXOVC3iiJIDX6d6GHNjjPA6Z+B1zZvZywQHwb77TBFmHC8WV6eVCs+Z1dEEMWV HGYFutlHVi/x/f1VIvBisL8F+PmzNNU60Fe2/+lsrzWP8rEr8Ip2isbVDqrPK4ZV2uqY CDln/lcJtB41E1OP6FoTXB58jNGzS0LTYtbPAeBbFp15rvKIw4kpF8hethoNf2xYbanb TLhdTurjbVYWSmv7jcUcoboahgGEqdN7Y80Pb8yqWHvlM+rAKth+KV0bkkboqdZxWHAf 5SKg== X-Forwarded-Encrypted: i=1; AJvYcCUHZFmKBqdxkEc3KdcFRWGPy1TBHMvICRElF5jkRzpgXgZEnPG9t13FPnvxh9AIczhSA/knS3/zV0z2yWr0bDcqxr0PwGeOOVoHfWnQ+OVT X-Gm-Message-State: AOJu0YyLlVFmM/MBIF4NcxrPmZaeP3cqh996RVZqvW6RCX43IgMOuegR fx/ke7GVuCEeZQz7JDv3KMytqC+XPEX/iLtoDaaR42pjyTiKwP9z7581oL1YjBY= X-Google-Smtp-Source: AGHT+IGJv3Ero2PFVW3HYlIFYvhbjq3izkAroXjPAXo8JMZv78p6fmd7ZKLSN2GEo8xLlJkmY0TzFw== X-Received: by 2002:a17:907:6e9e:b0:a79:8318:288f with SMTP id a640c23a62f3a-a7daf51bca7mr126973566b.16.1722498525027; Thu, 01 Aug 2024 00:48:45 -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 a640c23a62f3a-a7acab4de06sm859070366b.71.2024.08.01.00.48.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Aug 2024 00:48:44 -0700 (PDT) Date: Thu, 1 Aug 2024 09:48:43 +0200 From: Andrew Jones To: Alexandre Ghiti Cc: 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: <20240801-45b47eced3011c8a400ff836@orel> References: <20240731072405.197046-1-alexghiti@rivosinc.com> <20240731072405.197046-14-alexghiti@rivosinc.com> <20240731-ce25dcdc5ce9ccc6c82912c0@orel> 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-20240801_004847_748624_10422F56 X-CRM114-Status: GOOD ( 52.22 ) 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 T24gVGh1LCBBdWcgMDEsIDIwMjQgYXQgMDg6NTM6MDZBTSBHTVQsIEFsZXhhbmRyZSBHaGl0aSB3 cm90ZToKPiBPbiBXZWQsIEp1bCAzMSwgMjAyNCBhdCA1OjI54oCvUE0gQW5kcmV3IEpvbmVzIDxh am9uZXNAdmVudGFuYW1pY3JvLmNvbT4gd3JvdGU6Cj4gPgo+ID4gT24gV2VkLCBKdWwgMzEsIDIw MjQgYXQgMDk6MjQ6MDVBTSBHTVQsIEFsZXhhbmRyZSBHaGl0aSB3cm90ZToKPiA+ID4gSW4gb3Jk ZXIgdG8gcHJvZHVjZSBhIGdlbmVyaWMga2VybmVsLCBhIHVzZXIgY2FuIHNlbGVjdAo+ID4gPiBD T05GSUdfQ09NQk9fU1BJTkxPQ0tTIHdoaWNoIHdpbGwgZmFsbGJhY2sgYXQgcnVudGltZSB0byB0 aGUgdGlja2V0Cj4gPiA+IHNwaW5sb2NrIGltcGxlbWVudGF0aW9uIGlmIFphYmhhIG9yIFppY2Ny c2UgYXJlIG5vdCBwcmVzZW50Lgo+ID4gPgo+ID4gPiBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIGFs dGVybmF0aXZlcyBoZXJlIGJlY2F1c2UgdGhlIGRpc2NvdmVyeSBvZgo+ID4gPiBleHRlbnNpb25z IGlzIGRvbmUgdG9vIGxhdGUgYW5kIHdlIG5lZWQgdG8gc3RhcnQgd2l0aCB0aGUgcXNwaW5sb2Nr Cj4gPiA+IGltcGxlbWVudGF0aW9uIGJlY2F1c2UgdGhlIHRpY2tldCBzcGlubG9jayBpbXBsZW1l bnRhdGlvbiB3b3VsZCBwb2xsdXRlCj4gPiA+IHRoZSBzcGlubG9jayB2YWx1ZSwgc28gbGV0J3Mg dXNlIHN0YXRpYyBrZXlzLgo+ID4gPgo+ID4gPiBUaGlzIGlzIGxhcmdlbHkgYmFzZWQgb24gR3Vv J3Mgd29yayBhbmQgTGVvbmFyZG8gcmV2aWV3cyBhdCBbMV0uCj4gPiA+Cj4gPiA+IExpbms6IGh0 dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LXJpc2N2LzIwMjMxMjI1MTI1ODQ3LjI3Nzg2Mzgt MS1ndW9yZW5Aa2VybmVsLm9yZy8gWzFdCj4gPiA+IFNpZ25lZC1vZmYtYnk6IEd1byBSZW4gPGd1 b3JlbkBrZXJuZWwub3JnPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcmUgR2hpdGkgPGFs ZXhnaGl0aUByaXZvc2luYy5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgLi4uL2xvY2tpbmcvcXVldWVk LXNwaW5sb2Nrcy9hcmNoLXN1cHBvcnQudHh0IHwgIDIgKy0KPiA+ID4gIGFyY2gvcmlzY3YvS2Nv bmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI5ICsrKysrKysrKysrKysKPiA+ID4g IGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vS2J1aWxkICAgICAgICAgICAgICAgICB8ICA0ICstCj4g PiA+ICBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggICAgICAgICAgICAgfCA0MyAr KysrKysrKysrKysrKysrKysrCj4gPiA+ICBhcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jICAgICAg ICAgICAgICAgICAgICAgfCAzOCArKysrKysrKysrKysrKysrCj4gPiA+ICBpbmNsdWRlL2FzbS1n ZW5lcmljL3FzcGlubG9jay5oICAgICAgICAgICAgICAgfCAgMiArCj4gPiA+ICBpbmNsdWRlL2Fz bS1nZW5lcmljL3RpY2tldF9zcGlubG9jay5oICAgICAgICAgfCAgMiArCj4gPiA+ICA3IGZpbGVz IGNoYW5nZWQsIDExOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+ID4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3BpbmxvY2suaAo+ID4gPgo+ID4g PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlcy9sb2NraW5nL3F1ZXVlZC1zcGlu bG9ja3MvYXJjaC1zdXBwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZXMvbG9ja2luZy9x dWV1ZWQtc3BpbmxvY2tzL2FyY2gtc3VwcG9ydC50eHQKPiA+ID4gaW5kZXggMjJmMjk5MDM5MmZm Li5jZjI2MDQyNDgwZTIgMTAwNjQ0Cj4gPiA+IC0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZXMv bG9ja2luZy9xdWV1ZWQtc3BpbmxvY2tzL2FyY2gtc3VwcG9ydC50eHQKPiA+ID4gKysrIGIvRG9j dW1lbnRhdGlvbi9mZWF0dXJlcy9sb2NraW5nL3F1ZXVlZC1zcGlubG9ja3MvYXJjaC1zdXBwb3J0 LnR4dAo+ID4gPiBAQCAtMjAsNyArMjAsNyBAQAo+ID4gPiAgICAgIHwgICAgb3BlbnJpc2M6IHwg IG9rICB8Cj4gPiA+ICAgICAgfCAgICAgIHBhcmlzYzogfCBUT0RPIHwKPiA+ID4gICAgICB8ICAg ICBwb3dlcnBjOiB8ICBvayAgfAo+ID4gPiAtICAgIHwgICAgICAgcmlzY3Y6IHwgVE9ETyB8Cj4g PiA+ICsgICAgfCAgICAgICByaXNjdjogfCAgb2sgIHwKPiA+ID4gICAgICB8ICAgICAgICBzMzkw OiB8IFRPRE8gfAo+ID4gPiAgICAgIHwgICAgICAgICAgc2g6IHwgVE9ETyB8Cj4gPiA+ICAgICAg fCAgICAgICBzcGFyYzogfCAgb2sgIHwKPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2Nv bmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZwo+ID4gPiBpbmRleCBlZjU1YWI5NDAyN2UuLmM5ZmY4 MDgxZWZjMSAxMDA2NDQKPiA+ID4gLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnCj4gPiA+ICsrKyBi L2FyY2gvcmlzY3YvS2NvbmZpZwo+ID4gPiBAQCAtNzksNiArNzksNyBAQCBjb25maWcgUklTQ1YK PiA+ID4gICAgICAgc2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVAKPiA+ ID4gICAgICAgc2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFIKPiA+ID4gICAgICAgc2VsZWN0IEFS Q0hfV0FOVFNfVEhQX1NXQVAgaWYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFCj4gPiA+ ICsgICAgIHNlbGVjdCBBUkNIX1dFQUtfUkVMRUFTRV9BQ1FVSVJFIGlmIEFSQ0hfVVNFX1FVRVVF RF9TUElOTE9DS1MKPiA+Cj4gPiBXaHkgZG8gd2UgbmVlZCB0aGlzPyBBbHNvLCB3ZSBwcmVzdW1h Ymx5IHdvdWxkIHByZWZlciBub3QgdG8gaGF2ZSBpdAo+ID4gd2hlbiB3ZSBlbmQgdXAgdXNpbmcg dGlja2V0IHNwaW5sb2NrcyB3aGVuIGNvbWJvIHNwaW5sb2NrcyBpcyBzZWxlY3RlZC4KPiA+IElz IHRoZXJlIG5vIHdheSB0byBhdm9pZCBpdD8KPiAKPiBJJ2xsIGxldCBBbmRyZWEgYW5zd2VyIHRo aXMgYXMgaGUgYXNrZWQgZm9yIGl0Lgo+IAo+ID4KPiA+ID4gICAgICAgc2VsZWN0IEJJTkZNVF9G TEFUX05PX0RBVEFfU1RBUlRfT0ZGU0VUIGlmICFNTVUKPiA+ID4gICAgICAgc2VsZWN0IEJVSUxE VElNRV9UQUJMRV9TT1JUIGlmIE1NVQo+ID4gPiAgICAgICBzZWxlY3QgQ0xJTlRfVElNRVIgaWYg UklTQ1ZfTV9NT0RFCj4gPiA+IEBAIC00ODgsNiArNDg5LDM0IEBAIGNvbmZpZyBOT0RFU19TSElG VAo+ID4gPiAgICAgICAgIFNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIE5VTUEgTm9kZXMg YXZhaWxhYmxlIG9uIHRoZSB0YXJnZXQKPiA+ID4gICAgICAgICBzeXN0ZW0uICBJbmNyZWFzZXMg bWVtb3J5IHJlc2VydmVkIHRvIGFjY29tbW9kYXRlIHZhcmlvdXMgdGFibGVzLgo+ID4gPgo+ID4g PiArY2hvaWNlCj4gPiA+ICsgICAgIHByb21wdCAiUklTQy1WIHNwaW5sb2NrIHR5cGUiCj4gPiA+ ICsgICAgIGRlZmF1bHQgUklTQ1ZfQ09NQk9fU1BJTkxPQ0tTCj4gPiA+ICsKPiA+ID4gK2NvbmZp ZyBSSVNDVl9USUNLRVRfU1BJTkxPQ0tTCj4gPiA+ICsgICAgIGJvb2wgIlVzaW5nIHRpY2tldCBz cGlubG9jayIKPiA+ID4gKwo+ID4gPiArY29uZmlnIFJJU0NWX1FVRVVFRF9TUElOTE9DS1MKPiA+ ID4gKyAgICAgYm9vbCAiVXNpbmcgcXVldWVkIHNwaW5sb2NrIgo+ID4gPiArICAgICBkZXBlbmRz IG9uIFNNUCAmJiBNTVUgJiYgTk9OUE9SVEFCTEUKPiA+ID4gKyAgICAgc2VsZWN0IEFSQ0hfVVNF X1FVRVVFRF9TUElOTE9DS1MKPiA+ID4gKyAgICAgaGVscAo+ID4gPiArICAgICAgIFRoZSBxdWV1 ZWQgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgdGhlIGZvcndhcmQgcHJvZ3Jlc3MK PiA+ID4gKyAgICAgICBndWFyYW50ZWUgb2YgY21weGNoZygpL3hjaGcoKSBhdG9taWMgb3BlcmF0 aW9uczogQ0FTIHdpdGggWmFiaGEgb3IKPiA+ID4gKyAgICAgICBMUi9TQyB3aXRoIFppY2Nyc2Ug cHJvdmlkZSBzdWNoIGd1YXJhbnRlZS4KPiA+ID4gKwo+ID4gPiArICAgICAgIFNlbGVjdCB0aGlz IGlmIGFuZCBvbmx5IGlmIFphYmhhIG9yIFppY2Nyc2UgaXMgYXZhaWxhYmxlIG9uIHlvdXIKPiA+ ID4gKyAgICAgICBwbGF0Zm9ybS4KPiA+Cj4gPiBNYXliZSBzb21lIHRleHQgcmVjb21tZW5kaW5n IGNvbWJvIHNwaW5sb2NrcyBoZXJlPyBBcyBpdCBzdGFuZHMgaXQgc291bmRzCj4gPiBsaWtlIGVu YWJsaW5nIHF1ZXVlZCBzcGlubG9ja3MgaXMgYSBiYWQgaWRlYSBmb3IgYW55Ym9keSB0aGF0IGRv ZXNuJ3Qga25vdwo+ID4gd2hhdCBwbGF0Zm9ybXMgd2lsbCBydW4gdGhlIGtlcm5lbCB0aGV5J3Jl IGJ1aWxkaW5nLCB3aGljaCBpcyBhbGwgZGlzdHJvcy4KPiAKPiBUaGF0J3MgTk9OUE9SVEFCTEUs IHNvIHBlb3BsZSBlbmFibGluZyB0aGlzIGNvbmZpZyBhcmUgc3VwcG9zZWQgdG8KPiBrbm93IHRo YXQgcmlnaHQ/CgpZZXMsIGJvdGggdGhlIE5PTlBPUlRBQkxFIGFuZCB0aGUgc2NhcnkgdGV4dCB3 aWxsIGltcGx5IHRoYXQgcXNwaW5sb2NrcwpzaG91bGRuJ3QgYmUgc2VsZWN0ZWQuIEknbSBhc2tp bmcgZm9yIHRleHQgd2hpY2ggcG9pbnRzIHBlb3BsZSBjb25maWd1cmluZwprZXJuZWxzIHRvIENP TUJPLiBTb21ldGhpbmcgbGlrZQoKICBxc3BpbmxvY2tzIHByb3ZpZGVzIHBlcmZvcm1hbmNlIGVu aGFuY2VtZW50cyBvbiBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydAogIFphYmhhIG9yIFppY2Nyc2Uu IFJJU0NWX1FVRVVFRF9TUElOTE9DS1Mgc2hvdWxkIG5vdCBiZSBzZWxlY3RlZCBmb3IKICBwbGF0 Zm9ybXMgd2l0aG91dCBvbmUgb2YgdGhvc2UgZXh0ZW5zaW9ucy4gSWYgdW5zdXJlLCBzZWxlY3QK ICBSSVNDVl9DT01CT19TUElOTE9DS1MsIHdoaWNoIHdpbGwgdXNlIHFzcGlubG9ja3Mgd2hlbiBz dXBwb3J0ZWQgYW5kCiAgb3RoZXJ3aXNlIHRpY2tldCBzcGlubG9ja3MuCgo+IAo+ID4KPiA+ID4g Kwo+ID4gPiArY29uZmlnIFJJU0NWX0NPTUJPX1NQSU5MT0NLUwo+ID4gPiArICAgICBib29sICJV c2luZyBjb21ibyBzcGlubG9jayIKPiA+ID4gKyAgICAgZGVwZW5kcyBvbiBTTVAgJiYgTU1VCj4g PiA+ICsgICAgIHNlbGVjdCBBUkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTCj4gPiA+ICsgICAgIGhl bHAKPiA+ID4gKyAgICAgICBFbWJlZCBib3RoIHF1ZXVlZCBzcGlubG9jayBhbmQgdGlja2V0IGxv Y2sgc28gdGhhdCB0aGUgc3BpbmxvY2sKPiA+ID4gKyAgICAgICBpbXBsZW1lbnRhdGlvbiBjYW4g YmUgY2hvc2VuIGF0IHJ1bnRpbWUuCj4gPgo+ID4gbml0OiBBZGQgYSBibGFuayBsaW5lIGhlcmUK PiAKPiBEb25lCj4gCj4gPgo+ID4gPiArZW5kY2hvaWNlCj4gPiA+ICsKPiA+ID4gIGNvbmZpZyBS SVNDVl9BTFRFUk5BVElWRQo+ID4gPiAgICAgICBib29sCj4gPiA+ICAgICAgIGRlcGVuZHMgb24g IVhJUF9LRVJORUwKPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vS2J1 aWxkIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9LYnVpbGQKPiA+ID4gaW5kZXggNWM1ODk3NzBm MmE4Li4xYzI2MThjOTY0ZjAgMTAwNjQ0Cj4gPiA+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9h c20vS2J1aWxkCj4gPiA+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vS2J1aWxkCj4gPiA+ IEBAIC01LDEwICs1LDEyIEBAIHN5c2NhbGwteSArPSBzeXNjYWxsX3RhYmxlXzY0LmgKPiA+ID4g IGdlbmVyaWMteSArPSBlYXJseV9pb3JlbWFwLmgKPiA+ID4gIGdlbmVyaWMteSArPSBmbGF0LmgK PiA+ID4gIGdlbmVyaWMteSArPSBrdm1fcGFyYS5oCj4gPiA+ICtnZW5lcmljLXkgKz0gbWNzX3Nw aW5sb2NrLmgKPiA+ID4gIGdlbmVyaWMteSArPSBwYXJwb3J0LmgKPiA+ID4gLWdlbmVyaWMteSAr PSBzcGlubG9jay5oCj4gPiA+ICBnZW5lcmljLXkgKz0gc3BpbmxvY2tfdHlwZXMuaAo+ID4gPiAr Z2VuZXJpYy15ICs9IHRpY2tldF9zcGlubG9jay5oCj4gPiA+ICBnZW5lcmljLXkgKz0gcXJ3bG9j ay5oCj4gPiA+ICBnZW5lcmljLXkgKz0gcXJ3bG9ja190eXBlcy5oCj4gPiA+ICtnZW5lcmljLXkg Kz0gcXNwaW5sb2NrLmgKPiA+ID4gIGdlbmVyaWMteSArPSB1c2VyLmgKPiA+ID4gIGdlbmVyaWMt eSArPSB2bWxpbnV4Lmxkcy5oCj4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUv YXNtL3NwaW5sb2NrLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKPiA+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi41MDNhZWYzMWRi ODMKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNt L3NwaW5sb2NrLmgKPiA+ID4gQEAgLTAsMCArMSw0MyBAQAo+ID4gPiArLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiA+ID4gKwo+ID4gPiArI2lmbmRlZiBfX0FTTV9SSVND Vl9TUElOTE9DS19ICj4gPiA+ICsjZGVmaW5lIF9fQVNNX1JJU0NWX1NQSU5MT0NLX0gKPiA+ID4g Kwo+ID4gPiArI2lmZGVmIENPTkZJR19SSVNDVl9DT01CT19TUElOTE9DS1MKPiA+ID4gKyNkZWZp bmUgX1FfUEVORElOR19MT09QUyAgICAgKDEgPDwgOSkKPiA+ID4gKwo+ID4gPiArI2RlZmluZSBf X25vX2FyY2hfc3BpbmxvY2tfcmVkZWZpbmUKPiA+ID4gKyNpbmNsdWRlIDxhc20vdGlja2V0X3Nw aW5sb2NrLmg+Cj4gPiA+ICsjaW5jbHVkZSA8YXNtL3FzcGlubG9jay5oPgo+ID4gPiArI2luY2x1 ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgo+ID4KPiA+IFdlIG5lZWQgYXNtL2p1bXBfbGFiZWwuaCBp bnN0ZWFkIG9mIGFzbS9hbHRlcm5hdGl2ZS5oLCBidXQuLi4KPiA+Cj4gPiA+ICsKPiA+ID4gK0RF Q0xBUkVfU1RBVElDX0tFWV9UUlVFKHFzcGlubG9ja19rZXkpOwo+ID4gPiArCj4gPiA+ICsjZGVm aW5lIFNQSU5MT0NLX0JBU0VfREVDTEFSRShvcCwgdHlwZSwgdHlwZV9sb2NrKSAgICAgICAgICAg ICAgICAgICBcCj4gPiA+ICtzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgYXJjaF9zcGluXyMj b3AodHlwZV9sb2NrIGxvY2spICAgICAgICAgICBcCj4gPiA+ICt7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ ICsgICAgIGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZxc3BpbmxvY2tfa2V5KSkgICAgICAg ICAgICAgICAgICAgICBcCj4gPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlZF9zcGluXyMj b3AobG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ICsgICAgIHJldHVybiB0 aWNrZXRfc3Bpbl8jI29wKGxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gPiA+ICt9Cj4gPgo+ID4gLi4uZG8geW91IGtub3cgd2hhdCBpbXBhY3QgdGhpcyBpbmxpbmVk IHN0YXRpYyBrZXkgY2hlY2sgaGFzIG9uIHRoZQo+ID4ga2VybmVsIHNpemU/Cj4gCj4gTm8sIEkn bGwgY2hlY2ssIHRoYW5rcy4KPiAKPiA+Cj4gPiBBY3R1YWxseSwgd2h5IG5vdCB1c2UgQUxURVJO QVRJVkUgd2l0aCBhbnkgbm9uemVybyBjcHVmZWF0dXJlIHZhbHVlLgo+ID4gVGhlbiBhZGQgY29k ZSB0byByaXNjdl9jcHVmZWF0dXJlX3BhdGNoX2NoZWNrKCkgdG8gcmV0dXJuIHRydWUgd2hlbgo+ ID4gcXNwaW5sb2NrcyBzaG91bGQgYmUgZW5hYmxlZCAoYmFzZWQgb24gdGhlIHZhbHVlIG9mIHNv bWUgZ2xvYmFsIHNldAo+ID4gZHVyaW5nIHJpc2N2X3NwaW5sb2NrX2luaXQpPwo+IAo+IEFzIGRp c2N1c3NlZCB3aXRoIEd1byBpbiB0aGUgcHJldmlvdXMgaXRlcmF0aW9uLCB0aGUgcGF0Y2hpbmcg b2YgdGhlCj4gYWx0ZXJuYXRpdmVzIGludGVydmVuZXMgZmFyIGFmdGVyIHRoZSBmaXJzdCB1c2Ug b2YgdGhlIHNwaW5sb2NrcyBhbmQKPiB0aGUgdGlja2V0IHNwaW5sb2NrIGltcGxlbWVudGF0aW9u IHBvbGx1dGVzIHRoZSBzcGlubG9jayB2YWx1ZSwgc28KPiB3ZSdkIGhhdmUgdG8gdW5jb25kaXRp b25hbGx5IHN0YXJ0IHdpdGggdGhlIHFzcGlubG9jayBpbXBsZW1lbnRhdGlvbgo+IGFuZCBhZnRl ciBzd2l0Y2ggdG8gdGhlIHRpY2tldCBpbXBsZW1lbnRhdGlvbiBpZiBub3Qgc3VwcG9ydGVkIGJ5 IHRoZQo+IHBsYXRmb3JtLiBJdCB3b3JrcyBidXQgaXQncyBkaXJ0eSwgSSByZWFsbHkgZG9uJ3Qg bGlrZSB0aGlzIGhhY2suCj4gCj4gV2UgY291bGQgdGhvdWdoOgo+IC0gYWRkIGFuIGluaXRpYWwg dmFsdWUgdG8gdGhlIGFsdGVybmF0aXZlcyAobm90IHN1cmUgaXQncyBmZWFzaWJsZSB0aG91Z2gp Cj4gLSBtYWtlIHRoZSBwYXRjaGluZyBvZiBhbHRlcm5hdGl2ZXMgaGFwcGVuIHNvb25lciBieSBw YXJzaW5nIHRoZSBpc2EKPiBzdHJpbmcgc29vbmVyLCBlaXRoZXIgaW4gRFQgb3IgQUNQSSAoSSBo YXZlIGEgd29ya2luZyBQb0MgZm9yIHZlcnkKPiBlYXJseSBwYXJzaW5nIG9mIEFDUEkpLgo+IAo+ IEkgaW50ZW5kIHRvIGRvIHRoZSBsYXR0ZXIgYXMgSSB0aGluayB3ZSBzaG91bGQgYmUgYXdhcmUg b2YgdGhlCj4gZXh0ZW5zaW9ucyBzb29uZXIgaW4gdGhlIGJvb3QgcHJvY2Vzcywgc28gSSdsbCBj aGFuZ2UgdGhhdCB0byB0aGUKPiBhbHRlcm5hdGl2ZXMgd2hlbiBpdCdzIGRvbmUuIFdEWVQsIGFu eSBvdGhlciBpZGVhPwoKWWVzLCB3ZSdsbCBsaWtlbHkgd2FudCBlYXJseSBwYXRjaGluZyBmb3Ig b3RoZXIgZXh0ZW5zaW9ucyBhcyB3ZWxsLApzbyB0aGF0J3MgYSBnb29kIGlkZWEgaW4gZ2VuZXJh bC4gUHV0dGluZyBhIFRPRE8gb24gdGhpcyBzdGF0aWMga2V5CnRvIGJlIGNoYW5nZWQgdG8gYW4g QUxURVJOQVRJVkUgbGF0ZXIgd2hlbiBwb3NzaWJsZSBzb3VuZHMgcmVhc29uYWJsZQp0byBtZS4K ClRoYW5rcywKZHJldwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1y aXNjdgo=