From: Andy Chiu <andybnac@gmail.com>
To: Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>
Cc: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org, bjorn@rivosinc.com,
puranjay12@gmail.com, alexghiti@rivosinc.com,
yongxuan.wang@sifive.com, greentime.hu@sifive.com,
nick.hu@sifive.com, nylon.chen@sifive.com, tommy.wu@sifive.com,
eric.lin@sifive.com, viccent.chen@sifive.com, zong.li@sifive.com,
samuel.holland@sifive.com
Subject: [PATCH v3 4/7] riscv: ftrace: do not use stop_machine to update code
Date: Thu, 28 Nov 2024 01:29:05 +0800 [thread overview]
Message-ID: <20241127172908.17149-5-andybnac@gmail.com> (raw)
In-Reply-To: <20241127172908.17149-1-andybnac@gmail.com>
From: Andy Chiu <andy.chiu@sifive.com>
Now it is safe to remove dependency from stop_machine() for us to patch
code in ftrace.
Signed-off-by: Andy Chiu <andy.chiu@sifive.com>
---
arch/riscv/kernel/ftrace.c | 53 +++-----------------------------------
1 file changed, 4 insertions(+), 49 deletions(-)
diff --git a/arch/riscv/kernel/ftrace.c b/arch/riscv/kernel/ftrace.c
index 5ebe412280ef..57a6558e212e 100644
--- a/arch/riscv/kernel/ftrace.c
+++ b/arch/riscv/kernel/ftrace.c
@@ -13,23 +13,13 @@
#include <asm/patch.h>
#ifdef CONFIG_DYNAMIC_FTRACE
-void ftrace_arch_code_modify_prepare(void) __acquires(&text_mutex)
+void arch_ftrace_update_code(int command)
{
mutex_lock(&text_mutex);
-
- /*
- * The code sequences we use for ftrace can't be patched while the
- * kernel is running, so we need to use stop_machine() to modify them
- * for now. This doesn't play nice with text_mutex, we use this flag
- * to elide the check.
- */
- riscv_patch_in_stop_machine = true;
-}
-
-void ftrace_arch_code_modify_post_process(void) __releases(&text_mutex)
-{
- riscv_patch_in_stop_machine = false;
+ command |= FTRACE_MAY_SLEEP;
+ ftrace_modify_all_code(command);
mutex_unlock(&text_mutex);
+ flush_icache_all();
}
static int ftrace_check_current_call(unsigned long hook_pos,
@@ -155,41 +145,6 @@ int ftrace_update_ftrace_func(ftrace_func_t func)
return __ftrace_modify_call_site(&ftrace_call_dest, func, true);
}
-struct ftrace_modify_param {
- int command;
- atomic_t cpu_count;
-};
-
-static int __ftrace_modify_code(void *data)
-{
- struct ftrace_modify_param *param = data;
-
- if (atomic_inc_return(¶m->cpu_count) == num_online_cpus()) {
- ftrace_modify_all_code(param->command);
- /*
- * Make sure the patching store is effective *before* we
- * increment the counter which releases all waiting CPUs
- * by using the release variant of atomic increment. The
- * release pairs with the call to local_flush_icache_all()
- * on the waiting CPU.
- */
- atomic_inc_return_release(¶m->cpu_count);
- } else {
- while (atomic_read(¶m->cpu_count) <= num_online_cpus())
- cpu_relax();
-
- local_flush_icache_all();
- }
-
- return 0;
-}
-
-void arch_ftrace_update_code(int command)
-{
- struct ftrace_modify_param param = { command, ATOMIC_INIT(0) };
-
- stop_machine(__ftrace_modify_code, ¶m, cpu_online_mask);
-}
#endif
#ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
--
2.39.3 (Apple Git-145)
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Andy Chiu <andybnac@gmail.com>
To: Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>
Cc: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org, bjorn@rivosinc.com,
puranjay12@gmail.com, alexghiti@rivosinc.com,
yongxuan.wang@sifive.com, greentime.hu@sifive.com,
nick.hu@sifive.com, nylon.chen@sifive.com, tommy.wu@sifive.com,
eric.lin@sifive.com, viccent.chen@sifive.com, zong.li@sifive.com,
samuel.holland@sifive.com
Subject: [PATCH v3 4/7] riscv: ftrace: do not use stop_machine to update code
Date: Thu, 28 Nov 2024 01:29:05 +0800 [thread overview]
Message-ID: <20241127172908.17149-5-andybnac@gmail.com> (raw)
In-Reply-To: <20241127172908.17149-1-andybnac@gmail.com>
From: Andy Chiu <andy.chiu@sifive.com>
Now it is safe to remove dependency from stop_machine() for us to patch
code in ftrace.
Signed-off-by: Andy Chiu <andy.chiu@sifive.com>
---
arch/riscv/kernel/ftrace.c | 53 +++-----------------------------------
1 file changed, 4 insertions(+), 49 deletions(-)
diff --git a/arch/riscv/kernel/ftrace.c b/arch/riscv/kernel/ftrace.c
index 5ebe412280ef..57a6558e212e 100644
--- a/arch/riscv/kernel/ftrace.c
+++ b/arch/riscv/kernel/ftrace.c
@@ -13,23 +13,13 @@
#include <asm/patch.h>
#ifdef CONFIG_DYNAMIC_FTRACE
-void ftrace_arch_code_modify_prepare(void) __acquires(&text_mutex)
+void arch_ftrace_update_code(int command)
{
mutex_lock(&text_mutex);
-
- /*
- * The code sequences we use for ftrace can't be patched while the
- * kernel is running, so we need to use stop_machine() to modify them
- * for now. This doesn't play nice with text_mutex, we use this flag
- * to elide the check.
- */
- riscv_patch_in_stop_machine = true;
-}
-
-void ftrace_arch_code_modify_post_process(void) __releases(&text_mutex)
-{
- riscv_patch_in_stop_machine = false;
+ command |= FTRACE_MAY_SLEEP;
+ ftrace_modify_all_code(command);
mutex_unlock(&text_mutex);
+ flush_icache_all();
}
static int ftrace_check_current_call(unsigned long hook_pos,
@@ -155,41 +145,6 @@ int ftrace_update_ftrace_func(ftrace_func_t func)
return __ftrace_modify_call_site(&ftrace_call_dest, func, true);
}
-struct ftrace_modify_param {
- int command;
- atomic_t cpu_count;
-};
-
-static int __ftrace_modify_code(void *data)
-{
- struct ftrace_modify_param *param = data;
-
- if (atomic_inc_return(¶m->cpu_count) == num_online_cpus()) {
- ftrace_modify_all_code(param->command);
- /*
- * Make sure the patching store is effective *before* we
- * increment the counter which releases all waiting CPUs
- * by using the release variant of atomic increment. The
- * release pairs with the call to local_flush_icache_all()
- * on the waiting CPU.
- */
- atomic_inc_return_release(¶m->cpu_count);
- } else {
- while (atomic_read(¶m->cpu_count) <= num_online_cpus())
- cpu_relax();
-
- local_flush_icache_all();
- }
-
- return 0;
-}
-
-void arch_ftrace_update_code(int command)
-{
- struct ftrace_modify_param param = { command, ATOMIC_INIT(0) };
-
- stop_machine(__ftrace_modify_code, ¶m, cpu_online_mask);
-}
#endif
#ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
--
2.39.3 (Apple Git-145)
next prev parent reply other threads:[~2024-11-27 17:30 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-27 17:29 [PATCH v3 0/7] riscv: ftrace: atmoic patching and preempt improvements Andy Chiu
2024-11-27 17:29 ` Andy Chiu
2024-11-27 17:29 ` [PATCH v3 1/7] riscv: ftrace: support fastcc in Clang for WITH_ARGS Andy Chiu
2024-11-27 17:29 ` Andy Chiu
2024-12-03 12:05 ` Björn Töpel
2024-12-03 12:05 ` Björn Töpel
2024-12-03 14:44 ` Evgenii Shatokhin
2024-12-03 14:44 ` Evgenii Shatokhin
2024-11-27 17:29 ` [PATCH v3 2/7] riscv: ftrace: align patchable functions to 4 Byte boundary Andy Chiu
2024-11-27 17:29 ` Andy Chiu
2024-11-27 17:29 ` [PATCH v3 3/7] riscv: ftrace: prepare ftrace for atomic code patching Andy Chiu
2024-11-27 17:29 ` Andy Chiu
2024-12-01 15:31 ` Evgenii Shatokhin
2024-12-01 15:31 ` Evgenii Shatokhin
2024-12-02 7:29 ` Evgenii Shatokhin
2024-12-02 7:29 ` Evgenii Shatokhin
2024-12-06 10:02 ` Björn Töpel
2024-12-06 10:02 ` Björn Töpel
2024-12-06 23:35 ` Bagas Sanjaya
2024-12-06 23:35 ` Bagas Sanjaya
2024-12-09 14:57 ` Robbin Ehn
2024-12-09 14:57 ` Robbin Ehn
2024-11-27 17:29 ` Andy Chiu [this message]
2024-11-27 17:29 ` [PATCH v3 4/7] riscv: ftrace: do not use stop_machine to update code Andy Chiu
2024-11-27 17:29 ` [PATCH v3 5/7] riscv: vector: Support calling schedule() for preemptible Vector Andy Chiu
2024-11-27 17:29 ` Andy Chiu
2024-11-27 17:29 ` [PATCH v3 6/7] riscv: add a data fence for CMODX in the kernel mode Andy Chiu
2024-11-27 17:29 ` Andy Chiu
2025-03-10 19:08 ` Björn Töpel
2025-03-10 19:08 ` Björn Töpel
2025-03-11 12:44 ` Andrea Parri
2025-03-11 12:44 ` Andrea Parri
2025-03-11 14:53 ` Björn Töpel
2025-03-11 14:53 ` Björn Töpel
2025-03-11 18:11 ` Andrea Parri
2025-03-11 18:11 ` Andrea Parri
2025-03-13 18:12 ` Andy Chiu
2025-03-13 18:12 ` Andy Chiu
2025-03-14 15:23 ` Andrea Parri
2025-03-14 15:23 ` Andrea Parri
2024-11-27 17:29 ` [PATCH v3 7/7] riscv: ftrace: support PREEMPT Andy Chiu
2024-11-27 17:29 ` Andy Chiu
2025-03-10 19:09 ` Björn Töpel
2025-03-10 19:09 ` Björn Töpel
2024-11-27 21:25 ` [PATCH v3 0/7] riscv: ftrace: atmoic patching and preempt improvements Björn Töpel
2024-11-27 21:25 ` Björn Töpel
2024-12-24 3:15 ` Steven Rostedt
2024-12-24 3:15 ` Steven Rostedt
2024-12-29 19:08 ` Andy Chiu
2024-12-29 19:08 ` Andy Chiu
2025-01-06 15:22 ` Andy Chiu
2025-01-06 15:22 ` Andy Chiu
2024-12-02 7:58 ` Evgenii Shatokhin
2024-12-02 7:58 ` Evgenii Shatokhin
2024-12-11 15:38 ` Andy Chiu
2024-12-11 15:38 ` Andy Chiu
2024-12-03 12:18 ` Björn Töpel
2024-12-03 12:18 ` Björn Töpel
2024-12-03 15:09 ` Evgenii Shatokhin
2024-12-03 15:09 ` Evgenii Shatokhin
2024-12-06 8:39 ` Björn Töpel
2024-12-06 8:39 ` Björn Töpel
2024-12-11 15:48 ` Andy Chiu
2024-12-11 15:48 ` Andy Chiu
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=20241127172908.17149-5-andybnac@gmail.com \
--to=andybnac@gmail.com \
--cc=alexghiti@rivosinc.com \
--cc=aou@eecs.berkeley.edu \
--cc=bjorn@rivosinc.com \
--cc=eric.lin@sifive.com \
--cc=greentime.hu@sifive.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mhiramat@kernel.org \
--cc=nick.hu@sifive.com \
--cc=nylon.chen@sifive.com \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=puranjay12@gmail.com \
--cc=rostedt@goodmis.org \
--cc=samuel.holland@sifive.com \
--cc=tommy.wu@sifive.com \
--cc=viccent.chen@sifive.com \
--cc=yongxuan.wang@sifive.com \
--cc=zong.li@sifive.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.