All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roland Dreier <rolandd@cisco.com>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH] Create __kzalloc_gfp_kernel()
Date: Tue, 13 Sep 2005 22:09:00 -0700	[thread overview]
Message-ID: <52acig2q37.fsf_-_@cisco.com> (raw)
In-Reply-To: <52y8602zl7.fsf@cisco.com> (Roland Dreier's message of "Tue, 13 Sep 2005 18:43:48 -0700")

Andrew, it turns out that your idea of kzalloc_gfp_kernel() does save
a bit.  Here's a patch that shouldn't even make Linus look for a
cattle prod.

[BTW, it's rather amusing watching ld use a gig of memory and several
minutes of CPU time as it strains to link an allyesconfig kernel]

 - R.


Here's a patch to get the effect of having kzalloc_gfp_kernel()
without affecting any callers.  It makes kzalloc() an inline that just
calls __kzalloc_gfp_kernel() if the flags parameter is a compile-time
constant and is GFP_KERNEL, and calls __kzalloc() otherwise.

On an x86_64 allyesconfig kernel, I see the following size:

       text    data     bss     dec     hex filename
    24202272 7609162 1998512 33809946 203e61a ../kbuild-before/vmlinux
    24201601 7609266 1998512 33809379 203e3e3 ../kbuild-after/vmlinux

for a net savings of 671 bytes of text (at a cost of 104 bytes of data
for some reason).  As use of kzalloc() becomes more widespread, this
should get even better.

Signed-off-by: Roland Dreier <rolandd@cisco.com>

diff --git a/include/linux/slab.h b/include/linux/slab.h
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -99,7 +99,16 @@ found:
 	return __kmalloc(size, flags);
 }
 
-extern void *kzalloc(size_t, unsigned int __nocast);
+extern void *__kzalloc(size_t, unsigned int __nocast);
+extern void *__kzalloc_gfp_kernel(size_t);
+
+static inline void *kzalloc(size_t size, unsigned int __nocast flags)
+{
+	if (__builtin_constant_p(flags) && flags == GFP_KERNEL)
+		return __kzalloc_gfp_kernel(size);
+	else
+		return __kzalloc(size, flags);
+}
 
 /**
  * kcalloc - allocate memory for an array. The memory is set to zero.
diff --git a/mm/slab.c b/mm/slab.c
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -2985,14 +2985,20 @@ EXPORT_SYMBOL(kmem_cache_free);
  * @size: how many bytes of memory are required.
  * @flags: the type of memory to allocate.
  */
-void *kzalloc(size_t size, unsigned int __nocast flags)
+void *__kzalloc(size_t size, unsigned int __nocast flags)
 {
 	void *ret = kmalloc(size, flags);
 	if (ret)
 		memset(ret, 0, size);
 	return ret;
 }
-EXPORT_SYMBOL(kzalloc);
+EXPORT_SYMBOL(__kzalloc);
+
+void *__kzalloc_gfp_kernel(size_t size)
+{
+	return __kzalloc(size, GFP_KERNEL);
+}
+EXPORT_SYMBOL(__kzalloc_gfp_kernel);
 
 /**
  * kfree - free previously allocated memory

  reply	other threads:[~2005-09-14  5:09 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-13 15:18 [PATCH] SELinux - convert to kzalloc James Morris
2005-09-13 19:07 ` Andrew Morton
2005-09-13 20:37   ` James Morris
2005-09-14  1:43   ` Roland Dreier
2005-09-14  5:09     ` Roland Dreier [this message]
2005-09-14  5:35       ` [PATCH] Create __kzalloc_gfp_kernel() Andrew Morton
2005-09-14 18:39         ` [PATCH] Move GFP_KERNEL use out of line to shrink text Roland Dreier
2005-09-15  5:13           ` Denis Vlasenko
2005-09-15 11:42             ` Paulo Marques
2005-09-14  5:06 ` [PATCH] SELinux - convert to kzalloc Denis Vlasenko

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=52acig2q37.fsf_-_@cisco.com \
    --to=rolandd@cisco.com \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.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.