Skip to content

Commit

Permalink
stop_machine, rcu: Mark functions as notrace
Browse files Browse the repository at this point in the history
commit 4230e2d upstream.

Some architectures assume that the stopped CPUs don't make function calls
to traceable functions when they are in the stopped state. See also commit
cb9d7fd ("watchdog: Mark watchdog touch functions as notrace").

Violating this assumption causes kernel crashes when switching tracer on
RISC-V.

Mark rcu_momentary_dyntick_idle() and stop_machine_yield() notrace to
prevent this.

Fixes: 4ecf0a4 ("processor: get rid of cpu_relax_yield")
Fixes: 366237e ("stop_machine: Provide RCU quiescent state in multi_cpu_stop()")
Signed-off-by: Zong Li <zong.li@sifive.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Atish Patra <atish.patra@wdc.com>
Tested-by: Colin Ian King <colin.king@canonical.com>
Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Acked-by: Paul E. McKenney <paulmck@kernel.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20201021073839.43935-1-zong.li@sifive.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
zongbox authored and gregkh committed Nov 5, 2020
1 parent 7e5bf05 commit ffc1b64
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 2 deletions.
2 changes: 1 addition & 1 deletion kernel/rcu/tree.c
Expand Up @@ -416,7 +416,7 @@ bool rcu_eqs_special_set(int cpu)
*
* The caller must have disabled interrupts and must not be idle.
*/
void rcu_momentary_dyntick_idle(void)
notrace void rcu_momentary_dyntick_idle(void)
{
int special;

Expand Down
2 changes: 1 addition & 1 deletion kernel/stop_machine.c
Expand Up @@ -178,7 +178,7 @@ static void ack_state(struct multi_stop_data *msdata)
set_state(msdata, msdata->state + 1);
}

void __weak stop_machine_yield(const struct cpumask *cpumask)
notrace void __weak stop_machine_yield(const struct cpumask *cpumask)
{
cpu_relax();
}
Expand Down

0 comments on commit ffc1b64

Please sign in to comment.