[Skiboot] [PATCH] opal/hmi: Fix the soft lockup issue on HMI for certain TB errors.
Benjamin Herrenschmidt
benh at au1.ibm.com
Tue Oct 6 15:15:41 AEDT 2015
On Tue, 2015-10-06 at 09:40 +0530, Mahesh Jagannath Salgaonkar wrote:
> On 10/06/2015 02:04 AM, Benjamin Herrenschmidt wrote:
> > On Mon, 2015-10-05 at 15:40 +0530, Mahesh J Salgaonkar wrote:
> > > From: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
> > >
> > > Introduce volatile specifier in wait_for_subcore_threads() to
> > > force
> > > re-read the fresh value from the memory. Without this, the
> > > compiler
> > > optimizes the while loop not to re-fetch the data from memory
> > > pointed
> > > by
> > > this_cpu()->core_hmi_state_ptr. This cause CPU to spin infinitely
> > > even though the other CPUs have modified the data causing soft
> > > lockup
> > > in
> > > kernel.
> >
> > That should have a timeout, what if the other threads are stuck for
> > some other reason ?
> >
> > Also, I would much prefer if cpu_relax() had a memory clobber.
>
> Do you mean we should add barrier() call inside cpu_relax() function
> ?
Yes, it would avoid similar bugs in the future
> >
> > Cheers,
> > Ben.
> >
> > > Signed-off-by: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
> > > ---
> > > core/hmi.c | 4 +++-
> > > 1 file changed, 3 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/core/hmi.c b/core/hmi.c
> > > index ee556fc..2d1ac6f 100644
> > > --- a/core/hmi.c
> > > +++ b/core/hmi.c
> > > @@ -448,7 +448,9 @@ static int decode_malfunction(struct
> > > OpalHMIEvent
> > > *hmi_evt)
> > >
> > > static void wait_for_subcore_threads(void)
> > > {
> > > - while (!(*(this_cpu()->core_hmi_state_ptr) &
> > > HMI_STATE_CLEANUP_DONE))
> > > + volatile uint32_t *core_hmi_state_ptr = this_cpu()
> > > ->core_hmi_state_ptr;
> > > +
> > > + while (!(*(core_hmi_state_ptr) &
> > > HMI_STATE_CLEANUP_DONE))
> > > cpu_relax();
> > > }
> > >
> > >
> > > _______________________________________________
> > > Skiboot mailing list
> > > Skiboot at lists.ozlabs.org
> > > https://lists.ozlabs.org/listinfo/skiboot
More information about the Skiboot
mailing list