[3.16.y-ckt stable] Patch "powerpc: Secondary CPUs must set cpu_callin_map after setting active and online" has been added to staging queue
Luis Henriques
luis.henriques at canonical.com
Wed Jan 7 12:03:01 UTC 2015
On Wed, Jan 07, 2015 at 10:09:55PM +1100, Michael Ellerman wrote:
> Please drop this patch, it causes problems on other platforms. It has been reverted upstream.
>
Ah, I missed that! Thanks for your feedback. I'll drop this patch
from the 3.16 kernel queue.
Cheers,
--
Luís
> cheers
>
> On 7 January 2015 21:31:45 GMT+11:00, Luis Henriques <luis.henriques at canonical.com> wrote:
> >This is a note to let you know that I have just added a patch titled
> >
> >powerpc: Secondary CPUs must set cpu_callin_map after setting active
> >and online
> >
> >to the linux-3.16.y-queue branch of the 3.16.y-ckt extended stable tree
> >
> >which can be found at:
> >
> >http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.16.y-queue
> >
> >This patch is scheduled to be released in version 3.16.7-ckt4.
> >
> >If you, or anyone else, feels it should not be added to this tree,
> >please
> >reply to this email.
> >
> >For more information about the 3.16.y-ckt tree, see
> >https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable
> >
> >Thanks.
> >-Luis
> >
> >------
> >
> >From 0265c3c126ebe856629116313eb72d6aabcbe118 Mon Sep 17 00:00:00 2001
> >From: Anton Blanchard <anton at samba.org>
> >Date: Tue, 9 Dec 2014 10:58:19 +1100
> >Subject: powerpc: Secondary CPUs must set cpu_callin_map after setting
> >active
> > and online
> >
> >commit 7c5c92ed56d932b2c19c3f8aea86369509407d33 upstream.
> >
> >I have a busy ppc64le KVM box where guests sometimes hit the infamous
> >"kernel BUG at kernel/smpboot.c:134!" issue during boot:
> >
> > BUG_ON(td->cpu != smp_processor_id());
> >
> >Basically a per CPU hotplug thread scheduled on the wrong CPU. The oops
> >output confirms it:
> >
> > CPU: 0
> > Comm: watchdog/130
> >
> >The problem is that we aren't ensuring the CPU active and online bits
> >are set
> >before allowing the master to continue on. The master unparks the
> >secondary
> >CPUs kthreads and the scheduler looks for a CPU to run on. It calls
> >select_task_rq and realises the suggested CPU is not in the
> >cpus_allowed
> >mask. It then ends up in select_fallback_rq, and since the active and
> >online bits aren't set we choose some other CPU to run on.
> >
> >Signed-off-by: Anton Blanchard <anton at samba.org>
> >Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>
> >Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
> >---
> > arch/powerpc/kernel/smp.c | 9 ++++++++-
> > 1 file changed, 8 insertions(+), 1 deletion(-)
> >
> >diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
> >index 1007fb802e6b..1badecec872b 100644
> >--- a/arch/powerpc/kernel/smp.c
> >+++ b/arch/powerpc/kernel/smp.c
> >@@ -691,7 +691,6 @@ void start_secondary(void *unused)
> > smp_store_cpu_info(cpu);
> > set_dec(tb_ticks_per_jiffy);
> > preempt_disable();
> >- cpu_callin_map[cpu] = 1;
> >
> > if (smp_ops->setup_cpu)
> > smp_ops->setup_cpu(cpu);
> >@@ -733,6 +732,14 @@ void start_secondary(void *unused)
> > notify_cpu_starting(cpu);
> > set_cpu_online(cpu, true);
> >
> >+ /*
> >+ * CPU must be marked active and online before we signal back to the
> >+ * master, because the scheduler needs to see the cpu_online and
> >+ * cpu_active bits set.
> >+ */
> >+ smp_wmb();
> >+ cpu_callin_map[cpu] = 1;
> >+
> > local_irq_enable();
> >
> > cpu_startup_entry(CPUHP_ONLINE);
> >--
> >2.1.4
>
> --
> Sent from my Android phone with K-9 Mail. Please excuse my brevity.
More information about the kernel-team
mailing list