Commit 6b9f9ead authored by Masahiro Yamada's avatar Masahiro Yamada Committed by Simon Glass

linux_compat: handle __GFP_ZERO in kmalloc()

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: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: default avatarHeiko Schocher <hs@denx.de>
Acked-by: default avatarSimon Glass <sjg@chromium.org>
Reviewed-by: default avatarLukasz Majewski <l.majewski@samsung.com>
parent ebc3328c
......@@ -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 {};
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment