From: yunhui cui <cuiyunhui@bytedance.com>
To: "Christoph Lameter (Ampere)" <cl@gentwo.org>
Cc: yury.norov@gmail.com, linux@rasmusvillemoes.dk,
paul.walmsley@sifive.com, palmer@dabbelt.com,
aou@eecs.berkeley.edu, alex@ghiti.fr,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
dennis@kernel.org, tj@kernel.org, linux-mm@kvack.org
Subject: Re: [External] Re: [PATCH 2/2] riscv: introduce percpu.h into include/asm
Date: Thu, 21 Aug 2025 16:01:11 +0800 [thread overview]
Message-ID: <CAEEQ3w=KrysBJrkYA6mUKCjC=fz23R7u81a2p8EipaN9oVHs_Q@mail.gmail.com> (raw)
In-Reply-To: <e7653089-5c57-ee61-ed01-0b3245e10d82@gentwo.org>
Hi Christoph,
On Thu, Aug 21, 2025 at 7:39 AM Christoph Lameter (Ampere)
<cl@gentwo.org> wrote:
>
> On Tue, 19 Aug 2025, Yunhui Cui wrote:
>
> > +#define __PERCPU_AMO_OP_CASE(sfx, name, sz, amo_insn) \
> > +static inline void \
> > +__percpu_##name##_amo_case_##sz(void *ptr, unsigned long val) \
> > +{ \
> > + asm volatile ( \
> > + "amo" #amo_insn #sfx " zero, %[val], %[ptr]" \
> > + : [ptr] "+A" (*(u##sz *)ptr) \
> > + : [val] "r" ((u##sz)(val)) \
> > + : "memory"); \
> > +}
>
> AMO creates a single instruction that performs the operation?
>
> > +#define _pcp_protect(op, pcp, ...) \
> > +({ \
> > + preempt_disable_notrace(); \
> > + op(raw_cpu_ptr(&(pcp)), __VA_ARGS__); \
> > + preempt_enable_notrace(); \
> > +})
>
> Is "op" a single instruction? If so then preempt disable / endable would
> not be needed if there is no other instruction created.
>
> But raw_cpu_ptr performs a SHIFT_PERCPU_PTR which performs an addition.
> So you need the disabling of preemption to protect the add.
>
> Is there a way on RISC V to embedd the pointer arithmetic in the "AMO"
> instruction? Or can you use relative addressing to a register that
> contains the cpu offset. I believe RISC V has a thread pointer?
>
> If you can do this then a lot of preempt_enable/disable points can be
> removed from the core kernel and the instruction may be as scalable as x86
> which can do the per cpu operations with a single instruction.
Yes, thank you. While it’s certainly good to remove preemption
disabling, currently RISC-V’s amoadd.w/d instructions can take the
address of a variable rather than a register.
I previously submitted an attempt to use gp to store the percpu
offset, and we are also trying to push for an extension that uses a
register to store the percpu offset.
https://lore.kernel.org/all/CAEEQ3w=PsM5T+yMrEGdWZ2nm7m7SX3vzscLtWpOPVu1zpfm3YQ@mail.gmail.com/
https://lists.riscv.org/g/tech-privileged/topic/risc_v_tech_arch_review/113437553?page=2
>
> > +
> > +#define _pcp_protect_return(op, pcp, args...) \
> > +({ \
> > + typeof(pcp) __retval; \
> > + preempt_disable_notrace(); \
> > + __retval = (typeof(pcp))op(raw_cpu_ptr(&(pcp)), ##args); \
> > + preempt_enable_notrace(); \
> > + __retval; \
> > +})
>
> Same here.
>
>
Thanks,
Yunhui
prev parent reply other threads:[~2025-08-21 8:01 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-19 13:50 [PATCH 0/2] riscv: introduce percpu.h Yunhui Cui
2025-08-19 13:50 ` [PATCH 1/2] riscv: remove irqflags.h inclusion in asm/bitops.h Yunhui Cui
2025-08-19 13:50 ` [PATCH 2/2] riscv: introduce percpu.h into include/asm Yunhui Cui
2025-08-20 6:44 ` kernel test robot
2025-08-20 17:18 ` kernel test robot
2025-08-20 23:26 ` Christoph Lameter (Ampere)
2025-08-21 8:01 ` yunhui cui [this message]
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='CAEEQ3w=KrysBJrkYA6mUKCjC=fz23R7u81a2p8EipaN9oVHs_Q@mail.gmail.com' \
--to=cuiyunhui@bytedance.com \
--cc=alex@ghiti.fr \
--cc=aou@eecs.berkeley.edu \
--cc=cl@gentwo.org \
--cc=dennis@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux@rasmusvillemoes.dk \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=tj@kernel.org \
--cc=yury.norov@gmail.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