linux-csky.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Leonardo Bras <leobras@redhat.com>
To: Guo Ren <guoren@kernel.org>
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 <guoren@linux.alibaba.com>
Subject: Re: [PATCH V11 01/17] asm-generic: ticket-lock: Reuse arch_spinlock_t of qspinlock
Date: Wed, 13 Sep 2023 04:59:44 -0300	[thread overview]
Message-ID: <ZQFr8E-i8dB5Ofwm@redhat.com> (raw)
In-Reply-To: <CAJF2gTSynMnYy+ARhFb0JjbAGjEYrfgsiGa2ZWv4wB3HdheU2A@mail.gmail.com>

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 <leobras@redhat.com> wrote:
> >
> > On Sun, 2023-09-10 at 04:28 -0400, guoren@kernel.org wrote:
> > > From: Guo Ren <guoren@linux.alibaba.com>
> > >
> > > 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 <guoren@kernel.org>
> > > Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
> > > ---
> > >  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 <linux/types.h>
> > > -typedef atomic_t arch_spinlock_t;
> > > -
> > > -/*
> > > - * qrwlock_types depends on arch_spinlock_t, so we must typedef that before the
> > > - * include.
> > > - */
> > > -#include <asm/qrwlock_types.h>
> > > -
> > > -#define __ARCH_SPIN_LOCK_UNLOCKED    ATOMIC_INIT(0)
> > > +#include <asm-generic/qspinlock_types.h>
> > > +#include <asm-generic/qrwlock_types.h>
> > >
> > >  #endif /* __ASM_GENERIC_SPINLOCK_TYPES_H */
> >
> > FWIW, LGTM:
> >
> > Reviewed-by: Leonardo Bras <leobras@redhat.com>
> >
> >
> > 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
> 


  reply	other threads:[~2023-09-13  8:00 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-10  8:28 [PATCH V11 00/17] riscv: Add Native/Paravirt qspinlock support guoren
2023-09-10  8:28 ` [PATCH V11 01/17] asm-generic: ticket-lock: Reuse arch_spinlock_t of qspinlock guoren
2023-09-11 19:05   ` Leonardo Brás
2023-09-13  1:55     ` Guo Ren
2023-09-13  7:59       ` Leonardo Bras [this message]
2023-09-10  8:28 ` [PATCH V11 02/17] asm-generic: ticket-lock: Move into ticket_spinlock.h guoren
2023-09-13  8:15   ` Leonardo Bras
2023-09-10  8:28 ` [PATCH V11 03/17] riscv: Use Zicbop in arch_xchg when available guoren
2023-09-13  8:49   ` Leonardo Bras
2023-09-15 12:36     ` Guo Ren
2023-09-16  1:25       ` Leonardo Bras
2023-09-17 14:34         ` Guo Ren
2023-09-19  5:13           ` Leonardo Bras
2023-09-19  7:53             ` Guo Ren
2023-09-19 14:38               ` Leonardo Bras
2023-09-14 13:47   ` Andrew Jones
2023-09-15  8:22     ` Leonardo Bras
2023-09-15 11:07       ` Andrew Jones
2023-09-15 11:26         ` Conor Dooley
2023-09-15 12:22           ` Andrew Jones
2023-09-15 12:42             ` Conor Dooley
2023-09-16  0:05               ` Conor Dooley
2023-09-15 20:32         ` Leonardo Bras
2023-09-14 14:25   ` Andrew Jones
2023-09-14 14:47     ` Andrew Jones
2023-09-15 11:37       ` Conor Dooley
2023-09-15 12:14         ` Andrew Jones
2023-09-15 12:53           ` Conor Dooley
2023-12-31  8:29   ` guoren
2023-09-10  8:28 ` [PATCH V11 04/17] locking/qspinlock: Improve xchg_tail for number of cpus >= 16k guoren
2023-09-11  2:35   ` Waiman Long
2023-09-11  3:09     ` Guo Ren
2023-09-11 13:03       ` Waiman Long
2023-09-12  1:10         ` Guo Ren
2023-09-13  8:55           ` Leonardo Bras
2023-09-13 12:52             ` Guo Ren
2023-09-13 13:06               ` Waiman Long
2023-09-14  3:45                 ` Guo Ren
2023-09-10  8:28 ` [PATCH V11 05/17] riscv: qspinlock: Add basic queued_spinlock support guoren
2023-09-13 20:28   ` Leonardo Bras
2023-09-14  4:46     ` Guo Ren
2023-09-14  9:43       ` Leonardo Bras
2023-09-15  2:10         ` Guo Ren
2023-09-15  9:08           ` Leonardo Bras
2023-09-17 15:02             ` Guo Ren
2023-09-19  5:20               ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 06/17] riscv: qspinlock: Introduce combo spinlock guoren
2023-09-10 11:06   ` Guo Ren
2023-09-13 20:37     ` Leonardo Bras
2023-09-13 20:49       ` Leonardo Bras
2023-09-14  4:49         ` Guo Ren
2023-09-14  7:17           ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 07/17] riscv: qspinlock: Introduce qspinlock param for command line guoren
2023-09-11 15:22   ` Waiman Long
2023-09-12  1:06     ` Guo Ren
2023-09-11 15:34   ` Waiman Long
2023-09-12  1:08     ` Guo Ren
2023-09-14  7:32       ` Leonardo Bras
2023-09-14 17:23         ` Waiman Long
2023-09-10  8:29 ` [PATCH V11 08/17] riscv: qspinlock: Add virt_spin_lock() support for KVM guest guoren
2023-09-14  8:02   ` Leonardo Bras
2023-09-17 15:12     ` Guo Ren
2023-09-19  5:30       ` Leonardo Bras
2023-09-19  8:04         ` Guo Ren
2023-09-19 14:40           ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 09/17] riscv: qspinlock: errata: Add ERRATA_THEAD_WRITE_ONCE fixup guoren
2023-09-14  8:32   ` Leonardo Bras
2023-09-17 15:15     ` Guo Ren
2023-09-19  5:34       ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 10/17] riscv: qspinlock: errata: Enable qspinlock for T-HEAD processors guoren
2023-09-14  9:36   ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 11/17] RISC-V: paravirt: pvqspinlock: Add paravirt qspinlock skeleton guoren
2023-09-15  5:42   ` Leonardo Bras
2023-09-17 14:58     ` Guo Ren
2023-09-19  5:43       ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 12/17] RISC-V: paravirt: pvqspinlock: Add nopvspin kernel parameter guoren
2023-09-15  6:05   ` Leonardo Bras
2023-09-17 15:03     ` Guo Ren
2023-09-19  5:44       ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 13/17] RISC-V: paravirt: pvqspinlock: Add SBI implementation guoren
2023-09-15  6:23   ` Leonardo Bras
2023-09-17 15:06     ` Guo Ren
2023-09-19  5:45       ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 14/17] RISC-V: paravirt: pvqspinlock: Add kconfig entry guoren
2023-09-15  6:25   ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 15/17] RISC-V: paravirt: pvqspinlock: Add trace point for pv_kick/wait guoren
2023-09-15  6:33   ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 16/17] RISC-V: paravirt: pvqspinlock: KVM: Add paravirt qspinlock skeleton guoren
2023-09-15  6:46   ` Leonardo Bras
2023-09-10  8:29 ` [PATCH V11 17/17] RISC-V: paravirt: pvqspinlock: KVM: Implement kvm_sbi_ext_pvlock_kick_cpu() guoren
2023-09-15  6:52   ` Leonardo Bras
2023-09-10  8:58 ` [PATCH V11 00/17] riscv: Add Native/Paravirt qspinlock support Conor Dooley
2023-09-10  9:16   ` Guo Ren
2023-09-10  9:20     ` Guo Ren
2023-09-10  9:31     ` Conor Dooley
2023-09-10  9:49       ` Guo Ren
2023-09-10 19:45         ` Conor Dooley
2023-09-11  3:36           ` Guo Ren
2023-09-11 12:52             ` Conor Dooley
2023-09-12  1:33               ` Guo Ren
2023-09-12  8:07                 ` Conor Dooley
2023-09-12 10:58                   ` Guo Ren
2023-11-06 20:42 ` Leonardo Bras
2023-11-12  4:23   ` Guo Ren
2023-11-13 10:19     ` Leonardo Bras Soares Passos

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZQFr8E-i8dB5Ofwm@redhat.com \
    --to=leobras@redhat.com \
    --cc=ajones@ventanamicro.com \
    --cc=alexghiti@rivosinc.com \
    --cc=anup@brainfault.org \
    --cc=bjorn@rivosinc.com \
    --cc=boqun.feng@gmail.com \
    --cc=catalin.marinas@arm.com \
    --cc=conor.dooley@microchip.com \
    --cc=greentime.hu@sifive.com \
    --cc=guoren@kernel.org \
    --cc=guoren@linux.alibaba.com \
    --cc=jszhang@kernel.org \
    --cc=keescook@chromium.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-csky@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=longman@redhat.com \
    --cc=mingo@redhat.com \
    --cc=palmer@rivosinc.com \
    --cc=paul.walmsley@sifive.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rdunlap@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=wefu@redhat.com \
    --cc=will@kernel.org \
    --cc=wuwei2016@iscas.ac.cn \
    --cc=xiaoguang.xing@sophgo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).