From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 48478EDE987 for ; Thu, 14 Sep 2023 07:18:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232856AbjINHSq (ORCPT ); Thu, 14 Sep 2023 03:18:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39758 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231857AbjINHSp (ORCPT ); Thu, 14 Sep 2023 03:18:45 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 1B40291 for ; Thu, 14 Sep 2023 00:17:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1694675874; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eEyUVXw0mWMHoikQx5FXX/6OXRLTpxgiWnfiglWGV8E=; b=M9Nuf+OuEZbsEEiwAef+d9dmar2CI9bEITwpbK5f2C0gMlXqUhGT4D27GEO1fQjYJeZXs8 sfB27GS7bbK6BKQWIBRCw6cCFZsnnxiw1h5s3Yo4o+6POtl72HjZrVMDLPz3Zj3r9c0mS3 ndIeTiEUcmRsJxPcSDXy2saGSh1HgfY= Received: from mail-ot1-f69.google.com (mail-ot1-f69.google.com [209.85.210.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-594-5h0dGi-xNCe93rgB_-OeLA-1; Thu, 14 Sep 2023 03:17:53 -0400 X-MC-Unique: 5h0dGi-xNCe93rgB_-OeLA-1 Received: by mail-ot1-f69.google.com with SMTP id 46e09a7af769-6b9cf208fb5so819101a34.3 for ; Thu, 14 Sep 2023 00:17:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694675872; x=1695280672; 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=eEyUVXw0mWMHoikQx5FXX/6OXRLTpxgiWnfiglWGV8E=; b=TSUVlu9B6D7D6vuI+nquK1tyZNdoZtyjsomWzjSmWTswZw2qPvH8PcjDdAwIsMZG+X Nsk6Ql+2TZIIribHbqwCopfuLd43KA+zOi4RupjgJb+SmVlx2EsQcihbUmnz/KfURBUZ AFpl6JfTZdkxqVTHJJN3LX7vfqgYhxlq+1vF+HeGaB2lgECPYdfqTEUQfD1o3vMK8Vfy m/kdiz9b3cd2RaJ8dVW29+p9nRlNtoH/oPt9LzVrLrE9RyJKclKGoEBPC0YEDBvJoTMo /SoywHTciL6Ug7bbUF9Q/TwBhRPYX/XzDEPn+1sTcD8sBQ1uyzj8zuhkBQnqrGk7XtvE VQ8A== X-Gm-Message-State: AOJu0YxneQRCP4BmEf5O6QAcxCiOUQzYRLA72YJgf+9QvM+bOG6kWG/E lzRguFpJeFAwa4GSn6+bMJWzgiDoQ4+wSwCSh8sCffBDW/joQdmFHgfm0xYpgkUkEYb1uWuCsRq fVSyV38eDXzHJ3GrcYUqorw== X-Received: by 2002:a9d:4b15:0:b0:6b9:ed64:1423 with SMTP id q21-20020a9d4b15000000b006b9ed641423mr5620091otf.2.1694675872309; Thu, 14 Sep 2023 00:17:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGOAdtS3UbOt9zvLXyyE0sF8G5QOYDAkMf+vwqDvXVMptC9CKtp58xa3OrQHXJOdPOz3qvAzA== X-Received: by 2002:a9d:4b15:0:b0:6b9:ed64:1423 with SMTP id q21-20020a9d4b15000000b006b9ed641423mr5620068otf.2.1694675871980; Thu, 14 Sep 2023 00:17:51 -0700 (PDT) Received: from redhat.com ([2804:1b3:a803:4ff9:7c29:fe41:6aa7:43df]) by smtp.gmail.com with ESMTPSA id s189-20020a4a51c6000000b0056e67f2f92asm380519ooa.22.2023.09.14.00.17.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Sep 2023 00:17:51 -0700 (PDT) Date: Thu, 14 Sep 2023 04:17:41 -0300 From: Leonardo Bras To: Guo Ren Cc: paul.walmsley@sifive.com, anup@brainfault.org, peterz@infradead.org, mingo@redhat.com, will@kernel.org, palmer@rivosinc.com, longman@redhat.com, boqun.feng@gmail.com, tglx@linutronix.de, paulmck@kernel.org, rostedt@goodmis.org, rdunlap@infradead.org, catalin.marinas@arm.com, conor.dooley@microchip.com, xiaoguang.xing@sophgo.com, bjorn@rivosinc.com, alexghiti@rivosinc.com, keescook@chromium.org, greentime.hu@sifive.com, ajones@ventanamicro.com, jszhang@kernel.org, wefu@redhat.com, wuwei2016@iscas.ac.cn, linux-arch@vger.kernel.org, linux-riscv@lists.infradead.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-csky@vger.kernel.org, Guo Ren Subject: Re: [PATCH V11 06/17] riscv: qspinlock: Introduce combo spinlock Message-ID: References: <20230910082911.3378782-1-guoren@kernel.org> <20230910082911.3378782-7-guoren@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-arch@vger.kernel.org On Thu, Sep 14, 2023 at 12:49:45PM +0800, Guo Ren wrote: > On Thu, Sep 14, 2023 at 4:49 AM Leonardo Bras wrote: > > > > On Wed, Sep 13, 2023 at 05:37:01PM -0300, Leonardo Bras wrote: > > > On Sun, Sep 10, 2023 at 07:06:23AM -0400, Guo Ren wrote: > > > > On Sun, Sep 10, 2023 at 04:29:00AM -0400, guoren@kernel.org wrote: > > > > > From: Guo Ren > > > > > > > > > > Combo spinlock could support queued and ticket in one Linux Image and > > > > > select them during boot time via errata mechanism. Here is the func > > > > > size (Bytes) comparison table below: > > > > > > > > > > TYPE : COMBO | TICKET | QUEUED > > > > > arch_spin_lock : 106 | 60 | 50 > > > > > arch_spin_unlock : 54 | 36 | 26 > > > > > arch_spin_trylock : 110 | 72 | 54 > > > > > arch_spin_is_locked : 48 | 34 | 20 > > > > > arch_spin_is_contended : 56 | 40 | 24 > > > > > rch_spin_value_unlocked : 48 | 34 | 24 > > > > > > > > > > One example of disassemble combo arch_spin_unlock: > > > > > 0xffffffff8000409c <+14>: nop # detour slot > > > > > 0xffffffff800040a0 <+18>: fence rw,w # queued spinlock start > > > > > 0xffffffff800040a4 <+22>: sb zero,0(a4) # queued spinlock end > > > > > 0xffffffff800040a8 <+26>: ld s0,8(sp) > > > > > 0xffffffff800040aa <+28>: addi sp,sp,16 > > > > > 0xffffffff800040ac <+30>: ret > > > > > 0xffffffff800040ae <+32>: lw a5,0(a4) # ticket spinlock start > > > > > 0xffffffff800040b0 <+34>: sext.w a5,a5 > > > > > 0xffffffff800040b2 <+36>: fence rw,w > > > > > 0xffffffff800040b6 <+40>: addiw a5,a5,1 > > > > > 0xffffffff800040b8 <+42>: slli a5,a5,0x30 > > > > > 0xffffffff800040ba <+44>: srli a5,a5,0x30 > > > > > 0xffffffff800040bc <+46>: sh a5,0(a4) # ticket spinlock end > > > > > 0xffffffff800040c0 <+50>: ld s0,8(sp) > > > > > 0xffffffff800040c2 <+52>: addi sp,sp,16 > > > > > 0xffffffff800040c4 <+54>: ret > > > > > > > > > > The qspinlock is smaller and faster than ticket-lock when all are in > > > > > fast-path, and combo spinlock could provide a compatible Linux Image > > > > > for different micro-arch design (weak/strict fwd guarantee LR/SC) > > > > > processors. > > > > > > > > > > Signed-off-by: Guo Ren > > > > > Signed-off-by: Guo Ren > > > > > --- > > > > > arch/riscv/Kconfig | 9 +++- > > > > > arch/riscv/include/asm/spinlock.h | 78 ++++++++++++++++++++++++++++++- > > > > > arch/riscv/kernel/setup.c | 14 ++++++ > > > > > 3 files changed, 98 insertions(+), 3 deletions(-) > > > > > > > > > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > > > > > index 7f39bfc75744..4bcff2860f48 100644 > > > > > --- a/arch/riscv/Kconfig > > > > > +++ b/arch/riscv/Kconfig > > > > > @@ -473,7 +473,7 @@ config NODES_SHIFT > > > > > > > > > > choice > > > > > prompt "RISC-V spinlock type" > > > > > - default RISCV_TICKET_SPINLOCKS > > > > > + default RISCV_COMBO_SPINLOCKS > > > > > > > > > > config RISCV_TICKET_SPINLOCKS > > > > > bool "Using ticket spinlock" > > > > > @@ -485,6 +485,13 @@ config RISCV_QUEUED_SPINLOCKS > > > > > help > > > > > Make sure your micro arch LL/SC has a strong forward progress guarantee. > > > > > Otherwise, stay at ticket-lock. > > > > > + > > > > > +config RISCV_COMBO_SPINLOCKS > > > > > + bool "Using combo spinlock" > > > > > + depends on SMP && MMU > > > > > + select ARCH_USE_QUEUED_SPINLOCKS > > > > > + help > > > > > + Select queued spinlock or ticket-lock via errata. > > > > > endchoice > > > > > > > > > > config RISCV_ALTERNATIVE > > > > > diff --git a/arch/riscv/include/asm/spinlock.h b/arch/riscv/include/asm/spinlock.h > > > > > index c644a92d4548..8ea0fee80652 100644 > > > > > --- a/arch/riscv/include/asm/spinlock.h > > > > > +++ b/arch/riscv/include/asm/spinlock.h > > > > > @@ -7,11 +7,85 @@ > > > > > #define _Q_PENDING_LOOPS (1 << 9) > > > > > #endif > > > > > > > > > > +#ifdef CONFIG_RISCV_COMBO_SPINLOCKS > > > > > +#include > > > > > + > > > > > +#undef arch_spin_is_locked > > > > > +#undef arch_spin_is_contended > > > > > +#undef arch_spin_value_unlocked > > > > > +#undef arch_spin_lock > > > > > +#undef arch_spin_trylock > > > > > +#undef arch_spin_unlock > > > > > + > > > > > +#include > > > > > +#include > > > > > + > > > > > +#undef arch_spin_is_locked > > > > > +#undef arch_spin_is_contended > > > > > +#undef arch_spin_value_unlocked > > > > > +#undef arch_spin_lock > > > > > +#undef arch_spin_trylock > > > > > +#undef arch_spin_unlock > > > > Sorry, I forgot __no_arch_spinlock_redefine advice here. I would add it in v12. > > > > https://lore.kernel.org/linux-riscv/4cc7113a-0e4e-763a-cba2-7963bcd26c7a@redhat.com/ > > > > > > > > > > Please check a reply to a previous patch I sent earlier: I think these > > > #undef can be avoided. > > > > > > > > + > > > > > +DECLARE_STATIC_KEY_TRUE(combo_qspinlock_key); > > > > > + > > > > > +static __always_inline void arch_spin_lock(arch_spinlock_t *lock) > > > > > +{ > > > > > + if (static_branch_likely(&combo_qspinlock_key)) > > > > > + queued_spin_lock(lock); > > > > > + else > > > > > + ticket_spin_lock(lock); > > > > > +} > > > > > + > > > > > +static __always_inline bool arch_spin_trylock(arch_spinlock_t *lock) > > > > > +{ > > > > > + if (static_branch_likely(&combo_qspinlock_key)) > > > > > + return queued_spin_trylock(lock); > > > > > + else > > > > > + return ticket_spin_trylock(lock); > > > > > +} > > > > > + > > > > > +static __always_inline void arch_spin_unlock(arch_spinlock_t *lock) > > > > > +{ > > > > > + if (static_branch_likely(&combo_qspinlock_key)) > > > > > + queued_spin_unlock(lock); > > > > > + else > > > > > + ticket_spin_unlock(lock); > > > > > +} > > > > > + > > > > > +static __always_inline int arch_spin_value_unlocked(arch_spinlock_t lock) > > > > > +{ > > > > > + if (static_branch_likely(&combo_qspinlock_key)) > > > > > + return queued_spin_value_unlocked(lock); > > > > > + else > > > > > + return ticket_spin_value_unlocked(lock); > > > > > +} > > > > > + > > > > > +static __always_inline int arch_spin_is_locked(arch_spinlock_t *lock) > > > > > +{ > > > > > + if (static_branch_likely(&combo_qspinlock_key)) > > > > > + return queued_spin_is_locked(lock); > > > > > + else > > > > > + return ticket_spin_is_locked(lock); > > > > > +} > > > > > + > > > > > +static __always_inline int arch_spin_is_contended(arch_spinlock_t *lock) > > > > > +{ > > > > > + if (static_branch_likely(&combo_qspinlock_key)) > > > > > + return queued_spin_is_contended(lock); > > > > > + else > > > > > + return ticket_spin_is_contended(lock); > > > > > +} > > > > > +#else /* CONFIG_RISCV_COMBO_SPINLOCKS */ > > > > > + > > > > Also, those functions all reproduce the same behavior, so maybe it would be > > better to keep that behavior in a macro such as: > > > > #define COMBO_SPINLOCK_DECLARE(f) \ > > static __always_inline int arch_spin_ ## f(arch_spinlock_t *lock) \ > > { \ > > if (static_branch_likely(&combo_qspinlock_key)) \ > > return queued_spin_ ## f(lock); \ > > else \ > > return ticket_spin_ ## f(lock); \ > > } > > > > COMBO_SPINLOCK_DECLARE(lock) > > COMBO_SPINLOCK_DECLARE(trylock) > > COMBO_SPINLOCK_DECLARE(unlock) > > COMBO_SPINLOCK_DECLARE(value_unlocked) > > COMBO_SPINLOCK_DECLARE(is_locked) > > COMBO_SPINLOCK_DECLARE(is_contended) > > > > Does that make sense? > Yeah, thanks. I would try. You improved my macro skills. :) Glad to be of any help :) > > > > > Thanks! > > Leo > > > > > > > > > #ifdef CONFIG_QUEUED_SPINLOCKS > > > > > #include > > > > > -#include > > > > > #else > > > > > -#include > > > > > +#include > > > > > #endif > > > > > > > > > > +#endif /* CONFIG_RISCV_COMBO_SPINLOCKS */ > > > > > + > > > > > +#include > > > > > + > > > > > #endif /* __ASM_RISCV_SPINLOCK_H */ > > > > > diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c > > > > > index 32c2e1eb71bd..a447cf360a18 100644 > > > > > --- a/arch/riscv/kernel/setup.c > > > > > +++ b/arch/riscv/kernel/setup.c > > > > > @@ -269,6 +269,18 @@ static void __init parse_dtb(void) > > > > > #endif > > > > > } > > > > > > > > > > +#ifdef CONFIG_RISCV_COMBO_SPINLOCKS > > > > > +DEFINE_STATIC_KEY_TRUE(combo_qspinlock_key); > > > > > +EXPORT_SYMBOL(combo_qspinlock_key); > > > > > +#endif > > > > > + > > > > > +static void __init riscv_spinlock_init(void) > > > > > +{ > > > > > +#ifdef CONFIG_RISCV_COMBO_SPINLOCKS > > > > > + static_branch_disable(&combo_qspinlock_key); > > > > > +#endif > > > > > +} > > > > > + > > > > > extern void __init init_rt_signal_env(void); > > > > > > > > > > void __init setup_arch(char **cmdline_p) > > > > > @@ -317,6 +329,8 @@ void __init setup_arch(char **cmdline_p) > > > > > riscv_isa_extension_available(NULL, ZICBOM)) > > > > > riscv_noncoherent_supported(); > > > > > riscv_set_dma_cache_alignment(); > > > > > + > > > > > + riscv_spinlock_init(); > > > > > } > > > > > > > > > > static int __init topology_init(void) > > > > > -- > > > > > 2.36.1 > > > > > > > > > > > > > > > _______________________________________________ > > > > > linux-riscv mailing list > > > > > linux-riscv@lists.infradead.org > > > > > http://lists.infradead.org/mailman/listinfo/linux-riscv > > > > > > > > > > > > > > -- > Best Regards > Guo Ren > 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 AED55EDE987 for ; Thu, 14 Sep 2023 07:18:10 +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=U0R0gjWa5Wnmn8QXM63KNV9CaaQGMJLQ3pHOPKXVzhM=; b=BpA//bFTn1HScY Lpqqq1NjWyQ5e8kUYlpPlGml/pRsoi5azh9bP4QwEDUinLz7EnXyz9jYQNV6vW8vzriu8ixdb56BT 1hKBvY4OxuNchNz9t3LT2y9dgf5FlMq00cG43zHH+MkCcptP+unFWuuMbflV/yIB2e8EOpQdTyleE W0U+lsMy7moNUgG0ISQJvTO/gAOVLkQgtjpibO2GNfkQTuKEBA535ojZZS98SnT8go6J5JtrJ7z3Q QVUZptRv8Ix1HrulvZNHgZD0obl3yijfPCmhFxlu/ZeVP8zRJL0rYrDgyfhYjC52ZIG0f1S3M7ocf Vj5MYzKCOJDqmXOcsy7g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qggbw-007aim-0H; Thu, 14 Sep 2023 07:18:00 +0000 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qggbs-007ahY-0G for linux-riscv@lists.infradead.org; Thu, 14 Sep 2023 07:17:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1694675874; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eEyUVXw0mWMHoikQx5FXX/6OXRLTpxgiWnfiglWGV8E=; b=M9Nuf+OuEZbsEEiwAef+d9dmar2CI9bEITwpbK5f2C0gMlXqUhGT4D27GEO1fQjYJeZXs8 sfB27GS7bbK6BKQWIBRCw6cCFZsnnxiw1h5s3Yo4o+6POtl72HjZrVMDLPz3Zj3r9c0mS3 ndIeTiEUcmRsJxPcSDXy2saGSh1HgfY= Received: from mail-ot1-f70.google.com (mail-ot1-f70.google.com [209.85.210.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-445-QB3iWVmWPHCvtvAXo3Vh_Q-1; Thu, 14 Sep 2023 03:17:53 -0400 X-MC-Unique: QB3iWVmWPHCvtvAXo3Vh_Q-1 Received: by mail-ot1-f70.google.com with SMTP id 46e09a7af769-6b9efedaeebso820708a34.2 for ; Thu, 14 Sep 2023 00:17:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694675872; x=1695280672; 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=eEyUVXw0mWMHoikQx5FXX/6OXRLTpxgiWnfiglWGV8E=; b=TrsmBnYMTYmX9YQonGq5q99lzHo7QHYAL3igbP02BVE+XCaY/KI7t+C4VK7S6cR6Sl psSveBKOdDy3PDK8SZhmb5FMUItYoycLyt2Sw+y6wJjKer2MPyII0d380baWbE+uFlQ1 MURkHxi16Ycq9APhRJIa1uS1BhXxZm+bG75bqyL5KvRl8DMuv3l58+mIDa6mkbqw/8MH oyUK6SE48PIH2z1BrPq5IvHXZGmZ/CO7RyhnIMFtbPn6AI6kw0X/Q4e+PnFLJk28VvJk clwmTFBtE6Q4YI00mDJqUCmIaqvuy8vhmnSizfMZB3r3ltWhuaBkvUJrRdaIFS1//uKV UScw== X-Gm-Message-State: AOJu0YzZjF4K5UvnySAKh8+VSMmidlMJa5ge6gEysU9EdvXqc0Ay9uWY wl1XzyaqMmAMlvRDDXDZfz0tc1wK/+B1fJSCeM0xJDgY2USacaknA7rx2Ub5bG/cBOGWJHZVNN3 5+TNtzM/TJrMvWwdhm5LvyvCanBH1 X-Received: by 2002:a9d:4b15:0:b0:6b9:ed64:1423 with SMTP id q21-20020a9d4b15000000b006b9ed641423mr5620098otf.2.1694675872310; Thu, 14 Sep 2023 00:17:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGOAdtS3UbOt9zvLXyyE0sF8G5QOYDAkMf+vwqDvXVMptC9CKtp58xa3OrQHXJOdPOz3qvAzA== X-Received: by 2002:a9d:4b15:0:b0:6b9:ed64:1423 with SMTP id q21-20020a9d4b15000000b006b9ed641423mr5620068otf.2.1694675871980; Thu, 14 Sep 2023 00:17:51 -0700 (PDT) Received: from redhat.com ([2804:1b3:a803:4ff9:7c29:fe41:6aa7:43df]) by smtp.gmail.com with ESMTPSA id s189-20020a4a51c6000000b0056e67f2f92asm380519ooa.22.2023.09.14.00.17.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Sep 2023 00:17:51 -0700 (PDT) Date: Thu, 14 Sep 2023 04:17:41 -0300 From: Leonardo Bras To: Guo Ren Cc: paul.walmsley@sifive.com, anup@brainfault.org, peterz@infradead.org, mingo@redhat.com, will@kernel.org, palmer@rivosinc.com, longman@redhat.com, boqun.feng@gmail.com, tglx@linutronix.de, paulmck@kernel.org, rostedt@goodmis.org, rdunlap@infradead.org, catalin.marinas@arm.com, conor.dooley@microchip.com, xiaoguang.xing@sophgo.com, bjorn@rivosinc.com, alexghiti@rivosinc.com, keescook@chromium.org, greentime.hu@sifive.com, ajones@ventanamicro.com, jszhang@kernel.org, wefu@redhat.com, wuwei2016@iscas.ac.cn, linux-arch@vger.kernel.org, linux-riscv@lists.infradead.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-csky@vger.kernel.org, Guo Ren Subject: Re: [PATCH V11 06/17] riscv: qspinlock: Introduce combo spinlock Message-ID: References: <20230910082911.3378782-1-guoren@kernel.org> <20230910082911.3378782-7-guoren@kernel.org> MIME-Version: 1.0 In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230914_001756_286796_097A6190 X-CRM114-Status: GOOD ( 40.11 ) 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 T24gVGh1LCBTZXAgMTQsIDIwMjMgYXQgMTI6NDk6NDVQTSArMDgwMCwgR3VvIFJlbiB3cm90ZToK PiBPbiBUaHUsIFNlcCAxNCwgMjAyMyBhdCA0OjQ54oCvQU0gTGVvbmFyZG8gQnJhcyA8bGVvYnJh c0ByZWRoYXQuY29tPiB3cm90ZToKPiA+Cj4gPiBPbiBXZWQsIFNlcCAxMywgMjAyMyBhdCAwNToz NzowMVBNIC0wMzAwLCBMZW9uYXJkbyBCcmFzIHdyb3RlOgo+ID4gPiBPbiBTdW4sIFNlcCAxMCwg MjAyMyBhdCAwNzowNjoyM0FNIC0wNDAwLCBHdW8gUmVuIHdyb3RlOgo+ID4gPiA+IE9uIFN1biwg U2VwIDEwLCAyMDIzIGF0IDA0OjI5OjAwQU0gLTA0MDAsIGd1b3JlbkBrZXJuZWwub3JnIHdyb3Rl Ogo+ID4gPiA+ID4gRnJvbTogR3VvIFJlbiA8Z3VvcmVuQGxpbnV4LmFsaWJhYmEuY29tPgo+ID4g PiA+ID4KPiA+ID4gPiA+IENvbWJvIHNwaW5sb2NrIGNvdWxkIHN1cHBvcnQgcXVldWVkIGFuZCB0 aWNrZXQgaW4gb25lIExpbnV4IEltYWdlIGFuZAo+ID4gPiA+ID4gc2VsZWN0IHRoZW0gZHVyaW5n IGJvb3QgdGltZSB2aWEgZXJyYXRhIG1lY2hhbmlzbS4gSGVyZSBpcyB0aGUgZnVuYwo+ID4gPiA+ ID4gc2l6ZSAoQnl0ZXMpIGNvbXBhcmlzb24gdGFibGUgYmVsb3c6Cj4gPiA+ID4gPgo+ID4gPiA+ ID4gVFlQRSAgICAgICAgICAgICAgICAgICAgICA6IENPTUJPIHwgVElDS0VUIHwgUVVFVUVECj4g PiA+ID4gPiBhcmNoX3NwaW5fbG9jayAgICAgICAgICAgIDogMTA2ICAgfCA2MCAgICAgfCA1MAo+ ID4gPiA+ID4gYXJjaF9zcGluX3VubG9jayAgOiA1NCAgICB8IDM2ICAgICB8IDI2Cj4gPiA+ID4g PiBhcmNoX3NwaW5fdHJ5bG9jayA6IDExMCAgIHwgNzIgICAgIHwgNTQKPiA+ID4gPiA+IGFyY2hf c3Bpbl9pc19sb2NrZWQgICAgICAgOiA0OCAgICB8IDM0ICAgICB8IDIwCj4gPiA+ID4gPiBhcmNo X3NwaW5faXNfY29udGVuZGVkICAgIDogNTYgICAgfCA0MCAgICAgfCAyNAo+ID4gPiA+ID4gcmNo X3NwaW5fdmFsdWVfdW5sb2NrZWQgICA6IDQ4ICAgIHwgMzQgICAgIHwgMjQKPiA+ID4gPiA+Cj4g PiA+ID4gPiBPbmUgZXhhbXBsZSBvZiBkaXNhc3NlbWJsZSBjb21ibyBhcmNoX3NwaW5fdW5sb2Nr Ogo+ID4gPiA+ID4gICAgMHhmZmZmZmZmZjgwMDA0MDljIDwrMTQ+OiAgICBub3AgICAgICAgICAg ICAgICAgIyBkZXRvdXIgc2xvdAo+ID4gPiA+ID4gICAgMHhmZmZmZmZmZjgwMDA0MGEwIDwrMTg+ OiAgICBmZW5jZSAgIHJ3LHcgICAgICAgIyBxdWV1ZWQgc3BpbmxvY2sgc3RhcnQKPiA+ID4gPiA+ ICAgIDB4ZmZmZmZmZmY4MDAwNDBhNCA8KzIyPjogICAgc2IgICAgICB6ZXJvLDAoYTQpICMgcXVl dWVkIHNwaW5sb2NrIGVuZAo+ID4gPiA+ID4gICAgMHhmZmZmZmZmZjgwMDA0MGE4IDwrMjY+OiAg ICBsZCAgICAgIHMwLDgoc3ApCj4gPiA+ID4gPiAgICAweGZmZmZmZmZmODAwMDQwYWEgPCsyOD46 ICAgIGFkZGkgICAgc3Asc3AsMTYKPiA+ID4gPiA+ICAgIDB4ZmZmZmZmZmY4MDAwNDBhYyA8KzMw PjogICAgcmV0Cj4gPiA+ID4gPiAgICAweGZmZmZmZmZmODAwMDQwYWUgPCszMj46ICAgIGx3ICAg ICAgYTUsMChhNCkgICAjIHRpY2tldCBzcGlubG9jayBzdGFydAo+ID4gPiA+ID4gICAgMHhmZmZm ZmZmZjgwMDA0MGIwIDwrMzQ+OiAgICBzZXh0LncgIGE1LGE1Cj4gPiA+ID4gPiAgICAweGZmZmZm ZmZmODAwMDQwYjIgPCszNj46ICAgIGZlbmNlICAgcncsdwo+ID4gPiA+ID4gICAgMHhmZmZmZmZm ZjgwMDA0MGI2IDwrNDA+OiAgICBhZGRpdyAgIGE1LGE1LDEKPiA+ID4gPiA+ICAgIDB4ZmZmZmZm ZmY4MDAwNDBiOCA8KzQyPjogICAgc2xsaSAgICBhNSxhNSwweDMwCj4gPiA+ID4gPiAgICAweGZm ZmZmZmZmODAwMDQwYmEgPCs0ND46ICAgIHNybGkgICAgYTUsYTUsMHgzMAo+ID4gPiA+ID4gICAg MHhmZmZmZmZmZjgwMDA0MGJjIDwrNDY+OiAgICBzaCAgICAgIGE1LDAoYTQpICAgIyB0aWNrZXQg c3BpbmxvY2sgZW5kCj4gPiA+ID4gPiAgICAweGZmZmZmZmZmODAwMDQwYzAgPCs1MD46ICAgIGxk ICAgICAgczAsOChzcCkKPiA+ID4gPiA+ICAgIDB4ZmZmZmZmZmY4MDAwNDBjMiA8KzUyPjogICAg YWRkaSAgICBzcCxzcCwxNgo+ID4gPiA+ID4gICAgMHhmZmZmZmZmZjgwMDA0MGM0IDwrNTQ+OiAg ICByZXQKPiA+ID4gPiA+Cj4gPiA+ID4gPiBUaGUgcXNwaW5sb2NrIGlzIHNtYWxsZXIgYW5kIGZh c3RlciB0aGFuIHRpY2tldC1sb2NrIHdoZW4gYWxsIGFyZSBpbgo+ID4gPiA+ID4gZmFzdC1wYXRo LCBhbmQgY29tYm8gc3BpbmxvY2sgY291bGQgcHJvdmlkZSBhIGNvbXBhdGlibGUgTGludXggSW1h Z2UKPiA+ID4gPiA+IGZvciBkaWZmZXJlbnQgbWljcm8tYXJjaCBkZXNpZ24gKHdlYWsvc3RyaWN0 IGZ3ZCBndWFyYW50ZWUgTFIvU0MpCj4gPiA+ID4gPiBwcm9jZXNzb3JzLgo+ID4gPiA+ID4KPiA+ ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEd1byBSZW4gPGd1b3JlbkBrZXJuZWwub3JnPgo+ID4gPiA+ ID4gU2lnbmVkLW9mZi1ieTogR3VvIFJlbiA8Z3VvcmVuQGxpbnV4LmFsaWJhYmEuY29tPgo+ID4g PiA+ID4gLS0tCj4gPiA+ID4gPiAgYXJjaC9yaXNjdi9LY29uZmlnICAgICAgICAgICAgICAgIHwg IDkgKysrLQo+ID4gPiA+ID4gIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3BpbmxvY2suaCB8IDc4 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiA+ID4gPiA+ICBhcmNoL3Jpc2N2L2tl cm5lbC9zZXR1cC5jICAgICAgICAgfCAxNCArKysrKysKPiA+ID4gPiA+ICAzIGZpbGVzIGNoYW5n ZWQsIDk4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4gPiA+ID4gPgo+ID4gPiA+ID4g ZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZwo+ID4g PiA+ID4gaW5kZXggN2YzOWJmYzc1NzQ0Li40YmNmZjI4NjBmNDggMTAwNjQ0Cj4gPiA+ID4gPiAt LS0gYS9hcmNoL3Jpc2N2L0tjb25maWcKPiA+ID4gPiA+ICsrKyBiL2FyY2gvcmlzY3YvS2NvbmZp Zwo+ID4gPiA+ID4gQEAgLTQ3Myw3ICs0NzMsNyBAQCBjb25maWcgTk9ERVNfU0hJRlQKPiA+ID4g PiA+Cj4gPiA+ID4gPiAgY2hvaWNlCj4gPiA+ID4gPiAgIHByb21wdCAiUklTQy1WIHNwaW5sb2Nr IHR5cGUiCj4gPiA+ID4gPiAtIGRlZmF1bHQgUklTQ1ZfVElDS0VUX1NQSU5MT0NLUwo+ID4gPiA+ ID4gKyBkZWZhdWx0IFJJU0NWX0NPTUJPX1NQSU5MT0NLUwo+ID4gPiA+ID4KPiA+ID4gPiA+ICBj b25maWcgUklTQ1ZfVElDS0VUX1NQSU5MT0NLUwo+ID4gPiA+ID4gICBib29sICJVc2luZyB0aWNr ZXQgc3BpbmxvY2siCj4gPiA+ID4gPiBAQCAtNDg1LDYgKzQ4NSwxMyBAQCBjb25maWcgUklTQ1Zf UVVFVUVEX1NQSU5MT0NLUwo+ID4gPiA+ID4gICBoZWxwCj4gPiA+ID4gPiAgICAgTWFrZSBzdXJl IHlvdXIgbWljcm8gYXJjaCBMTC9TQyBoYXMgYSBzdHJvbmcgZm9yd2FyZCBwcm9ncmVzcyBndWFy YW50ZWUuCj4gPiA+ID4gPiAgICAgT3RoZXJ3aXNlLCBzdGF5IGF0IHRpY2tldC1sb2NrLgo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gK2NvbmZpZyBSSVNDVl9DT01CT19TUElOTE9DS1MKPiA+ID4gPiA+ ICsgYm9vbCAiVXNpbmcgY29tYm8gc3BpbmxvY2siCj4gPiA+ID4gPiArIGRlcGVuZHMgb24gU01Q ICYmIE1NVQo+ID4gPiA+ID4gKyBzZWxlY3QgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLUwo+ID4g PiA+ID4gKyBoZWxwCj4gPiA+ID4gPiArICAgU2VsZWN0IHF1ZXVlZCBzcGlubG9jayBvciB0aWNr ZXQtbG9jayB2aWEgZXJyYXRhLgo+ID4gPiA+ID4gIGVuZGNob2ljZQo+ID4gPiA+ID4KPiA+ID4g PiA+ICBjb25maWcgUklTQ1ZfQUxURVJOQVRJVkUKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9hcmNo L3Jpc2N2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Nw aW5sb2NrLmgKPiA+ID4gPiA+IGluZGV4IGM2NDRhOTJkNDU0OC4uOGVhMGZlZTgwNjUyIDEwMDY0 NAo+ID4gPiA+ID4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zcGlubG9jay5oCj4gPiA+ ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKPiA+ID4gPiA+IEBA IC03LDExICs3LDg1IEBACj4gPiA+ID4gPiAgI2RlZmluZSBfUV9QRU5ESU5HX0xPT1BTICgxIDw8 IDkpCj4gPiA+ID4gPiAgI2VuZGlmCj4gPiA+ID4gPgo+ID4gPiA+ID4gKyNpZmRlZiBDT05GSUdf UklTQ1ZfQ09NQk9fU1BJTkxPQ0tTCj4gPiA+ID4gPiArI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Rp Y2tldF9zcGlubG9jay5oPgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKyN1bmRlZiBhcmNoX3NwaW5f aXNfbG9ja2VkCj4gPiA+ID4gPiArI3VuZGVmIGFyY2hfc3Bpbl9pc19jb250ZW5kZWQKPiA+ID4g PiA+ICsjdW5kZWYgYXJjaF9zcGluX3ZhbHVlX3VubG9ja2VkCj4gPiA+ID4gPiArI3VuZGVmIGFy Y2hfc3Bpbl9sb2NrCj4gPiA+ID4gPiArI3VuZGVmIGFyY2hfc3Bpbl90cnlsb2NrCj4gPiA+ID4g PiArI3VuZGVmIGFyY2hfc3Bpbl91bmxvY2sKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsjaW5jbHVk ZSA8YXNtLWdlbmVyaWMvcXNwaW5sb2NrLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2p1 bXBfbGFiZWwuaD4KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsjdW5kZWYgYXJjaF9zcGluX2lzX2xv Y2tlZAo+ID4gPiA+ID4gKyN1bmRlZiBhcmNoX3NwaW5faXNfY29udGVuZGVkCj4gPiA+ID4gPiAr I3VuZGVmIGFyY2hfc3Bpbl92YWx1ZV91bmxvY2tlZAo+ID4gPiA+ID4gKyN1bmRlZiBhcmNoX3Nw aW5fbG9jawo+ID4gPiA+ID4gKyN1bmRlZiBhcmNoX3NwaW5fdHJ5bG9jawo+ID4gPiA+ID4gKyN1 bmRlZiBhcmNoX3NwaW5fdW5sb2NrCj4gPiA+ID4gU29ycnksIEkgZm9yZ290IF9fbm9fYXJjaF9z cGlubG9ja19yZWRlZmluZSBhZHZpY2UgaGVyZS4gSSB3b3VsZCBhZGQgaXQgaW4gdjEyLgo+ID4g PiA+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LXJpc2N2LzRjYzcxMTNhLTBlNGUtNzYz YS1jYmEyLTc5NjNiY2QyNmM3YUByZWRoYXQuY29tLwo+ID4gPiA+Cj4gPiA+Cj4gPiA+IFBsZWFz ZSBjaGVjayBhIHJlcGx5IHRvIGEgcHJldmlvdXMgcGF0Y2ggSSBzZW50IGVhcmxpZXI6IEkgdGhp bmsgdGhlc2UKPiA+ID4gI3VuZGVmIGNhbiBiZSBhdm9pZGVkLgo+ID4gPgo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gK0RFQ0xBUkVfU1RBVElDX0tFWV9UUlVFKGNvbWJvX3FzcGlubG9ja19rZXkpOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX3Nw aW5fbG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKyBp ZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmNvbWJvX3FzcGlubG9ja19rZXkpKQo+ID4gPiA+ID4g KyAgICAgICAgIHF1ZXVlZF9zcGluX2xvY2sobG9jayk7Cj4gPiA+ID4gPiArIGVsc2UKPiA+ID4g PiA+ICsgICAgICAgICB0aWNrZXRfc3Bpbl9sb2NrKGxvY2spOwo+ID4gPiA+ID4gK30KPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgYXJjaF9zcGluX3Ry eWxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsgaWYg KHN0YXRpY19icmFuY2hfbGlrZWx5KCZjb21ib19xc3BpbmxvY2tfa2V5KSkKPiA+ID4gPiA+ICsg ICAgICAgICByZXR1cm4gcXVldWVkX3NwaW5fdHJ5bG9jayhsb2NrKTsKPiA+ID4gPiA+ICsgZWxz ZQo+ID4gPiA+ID4gKyAgICAgICAgIHJldHVybiB0aWNrZXRfc3Bpbl90cnlsb2NrKGxvY2spOwo+ ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgX19hbHdheXNfaW5saW5l IHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCj4gPiA+ID4gPiAr ewo+ID4gPiA+ID4gKyBpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmNvbWJvX3FzcGlubG9ja19r ZXkpKQo+ID4gPiA+ID4gKyAgICAgICAgIHF1ZXVlZF9zcGluX3VubG9jayhsb2NrKTsKPiA+ID4g PiA+ICsgZWxzZQo+ID4gPiA+ID4gKyAgICAgICAgIHRpY2tldF9zcGluX3VubG9jayhsb2NrKTsK PiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIF9fYWx3YXlzX2lubGlu ZSBpbnQgYXJjaF9zcGluX3ZhbHVlX3VubG9ja2VkKGFyY2hfc3BpbmxvY2tfdCBsb2NrKQo+ID4g PiA+ID4gK3sKPiA+ID4gPiA+ICsgaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KCZjb21ib19xc3Bp bmxvY2tfa2V5KSkKPiA+ID4gPiA+ICsgICAgICAgICByZXR1cm4gcXVldWVkX3NwaW5fdmFsdWVf dW5sb2NrZWQobG9jayk7Cj4gPiA+ID4gPiArIGVsc2UKPiA+ID4gPiA+ICsgICAgICAgICByZXR1 cm4gdGlja2V0X3NwaW5fdmFsdWVfdW5sb2NrZWQobG9jayk7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfc3Bpbl9pc19s b2NrZWQoYXJjaF9zcGlubG9ja190ICpsb2NrKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsgaWYg KHN0YXRpY19icmFuY2hfbGlrZWx5KCZjb21ib19xc3BpbmxvY2tfa2V5KSkKPiA+ID4gPiA+ICsg ICAgICAgICByZXR1cm4gcXVldWVkX3NwaW5faXNfbG9ja2VkKGxvY2spOwo+ID4gPiA+ID4gKyBl bHNlCj4gPiA+ID4gPiArICAgICAgICAgcmV0dXJuIHRpY2tldF9zcGluX2lzX2xvY2tlZChsb2Nr KTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIF9fYWx3YXlzX2lu bGluZSBpbnQgYXJjaF9zcGluX2lzX2NvbnRlbmRlZChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCj4g PiA+ID4gPiArewo+ID4gPiA+ID4gKyBpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmNvbWJvX3Fz cGlubG9ja19rZXkpKQo+ID4gPiA+ID4gKyAgICAgICAgIHJldHVybiBxdWV1ZWRfc3Bpbl9pc19j b250ZW5kZWQobG9jayk7Cj4gPiA+ID4gPiArIGVsc2UKPiA+ID4gPiA+ICsgICAgICAgICByZXR1 cm4gdGlja2V0X3NwaW5faXNfY29udGVuZGVkKGxvY2spOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ ICsjZWxzZSAvKiBDT05GSUdfUklTQ1ZfQ09NQk9fU1BJTkxPQ0tTICovCj4gPiA+ID4gPiArCj4g Pgo+ID4gQWxzbywgdGhvc2UgZnVuY3Rpb25zIGFsbCByZXByb2R1Y2UgdGhlIHNhbWUgYmVoYXZp b3IsIHNvIG1heWJlIGl0IHdvdWxkIGJlCj4gPiBiZXR0ZXIgdG8ga2VlcCB0aGF0IGJlaGF2aW9y IGluIGEgbWFjcm8gc3VjaCBhczoKPiA+Cj4gPiAjZGVmaW5lIENPTUJPX1NQSU5MT0NLX0RFQ0xB UkUoZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiBzdGF0aWMg X19hbHdheXNfaW5saW5lIGludCBhcmNoX3NwaW5fICMjIGYoYXJjaF9zcGlubG9ja190ICpsb2Nr KSAgICAgICBcCj4gPiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiAgICAgICAgIGlmIChzdGF0aWNfYnJh bmNoX2xpa2VseSgmY29tYm9fcXNwaW5sb2NrX2tleSkpICAgICAgICAgICAgICAgICBcCj4gPiAg ICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlZF9zcGluXyAjIyBmKGxvY2spOyAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gPiAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiAgICAgICAgICAgICAgICAg cmV0dXJuIHRpY2tldF9zcGluXyAjIyBmKGxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gPiB9Cj4gPgo+ID4gQ09NQk9fU1BJTkxPQ0tfREVDTEFSRShsb2NrKQo+ID4gQ09NQk9fU1BJ TkxPQ0tfREVDTEFSRSh0cnlsb2NrKQo+ID4gQ09NQk9fU1BJTkxPQ0tfREVDTEFSRSh1bmxvY2sp Cj4gPiBDT01CT19TUElOTE9DS19ERUNMQVJFKHZhbHVlX3VubG9ja2VkKQo+ID4gQ09NQk9fU1BJ TkxPQ0tfREVDTEFSRShpc19sb2NrZWQpCj4gPiBDT01CT19TUElOTE9DS19ERUNMQVJFKGlzX2Nv bnRlbmRlZCkKPiA+Cj4gPiBEb2VzIHRoYXQgbWFrZSBzZW5zZT8KPiBZZWFoLCB0aGFua3MuIEkg d291bGQgdHJ5LiBZb3UgaW1wcm92ZWQgbXkgbWFjcm8gc2tpbGxzLiA6KQoKR2xhZCB0byBiZSBv ZiBhbnkgaGVscCA6KQoKPiAKPiA+Cj4gPiBUaGFua3MhCj4gPiBMZW8KPiA+Cj4gPgo+ID4gPiA+ ID4gICNpZmRlZiBDT05GSUdfUVVFVUVEX1NQSU5MT0NLUwo+ID4gPiA+ID4gICNpbmNsdWRlIDxh c20vcXNwaW5sb2NrLmg+Cj4gPiA+ID4gPiAtI2luY2x1ZGUgPGFzbS9xcndsb2NrLmg+Cj4gPiA+ ID4gPiAgI2Vsc2UKPiA+ID4gPiA+IC0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3BpbmxvY2suaD4K PiA+ID4gPiA+ICsjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGlja2V0X3NwaW5sb2NrLmg+Cj4gPiA+ ID4gPiAgI2VuZGlmCj4gPiA+ID4gPgo+ID4gPiA+ID4gKyNlbmRpZiAvKiBDT05GSUdfUklTQ1Zf Q09NQk9fU1BJTkxPQ0tTICovCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArI2luY2x1ZGUgPGFzbS9x cndsb2NrLmg+Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAgI2VuZGlmIC8qIF9fQVNNX1JJU0NWX1NQ SU5MT0NLX0ggKi8KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1 cC5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYwo+ID4gPiA+ID4gaW5kZXggMzJjMmUxZWI3 MWJkLi5hNDQ3Y2YzNjBhMTggMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9hcmNoL3Jpc2N2L2tlcm5l bC9zZXR1cC5jCj4gPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jCj4gPiA+ ID4gPiBAQCAtMjY5LDYgKzI2OSwxOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfZHRiKHZv aWQpCj4gPiA+ID4gPiAgI2VuZGlmCj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4KPiA+ID4gPiA+ICsj aWZkZWYgQ09ORklHX1JJU0NWX0NPTUJPX1NQSU5MT0NLUwo+ID4gPiA+ID4gK0RFRklORV9TVEFU SUNfS0VZX1RSVUUoY29tYm9fcXNwaW5sb2NrX2tleSk7Cj4gPiA+ID4gPiArRVhQT1JUX1NZTUJP TChjb21ib19xc3BpbmxvY2tfa2V5KTsKPiA+ID4gPiA+ICsjZW5kaWYKPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICtzdGF0aWMgdm9pZCBfX2luaXQgcmlzY3Zfc3BpbmxvY2tfaW5pdCh2b2lkKQo+ID4g PiA+ID4gK3sKPiA+ID4gPiA+ICsjaWZkZWYgQ09ORklHX1JJU0NWX0NPTUJPX1NQSU5MT0NLUwo+ ID4gPiA+ID4gKyBzdGF0aWNfYnJhbmNoX2Rpc2FibGUoJmNvbWJvX3FzcGlubG9ja19rZXkpOwo+ ID4gPiA+ID4gKyNlbmRpZgo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICBleHRl cm4gdm9pZCBfX2luaXQgaW5pdF9ydF9zaWduYWxfZW52KHZvaWQpOwo+ID4gPiA+ID4KPiA+ID4g PiA+ICB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCj4gPiA+ID4gPiBA QCAtMzE3LDYgKzMyOSw4IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVf cCkKPiA+ID4gPiA+ICAgICAgIHJpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFpJ Q0JPTSkpCj4gPiA+ID4gPiAgICAgICAgICAgcmlzY3Zfbm9uY29oZXJlbnRfc3VwcG9ydGVkKCk7 Cj4gPiA+ID4gPiAgIHJpc2N2X3NldF9kbWFfY2FjaGVfYWxpZ25tZW50KCk7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArIHJpc2N2X3NwaW5sb2NrX2luaXQoKTsKPiA+ID4gPiA+ICB9Cj4gPiA+ID4g Pgo+ID4gPiA+ID4gIHN0YXRpYyBpbnQgX19pbml0IHRvcG9sb2d5X2luaXQodm9pZCkKPiA+ID4g PiA+IC0tCj4gPiA+ID4gPiAyLjM2LjEKPiA+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+ID4gPiA+IGxp bnV4LXJpc2N2IG1haWxpbmcgbGlzdAo+ID4gPiA+ID4gbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFk ZWFkLm9yZwo+ID4gPiA+ID4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1yaXNjdgo+ID4gPiA+ID4KPiA+ID4gPgo+ID4KPiAKPiAKPiAtLSAKPiBCZXN0 IFJlZ2FyZHMKPiAgR3VvIFJlbgo+IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtcmlzY3YK