[kGDB]Cannot compile KGDB on ARM SMP

Will Deacon will.deacon at arm.com
Thu Mar 4 13:28:43 EST 2010


Hi Catalin,

> On Thu, 2010-03-04 at 17:28 +0000, Will Deacon wrote:
> > I took a quick look at the code in kernel/kgdb.c and adding the following
> > memory barrier appears to resolve the issue:
> >
> > diff --git a/kernel/kgdb.c b/kernel/kgdb.c
> > index 761fdd2..1308381 100644
> > --- a/kernel/kgdb.c
> > +++ b/kernel/kgdb.c
> > @@ -1537,6 +1537,7 @@ acquirelock:
> >                  * Wait till all the CPUs have quit
> >                  * from the debugger.
> >                  */
> > +               smp_wmb();
> >                 for_each_online_cpu(i) {
> >                         while (atomic_read(&cpu_in_kgdb[i]))
> >                                 cpu_relax();
> 
> Shouldn't this be smp_rmb()?

Actually, I think that we need an smp_mb() because there is
another variable involved (passive_cpu_wait[i]) as well as
cpu_in_kgdb[i], both of which are being read from and written
to.

I think deadlock occurs because the store buffers don't drain
on the 11MPCore, so the CPUs happily cpu_relax() while polling
on variables that they will never see change. Perhaps cpu_relax()
should be defined to be something stronger than a compiler memory
barrier for ARM?

Will





More information about the linux-arm-kernel mailing list