From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu, tglx@linutronix.de,
torvalds@osdl.org
Subject: Re: [RFC][PATCH] request_irq(...,SA_BOOTMEM);
Date: Mon, 05 Jun 2006 18:49:36 +1000 [thread overview]
Message-ID: <1149497376.8543.65.camel@localhost.localdomain> (raw)
In-Reply-To: <20060605012405.ac17f918.akpm@osdl.org>
\
> Yes, there are a few sleeping locks taken in
> kmem_cache_init()->kmem_cache_init(), for example.
>
> They would normally generate might_sleep() warnings, but __might_sleep()
> suppresses that early in boot, for this very reason.
>
> It's all a bit sleazy, "knowing" that these locks won't be contended, so
> it's safe to do apparently-unsafe things. We haven't even started the
> other CPUs yet.
>
> For something like kmem_cache_init() we could, I suppose, pass in a
> dont-take-any-locks flag. But for a fastpath thing (if there are any such
> cases) that wouldn't be an option.
>
> All very unpleasant.
It is, but I think it's ok to assume that we won't contention that early
during boot. I mean, irqs are disabled not because we are in an atomic
section but bcs we just have never enabled them yet :)
> And yes, the mutex code will (with debug enabled) unconditionally enable
> interrupts. ppc64 tends to oops when this happens, in the timer handler
> (so it'll be intermittent...)
I tend to say that any code that hard-enables interrupts is looking for
trouble (mostly for that very reason of init stuff).
The thing is, to talk to the PIC, we need generally quite a bit of stuff
up, like page tables for ioremap etc... and thus because of that, as I
said, archs carry horrible hacks all over the place.
We can't just local_irq_enable() and setup the PIC later because the PIC
may have been left in a crap state by the BIOS (or whatever else we boot
from like kexec/kdump).
Thus it's a matter of
- making sure we have some sanity with irq enabling/disabling
(basically not hard-enabling, always doing save/restore)
- making sure our very zealous runtime checks don't trigger on
"interrupts have never been enabled yet" :)
I think the above is a small price to pay for all the added sanity of
having an allocator earlier and removing all of the crap archs carry
around to have ioremap working very early.
Ok, not _all_ of it because archs took bad habits and setup_arch() tends
to be full of stuff needing to tap the hardware as well, but heh, let's
clean things one step at a time. Once we have done that, we can/should
probably split setup_arch() (before allocator etc... setup) and
init_arch() after. That way, all the code that need to atually probe
hardware can be moved there (on ppc, that's also where we need to
discover PCI bridges so we can get the legacy ISA stuff etc....)
I can already foresee vast amounts of cleanups in the ppc code (and
getting rid of bootmem allocations in lots of places) with such
things :)
> But looking at
> work-around-ppc64-bootup-bug-by-making-mutex-debugging-save-restore-irqs.patch
> I realise I don't understand it. We only go into the irq-enabling code in
> the case of contention, and there cannot be contention in this case?
I'll have a look, possibly not before tomorrow though.
Ben.
next prev parent reply other threads:[~2006-06-05 8:50 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-05 5:40 [RFC][PATCH] request_irq(...,SA_BOOTMEM); Benjamin Herrenschmidt
2006-06-05 7:08 ` Benjamin Herrenschmidt
2006-06-05 7:31 ` Andrew Morton
2006-06-05 7:48 ` Benjamin Herrenschmidt
2006-06-05 8:24 ` Andrew Morton
2006-06-05 8:49 ` Benjamin Herrenschmidt [this message]
2006-06-05 8:57 ` Andrew Morton
2006-06-05 9:01 ` Ingo Molnar
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=1149497376.8543.65.camel@localhost.localdomain \
--to=benh@kernel.crashing.org \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=torvalds@osdl.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