Re: [patch V2 24/24] cpu/hotplug: Convert hotplug locking to percpu rwsem

From: Thomas Gleixner
Date: Wed May 10 2017 - 04:49:24 EST


On Wed, 10 May 2017, Michael Ellerman wrote:

> Thomas Gleixner <tglx@xxxxxxxxxxxxx> writes:
>
> > @@ -130,6 +130,7 @@ void __static_key_slow_inc(struct static
> > * the all CPUs, for that to be serialized against CPU hot-plug
> > * we need to avoid CPUs coming online.
> > */
> > + lockdep_assert_hotplug_held();
> > jump_label_lock();
> > if (atomic_read(&key->enabled) == 0) {
> > atomic_set(&key->enabled, -1);
>
> I seem to be hitting this assert from the ftrace event selftests,
> enabled at boot with CONFIG_FTRACE_STARTUP_TEST=y, using next-20170509
> (on powerpc).
>
> The stupidly obvious (or perhaps obviously stupid) patch below fixes it:

Kinda. There is more horror in that area lurking and I'm still trying to
figure out all the convoluted call pathes.

Thanks,

tglx

> diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
> index daefdee9411a..5531f7ce8fa6 100644
> --- a/kernel/trace/trace_events.c
> +++ b/kernel/trace/trace_events.c
> @@ -3241,9 +3241,19 @@ static __init void event_trace_self_tests(void)
> continue;
> }
>
> + get_online_cpus();
> + mutex_lock(&event_mutex);
> ftrace_event_enable_disable(file, 1);
> + mutex_unlock(&event_mutex);
> + put_online_cpus();
> +
> event_test_stuff();
> +
> + get_online_cpus();
> + mutex_lock(&event_mutex);
> ftrace_event_enable_disable(file, 0);
> + mutex_unlock(&event_mutex);
> + put_online_cpus();
>
> pr_cont("OK\n");
> }
>
> cheers
>