On Wed, Mar 04, 2020 at 04:15:24PM +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: 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 3a8bcbdd4ce6..d9b4b2fedfed 100644 > --- a/kernel/smp.c > +++ b/kernel/smp.c > @@ -731,9 +731,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(); > } That looks very dangerous, the callers of kick_all_cpus_sync() want to sync all CPUs for a reason. You will rather need to fix the callers. Thanks. > EXPORT_SYMBOL_GPL(kick_all_cpus_sync); > > -- > 2.20.1 >