lkml.org 
[lkml]   [2005]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [-mm patch] make kcalloc() a static inline
Date
On Tuesday 09 August 2005 01:38, Adrian Bunk wrote:
> kcalloc() doesn't do much more than calling kzalloc(), and gcc has
> better optimizing opportunities when it's inlined.
>
> The result of this patch with a fulll kernel compile (roughly equivalent
> to "make allyesconfig") shows a minimal size improvement:
>
> text data bss dec hex filename
> 25864955 5891214 2012840 33769009 2034631 vmlinux-before
> 25864635 5891206 2012840 33768681 20344e9 vmlinux-staticinline
>
>
> Signed-off-by: Adrian Bunk <bunk@stusta.de>
>
> ---
>
> include/linux/slab.h | 15 ++++++++++++++-
> mm/slab.c | 14 --------------
> 2 files changed, 14 insertions(+), 15 deletions(-)
>
> --- linux-2.6.13-rc5-mm1-full/include/linux/slab.h.old 2005-08-08 12:28:32.000000000 +0200
> +++ linux-2.6.13-rc5-mm1-full/include/linux/slab.h 2005-08-08 12:29:59.000000000 +0200
> @@ -103,8 +103,21 @@
> return __kmalloc(size, flags);
> }
>
> -extern void *kcalloc(size_t, size_t, unsigned int __nocast);
> extern void *kzalloc(size_t, unsigned int __nocast);
> +
> +/**
> + * kcalloc - allocate memory for an array. The memory is set to zero.
> + * @n: number of elements.
> + * @size: element size.
> + * @flags: the type of memory to allocate.
> + */
> +static inline void *kcalloc(size_t n, size_t size, unsigned int __nocast flags)
> +{
> + if (n != 0 && size > INT_MAX / n)
> + return NULL;
> + return kzalloc(n * size, flags);
> +}
> +
> extern void kfree(const void *);
> extern unsigned int ksize(const void *);
>
> --- linux-2.6.13-rc5-mm1-full/mm/slab.c.old 2005-08-08 12:29:26.000000000 +0200
> +++ linux-2.6.13-rc5-mm1-full/mm/slab.c 2005-08-08 12:29:53.000000000 +0200
> @@ -3028,20 +3028,6 @@
> EXPORT_SYMBOL(kzalloc);
>
> /**
> - * kcalloc - allocate memory for an array. The memory is set to zero.
> - * @n: number of elements.
> - * @size: element size.
> - * @flags: the type of memory to allocate.
> - */
> -void *kcalloc(size_t n, size_t size, unsigned int __nocast flags)
> -{
> - if (n != 0 && size > INT_MAX / n)
> - return NULL;
> - return kzalloc(n * size, flags);
> -}
> -EXPORT_SYMBOL(kcalloc);
> -
> -/**
> * kfree - free previously allocated memory
> * @objp: pointer returned by kmalloc.
> *

Can you conditionalize it on __builtin_constant_p(n) ?
Otherwise with variable n you have 3 oprations in inlined
code, one of them a division.

I bet you'll save even more space with such change.
--
vda

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-08-15 10:09    [W:0.247 / U:0.388 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site