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
next prev parent 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.