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

Re: [Minios-devel] [UNIKRAFT PATCH 3/6] plat: Introducing the platform memory allocator



As agreed offline, the commit subject will be changed to "Introduce API
to set platform default allocator".

Costin

On 06/27/2018 05:34 PM, Yuri Volchkov wrote:
> The patch itself looks good to me. But I would change the commit
> message. And squash this patch with the next one (4/6 Setting the
> platform memory allocator).
> 
> The least important note: the most common way across many projects is to
> give a subject in imperative. For example "introduce this" "fix that"
> rather than "added this" or "fixing that". Probably we should update
> CONTRIBUTING.md when Simon is back.
> 
> The subject itself sounds like you are introducing the whole new
> system for allocating memory for a platform. But in fact that is just
> an alias to an existing allocator, which platform code should use.
> 
> And the first sentence confirms this wrong impression even further. When
> I first read it, I thought that platform needs some sort of early
> allocator, because the regular one is not available at the boot time.
> 
> Let me propose a draft for commit message:
> 
> "set platform default allocator
> 
> Platform code needs to know which allocator it should use for allocating
> its internal data structures. With this patch, this information is
> provided at the boot stage.
> 
> Also, as soon as platform gets an allocator, it is a good time to
> trigger the creation of internal memory mappings (which would be
> essential for platform setup before running the application)"
> 
> 
> 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
>>
> 

_______________________________________________
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®.