forked from Minki/linux
stop_machine, rcu: Mark functions as notrace
Some architectures assume that the stopped CPUs don't make function calls to traceable functions when they are in the stopped state. See also commitcb9d7fd51d
("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:4ecf0a43e7
("processor: get rid of cpu_relax_yield") Fixes:366237e7b0
("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
This commit is contained in:
parent
3650b228f8
commit
4230e2deaa
@ -409,7 +409,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;
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user