From: Jesse Gross Date: Fri, 15 Jul 2011 16:59:16 +0000 (-0700) Subject: datapath: Don't pass __GFP_ZERO to kmalloc on older kernels. X-Git-Tag: v1.2.0~6 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;ds=sidebyside;h=466d7efa366fddac616c537507b56e319965b63c;p=sliver-openvswitch.git datapath: Don't pass __GFP_ZERO to kmalloc on older kernels. On new kernels kzalloc() is simply a wrapper around kmalloc with the addition of the __GFP_ZERO flag. flex_arrays take advantage of this by expecting the user to just pass in this flag if they want the memory to be zeroed. However, before 2.6.23, kzalloc() was a function in its own right and kmalloc really didn't like receiving __GFP_ZERO. This overrides kmalloc() to intercept the flags and direct the call to the right function. Signed-off-by: Jesse Gross Acked-by: Ben Pfaff --- diff --git a/datapath/linux/compat/include/linux/slab.h b/datapath/linux/compat/include/linux/slab.h index 7e9c3f4e2..9d6ad1f99 100644 --- a/datapath/linux/compat/include/linux/slab.h +++ b/datapath/linux/compat/include/linux/slab.h @@ -11,4 +11,21 @@ extern void *kmemdup(const void *src, size_t len, gfp_t gfp); #define kmem_cache_create(n, s, a, f, c) kmem_cache_create(n, s, a, f, c, NULL) #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23) +static inline void *rpl_kzalloc(size_t size, gfp_t flags) +{ + return kzalloc(size, flags & ~__GFP_ZERO); +} +#define kzalloc rpl_kzalloc + +static inline void *rpl_kmalloc(size_t size, gfp_t flags) +{ + if (flags & __GFP_ZERO) + return kzalloc(size, flags); + + return kmalloc(size, flags); +} +#define kmalloc rpl_kmalloc +#endif + #endif