On Mon, Nov 23, 2020 at 05:58:42PM +0000, Alex Belits wrote: > From: Yuri Norov <ynorov@xxxxxxxxxxx> > > Make sure that kick_all_cpus_sync() does not call CPUs that are running > isolated tasks. > > Signed-off-by: Yuri Norov <ynorov@xxxxxxxxxxx> > [abelits@xxxxxxxxxxx: use safe task_isolation_cpumask() implementation] > Signed-off-by: Alex Belits <abelits@xxxxxxxxxxx> > --- > kernel/smp.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/kernel/smp.c b/kernel/smp.c > index 4d17501433be..b2faecf58ed0 100644 > --- a/kernel/smp.c > +++ b/kernel/smp.c > @@ -932,9 +932,21 @@ static void do_nothing(void *unused) > */ > void kick_all_cpus_sync(void) > { > + struct cpumask mask; > + > /* Make sure the change is visible before we kick the cpus */ > smp_mb(); > - smp_call_function(do_nothing, NULL, 1); > + > + preempt_disable(); > +#ifdef CONFIG_TASK_ISOLATION > + cpumask_clear(&mask); > + task_isolation_cpumask(&mask); > + cpumask_complement(&mask, &mask); > +#else > + cpumask_setall(&mask); > +#endif > + smp_call_function_many(&mask, do_nothing, NULL, 1); > + preempt_enable(); Same comment about IPIs here. > } > EXPORT_SYMBOL_GPL(kick_all_cpus_sync); > > -- > 2.20.1 >