[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] introduce xzalloc() & Co
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxx> # Date 1317730526 -7200 # Node ID e09ebf7a31f55bb26c3cce7695a435ed20adf05b # Parent a99d75671a911f9c0d5d11e0fe88a0a65863cb44 introduce xzalloc() & Co Rather than having to match a call to one of the xmalloc() flavors with a subsequent memset(), introduce a zeroing variant of each of those flavors. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> --- diff -r a99d75671a91 -r e09ebf7a31f5 xen/common/xmalloc_tlsf.c --- a/xen/common/xmalloc_tlsf.c Tue Oct 04 14:11:56 2011 +0200 +++ b/xen/common/xmalloc_tlsf.c Tue Oct 04 14:15:26 2011 +0200 @@ -585,6 +585,13 @@ return p; } +void *_xzalloc(unsigned long size, unsigned long align) +{ + void *p = _xmalloc(size, align); + + return p ? memset(p, 0, size) : p; +} + void xfree(void *p) { struct bhdr *b; diff -r a99d75671a91 -r e09ebf7a31f5 xen/include/acpi/platform/aclinux.h --- a/xen/include/acpi/platform/aclinux.h Tue Oct 04 14:11:56 2011 +0200 +++ b/xen/include/acpi/platform/aclinux.h Tue Oct 04 14:15:26 2011 +0200 @@ -77,10 +77,7 @@ #define acpi_thread_id struct vcpu * #define ACPI_ALLOCATE(a) xmalloc_bytes(a) -#define ACPI_ALLOCATE_ZEROED(a) ({ \ - void *p = xmalloc_bytes(a); \ - if ( p ) memset(p, 0, a); \ - p; }) +#define ACPI_ALLOCATE_ZEROED(a) xzalloc_bytes(a) #define ACPI_FREE(a) xfree(a) #endif /* __ACLINUX_H__ */ diff -r a99d75671a91 -r e09ebf7a31f5 xen/include/xen/xmalloc.h --- a/xen/include/xen/xmalloc.h Tue Oct 04 14:11:56 2011 +0200 +++ b/xen/include/xen/xmalloc.h Tue Oct 04 14:15:26 2011 +0200 @@ -11,19 +11,25 @@ /* Allocate space for typed object. */ #define xmalloc(_type) ((_type *)_xmalloc(sizeof(_type), __alignof__(_type))) +#define xzalloc(_type) ((_type *)_xzalloc(sizeof(_type), __alignof__(_type))) /* Allocate space for array of typed objects. */ #define xmalloc_array(_type, _num) \ ((_type *)_xmalloc_array(sizeof(_type), __alignof__(_type), _num)) +#define xzalloc_array(_type, _num) \ + ((_type *)_xzalloc_array(sizeof(_type), __alignof__(_type), _num)) /* Allocate untyped storage. */ -#define xmalloc_bytes(_bytes) (_xmalloc(_bytes, SMP_CACHE_BYTES)) +#define xmalloc_bytes(_bytes) _xmalloc(_bytes, SMP_CACHE_BYTES) +#define xzalloc_bytes(_bytes) _xzalloc(_bytes, SMP_CACHE_BYTES) /* Free any of the above. */ extern void xfree(void *); /* Underlying functions */ extern void *_xmalloc(unsigned long size, unsigned long align); +extern void *_xzalloc(unsigned long size, unsigned long align); + static inline void *_xmalloc_array( unsigned long size, unsigned long align, unsigned long num) { @@ -33,6 +39,15 @@ return _xmalloc(size * num, align); } +static inline void *_xzalloc_array( + unsigned long size, unsigned long align, unsigned long num) +{ + /* Check for overflow. */ + if (size && num > UINT_MAX / size) + return NULL; + return _xzalloc(size * num, align); +} + /* * Pooled allocator interface. */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |