[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] [UNIKRAFT PATCH v2 3/6] plat: Introduce API for setting platform default allocator



Reviewed-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx>

Costin Lupu <costin.lupu@xxxxxxxxx> writes:

> Kernel subsystems may require memory allocation for internal
> initializations and therefore such operations cannot occur before a
> memory allocator is initialized. We introduce the platform memory
> allocator which should be set right after initializing the default
> memory allocator. Setting the platform allocator also triggers the
> creation of internal memory mappings which would be essential for
> platform setup before running the application. An example of subsystem
> which would need  such mappings is the grants subsystem for Xen. The
> current patch contains changes for all platforms.
>
> Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
> ---
>  include/uk/plat/memory.h     | 15 ++++++++++++
>  plat/common/include/memory.h | 47 ++++++++++++++++++++++++++++++++++++
>  plat/common/memory.c         | 57 
> ++++++++++++++++++++++++++++++++++++++++++++
>  plat/kvm/Makefile.uk         |  1 +
>  plat/kvm/memory.c            |  5 ++++
>  plat/linuxu/memory.c         |  5 ++++
>  plat/xen/Makefile.uk         |  1 +
>  plat/xen/memory.c            |  5 ++++
>  8 files changed, 136 insertions(+)
>  create mode 100644 plat/common/include/memory.h
>  create mode 100644 plat/common/memory.c
>
> diff --git a/include/uk/plat/memory.h b/include/uk/plat/memory.h
> index 4678eb6..60e52e6 100644
> --- a/include/uk/plat/memory.h
> +++ b/include/uk/plat/memory.h
> @@ -37,6 +37,7 @@
>  #define __UKPLAT_MEMORY_H__
>  
>  #include <uk/arch/types.h>
> +#include <uk/alloc.h>
>  #include <uk/config.h>
>  
>  #ifdef __cplusplus
> @@ -77,6 +78,20 @@ int ukplat_memregion_count(void);
>   */
>  int ukplat_memregion_get(int i, struct ukplat_memregion_desc *mrd);
>  
> +/**
> + * Sets the platform memory allocator and triggers the platform memory 
> mappings
> + * for which an allocator is needed.
> + * @param a Memory allocator
> + * @return 0 on success, < 0 otherwise
> + */
> +int ukplat_memallocator_set(struct uk_alloc *a);
> +
> +/**
> + * Returns the platform memory allocator
> + * @return Platform memory allocator address
> + */
> +struct uk_alloc *ukplat_memallocator_get(void);
> +
>  #ifdef __cplusplus
>  }
>  #endif
> diff --git a/plat/common/include/memory.h b/plat/common/include/memory.h
> new file mode 100644
> index 0000000..f627348
> --- /dev/null
> +++ b/plat/common/include/memory.h
> @@ -0,0 +1,47 @@
> +/* SPDX-License-Identifier: BSD-3-Clause */
> +/*
> + * Authors: Costin Lupu <costin.lupu@xxxxxxxxx>
> + *
> + * Copyright (c) 2018, 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 __PLAT_CMN_MEMORY_H__
> +#define __PLAT_CMN_MEMORY_H__
> +
> +/**
> + * Initializes the platform memory mappings which require an allocator. This
> + * function must always be called after initializing a memory allocator and
> + * before initializing the subsystems that require memory allocation. It is 
> an
> + * internal function common to all platforms.
> + * @return 0 on success, < 0 otherwise
> + */
> +int _ukplat_mem_mappings_init(void);
> +
> +#endif /* __PLAT_CMN_MEMORY_H__ */
> diff --git a/plat/common/memory.c b/plat/common/memory.c
> new file mode 100644
> index 0000000..30983a7
> --- /dev/null
> +++ b/plat/common/memory.c
> @@ -0,0 +1,57 @@
> +/* SPDX-License-Identifier: BSD-3-Clause */
> +/*
> + * Authors: Costin Lupu <costin.lupu@xxxxxxxxx>
> + *
> + * Copyright (c) 2018, 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.
> + */
> +
> +#include <uk/plat/memory.h>
> +#include <memory.h>
> +
> +static struct uk_alloc *plat_allocator;
> +
> +int ukplat_memallocator_set(struct uk_alloc *a)
> +{
> +     UK_ASSERT(a != NULL);
> +
> +     if (plat_allocator != NULL)
> +             return -1;
> +
> +     plat_allocator = a;
> +
> +     _ukplat_mem_mappings_init();
> +
> +     return 0;
> +}
> +
> +struct uk_alloc *ukplat_memallocator_get(void)
> +{
> +     return plat_allocator;
> +}
> diff --git a/plat/kvm/Makefile.uk b/plat/kvm/Makefile.uk
> index 2705fd1..9bedb37 100644
> --- a/plat/kvm/Makefile.uk
> +++ b/plat/kvm/Makefile.uk
> @@ -40,5 +40,6 @@ LIBKVMPLAT_SRCS-y              += $(LIBKVMPLAT_BASE)/irq.c
>  LIBKVMPLAT_SRCS-y              += $(LIBKVMPLAT_BASE)/time.c
>  LIBKVMPLAT_SRCS-y              += $(LIBKVMPLAT_BASE)/tscclock.c
>  LIBKVMPLAT_SRCS-y              += $(UK_PLAT_COMMON_BASE)/lcpu.c|common
> +LIBKVMPLAT_SRCS-y              += $(UK_PLAT_COMMON_BASE)/memory.c|common
>  
>  LIBKVMPCI_SRCS-y                     += 
> $(UK_PLAT_COMMON_BASE)/pci_bus.c|common
> diff --git a/plat/kvm/memory.c b/plat/kvm/memory.c
> index 3fe1558..11c993d 100644
> --- a/plat/kvm/memory.c
> +++ b/plat/kvm/memory.c
> @@ -131,3 +131,8 @@ int ukplat_memregion_get(int i, struct 
> ukplat_memregion_desc *m)
>  
>       return ret;
>  }
> +
> +int _ukplat_mem_mappings_init(void)
> +{
> +     return 0;
> +}
> diff --git a/plat/linuxu/memory.c b/plat/linuxu/memory.c
> index b7dbc43..35d0d95 100644
> --- a/plat/linuxu/memory.c
> +++ b/plat/linuxu/memory.c
> @@ -69,3 +69,8 @@ int ukplat_memregion_get(int i, struct 
> ukplat_memregion_desc *m)
>  
>       return ret;
>  }
> +
> +int _ukplat_mem_mappings_init(void)
> +{
> +     return 0;
> +}
> diff --git a/plat/xen/Makefile.uk b/plat/xen/Makefile.uk
> index 1341da8..3305a84 100644
> --- a/plat/xen/Makefile.uk
> +++ b/plat/xen/Makefile.uk
> @@ -28,6 +28,7 @@ LIBXENPLAT_CINCLUDES-y         += 
> -I$(UK_PLAT_COMMON_BASE)/include
>  LIBXENPLAT_SRCS-y              += $(LIBXENPLAT_BASE)/hypervisor.c
>  LIBXENPLAT_SRCS-y              += $(LIBXENPLAT_BASE)/memory.c
>  LIBXENPLAT_SRCS-y              += $(UK_PLAT_COMMON_BASE)/lcpu.c|common
> +LIBXENPLAT_SRCS-y              += $(UK_PLAT_COMMON_BASE)/memory.c|common
>  
>  ifneq (,$(filter x86_32 x86_64,$(CONFIG_UK_ARCH)))
>  LIBXENPLAT_SRCS-$(CONFIG_ARCH_X86_64) += 
> $(UK_PLAT_COMMON_BASE)/x86/trace.c|common
> diff --git a/plat/xen/memory.c b/plat/xen/memory.c
> index 18df5da..6ae92f4 100644
> --- a/plat/xen/memory.c
> +++ b/plat/xen/memory.c
> @@ -119,3 +119,8 @@ int ukplat_memregion_get(int i, struct 
> ukplat_memregion_desc *m)
>  
>       return 0;
>  }
> +
> +int _ukplat_mem_mappings_init(void)
> +{
> +     return 0;
> +}
> -- 
> 2.11.0
>

-- 
Yuri Volchkov
Software Specialist

NEC Europe Ltd
Kurfürsten-Anlage 36
D-69115 Heidelberg

_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.