From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Pekka Enberg <penberg@cs.helsinki.fi>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Linux Kernel list <linux-kernel@vger.kernel.org>,
linux-mm <linux-mm@kvack.org>,
mingo@elte.hu, cl@linux-foundation.org,
akpm@linux-foundation.org, npiggin@suse.de
Subject: Re: slab: setup allocators earlier in the boot sequence
Date: Fri, 12 Jun 2009 18:40:45 +1000 [thread overview]
Message-ID: <1244796045.7172.82.camel@pasglop> (raw)
In-Reply-To: <1244792745.30512.13.camel@penberg-laptop>
On Fri, 2009-06-12 at 10:45 +0300, Pekka Enberg wrote:
> Hi Ben,
> The call-sites I fixed up are all boot code AFAICT. And I like I said,
> we can't really _miss_ any of those places, they must be checking for
> slab_is_available() _anyway_; otherwise they have no business using
> kmalloc(). And note: all call-sites that _unconditionally_ use
> kmalloc(GFP_KERNEL) are safe because they worked before.
No. The check for slab_is_available() can be levels higher, for example
the vmalloc case. I'm sure I can find a whole bunch more :-) Besides
I find the approach fragile, and it will suck for things that can be
rightfully called also later on.
> Again, I audited the call-sites and they all should be boot-time code.
> The only borderline case I could see is in s390 arch code which is why I
> droppped that hunk for now.
And the vmalloc case, and some page table handling code in arch/powerpc,
and I'm sure we can find bazillion of them more if we look closely.
> Sure, I think we can do what you want with the patch below.
>
> But I still think we need my patch regardless. The call sites I
> converted are all init code and should be using GFP_NOWAIT. Does it fix
> your boot on powerpc?
Not all init code needs to call GFP_NOWAIT. But again, my main worry
isn't necessary init code call sites, it's things that can themselves be
called from both init and later.
But to get a step back, I do prefer not having to bother in every call
site. It seems a lot more natural to me in this case to have the
allocator itself degrade, avoiding the burden on the callers, the risk
of error, the damage when we change and move things around etc...
Cheers,
Ben.
> Pekka
>
> diff --git a/mm/slab.c b/mm/slab.c
> index 9a90b00..722beb5 100644
> --- a/mm/slab.c
> +++ b/mm/slab.c
> @@ -2791,6 +2791,13 @@ static int cache_grow(struct kmem_cache *cachep,
>
> offset *= cachep->colour_off;
>
> + /*
> + * Lets not wait if we're booting up or suspending even if the user
> + * asks for it.
> + */
> + if (system_state != SYSTEM_RUNNING)
> + local_flags &= ~__GFP_WAIT;
> +
> if (local_flags & __GFP_WAIT)
> local_irq_enable();
>
> diff --git a/mm/slub.c b/mm/slub.c
> index 65ffda5..f9a6bc8 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -1547,6 +1547,13 @@ new_slab:
> goto load_freelist;
> }
>
> + /*
> + * Lets not wait if we're booting up or suspending even if the user
> + * asks for it.
> + */
> + if (system_state != SYSTEM_RUNNING)
> + gfpflags &= ~__GFP_WAIT;
> +
> if (gfpflags & __GFP_WAIT)
> local_irq_enable();
>
>
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2009-06-12 8:39 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200906111959.n5BJxFj9021205@hera.kernel.org>
[not found] ` <1244770230.7172.4.camel@pasglop>
[not found] ` <1244779009.7172.52.camel@pasglop>
[not found] ` <1244780756.7172.58.camel@pasglop>
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 [this message]
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=1244796045.7172.82.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=akpm@linux-foundation.org \
--cc=cl@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mingo@elte.hu \
--cc=npiggin@suse.de \
--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