[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH] lib/ukalloc: Move internal functions to new header
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> -- 2.20.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |