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: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Heiko Schocher <hs@denx.de> Acked-by: Simon Glass <sjg@chromium.org> Reviewed-by: Lukasz Majewski <l.majewski@samsung.com>
This commit is contained in:
parent
ebc3328ccc
commit
6b9f9eadff
|
@ -36,8 +36,19 @@ extern struct p_current *current;
|
||||||
#define KERN_INFO
|
#define KERN_INFO
|
||||||
#define KERN_DEBUG
|
#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 *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) kmalloc(size, 0)
|
||||||
#define __vmalloc(size, flags, pgsz) kmalloc(size, flags)
|
#define __vmalloc(size, flags, pgsz) kmalloc(size, flags)
|
||||||
static inline void *vzalloc(unsigned long size)
|
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 */
|
/* drivers/char/random.c */
|
||||||
#define get_random_bytes(...)
|
#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 */
|
/* include/linux/leds.h */
|
||||||
struct led_trigger {};
|
struct led_trigger {};
|
||||||
|
|
||||||
|
|
|
@ -16,14 +16,13 @@ unsigned long copy_from_user(void *dest, const void *src,
|
||||||
|
|
||||||
void *kmalloc(size_t size, int flags)
|
void *kmalloc(size_t size, int flags)
|
||||||
{
|
{
|
||||||
return memalign(ARCH_DMA_MINALIGN, size);
|
void *p;
|
||||||
}
|
|
||||||
|
|
||||||
void *kzalloc(size_t size, int flags)
|
p = memalign(ARCH_DMA_MINALIGN, size);
|
||||||
{
|
if (flags & __GFP_ZERO)
|
||||||
void *ptr = kmalloc(size, flags);
|
memset(p, 0, size);
|
||||||
memset(ptr, 0, size);
|
|
||||||
return ptr;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct kmem_cache *get_mem(int element_sz)
|
struct kmem_cache *get_mem(int element_sz)
|
||||||
|
|
Loading…
Reference in New Issue