[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241017101712.5a052712@gandalf.local.home>
Date: Thu, 17 Oct 2024 10:17:12 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: Mike Rapoport <rppt@...nel.org>
Cc: Andrew Morton <akpm@...ux-foundation.org>, Luis Chamberlain
<mcgrof@...nel.org>, Andreas Larsson <andreas@...sler.com>, Andy Lutomirski
<luto@...nel.org>, Ard Biesheuvel <ardb@...nel.org>, Arnd Bergmann
<arnd@...db.de>, Borislav Petkov <bp@...en8.de>, Brian Cain
<bcain@...cinc.com>, Catalin Marinas <catalin.marinas@....com>, Christoph
Hellwig <hch@...radead.org>, Christophe Leroy
<christophe.leroy@...roup.eu>, Dave Hansen <dave.hansen@...ux.intel.com>,
Dinh Nguyen <dinguyen@...nel.org>, Geert Uytterhoeven
<geert@...ux-m68k.org>, Guo Ren <guoren@...nel.org>, Helge Deller
<deller@....de>, Huacai Chen <chenhuacai@...nel.org>, Ingo Molnar
<mingo@...hat.com>, Johannes Berg <johannes@...solutions.net>, John Paul
Adrian Glaubitz <glaubitz@...sik.fu-berlin.de>, Kent Overstreet
<kent.overstreet@...ux.dev>, "Liam R. Howlett" <Liam.Howlett@...cle.com>,
Mark Rutland <mark.rutland@....com>, Masami Hiramatsu
<mhiramat@...nel.org>, Matt Turner <mattst88@...il.com>, Max Filippov
<jcmvbkbc@...il.com>, Michael Ellerman <mpe@...erman.id.au>, Michal Simek
<monstr@...str.eu>, Oleg Nesterov <oleg@...hat.com>, Palmer Dabbelt
<palmer@...belt.com>, Peter Zijlstra <peterz@...radead.org>, Richard
Weinberger <richard@....at>, Russell King <linux@...linux.org.uk>, Song Liu
<song@...nel.org>, Stafford Horne <shorne@...il.com>, Suren Baghdasaryan
<surenb@...gle.com>, Thomas Bogendoerfer <tsbogend@...ha.franken.de>,
Thomas Gleixner <tglx@...utronix.de>, Uladzislau Rezki <urezki@...il.com>,
Vineet Gupta <vgupta@...nel.org>, Will Deacon <will@...nel.org>,
bpf@...r.kernel.org, linux-alpha@...r.kernel.org,
linux-arch@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-csky@...r.kernel.org, linux-hexagon@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-m68k@...ts.linux-m68k.org,
linux-mips@...r.kernel.org, linux-mm@...ck.org,
linux-modules@...r.kernel.org, linux-openrisc@...r.kernel.org,
linux-parisc@...r.kernel.org, linux-riscv@...ts.infradead.org,
linux-sh@...r.kernel.org, linux-snps-arc@...ts.infradead.org,
linux-trace-kernel@...r.kernel.org, linux-um@...ts.infradead.org,
linuxppc-dev@...ts.ozlabs.org, loongarch@...ts.linux.dev,
sparclinux@...r.kernel.org, x86@...nel.org
Subject: Re: [PATCH v6 6/8] x86/module: prepare module loading for ROX
allocations of text
On Wed, 16 Oct 2024 17:01:28 -0400
Steven Rostedt <rostedt@...dmis.org> wrote:
> If this is only needed for module load, can we at least still use the
> text_poke_early() at boot up?
>
> if (ftrace_poke_late) {
> text_poke_queue((void *)ip, new_code, MCOUNT_INSN_SIZE, NULL);
> } else if (system_state == SYSTEM_BOOTING) {
> text_poke_early((void *)ip, new_code, MCOUNT_INSN_SIZE);
> } else {
> mutex_lock(&text_mutex);
> text_poke((void *)ip, new_code, MCOUNT_INSN_SIZE);
> mutex_unlock(&text_mutex);
> }
>
> ?
>
> The above if statement looks to slow things down just slightly, but only by
> 2ms, which is more reasonable.
I changed the above to this (yes it's a little hacky) and got my 2ms back!
-- Steve
DEFINE_STATIC_KEY_TRUE(ftrace_modify_boot);
static int __init ftrace_boot_init_done(void)
{
static_branch_disable(&ftrace_modify_boot);
return 0;
}
/* Ftrace updates happen before core init */
core_initcall(ftrace_boot_init_done);
/*
* Marked __ref because it calls text_poke_early() which is .init.text. That is
* ok because that call will happen early, during boot, when .init sections are
* still present.
*/
static int __ref
ftrace_modify_code_direct(unsigned long ip, const char *old_code,
const char *new_code)
{
int ret = ftrace_verify_code(ip, old_code);
if (ret)
return ret;
/* replace the text with the new text */
if (static_branch_unlikely(&ftrace_modify_boot)) {
text_poke_early((void *)ip, new_code, MCOUNT_INSN_SIZE);
} else if (ftrace_poke_late) {
text_poke_queue((void *)ip, new_code, MCOUNT_INSN_SIZE, NULL);
} else {
mutex_lock(&text_mutex);
text_poke((void *)ip, new_code, MCOUNT_INSN_SIZE);
mutex_unlock(&text_mutex);
}
return 0;
}
Powered by blists - more mailing lists