From: Ralf Baechle <ralf@linux-mips.org>
To: Kumba <kumba@gentoo.org>
Cc: Andrew Morton <akpm@osdl.org>, linux-mips@linux-mips.org
Subject: Re: Commit 78eef01b0fae087c5fadbd85dd4fe2918c3a015f (on_each_cpu(): disable local interrupts) Breaks SGI IP32
Date: Sun, 28 May 2006 11:50:14 +0100 [thread overview]
Message-ID: <20060528105014.GA28621@linux-mips.org> (raw)
In-Reply-To: <4479250E.3080604@gentoo.org>
On Sun, May 28, 2006 at 12:20:30AM -0400, Kumba wrote:
> >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.
MIPS does on_each_cpu() for cache maintenance. In the early stages before
interrupts are enabled there is only one CPU active anyway, so it's
perfectly safe - and obvious to the reader I hope - to use the local_*
variant of the cacheflushes. smp_call_function will yell loudly anyway
if called with interrupts disabled.
> ><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.
Circumstances which don't apply during the early startup phase but
since the MIPS smp_call_function() does a WARN_ON(irqs_disabled()) I had
to clean that.
> 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.
IP27 is fine but it's SMP but I've already cleaned out all the early
calls to smp_call_function there were shown by the WARN() ages ago.
You can do it the same way, use this debugging version of on_each_cpu:
#define on_each_cpu(func,info,retry,wait) \
({ \
WARN_ON(irqs_disabled()); \
func(info); \
0; \
})
Ralf
next prev parent reply other threads:[~2006-05-28 10:50 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
2006-05-28 4:31 ` Andrew Morton
2006-05-28 7:42 ` Kumba
2006-05-28 10:50 ` Ralf Baechle [this message]
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=20060528105014.GA28621@linux-mips.org \
--to=ralf@linux-mips.org \
--cc=akpm@osdl.org \
--cc=kumba@gentoo.org \
--cc=linux-mips@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.