From: Peter Zijlstra <peterz@infradead.org>
To: Josh Poimboeuf <jpoimboe@kernel.org>
Cc: "Paul E. McKenney" <paulmck@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>,
Russell King <rmk+kernel@armlinux.org.uk>,
Linux ARM <linux-arm-kernel@lists.infradead.org>,
Arnd Bergmann <arnd@arndb.de>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel <linux-kernel@vger.kernel.org>,
frederic@kernel.org, Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [GIT PULL] Generic entry for ARM
Date: Wed, 9 Apr 2025 16:54:04 +0200 [thread overview]
Message-ID: <20250409145404.GH9833@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <xgj3in4cuy3k2phafttxb4cwz6rn6vuj5tvwjioqbrl4hxivkt@wkr5pi6zfrv7>
On Mon, Apr 07, 2025 at 04:47:05PM -0700, Josh Poimboeuf wrote:
> I think Thomas, Peter and Steven are the experts here, but I'll give my
> limited understanding.
>
> On Mon, Apr 07, 2025 at 10:00:54AM -0700, Paul E. McKenney wrote:
> > > cpu_init() is called from e.g.:
> > > asmlinkage void secondary_start_kernel(struct task_struct *task)
> > > OK should this also be noinstr? Or is that just implied because
> > > of asmlinkage?
> > >
> > > <linux/compiler_types.h> will resolve to:
> > >
> > > #if defined(CC_USING_HOTPATCH)
> > > #define notrace __attribute__((hotpatch(0, 0)))
> > > #elif defined(CC_USING_PATCHABLE_FUNCTION_ENTRY)
> > > #define notrace __attribute__((patchable_function_entry(0, 0)))
> > > #else
> > > #define notrace __attribute__((__no_instrument_function__))
> > > #endif
> > >
> > > which I read as three different ways of saying "don't patch here".
> > >
> > > Which is confusingly similar or identical to what noinstr does, I do see that
> > > noinstr pushes the code to separate section but that in turn might
> > > be what __attribute__((__no_instrument_function__)) and
> > > friends does?
> > >
> > > Are they equivalent?
>
> noinstr is much broader than notrace. No instrumentation of any kind
> (ftrace, kprobes, sanitizers, profilers, etc), in the prologue or body
> of the function or its callees, except for regions marked by
> instrumentation_{begin,end}().
Note that noinstr code goes into its own section and various probing
mechanisms (HW breakpoints, kprobes etc..) are explicitly excluded from
touching code in this section.
> noinstr is needed in early/late entry code before/after RCU transitions,
> as instrumentation code might depend on RCU. Also, entry code tends to
> be sensitive and unable to handle random instrumentation code.
Not strictly RCU, but including RCU. Some of the early entry code might
not have a sane stack or anything much a 'C' environment relies on,
could even not have normal page-tables set up.
noinstr is very much an attempt to stretch the whole 'C-as-assember'
ethos. Only emit the code I write, don't play silly buggers.
Current noinstr usage is indeed interrupt/exception/syscall entry but
also idle loops. Various idle routines disable RCU (which then
prohibits tracing) but some go even further and dismantle much of what a
normal C environment would expect.
> I believe noinstr is not typically needed for boot code, at least for
> the primary CPU. RCU isn't present yet, and many instrumentations might
> not yet be available. Or their handlers can detect whether they've been
> initialized yet. Or they're disabled in .init sections.
>
> Whether noinstr is needed for *secondary* boot code, I don't know. It
> may be dependent on the instrumentation implementations, e.g., whether
> they're enabled globally or per-CPU. At least on x86, start_secondary()
> is notrace. I don't know enough to say whether that's sufficient.
There might be a case for noinstr there, but as of yet, nobody went and
audited all that. Thus far, I've been the idiot doing all the auditing,
but I think I'll pass on this one for now :-)
next prev parent reply other threads:[~2025-04-09 15:13 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-28 12:49 [GIT PULL] Generic entry for ARM Linus Walleij
2025-03-12 11:13 ` Thomas Gleixner
2025-03-12 18:00 ` Paul E. McKenney
2025-03-31 21:48 ` Linus Walleij
2025-04-07 17:00 ` Paul E. McKenney
2025-04-07 23:47 ` Josh Poimboeuf
2025-04-08 0:14 ` Steven Rostedt
2025-04-09 14:54 ` Peter Zijlstra [this message]
-- strict thread matches above, loose matches on Subject: below --
2025-03-02 15:23 phil995511
2025-03-02 17:17 ` Russell King (Oracle)
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=20250409145404.GH9833@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=arnd@arndb.de \
--cc=frederic@kernel.org \
--cc=jpoimboe@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@kernel.org \
--cc=rmk+kernel@armlinux.org.uk \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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).