[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH 4/9] include: Introduce <uk/prio.h>
Hey Simon, this patch looks all right. Reviewed-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> On 29.01.2020 23:48, Simon Kuenzer wrote: > This patch introduces <uk/prio.h>, helper macros for computing > priority levels with the pre-processor. > The macros can be used for Unikraft constructors and Unikraft init > function priorities. Their intended use is to define initialization > dependencies. Because the Constrcutor and Init function definitions are > based on macros, standard C arithmetic operations do not work. > > Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> > --- > include/uk/ctors.h | 4 ++- > include/uk/init.h | 14 ++++---- > include/uk/prio.h | 82 ++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 93 insertions(+), 7 deletions(-) > create mode 100644 include/uk/prio.h > > diff --git a/include/uk/ctors.h b/include/uk/ctors.h > index d8a1c838..db98b664 100644 > --- a/include/uk/ctors.h > +++ b/include/uk/ctors.h > @@ -38,6 +38,7 @@ > #define __UK_CTORS_H__ > > #include <uk/essentials.h> > +#include <uk/prio.h> > > #ifdef __cplusplus > extern "C" { > @@ -64,6 +65,7 @@ extern const uk_ctor_func_t uk_ctortab_end; > * Constructor function to be called > * @param prio > * Priority level (0 (earliest) to 9 (latest)) > + * Use the UK_PRIO_AFTER() helper macro for computing priority > dependencies. > * Note: Any other value for level will be ignored > */ > #define __UK_CTORTAB(fn, libname, prio) \ > @@ -80,7 +82,7 @@ extern const uk_ctor_func_t uk_ctortab_end; > /** > * Similar interface without priority. > */ > -#define UK_CTOR(fn) UK_CTOR_PRIO(fn, 9) > +#define UK_CTOR(fn) UK_CTOR_PRIO(fn, UK_PRIO_LATEST) > > /* DELETEME: Compatibility wrapper for existing code, to be removed! */ > #define UK_CTOR_FUNC(lvl, ctorf) \ > diff --git a/include/uk/init.h b/include/uk/init.h > index 149b4926..1f26c504 100644 > --- a/include/uk/init.h > +++ b/include/uk/init.h > @@ -36,6 +36,7 @@ > > #include <uk/config.h> > #include <uk/essentials.h> > +#include <uk/prio.h> > > #ifdef __cplusplus > extern "C" { > @@ -53,6 +54,7 @@ typedef int (*uk_init_func_t)(void); > * Initialization class (1 (earliest) to 6 (latest)) > * @param prio > * Priority level (0 (earliest) to 9 (latest)), must be a constant. > + * Use the UK_PRIO_AFTER() helper macro for computing priority > dependencies. > * Note: Any other value for level will be ignored > */ > #define __UK_INITTAB(libname, fn, base, prio) > \ > @@ -104,12 +106,12 @@ typedef int (*uk_init_func_t)(void); > /** > * Similar interface without priority. > */ > -#define uk_early_initcall(fn) uk_early_initcall_prio(fn, 9) > -#define uk_plat_initcall(fn) uk_plat_initcall_prio(fn, 9) > -#define uk_lib_initcall(fn) uk_lib_initcall_prio(fn, 9) > -#define uk_rootfs_initcall(fn) uk_rootfs_initcall_prio(fn, 9) > -#define uk_sys_initcall(fn) uk_sys_initcall_prio(fn, 9) > -#define uk_late_initcall(fn) uk_late_initcall_prio(fn, 9) > +#define uk_early_initcall(fn) uk_early_initcall_prio(fn, UK_PRIO_LATEST) > +#define uk_plat_initcall(fn) uk_plat_initcall_prio(fn, UK_PRIO_LATEST) > +#define uk_lib_initcall(fn) uk_lib_initcall_prio(fn, UK_PRIO_LATEST) > +#define uk_rootfs_initcall(fn) uk_rootfs_initcall_prio(fn, UK_PRIO_LATEST) > +#define uk_sys_initcall(fn) uk_sys_initcall_prio(fn, UK_PRIO_LATEST) > +#define uk_late_initcall(fn) uk_late_initcall_prio(fn, UK_PRIO_LATEST) > > extern const uk_init_func_t uk_inittab_start[]; > extern const uk_init_func_t uk_inittab_end; > diff --git a/include/uk/prio.h b/include/uk/prio.h > new file mode 100644 > index 00000000..c49b784f > --- /dev/null > +++ b/include/uk/prio.h > @@ -0,0 +1,82 @@ > +/* SPDX-License-Identifier: BSD-3-Clause */ > +/* > + * Authors: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> > + * > + * > + * Copyright (c) 2020, 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. > + */ > +#ifndef __UK_PRIO_H__ > +#define __UK_PRIO_H__ > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +/** > + * Computes the priority level that has one lower priority than > + * the given priority level. This macro can be used to state > + * initialization dependencies. It is intended to be used for > + * declaring macro constants. > + * NOTE: This macro should only be used for Unikraft constructors > + * (UK_CTOR_PRIO(), UK_CTOR()) and Unikraft init table entries. > + * > + * @param x > + * Given Unikraft priority level > + * @return > + * Priority level that has one priority less than x > + */ > +#define __UK_PRIO_AFTER_0 1 > +#define __UK_PRIO_AFTER_1 2 > +#define __UK_PRIO_AFTER_2 3 > +#define __UK_PRIO_AFTER_3 4 > +#define __UK_PRIO_AFTER_4 5 > +#define __UK_PRIO_AFTER_5 6 > +#define __UK_PRIO_AFTER_6 7 > +#define __UK_PRIO_AFTER_7 8 > +#define __UK_PRIO_AFTER_8 9 > +#define __UK_PRIO_AFTER_9 __UK_PRIO_OUT_OF_BOUNDS > +#define __UK_PRIO_AFTER(x) __UK_PRIO_AFTER_##x > +#define UK_PRIO_AFTER(x) __UK_PRIO_AFTER(x) > + > +#define UK_PRIO_EARLIEST 0 > +#define UK_PRIO_LATEST 9 > + > +/* Stop compilation if priority is getting out of bounds */ > +#ifdef __GNUC__ > +#pragma GCC poison __UK_PRIO_OUT_OF_BOUNDS > +#else > +#error Out of bounds pragma not defined > +#endif > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif /* __UK_PRIO_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 |