public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>,
	Linux Kernel list <linux-kernel@vger.kernel.org>
Subject: Re: slab: setup allocators earlier in the boot sequence
Date: Fri, 12 Jun 2009 14:25:56 +1000	[thread overview]
Message-ID: <1244780756.7172.58.camel@pasglop> (raw)
In-Reply-To: <1244779009.7172.52.camel@pasglop>

On Fri, 2009-06-12 at 13:56 +1000, Benjamin Herrenschmidt wrote:
> > This seem to explode in various places on powerpc :-(
> 
> Main breakage is that slab now gets used a lot earlier than init_IRQ and
> time_init(), but kmalloc() internally hard-enables interrupts when
> GFP_WAIT is passed (it should not but that another side effect of the
> change, see below). So we have the decrementer (CPU timer) popping and
> it crashes on uninitialized data structures in the timer code.
> 
> The reason GFP_WAIT is passed comes from various bits of init code we
> have using a function we call alloc_maybe_bootmem() which does kmalloc
> if initialized and alloc_bootmem() before...

 .../...

And that's not the only problem. The next one is a bit more sneaky, and
I suppose doesn't hit only us...

I'm not sure what's the right fix other than going all the way to having
kmalloc() automagically mask out bits when called at the wrong time.

Typically, what happens here is ioremap() causes __get_vm_area() which
blows up because it does GFP_KERNEL.

Now, that used to work because we have a trick for early ioremap's
(which the arch need, since we do need to ioremap very early, for things
like accessing memory mapped interrupt controllers, or other various low
level platform things).

What we do is VMALLOC_END is defined to be a variable (which we misnamed
ioremap_bot for historical reasons). If ioremap is called before
mem_init() then we allocate virtual space by moving down that variable.
Else, we use get_vm_area().

Now this is broken with the change because after mem_init(), we now use
get_vm_area() which does a kmalloc(...,GFP_KERNEL), which explodes
because it turns on interrupts way too early.

I'll cook up a patch that defines a global bitmask of "forbidden" GFP
bits and see how things go.

Cheers,
Ben.



  reply	other threads:[~2009-06-12  4:26 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200906111959.n5BJxFj9021205@hera.kernel.org>
2009-06-12  1:29 ` slab: setup allocators earlier in the boot sequence Benjamin Herrenschmidt
2009-06-12  1:30 ` Benjamin Herrenschmidt
2009-06-12  3:56   ` Benjamin Herrenschmidt
2009-06-12  4:25     ` Benjamin Herrenschmidt [this message]
2009-06-12  5:07       ` Benjamin Herrenschmidt
2009-06-12  6:16         ` Pekka J Enberg
2009-06-12  7:34           ` Benjamin Herrenschmidt
2009-06-12  7:39             ` Benjamin Herrenschmidt
2009-06-12  7:47               ` Pekka Enberg
2009-06-12  8:17               ` Pekka Enberg
2009-06-12  8:47                 ` Benjamin Herrenschmidt
2009-06-12  7:45             ` Pekka Enberg
2009-06-12  7:54               ` Nick Piggin
2009-06-12  7:59                 ` Pekka Enberg
2009-06-12  8:02                   ` Nick Piggin
2009-06-12  8:04                     ` Pekka Enberg
2009-06-12  8:20                       ` Nick Piggin
2009-06-12  8:44                       ` Benjamin Herrenschmidt
2009-06-12  8:49                         ` Pekka Enberg
2009-06-12  9:13                           ` Nick Piggin
2009-06-12  9:24                             ` Benjamin Herrenschmidt
2009-06-12  9:30                               ` Nick Piggin
2009-06-12  9:44                                 ` Benjamin Herrenschmidt
2009-06-12  9:49                                   ` Nick Piggin
2009-06-12  8:44                     ` Benjamin Herrenschmidt
2009-06-12  8:42                 ` Benjamin Herrenschmidt
2009-06-12  8:40               ` Benjamin Herrenschmidt
2009-06-12  8:43                 ` Pekka Enberg
2009-06-12  8:53                   ` Benjamin Herrenschmidt
2009-06-12  9:05                     ` Pekka Enberg
2009-06-12  9:14                       ` Nick Piggin
2009-06-12  9:07                     ` Pekka Enberg
2009-06-12 13:49                       ` Christoph Lameter
2009-06-12 13:54                         ` Pekka Enberg
2009-06-12 14:02                           ` Benjamin Herrenschmidt
2009-06-12 14:04                             ` Pekka Enberg
2009-06-12 14:07                           ` Christoph Lameter
2009-06-12 14:00                         ` Benjamin Herrenschmidt
2009-06-12 13:44                   ` Christoph Lameter

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=1244780756.7172.58.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=penberg@cs.helsinki.fi \
    --cc=torvalds@linux-foundation.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