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 <[EMAIL PROTECTED]>
> 
> ---
> 
>  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 [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to