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.
|
* 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;
|
int special;
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ static void ack_state(struct multi_stop_data *msdata)
|
|||||||
set_state(msdata, msdata->state + 1);
|
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();
|
cpu_relax();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user