From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Wed, 08 Jul 2015 07:03:44 +0200 Subject: [U-Boot] [RFC PATCH 04/12] linux_compat: handle __GFP_ZERO in kmalloc() In-Reply-To: <1436329782-9179-5-git-send-email-yamada.masahiro@socionext.com> References: <1436329782-9179-1-git-send-email-yamada.masahiro@socionext.com> <1436329782-9179-5-git-send-email-yamada.masahiro@socionext.com> Message-ID: <559CAF30.7070304@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > --- > > include/linux/compat.h | 20 ++++++++++++-------- > lib/linux_compat.c | 13 ++++++------- > 2 files changed, 18 insertions(+), 15 deletions(-) Reviewed-by: Heiko Schocher 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) > -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany