On Mon, Jan 09, 2017 at 03:32:04PM -0800, Paul E. McKenney wrote: > We could move rcu_scheduler_starting() later, as long as there > is no chance of preemption or context switch before it is invoked. > Would that help in this case, or are we already context switching before > acpi_os_map_cleanup() is invoked? (If we are already context switching, > short-circuiting synchronize_rcu_expedited() would be a bug.) Hmm, how about the below? It would still happen before /* * The boot idle thread must execute schedule() * at least once to get things moving: */ init_idle_bootup_task(current); schedule_preempt_disabled(); in rest_init() and right after native_smp_prepare_cpus() which is where we're splatting. Lemme run it. Even if it works, we would have to stress-test this seriously... --- diff --git a/init/main.c b/init/main.c index b0c9d6facef9..9be221cc87c3 100644 --- a/init/main.c +++ b/init/main.c @@ -385,7 +385,6 @@ static noinline void __ref rest_init(void) { int pid; - rcu_scheduler_starting(); /* * We need to spawn init first so that it obtains pid 1, however * the init task will end up wanting to create kthreads, which, if @@ -1019,6 +1018,8 @@ static noinline void __init kernel_init_freeable(void) smp_prepare_cpus(setup_max_cpus); + rcu_scheduler_starting(); + workqueue_init(); do_pre_smp_initcalls(); -- Regards/Gruss, Boris. Good mailing practices for 400: avoid top-posting and trim the reply. -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html