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 EB38ACA5503 for ; Wed, 13 Sep 2023 08:00:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238725AbjIMIAv (ORCPT ); Wed, 13 Sep 2023 04:00:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42516 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238728AbjIMIAp (ORCPT ); Wed, 13 Sep 2023 04:00:45 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 191A1173E for ; Wed, 13 Sep 2023 00:59:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1694591996; 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=qn+Rvi3KEsNuqH89FqpaJB3chCAou0VjBLqNOIj1NKA=; b=FFkytSNhn2JsBdJAv1MJzYIIKBcMKXFilXgzR2ZKELcXbDdmNu0qhmimt3WMLryOHFidn+ Gl0CpkRnDL1zSZKKrUY4z9p2zF7NdYCeuAEXMTuFB3zRusDVgy27VfjtVOO/f2B15hC3X2 v9h77P5kRX1rHmElz97d/o7+wvwV1/E= Received: from mail-oo1-f69.google.com (mail-oo1-f69.google.com [209.85.161.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-183-AeBjluf5NymmvMdy7dVryQ-1; Wed, 13 Sep 2023 03:59:54 -0400 X-MC-Unique: AeBjluf5NymmvMdy7dVryQ-1 Received: by mail-oo1-f69.google.com with SMTP id 006d021491bc7-573a7a3c405so6776066eaf.1 for ; Wed, 13 Sep 2023 00:59:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694591994; x=1695196794; 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=qn+Rvi3KEsNuqH89FqpaJB3chCAou0VjBLqNOIj1NKA=; b=VJ/nIc9pMZqJf87YkFobCvQi6+IT/zy7/9myOg4dWUQ93aDW1EWZ3jS/ARDK4D0Ky6 jolqwk4/U7Ihw11t/3bLJUPgc7KviPh0tGacpBievr9Jf9Sfo8F6tbZ1Yt6XsOBHs2XX 8CoCuAOur1owSMzR7aNQCgrVGbwq6sYCchMmSVgBMKn85D7zloAU4gg4RMmhnogZcyeb NvOyVnY7EZwc6sW3Bx36fHK1G9pD1PdSphtqlMh4eCjUpb/jrhAUPZEMAShvcVbzv6Pl XT8e4A1lsSVeSyJtINx8BfmlOhhC4FCTiqlXhH57sT5vEah1vDTwx90rJqNuzU0dQsfg 4fJQ== X-Gm-Message-State: AOJu0YwgBGuNSMri0aRZx+HOIdIQizsOMkKk289jo6q8EPRtB4LULg65 I7fsTHVm5AHyA5FZLGdA/Vd713QhTpWnef4MKRD6ftO0LZ/6PM3uaPjEGS1Bjq1xwoaBAFKrGaS LNJOMUq3eKBTYqUvmwYsDNw== X-Received: by 2002:a4a:9002:0:b0:571:28a7:bcca with SMTP id i2-20020a4a9002000000b0057128a7bccamr1816203oog.1.1694591994235; Wed, 13 Sep 2023 00:59:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGLkEjNahfHYX7tZYhXT/ZX+4kZcuTHvxRjPc0v0vlixFaqqxwikb4fwJBCpdjiUauIx9LpUg== X-Received: by 2002:a4a:9002:0:b0:571:28a7:bcca with SMTP id i2-20020a4a9002000000b0057128a7bccamr1816184oog.1.1694591993958; Wed, 13 Sep 2023 00:59:53 -0700 (PDT) Received: from redhat.com ([2804:1b3:a803:4ff9:7c29:fe41:6aa7:43df]) by smtp.gmail.com with ESMTPSA id s4-20020a4a5104000000b005658aed310bsm5159994ooa.15.2023.09.13.00.59.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Sep 2023 00:59:53 -0700 (PDT) Date: Wed, 13 Sep 2023 04:59:44 -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 01/17] asm-generic: ticket-lock: Reuse arch_spinlock_t of qspinlock Message-ID: References: <20230910082911.3378782-1-guoren@kernel.org> <20230910082911.3378782-2-guoren@kernel.org> <5c082cb1fd306cb75abbcaa80229d791260f8756.camel@redhat.com> 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 Wed, Sep 13, 2023 at 09:55:31AM +0800, Guo Ren wrote: > On Tue, Sep 12, 2023 at 3:05 AM Leonardo Brás wrote: > > > > On Sun, 2023-09-10 at 04:28 -0400, guoren@kernel.org wrote: > > > From: Guo Ren > > > > > > The arch_spinlock_t of qspinlock has contained the atomic_t val, which > > > satisfies the ticket-lock requirement. Thus, unify the arch_spinlock_t > > > into qspinlock_types.h. This is the preparation for the next combo > > > spinlock. > > > > > > Signed-off-by: Guo Ren > > > Signed-off-by: Guo Ren > > > --- > > > include/asm-generic/spinlock.h | 14 +++++++------- > > > include/asm-generic/spinlock_types.h | 12 ++---------- > > > 2 files changed, 9 insertions(+), 17 deletions(-) > > > > > > diff --git a/include/asm-generic/spinlock.h b/include/asm-generic/spinlock.h > > > index 90803a826ba0..4773334ee638 100644 > > > --- a/include/asm-generic/spinlock.h > > > +++ b/include/asm-generic/spinlock.h > > > @@ -32,7 +32,7 @@ > > > > > > static __always_inline void arch_spin_lock(arch_spinlock_t *lock) > > > { > > > - u32 val = atomic_fetch_add(1<<16, lock); > > > + u32 val = atomic_fetch_add(1<<16, &lock->val); > > > u16 ticket = val >> 16; > > > > > > if (ticket == (u16)val) > > > @@ -46,31 +46,31 @@ static __always_inline void arch_spin_lock(arch_spinlock_t *lock) > > > * have no outstanding writes due to the atomic_fetch_add() the extra > > > * orderings are free. > > > */ > > > - atomic_cond_read_acquire(lock, ticket == (u16)VAL); > > > + atomic_cond_read_acquire(&lock->val, ticket == (u16)VAL); > > > smp_mb(); > > > } > > > > > > static __always_inline bool arch_spin_trylock(arch_spinlock_t *lock) > > > { > > > - u32 old = atomic_read(lock); > > > + u32 old = atomic_read(&lock->val); > > > > > > if ((old >> 16) != (old & 0xffff)) > > > return false; > > > > > > - return atomic_try_cmpxchg(lock, &old, old + (1<<16)); /* SC, for RCsc */ > > > + return atomic_try_cmpxchg(&lock->val, &old, old + (1<<16)); /* SC, for RCsc */ > > > } > > > > > > static __always_inline void arch_spin_unlock(arch_spinlock_t *lock) > > > { > > > u16 *ptr = (u16 *)lock + IS_ENABLED(CONFIG_CPU_BIG_ENDIAN); > > > - u32 val = atomic_read(lock); > > > + u32 val = atomic_read(&lock->val); > > > > > > smp_store_release(ptr, (u16)val + 1); > > > } > > > > > > static __always_inline int arch_spin_value_unlocked(arch_spinlock_t lock) > > > { > > > - u32 val = lock.counter; > > > + u32 val = lock.val.counter; > > > > > > return ((val >> 16) == (val & 0xffff)); > > > } > > > > This one seems to be different in torvalds/master, but I suppose it's because of > > the requirement patches I have not merged. > > > > > @@ -84,7 +84,7 @@ static __always_inline int arch_spin_is_locked(arch_spinlock_t *lock) > > > > > > static __always_inline int arch_spin_is_contended(arch_spinlock_t *lock) > > > { > > > - u32 val = atomic_read(lock); > > > + u32 val = atomic_read(&lock->val); > > > > > > return (s16)((val >> 16) - (val & 0xffff)) > 1; > > > } > > > diff --git a/include/asm-generic/spinlock_types.h b/include/asm-generic/spinlock_types.h > > > index 8962bb730945..f534aa5de394 100644 > > > --- a/include/asm-generic/spinlock_types.h > > > +++ b/include/asm-generic/spinlock_types.h > > > @@ -3,15 +3,7 @@ > > > #ifndef __ASM_GENERIC_SPINLOCK_TYPES_H > > > #define __ASM_GENERIC_SPINLOCK_TYPES_H > > > > > > -#include > > > -typedef atomic_t arch_spinlock_t; > > > - > > > -/* > > > - * qrwlock_types depends on arch_spinlock_t, so we must typedef that before the > > > - * include. > > > - */ > > > -#include > > > - > > > -#define __ARCH_SPIN_LOCK_UNLOCKED ATOMIC_INIT(0) > > > +#include > > > +#include > > > > > > #endif /* __ASM_GENERIC_SPINLOCK_TYPES_H */ > > > > FWIW, LGTM: > > > > Reviewed-by: Leonardo Bras > > > > > > Just a suggestion: In this patch I could see a lot of usage changes to > > arch_spinlock_t, and only at the end I could see the actual change in the .h > > file. > include/asm-generic/spinlock.h | 14 +++++++------- > include/asm-generic/spinlock_types.h | 12 ++---------- > > All are .h files. So, how to use git.orderfile? Yeap, you are right. For some reason I got confused about seeing functions before type definition. But in any way, we can get the same result with: *types.h *.h *.c Meaning 'spinlock_types.h' will appear before 'spinlock.h'. After first suggesting this, I also sent a patch providing a default orderFile for the kernel, and I also added this to the latest version: https://lore.kernel.org/all/20230913075550.90934-2-leobras@redhat.com/ > > > > > In cases like this, it looks nicer to see the .h file first. > > > > I recently found out about this git diff.orderFile option, which helps to > > achieve exactly this. > > > > I use the following git.orderfile, adapted from qemu: > > > > ############################################################################ > > # > > # order file for git, to produce patches which are easier to review > > # by diffing the important stuff like interface changes first. > > # > > # one-off usage: > > # git diff -O scripts/git.orderfile ... > > # > > # add to git config: > > # git config diff.orderFile scripts/git.orderfile > > # > > > > MAINTAINERS > > > > # Documentation > > Documentation/* > > *.rst > > *.rst.inc > > > > # build system > > Kbuild > > Makefile* > > *.mak > > > > # semantic patches > > *.cocci > > > > # headers > > *.h > > *.h.inc > > > > # code > > *.c > > *.c.inc > > > > > > > -- > 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 11284CA5502 for ; Wed, 13 Sep 2023 08:00:14 +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=kApI1IklLoyGDEgOTvpOwrhEbmqpETlCgCSdbBNCHlo=; b=XQSaW2SGtTADwq 25EpesZ1oKgEdVAAoQghWuxP6yekxUs7cuDLwKQCgLb6pIFR9lq28TOrvrTD+vtCeo5q6Ax/srXSd 5WJ9BT8A4P5BnC1TVk2fts0vfIGC94yKPi9HnJHyvilqQPysrTEOnKrKvUBsj1R50OCAGROnUpVwj tk0jwXLWnpVP2T+xZU7oj75/wzMh7KXiwMGS7QI6cPO9hqL1KoNdITKC/uGb59h7SGa2YyHiw7+Bz PM2e8suD7dQ2rVnyQkvmuZZHzu0+3hKMqNzQni6KybQj8NgoyGudMD9gOuJdtkbksMBptL7BtI+PA mfsMuDAIaS2L3lJvfLNA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qgKn3-0050bW-29; Wed, 13 Sep 2023 08:00:01 +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 1qgKn0-0050aU-2I for linux-riscv@lists.infradead.org; Wed, 13 Sep 2023 08:00:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1694591997; 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=qn+Rvi3KEsNuqH89FqpaJB3chCAou0VjBLqNOIj1NKA=; b=MgmmmOP3KtSOtw1A9zdE6L+/km+TIXWUGEYn+lljcL2XeLe7QPAAuRCaQup+JA3bTt1uTh yRH/7b8MtpVp0Tu/qAkyFjfwH/+Myagdo3LlrDUcPLpc4Ie1ZfHMY1fOEjjlVBEs4gZwfi BLXDntqRIqicFH0MCd7q8zCGz3JjZ+o= Received: from mail-oo1-f72.google.com (mail-oo1-f72.google.com [209.85.161.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-77-NfxIhld7MK-GJgj7nbcDXg-1; Wed, 13 Sep 2023 03:59:54 -0400 X-MC-Unique: NfxIhld7MK-GJgj7nbcDXg-1 Received: by mail-oo1-f72.google.com with SMTP id 006d021491bc7-576925c8921so3723003eaf.0 for ; Wed, 13 Sep 2023 00:59:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694591994; x=1695196794; 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=qn+Rvi3KEsNuqH89FqpaJB3chCAou0VjBLqNOIj1NKA=; b=ny6vxXhXXduL/nfsUjPaX0w3n2PozownaZxcJj9rhzH65nNa+Ay5s/bjdzu+HVYjuv cCDxmunAqluoZo67cREA0DtJMWlwCRJu4nA0m4Tz5Deo6ybYN1mxMtiUGbboLk3bLsCN q46YKm9i1CFD7RGnHigpXwf/M1Hpyq6Pz76gFDLXnfE7nPfyhd4JfjZ89/Hj2pZSI8Pn jbe/VKn3YGFRzyFolQ6Z+VHN2aYrnGIM4z42y4GVeHSopJatpfAhPBIUxDFVy9TEMJI2 NMvj5P3o0RdHmsReZd+VsT3dsA3wg313YsO9OTnTZiwrE4JHW7kaNdYFzK1AYw47VDGf XFDQ== X-Gm-Message-State: AOJu0YwZaMDVQO19Im6ynysiwEdYVb9/uPvBxZxTUsfKEG8g2Ppbh8hh a6tL+RUFsL9xt9S4CWh+GlUDsZop2G2+bcMzUlsx9Sf6nSdiMcUQkCq5rwpCMi+oWgvANc6A9ik uh9MaFwaSyOmRidee++dXW4LWZtG/ X-Received: by 2002:a4a:9002:0:b0:571:28a7:bcca with SMTP id i2-20020a4a9002000000b0057128a7bccamr1816195oog.1.1694591994234; Wed, 13 Sep 2023 00:59:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGLkEjNahfHYX7tZYhXT/ZX+4kZcuTHvxRjPc0v0vlixFaqqxwikb4fwJBCpdjiUauIx9LpUg== X-Received: by 2002:a4a:9002:0:b0:571:28a7:bcca with SMTP id i2-20020a4a9002000000b0057128a7bccamr1816184oog.1.1694591993958; Wed, 13 Sep 2023 00:59:53 -0700 (PDT) Received: from redhat.com ([2804:1b3:a803:4ff9:7c29:fe41:6aa7:43df]) by smtp.gmail.com with ESMTPSA id s4-20020a4a5104000000b005658aed310bsm5159994ooa.15.2023.09.13.00.59.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Sep 2023 00:59:53 -0700 (PDT) Date: Wed, 13 Sep 2023 04:59:44 -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 01/17] asm-generic: ticket-lock: Reuse arch_spinlock_t of qspinlock Message-ID: References: <20230910082911.3378782-1-guoren@kernel.org> <20230910082911.3378782-2-guoren@kernel.org> <5c082cb1fd306cb75abbcaa80229d791260f8756.camel@redhat.com> 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-20230913_005958_825663_148CD300 X-CRM114-Status: GOOD ( 37.65 ) 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 T24gV2VkLCBTZXAgMTMsIDIwMjMgYXQgMDk6NTU6MzFBTSArMDgwMCwgR3VvIFJlbiB3cm90ZToK PiBPbiBUdWUsIFNlcCAxMiwgMjAyMyBhdCAzOjA14oCvQU0gTGVvbmFyZG8gQnLDoXMgPGxlb2Jy YXNAcmVkaGF0LmNvbT4gd3JvdGU6Cj4gPgo+ID4gT24gU3VuLCAyMDIzLTA5LTEwIGF0IDA0OjI4 IC0wNDAwLCBndW9yZW5Aa2VybmVsLm9yZyB3cm90ZToKPiA+ID4gRnJvbTogR3VvIFJlbiA8Z3Vv cmVuQGxpbnV4LmFsaWJhYmEuY29tPgo+ID4gPgo+ID4gPiBUaGUgYXJjaF9zcGlubG9ja190IG9m IHFzcGlubG9jayBoYXMgY29udGFpbmVkIHRoZSBhdG9taWNfdCB2YWwsIHdoaWNoCj4gPiA+IHNh dGlzZmllcyB0aGUgdGlja2V0LWxvY2sgcmVxdWlyZW1lbnQuIFRodXMsIHVuaWZ5IHRoZSBhcmNo X3NwaW5sb2NrX3QKPiA+ID4gaW50byBxc3BpbmxvY2tfdHlwZXMuaC4gVGhpcyBpcyB0aGUgcHJl cGFyYXRpb24gZm9yIHRoZSBuZXh0IGNvbWJvCj4gPiA+IHNwaW5sb2NrLgo+ID4gPgo+ID4gPiBT aWduZWQtb2ZmLWJ5OiBHdW8gUmVuIDxndW9yZW5Aa2VybmVsLm9yZz4KPiA+ID4gU2lnbmVkLW9m Zi1ieTogR3VvIFJlbiA8Z3VvcmVuQGxpbnV4LmFsaWJhYmEuY29tPgo+ID4gPiAtLS0KPiA+ID4g IGluY2x1ZGUvYXNtLWdlbmVyaWMvc3BpbmxvY2suaCAgICAgICB8IDE0ICsrKysrKystLS0tLS0t Cj4gPiA+ICBpbmNsdWRlL2FzbS1nZW5lcmljL3NwaW5sb2NrX3R5cGVzLmggfCAxMiArKy0tLS0t LS0tLS0KPiA+ID4gIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlv bnMoLSkKPiA+ID4KPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3Bpbmxv Y2suaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3BpbmxvY2suaAo+ID4gPiBpbmRleCA5MDgwM2E4 MjZiYTAuLjQ3NzMzMzRlZTYzOCAxMDA2NDQKPiA+ID4gLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJp Yy9zcGlubG9jay5oCj4gPiA+ICsrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3BpbmxvY2suaAo+ ID4gPiBAQCAtMzIsNyArMzIsNyBAQAo+ID4gPgo+ID4gPiAgc3RhdGljIF9fYWx3YXlzX2lubGlu ZSB2b2lkIGFyY2hfc3Bpbl9sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKPiA+ID4gIHsKPiA+ ID4gLSAgICAgdTMyIHZhbCA9IGF0b21pY19mZXRjaF9hZGQoMTw8MTYsIGxvY2spOwo+ID4gPiAr ICAgICB1MzIgdmFsID0gYXRvbWljX2ZldGNoX2FkZCgxPDwxNiwgJmxvY2stPnZhbCk7Cj4gPiA+ ICAgICAgIHUxNiB0aWNrZXQgPSB2YWwgPj4gMTY7Cj4gPiA+Cj4gPiA+ICAgICAgIGlmICh0aWNr ZXQgPT0gKHUxNil2YWwpCj4gPiA+IEBAIC00NiwzMSArNDYsMzEgQEAgc3RhdGljIF9fYWx3YXlz X2lubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKPiA+ID4g ICAgICAgICogaGF2ZSBubyBvdXRzdGFuZGluZyB3cml0ZXMgZHVlIHRvIHRoZSBhdG9taWNfZmV0 Y2hfYWRkKCkgdGhlIGV4dHJhCj4gPiA+ICAgICAgICAqIG9yZGVyaW5ncyBhcmUgZnJlZS4KPiA+ ID4gICAgICAgICovCj4gPiA+IC0gICAgIGF0b21pY19jb25kX3JlYWRfYWNxdWlyZShsb2NrLCB0 aWNrZXQgPT0gKHUxNilWQUwpOwo+ID4gPiArICAgICBhdG9taWNfY29uZF9yZWFkX2FjcXVpcmUo JmxvY2stPnZhbCwgdGlja2V0ID09ICh1MTYpVkFMKTsKPiA+ID4gICAgICAgc21wX21iKCk7Cj4g PiA+ICB9Cj4gPiA+Cj4gPiA+ICBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgYXJjaF9zcGlu X3RyeWxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQo+ID4gPiAgewo+ID4gPiAtICAgICB1MzIg b2xkID0gYXRvbWljX3JlYWQobG9jayk7Cj4gPiA+ICsgICAgIHUzMiBvbGQgPSBhdG9taWNfcmVh ZCgmbG9jay0+dmFsKTsKPiA+ID4KPiA+ID4gICAgICAgaWYgKChvbGQgPj4gMTYpICE9IChvbGQg JiAweGZmZmYpKQo+ID4gPiAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiA+ID4KPiA+ID4g LSAgICAgcmV0dXJuIGF0b21pY190cnlfY21weGNoZyhsb2NrLCAmb2xkLCBvbGQgKyAoMTw8MTYp KTsgLyogU0MsIGZvciBSQ3NjICovCj4gPiA+ICsgICAgIHJldHVybiBhdG9taWNfdHJ5X2NtcHhj aGcoJmxvY2stPnZhbCwgJm9sZCwgb2xkICsgKDE8PDE2KSk7IC8qIFNDLCBmb3IgUkNzYyAqLwo+ ID4gPiAgfQo+ID4gPgo+ID4gPiAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFyY2hfc3Bp bl91bmxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQo+ID4gPiAgewo+ID4gPiAgICAgICB1MTYg KnB0ciA9ICh1MTYgKilsb2NrICsgSVNfRU5BQkxFRChDT05GSUdfQ1BVX0JJR19FTkRJQU4pOwo+ ID4gPiAtICAgICB1MzIgdmFsID0gYXRvbWljX3JlYWQobG9jayk7Cj4gPiA+ICsgICAgIHUzMiB2 YWwgPSBhdG9taWNfcmVhZCgmbG9jay0+dmFsKTsKPiA+ID4KPiA+ID4gICAgICAgc21wX3N0b3Jl X3JlbGVhc2UocHRyLCAodTE2KXZhbCArIDEpOwo+ID4gPiAgfQo+ID4gPgo+ID4gPiAgc3RhdGlj IF9fYWx3YXlzX2lubGluZSBpbnQgYXJjaF9zcGluX3ZhbHVlX3VubG9ja2VkKGFyY2hfc3Bpbmxv Y2tfdCBsb2NrKQo+ID4gPiAgewo+ID4gPiAtICAgICB1MzIgdmFsID0gbG9jay5jb3VudGVyOwo+ ID4gPiArICAgICB1MzIgdmFsID0gbG9jay52YWwuY291bnRlcjsKPiA+ID4KPiA+ID4gICAgICAg cmV0dXJuICgodmFsID4+IDE2KSA9PSAodmFsICYgMHhmZmZmKSk7Cj4gPiA+ICB9Cj4gPgo+ID4g VGhpcyBvbmUgc2VlbXMgdG8gYmUgZGlmZmVyZW50IGluIHRvcnZhbGRzL21hc3RlciwgYnV0IEkg c3VwcG9zZSBpdCdzIGJlY2F1c2Ugb2YKPiA+IHRoZSByZXF1aXJlbWVudCBwYXRjaGVzIEkgaGF2 ZSBub3QgbWVyZ2VkLgo+ID4KPiA+ID4gQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIF9fYWx3YXlz X2lubGluZSBpbnQgYXJjaF9zcGluX2lzX2xvY2tlZChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCj4g PiA+Cj4gPiA+ICBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBhcmNoX3NwaW5faXNfY29udGVu ZGVkKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKPiA+ID4gIHsKPiA+ID4gLSAgICAgdTMyIHZhbCA9 IGF0b21pY19yZWFkKGxvY2spOwo+ID4gPiArICAgICB1MzIgdmFsID0gYXRvbWljX3JlYWQoJmxv Y2stPnZhbCk7Cj4gPiA+Cj4gPiA+ICAgICAgIHJldHVybiAoczE2KSgodmFsID4+IDE2KSAtICh2 YWwgJiAweGZmZmYpKSA+IDE7Cj4gPiA+ICB9Cj4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2Fz bS1nZW5lcmljL3NwaW5sb2NrX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NwaW5sb2Nr X3R5cGVzLmgKPiA+ID4gaW5kZXggODk2MmJiNzMwOTQ1Li5mNTM0YWE1ZGUzOTQgMTAwNjQ0Cj4g PiA+IC0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3BpbmxvY2tfdHlwZXMuaAo+ID4gPiArKysg Yi9pbmNsdWRlL2FzbS1nZW5lcmljL3NwaW5sb2NrX3R5cGVzLmgKPiA+ID4gQEAgLTMsMTUgKzMs NyBAQAo+ID4gPiAgI2lmbmRlZiBfX0FTTV9HRU5FUklDX1NQSU5MT0NLX1RZUEVTX0gKPiA+ID4g ICNkZWZpbmUgX19BU01fR0VORVJJQ19TUElOTE9DS19UWVBFU19ICj4gPiA+Cj4gPiA+IC0jaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KPiA+ID4gLXR5cGVkZWYgYXRvbWljX3QgYXJjaF9zcGlubG9j a190Owo+ID4gPiAtCj4gPiA+IC0vKgo+ID4gPiAtICogcXJ3bG9ja190eXBlcyBkZXBlbmRzIG9u IGFyY2hfc3BpbmxvY2tfdCwgc28gd2UgbXVzdCB0eXBlZGVmIHRoYXQgYmVmb3JlIHRoZQo+ID4g PiAtICogaW5jbHVkZS4KPiA+ID4gLSAqLwo+ID4gPiAtI2luY2x1ZGUgPGFzbS9xcndsb2NrX3R5 cGVzLmg+Cj4gPiA+IC0KPiA+ID4gLSNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRCAg ICBBVE9NSUNfSU5JVCgwKQo+ID4gPiArI2luY2x1ZGUgPGFzbS1nZW5lcmljL3FzcGlubG9ja190 eXBlcy5oPgo+ID4gPiArI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Fyd2xvY2tfdHlwZXMuaD4KPiA+ ID4KPiA+ID4gICNlbmRpZiAvKiBfX0FTTV9HRU5FUklDX1NQSU5MT0NLX1RZUEVTX0ggKi8KPiA+ Cj4gPiBGV0lXLCBMR1RNOgo+ID4KPiA+IFJldmlld2VkLWJ5OiBMZW9uYXJkbyBCcmFzIDxsZW9i cmFzQHJlZGhhdC5jb20+Cj4gPgo+ID4KPiA+IEp1c3QgYSBzdWdnZXN0aW9uOiBJbiB0aGlzIHBh dGNoIEkgY291bGQgc2VlIGEgbG90IG9mIHVzYWdlIGNoYW5nZXMgdG8KPiA+IGFyY2hfc3Bpbmxv Y2tfdCwgYW5kIG9ubHkgYXQgdGhlIGVuZCBJIGNvdWxkIHNlZSB0aGUgYWN0dWFsIGNoYW5nZSBp biB0aGUgLmgKPiA+IGZpbGUuCj4gIGluY2x1ZGUvYXNtLWdlbmVyaWMvc3BpbmxvY2suaCAgICAg ICB8IDE0ICsrKysrKystLS0tLS0tCj4gIGluY2x1ZGUvYXNtLWdlbmVyaWMvc3BpbmxvY2tfdHlw ZXMuaCB8IDEyICsrLS0tLS0tLS0tLQo+IAo+IEFsbCBhcmUgLmggZmlsZXMuIFNvLCBob3cgdG8g dXNlIGdpdC5vcmRlcmZpbGU/CgpZZWFwLCB5b3UgYXJlIHJpZ2h0LgoKRm9yIHNvbWUgcmVhc29u IEkgZ290IGNvbmZ1c2VkIGFib3V0IHNlZWluZyBmdW5jdGlvbnMgYmVmb3JlIHR5cGUgZGVmaW5p dGlvbi4KCkJ1dCBpbiBhbnkgd2F5LCB3ZSBjYW4gZ2V0IHRoZSBzYW1lIHJlc3VsdCB3aXRoOgoK KnR5cGVzLmgKKi5oCiouYwoKTWVhbmluZyAnc3BpbmxvY2tfdHlwZXMuaCcgd2lsbCBhcHBlYXIg YmVmb3JlICdzcGlubG9jay5oJy4KCkFmdGVyIGZpcnN0IHN1Z2dlc3RpbmcgdGhpcywgSSBhbHNv IHNlbnQgYSBwYXRjaCBwcm92aWRpbmcgYSBkZWZhdWx0Cm9yZGVyRmlsZSBmb3IgdGhlIGtlcm5l bCwgYW5kIEkgYWxzbyBhZGRlZCB0aGlzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbjoKCmh0dHBzOi8v bG9yZS5rZXJuZWwub3JnL2FsbC8yMDIzMDkxMzA3NTU1MC45MDkzNC0yLWxlb2JyYXNAcmVkaGF0 LmNvbS8KCj4gCj4gPgo+ID4gSW4gY2FzZXMgbGlrZSB0aGlzLCBpdCBsb29rcyBuaWNlciB0byBz ZWUgdGhlIC5oIGZpbGUgZmlyc3QuCj4gPgo+ID4gSSByZWNlbnRseSBmb3VuZCBvdXQgYWJvdXQg dGhpcyBnaXQgZGlmZi5vcmRlckZpbGUgb3B0aW9uLCB3aGljaCBoZWxwcyB0bwo+ID4gYWNoaWV2 ZSBleGFjdGx5IHRoaXMuCj4gPgo+ID4gSSB1c2UgdGhlIGZvbGxvd2luZyBnaXQub3JkZXJmaWxl LCBhZGFwdGVkIGZyb20gcWVtdToKPiA+Cj4gPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gPiAjCj4g PiAjIG9yZGVyIGZpbGUgZm9yIGdpdCwgdG8gcHJvZHVjZSBwYXRjaGVzIHdoaWNoIGFyZSBlYXNp ZXIgdG8gcmV2aWV3Cj4gPiAjIGJ5IGRpZmZpbmcgdGhlIGltcG9ydGFudCBzdHVmZiBsaWtlIGlu dGVyZmFjZSBjaGFuZ2VzIGZpcnN0Lgo+ID4gIwo+ID4gIyBvbmUtb2ZmIHVzYWdlOgo+ID4gIyAg IGdpdCBkaWZmIC1PIHNjcmlwdHMvZ2l0Lm9yZGVyZmlsZSAuLi4KPiA+ICMKPiA+ICMgYWRkIHRv IGdpdCBjb25maWc6Cj4gPiAjICAgZ2l0IGNvbmZpZyBkaWZmLm9yZGVyRmlsZSBzY3JpcHRzL2dp dC5vcmRlcmZpbGUKPiA+ICMKPiA+Cj4gPiBNQUlOVEFJTkVSUwo+ID4KPiA+ICMgRG9jdW1lbnRh dGlvbgo+ID4gRG9jdW1lbnRhdGlvbi8qCj4gPiAqLnJzdAo+ID4gKi5yc3QuaW5jCj4gPgo+ID4g IyBidWlsZCBzeXN0ZW0KPiA+IEtidWlsZAo+ID4gTWFrZWZpbGUqCj4gPiAqLm1hawo+ID4KPiA+ ICMgc2VtYW50aWMgcGF0Y2hlcwo+ID4gKi5jb2NjaQo+ID4KPiA+ICMgaGVhZGVycwo+ID4gKi5o Cj4gPiAqLmguaW5jCj4gPgo+ID4gIyBjb2RlCj4gPiAqLmMKPiA+ICouYy5pbmMKPiA+Cj4gPgo+ IAo+IAo+IC0tIAo+IEJlc3QgUmVnYXJkcwo+ICBHdW8gUmVuCj4gCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0 CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo=