From: Pekka J Enberg This patch introduces a kzalloc wrapper and converts kernel/ to use it. It saves a little program text. Signed-off-by: Pekka Enberg Signed-off-by: Andrew Morton --- include/linux/slab.h | 1 + kernel/intermodule.c | 3 +-- kernel/params.c | 4 ++-- kernel/power/pm.c | 3 +-- kernel/resource.c | 3 +-- kernel/workqueue.c | 3 +-- mm/slab.c | 24 ++++++++++++++++-------- 7 files changed, 23 insertions(+), 18 deletions(-) diff -puN include/linux/slab.h~introduce-and-use-kzalloc include/linux/slab.h --- devel/include/linux/slab.h~introduce-and-use-kzalloc 2005-08-05 01:08:56.000000000 -0700 +++ devel-akpm/include/linux/slab.h 2005-08-05 01:08:56.000000000 -0700 @@ -104,6 +104,7 @@ found: } extern void *kcalloc(size_t, size_t, unsigned int __nocast); +extern void *kzalloc(size_t, unsigned int __nocast); extern void kfree(const void *); extern unsigned int ksize(const void *); diff -puN kernel/intermodule.c~introduce-and-use-kzalloc kernel/intermodule.c --- devel/kernel/intermodule.c~introduce-and-use-kzalloc 2005-08-05 01:08:56.000000000 -0700 +++ devel-akpm/kernel/intermodule.c 2005-08-05 01:08:56.000000000 -0700 @@ -39,7 +39,7 @@ void inter_module_register(const char *i struct list_head *tmp; struct inter_module_entry *ime, *ime_new; - if (!(ime_new = kmalloc(sizeof(*ime), GFP_KERNEL))) { + if (!(ime_new = kzalloc(sizeof(*ime), GFP_KERNEL))) { /* Overloaded kernel, not fatal */ printk(KERN_ERR "Aiee, inter_module_register: cannot kmalloc entry for '%s'\n", @@ -47,7 +47,6 @@ void inter_module_register(const char *i kmalloc_failed = 1; return; } - memset(ime_new, 0, sizeof(*ime_new)); ime_new->im_name = im_name; ime_new->owner = owner; ime_new->userdata = userdata; diff -puN kernel/params.c~introduce-and-use-kzalloc kernel/params.c --- devel/kernel/params.c~introduce-and-use-kzalloc 2005-08-05 01:08:56.000000000 -0700 +++ devel-akpm/kernel/params.c 2005-08-05 01:08:56.000000000 -0700 @@ -542,8 +542,8 @@ static void __init kernel_param_sysfs_se { struct module_kobject *mk; - mk = kmalloc(sizeof(struct module_kobject), GFP_KERNEL); - memset(mk, 0, sizeof(struct module_kobject)); + mk = kzalloc(sizeof(struct module_kobject), GFP_KERNEL); + BUG_ON(!mk); mk->mod = THIS_MODULE; kobj_set_kset_s(mk, module_subsys); diff -puN kernel/power/pm.c~introduce-and-use-kzalloc kernel/power/pm.c --- devel/kernel/power/pm.c~introduce-and-use-kzalloc 2005-08-05 01:08:56.000000000 -0700 +++ devel-akpm/kernel/power/pm.c 2005-08-05 01:08:56.000000000 -0700 @@ -60,9 +60,8 @@ struct pm_dev *pm_register(pm_dev_t type unsigned long id, pm_callback callback) { - struct pm_dev *dev = kmalloc(sizeof(struct pm_dev), GFP_KERNEL); + struct pm_dev *dev = kzalloc(sizeof(struct pm_dev), GFP_KERNEL); if (dev) { - memset(dev, 0, sizeof(*dev)); dev->type = type; dev->id = id; dev->callback = callback; diff -puN kernel/resource.c~introduce-and-use-kzalloc kernel/resource.c --- devel/kernel/resource.c~introduce-and-use-kzalloc 2005-08-05 01:08:56.000000000 -0700 +++ devel-akpm/kernel/resource.c 2005-08-05 01:08:56.000000000 -0700 @@ -430,10 +430,9 @@ EXPORT_SYMBOL(adjust_resource); */ struct resource * __request_region(struct resource *parent, unsigned long start, unsigned long n, const char *name) { - struct resource *res = kmalloc(sizeof(*res), GFP_KERNEL); + struct resource *res = kzalloc(sizeof(*res), GFP_KERNEL); if (res) { - memset(res, 0, sizeof(*res)); res->name = name; res->start = start; res->end = start + n - 1; diff -puN kernel/workqueue.c~introduce-and-use-kzalloc kernel/workqueue.c --- devel/kernel/workqueue.c~introduce-and-use-kzalloc 2005-08-05 01:08:56.000000000 -0700 +++ devel-akpm/kernel/workqueue.c 2005-08-05 01:08:56.000000000 -0700 @@ -310,10 +310,9 @@ struct workqueue_struct *__create_workqu BUG_ON(strlen(name) > 10); - wq = kmalloc(sizeof(*wq), GFP_KERNEL); + wq = kzalloc(sizeof(*wq), GFP_KERNEL); if (!wq) return NULL; - memset(wq, 0, sizeof(*wq)); wq->name = name; /* We don't need the distraction of CPUs appearing and vanishing. */ diff -puN mm/slab.c~introduce-and-use-kzalloc mm/slab.c --- devel/mm/slab.c~introduce-and-use-kzalloc 2005-08-05 01:08:56.000000000 -0700 +++ devel-akpm/mm/slab.c 2005-08-05 01:09:25.000000000 -0700 @@ -2557,6 +2557,20 @@ void kmem_cache_free(kmem_cache_t *cache EXPORT_SYMBOL(kmem_cache_free); /** + * kzalloc - allocate memory. The memory is set to zero. + * @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 *ret = kmalloc(size, flags); + if (ret) + memset(ret, 0, size); + return ret; +} +EXPORT_SYMBOL(kzalloc); + +/** * kcalloc - allocate memory for an array. The memory is set to zero. * @n: number of elements. * @size: element size. @@ -2564,15 +2578,9 @@ EXPORT_SYMBOL(kmem_cache_free); */ void *kcalloc(size_t n, size_t size, unsigned int __nocast flags) { - void *ret = NULL; - if (n != 0 && size > INT_MAX / n) - return ret; - - ret = kmalloc(n * size, flags); - if (ret) - memset(ret, 0, n * size); - return ret; + return NULL; + return kzalloc(n * size, flags); } EXPORT_SYMBOL(kcalloc); _