[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH] lib/ukalloc: Move internal functions to new header
Hi Simon, Besides the license year on alloc_impl.h which should be 2019 instead of 2017 (and which can be fixed on upstreaming) this patch looks good. Reviewed-by: Costin Lupu <costin.lupu@xxxxxxxxx> On 4/24/19 11:42 AM, Simon Kuenzer wrote: > Separates API functions from allocator internal functions. The new > header <uk/alloc_impl.h> should only be used by actual allocator > implementations. It provides wrapper functions that can be used by > allocators that implement just a subset of the of the ukalloc API. > > Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> > --- > lib/ukalloc/alloc.c | 2 +- > lib/ukalloc/include/uk/alloc.h | 32 ---------- > lib/ukalloc/include/uk/alloc_impl.h | 95 +++++++++++++++++++++++++++++ > lib/ukallocbbuddy/bbuddy.c | 1 + > 4 files changed, 97 insertions(+), 33 deletions(-) > create mode 100644 lib/ukalloc/include/uk/alloc_impl.h > > diff --git a/lib/ukalloc/alloc.c b/lib/ukalloc/alloc.c > index fb38bcb0..708bd02a 100644 > --- a/lib/ukalloc/alloc.c > +++ b/lib/ukalloc/alloc.c > @@ -47,7 +47,7 @@ > > #include <errno.h> > #include <string.h> > -#include <uk/alloc.h> > +#include <uk/alloc_impl.h> > #include <uk/config.h> > #include <uk/essentials.h> > #include <uk/assert.h> > diff --git a/lib/ukalloc/include/uk/alloc.h b/lib/ukalloc/include/uk/alloc.h > index 23813a86..c62d93df 100644 > --- a/lib/ukalloc/include/uk/alloc.h > +++ b/lib/ukalloc/include/uk/alloc.h > @@ -50,7 +50,6 @@ struct uk_alloc; > extern "C" { > #endif > > -int uk_alloc_register(struct uk_alloc *a); > struct uk_alloc *uk_alloc_get_default(void); > int uk_alloc_set_default(struct uk_alloc *a); > > @@ -240,37 +239,6 @@ static inline ssize_t uk_alloc_availmem(struct uk_alloc > *a) > } > #endif /* CONFIG_LIBUKALLOC_IFSTATS */ > > -#if CONFIG_LIBUKALLOC_IFPAGES > -/* uses palloc(), pfree() */ > -void *uk_malloc_ifpages(struct uk_alloc *a, size_t size); > -void *uk_realloc_ifpages(struct uk_alloc *a, void *ptr, size_t size); > -int uk_posix_memalign_ifpages(struct uk_alloc *a, void **memptr, > - size_t align, size_t size); > -void *uk_memalign_ifpages(struct uk_alloc *a, size_t align, size_t size); > -void uk_free_ifpages(struct uk_alloc *a, void *ptr); > -#endif > - > -/* generic, use malloc() */ > -void *uk_calloc_compat(struct uk_alloc *a, size_t num, size_t len); > -void *uk_memalign_compat(struct uk_alloc *a, size_t align, size_t len); > - > -#if CONFIG_LIBUKALLOC_IFPAGES > -#define uk_alloc_init_palloc(a, palloc_func, pfree_func, addmem_func) > \ > - do { \ > - (a)->malloc = uk_malloc_ifpages; \ > - (a)->calloc = uk_calloc_compat; \ > - (a)->realloc = uk_realloc_ifpages; \ > - (a)->posix_memalign = uk_posix_memalign_ifpages; \ > - (a)->memalign = uk_memalign_compat; \ > - (a)->free = uk_free_ifpages; \ > - (a)->palloc = (palloc_func); \ > - (a)->pfree = (pfree_func); \ > - (a)->addmem = (addmem_func); \ > - \ > - uk_alloc_register((a)); \ > - } while (0) > -#endif > - > #ifdef __cplusplus > } > #endif > diff --git a/lib/ukalloc/include/uk/alloc_impl.h > b/lib/ukalloc/include/uk/alloc_impl.h > new file mode 100644 > index 00000000..8adcd72f > --- /dev/null > +++ b/lib/ukalloc/include/uk/alloc_impl.h > @@ -0,0 +1,95 @@ > +/* SPDX-License-Identifier: BSD-3-Clause */ > +/* > + * Authors: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> > + * Florian Schmidt <florian.schmidt@xxxxxxxxx> > + * > + * Copyright (c) 2017, NEC Europe Ltd., NEC Corporation. All rights reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * 3. Neither the name of the copyright holder nor the names of its > + * contributors may be used to endorse or promote products derived from > + * this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS > IS" > + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE > + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS > + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE > + * POSSIBILITY OF SUCH DAMAGE. > + * > + * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY. > + */ > + > +/* > + * NOTE: This header should only be used by actual allocator implementations. > + * These functions are not part of the public ukalloc API. > + */ > + > +#ifndef __UK_ALLOC_IMPL_H__ > +#define __UK_ALLOC_IMPL_H__ > + > +#include <uk/alloc.h> > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +int uk_alloc_register(struct uk_alloc *a); > + > +/** > + * Compatibility functions that can be used by allocator implementations to > + * fill out callback functions in `struct uk_alloc` when just a subset of the > + * API functionality is actually implemented. > + */ > + > +#if CONFIG_LIBUKALLOC_IFPAGES > +/* Functions that can be used by allocators that implement palloc(), pfree() > only */ > +void *uk_malloc_ifpages(struct uk_alloc *a, size_t size); > +void *uk_realloc_ifpages(struct uk_alloc *a, void *ptr, size_t size); > +int uk_posix_memalign_ifpages(struct uk_alloc *a, void **memptr, > + size_t align, size_t size); > +void *uk_memalign_ifpages(struct uk_alloc *a, size_t align, size_t size); > +void uk_free_ifpages(struct uk_alloc *a, void *ptr); > +#endif /* CONFIG_LIBUKALLOC_IFPAGES */ > + > +/* Functionality that is provided based on malloc() */ > +void *uk_calloc_compat(struct uk_alloc *a, size_t num, size_t len); > +void *uk_memalign_compat(struct uk_alloc *a, size_t align, size_t len); > + > +#if CONFIG_LIBUKALLOC_IFPAGES > +/* Shortcut for doing a registration of an allocator that only > + * implements palloc(), pfree(), addmem() */ > +#define uk_alloc_init_palloc(a, palloc_func, pfree_func, addmem_func) > \ > + do { \ > + (a)->malloc = uk_malloc_ifpages; \ > + (a)->calloc = uk_calloc_compat; \ > + (a)->realloc = uk_realloc_ifpages; \ > + (a)->posix_memalign = uk_posix_memalign_ifpages; \ > + (a)->memalign = uk_memalign_compat; \ > + (a)->free = uk_free_ifpages; \ > + (a)->palloc = (palloc_func); \ > + (a)->pfree = (pfree_func); \ > + (a)->addmem = (addmem_func); \ > + \ > + uk_alloc_register((a)); \ > + } while (0) > +#endif /* CONFIG_LIBUKALLOC_IFPAGES */ > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif /* __UK_ALLOC_IMPL_H__ */ > diff --git a/lib/ukallocbbuddy/bbuddy.c b/lib/ukallocbbuddy/bbuddy.c > index 13a7942b..b6ee9a2f 100644 > --- a/lib/ukallocbbuddy/bbuddy.c > +++ b/lib/ukallocbbuddy/bbuddy.c > @@ -42,6 +42,7 @@ > #include <errno.h> > > #include <uk/allocbbuddy.h> > +#include <uk/alloc_impl.h> > #include <uk/arch/limits.h> > #include <uk/print.h> > #include <uk/assert.h> > _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |