
Hello Masahiro,
Am 08.07.2015 um 06:29 schrieb Masahiro Yamada:
Currently, kzalloc() returns zero-filled memory, while kmalloc() simply ignores the second argument and never fills the memory area with zeros.
I want kmalloc(size, __GFP_ZERO) to behave as kzalloc() does, which will make it easier to add more memory allocator variants.
With the introduction of __GFP_ZERO flag, going forward, kzmalloc() variants can fall back to kmalloc() enabling the __GFP_ZERO flag.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
include/linux/compat.h | 20 ++++++++++++-------- lib/linux_compat.c | 13 ++++++------- 2 files changed, 18 insertions(+), 15 deletions(-)
Reviewed-by: Heiko Schocher hs@denx.de
bye, Heiko
diff --git a/include/linux/compat.h b/include/linux/compat.h index a3d136b..64988bf 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -36,8 +36,19 @@ extern struct p_current *current; #define KERN_INFO #define KERN_DEBUG
+#define GFP_ATOMIC ((gfp_t) 0) +#define GFP_KERNEL ((gfp_t) 0) +#define GFP_NOFS ((gfp_t) 0) +#define GFP_USER ((gfp_t) 0) +#define __GFP_NOWARN ((gfp_t) 0) +#define __GFP_ZERO ((__force gfp_t)0x8000u) /* Return zeroed page on success */
- void *kmalloc(size_t size, int flags);
-void *kzalloc(size_t size, int flags);
+static inline void *kzalloc(size_t size, gfp_t flags) +{
- return kmalloc(size, flags | __GFP_ZERO);
+} #define vmalloc(size) kmalloc(size, 0) #define __vmalloc(size, flags, pgsz) kmalloc(size, flags) static inline void *vzalloc(unsigned long size) @@ -77,13 +88,6 @@ void *kmem_cache_alloc(struct kmem_cache *obj, int flag); /* drivers/char/random.c */ #define get_random_bytes(...)
-/* idr.c */ -#define GFP_ATOMIC ((gfp_t) 0) -#define GFP_KERNEL ((gfp_t) 0) -#define GFP_NOFS ((gfp_t) 0) -#define GFP_USER ((gfp_t) 0) -#define __GFP_NOWARN ((gfp_t) 0)
- /* include/linux/leds.h */ struct led_trigger {};
diff --git a/lib/linux_compat.c b/lib/linux_compat.c index 8c7a7b5..a936a7e 100644 --- a/lib/linux_compat.c +++ b/lib/linux_compat.c @@ -16,14 +16,13 @@ unsigned long copy_from_user(void *dest, const void *src,
void *kmalloc(size_t size, int flags) {
- return memalign(ARCH_DMA_MINALIGN, size);
-}
- void *p;
-void *kzalloc(size_t size, int flags) -{
- void *ptr = kmalloc(size, flags);
- memset(ptr, 0, size);
- return ptr;
p = memalign(ARCH_DMA_MINALIGN, size);
if (flags & __GFP_ZERO)
memset(p, 0, size);
return p; }
struct kmem_cache *get_mem(int element_sz)