Messages in this thread | | | From | Denis Vlasenko <> | Subject | Re: [-mm patch] make kcalloc() a static inline | Date | Mon, 15 Aug 2005 11:06:05 +0300 |
| |
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/
| |