Linux MIPS Architecture development
 help / color / mirror / Atom feed
From: Kumba <kumba@gentoo.org>
To: Andrew Morton <akpm@osdl.org>
Cc: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: Commit 78eef01b0fae087c5fadbd85dd4fe2918c3a015f (on_each_cpu(): disable local interrupts) Breaks SGI IP32
Date: Sun, 28 May 2006 00:20:30 -0400	[thread overview]
Message-ID: <4479250E.3080604@gentoo.org> (raw)
In-Reply-To: <20060527194243.a8157338.akpm@osdl.org>

Andrew Morton wrote:
> 
> on_each_cpu() calls smp_call_function().  It is not correct to call
> smp_call_function() with local interrupts disabled, because it can lead to
> deadlocks.
> 
> Therefore on_each_cpu() also must not be called with local interrupts
> disabled.  Therefore on_each_cpu() may use
> local_irq_disable()/local_irq_enable().
> 
>>  A while ago I've
>> fixes all such calls but I may have missed some instances.
>>
>> Andrew, what was the reason for 78eef01b0fae087c5fadbd85dd4fe2918c3a015f ?
>>
> 
> That change made the various calling environments consistent, as described
> in the changelog.
> 
> If it's really, really not deadlocky to call smp_call_function() with
> interrupts disabled at that time in the MIPS kernel bringup then I'd
> suggest you should open-code an smp_call_function() and put a big comment
> over it explaining why it's done this way, and why it isn't deadlocky.
> 
> <tries to remember what the deadlock is>
> 
> If CPU A is running smp_call_function() it's waiting for CPU B to run the
> handler.
> 
> But if CPU B is presently _also_ running smp_call_function(), it's waiting
> for CPU A to run the handler.
> 
> If either of those CPUs is waiting for the other with local interrupts
> disabled, that CPU will never respond to the other CPU's IPI and they'll
> deadlock.

The catch is, the system being affected here is strictly a UP machine.  It's 
impossible to make an O2 go SMP.  It seems that the disable call in the UP 
version of on_each_cpu() (which I assume is the #define macro) is what's causing 
this issue, since the machine comes to a halt in the dark void between function 
calls (i.e., that memset() I alluded to earlier)

So I'm wondering, is there a way to see if the IRQ handlers have been installed 
already prior to disabling them, or is this more of a machine-specific oddity 
wherein the IRQ handlers need to be setup earlier (I don't even know if this is 
even possible/relevant to O2 systems)?

It also seems this was affecting AMD Alchemy-based systems too.  Other SGI 
machines are known to work fine, except Indy and Indigo2, as I haven't tested 
those yet.


--Kumba

-- 
Gentoo/MIPS Team Lead
Gentoo Foundation Board of Trustees

"Such is oft the course of deeds that move the wheels of the world: small hands 
do them because they must, while the eyes of the great are elsewhere."  --Elrond

  reply	other threads:[~2006-05-28  4:20 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-27 21:13 Commit 78eef01b0fae087c5fadbd85dd4fe2918c3a015f (on_each_cpu(): disable local interrupts) Breaks SGI IP32 Kumba
2006-05-28  1:06 ` Ralf Baechle
2006-05-28  2:42   ` Andrew Morton
2006-05-28  4:20     ` Kumba [this message]
2006-05-28  4:31       ` Andrew Morton
2006-05-28  7:42         ` Kumba
2006-05-28 10:50       ` Ralf Baechle
2006-06-21  9:51         ` Domen Puncer
2006-06-21 12:11           ` Ralf Baechle
2006-06-22  6:49             ` Domen Puncer
2006-06-27  8:19               ` Domen Puncer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4479250E.3080604@gentoo.org \
    --to=kumba@gentoo.org \
    --cc=akpm@osdl.org \
    --cc=linux-mips@linux-mips.org \
    --cc=ralf@linux-mips.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox