[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.1-testing] introduce xzalloc() & Co
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxx> # Date 1331201015 0 # Node ID 0bbaff574126e8fb417abe6d94b42f7bf460ad26 # Parent 8a2e167905d3d0447d3ab1a5e58a37187c9b9046 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> xen-unstable changeset: 23900:e09ebf7a31f5 xen-unstable date: Tue Oct 04 14:15:26 2011 +0200 --- diff -r 8a2e167905d3 -r 0bbaff574126 xen/common/xmalloc_tlsf.c --- a/xen/common/xmalloc_tlsf.c Thu Mar 08 08:58:26 2012 +0000 +++ b/xen/common/xmalloc_tlsf.c Thu Mar 08 10:03:35 2012 +0000 @@ -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 8a2e167905d3 -r 0bbaff574126 xen/include/acpi/platform/aclinux.h --- a/xen/include/acpi/platform/aclinux.h Thu Mar 08 08:58:26 2012 +0000 +++ b/xen/include/acpi/platform/aclinux.h Thu Mar 08 10:03:35 2012 +0000 @@ -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 8a2e167905d3 -r 0bbaff574126 xen/include/xen/xmalloc.h --- a/xen/include/xen/xmalloc.h Thu Mar 08 08:58:26 2012 +0000 +++ b/xen/include/xen/xmalloc.h Thu Mar 08 10:03:35 2012 +0000 @@ -8,19 +8,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) { @@ -30,6 +36,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@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |