DPDK patches and discussions
 help / color / mirror / Atom feed
From: fengchengwen <fengchengwen@huawei.com>
To: "Mattias Rönnblom" <hofors@lysator.liu.se>,
	datshan <datshan@qq.com>,
	david.marchand@redhat.com, mb@smartsharesystems.com,
	anatoly.burakov@intel.com, dmitry.kozliuk@gmail.com,
	jerinjacobk@gmail.com
Cc: <thomas@monjalon.net>, <dev@dpdk.org>
Subject: Re: [PATCH v5 01/10] memarea: introduce memarea library
Date: Tue, 11 Oct 2022 07:33:39 +0800	[thread overview]
Message-ID: <1faa55d7-6fab-9d1c-4416-30cf16c3fd20@huawei.com> (raw)
In-Reply-To: <d57af774-effe-2b07-1592-1c053687c2ca@lysator.liu.se>

On 2022/10/11 0:53, Mattias Rönnblom wrote:
> On 2022-10-08 09:53, fengchengwen wrote:
>> Hi Mattias, Thanks for your review, most will fix in v6.
>>
>> On 2022/10/7 4:15, Mattias Rönnblom wrote:
>>> On 2022-10-05 06:09, datshan wrote:
>>>> From: Chengwen Feng <fengchengwen@huawei.com>
>>>>
>>>> The memarea library is an allocator of variable-size object which 
>>>> based
>>>> on a memory region.
>>>>
>>>> This patch provides create/destroy API.
>>>>
>>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>>>> ---
>>>>    MAINTAINERS                            |   5 +
>>>>    doc/api/doxy-api-index.md              |   3 +-
>>>>    doc/api/doxy-api.conf.in               |   1 +
>>>>    doc/guides/prog_guide/index.rst        |   1 +
>>>>    doc/guides/prog_guide/memarea_lib.rst  |  39 ++++++
>>>>    doc/guides/rel_notes/release_22_11.rst |   6 +
>>>>    lib/eal/common/eal_common_log.c        |   1 +
>>>>    lib/eal/include/rte_log.h              |   1 +
>>>>    lib/memarea/memarea_private.h          |  30 +++++
>>>>    lib/memarea/meson.build                |  16 +++
>>>>    lib/memarea/rte_memarea.c              | 157 
>>>> +++++++++++++++++++++++++
>>>>    lib/memarea/rte_memarea.h              | 145 
>>>> +++++++++++++++++++++++
>>>>    lib/memarea/version.map                |  12 ++
>>>>    lib/meson.build                        |   1 +
>>>>    14 files changed, 417 insertions(+), 1 deletion(-)
>>>>    create mode 100644 doc/guides/prog_guide/memarea_lib.rst
>>>>    create mode 100644 lib/memarea/memarea_private.h
>>>>    create mode 100644 lib/memarea/meson.build
>>>>    create mode 100644 lib/memarea/rte_memarea.c
>>>>    create mode 100644 lib/memarea/rte_memarea.h
>>>>    create mode 100644 lib/memarea/version.map
>>>>
>>>> diff --git a/MAINTAINERS b/MAINTAINERS
>>>> index a55b379d73..b9c638221d 100644
>>>> --- a/MAINTAINERS
>>>> +++ b/MAINTAINERS
>>>> @@ -1550,6 +1550,11 @@ F: app/test/test_lpm*
>>>>    F: app/test/test_func_reentrancy.c
>>>>    F: app/test/test_xmmt_ops.h
>>>>    +Memarea - EXPERIMENTAL
>>>> +M: Chengwen Feng <fengchengwen@huawei.com>
>>>> +F: lib/memarea
>>>> +F: doc/guides/prog_guide/memarea_lib.rst
>>>> +
>>>>    Membership - EXPERIMENTAL
>>>>    M: Yipeng Wang <yipeng1.wang@intel.com>
>>>>    M: Sameh Gobriel <sameh.gobriel@intel.com>
>>>> diff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md
>>>> index de488c7abf..24456604f8 100644
>>>> --- a/doc/api/doxy-api-index.md
>>>> +++ b/doc/api/doxy-api-index.md
>>>> @@ -62,7 +62,8 @@ The public API headers are grouped by topics:
>>>>      [memzone](@ref rte_memzone.h),
>>>>      [mempool](@ref rte_mempool.h),
>>>>      [malloc](@ref rte_malloc.h),
>>>> -  [memcpy](@ref rte_memcpy.h)
>>>> +  [memcpy](@ref rte_memcpy.h),
>>>> +  [memarea](@ref rte_memarea.h)
>>>>      - **timers**:
>>>>      [cycles](@ref rte_cycles.h),
>>>> diff --git a/doc/api/doxy-api.conf.in b/doc/api/doxy-api.conf.in
>>>> index f0886c3bd1..8334ebcbd6 100644
>>>> --- a/doc/api/doxy-api.conf.in
>>>> +++ b/doc/api/doxy-api.conf.in
>>>> @@ -53,6 +53,7 @@ INPUT                   = 
>>>> @TOPDIR@/doc/api/doxy-api-index.md \
>>>>                              @TOPDIR@/lib/latencystats \
>>>>                              @TOPDIR@/lib/lpm \
>>>>                              @TOPDIR@/lib/mbuf \
>>>> +                          @TOPDIR@/lib/memarea \
>>>>                              @TOPDIR@/lib/member \
>>>>                              @TOPDIR@/lib/mempool \
>>>>                              @TOPDIR@/lib/meter \
>>>> diff --git a/doc/guides/prog_guide/index.rst 
>>>> b/doc/guides/prog_guide/index.rst
>>>> index 8564883018..e9015d65e3 100644
>>>> --- a/doc/guides/prog_guide/index.rst
>>>> +++ b/doc/guides/prog_guide/index.rst
>>>> @@ -37,6 +37,7 @@ Programmer's Guide
>>>>        hash_lib
>>>>        toeplitz_hash_lib
>>>>        efd_lib
>>>> +    memarea_lib
>>>>        member_lib
>>>>        lpm_lib
>>>>        lpm6_lib
>>>> diff --git a/doc/guides/prog_guide/memarea_lib.rst 
>>>> b/doc/guides/prog_guide/memarea_lib.rst
>>>> new file mode 100644
>>>> index 0000000000..b96dad15f6
>>>> --- /dev/null
>>>> +++ b/doc/guides/prog_guide/memarea_lib.rst
>>>> @@ -0,0 +1,39 @@
>>>> +..  SPDX-License-Identifier: BSD-3-Clause
>>>> +    Copyright(c) 2022 HiSilicon Limited
>>>> +
>>>> +Memarea Library
>>>> +===============
>>>> +
>>>> +Introduction
>>>> +------------
>>>> +
>>>> +The memarea library provides an allocator of variable-size 
>>>> objects, it is
>>>> +oriented towards the application layer, which could provides 
>>>> 'region-based
>>>> +memory management' function [1].
>>>> +
>>>> +The main features are as follows:
>>>> +
>>>> +* The default aligement size is ``RTE_CACHE_LINE_SIZE``.
>>>> +
>>>> +* The memory region can be initialized from the following memory 
>>>> sources:
>>>> +  a) RTE memory: e.g. invoke ``rte_malloc_socket`` to obtain. b) 
>>>> System API:
>>>> +  e.g. invoke posix_memalign to obtain. c) User provided address: 
>>>> it can be from
>>>> +  extendedd memory as long as it is available. d) User provided 
>>>> memarea: it can
>>>> +  be from another memarea.
>>>> +
>>>> +* It provides refcnt feature which could be useful in multi-reader 
>>>> scenario.
>>>> +
>>>> +* It supports MT-safe as long as it's specified at creation time.
>>>> +
>>>> +Library API Overview
>>>> +--------------------
>>>> +
>>>> +The ``rte_memarea_create()`` function is used to create a memarea, 
>>>> the function
>>>> +returns the pointer to the created memarea or ``NULL`` if the 
>>>> creation failed.
>>>> +
>>>> +The ``rte_memarea_destroy()`` function is used to destroy a memarea.
>>>> +
>>>> +Reference
>>>> +---------
>>>> +
>>>> +[1] https://en.wikipedia.org/wiki/Region-based_memory_management
>>>> diff --git a/doc/guides/rel_notes/release_22_11.rst 
>>>> b/doc/guides/rel_notes/release_22_11.rst
>>>> index 5d8ef669b8..4c1f760b98 100644
>>>> --- a/doc/guides/rel_notes/release_22_11.rst
>>>> +++ b/doc/guides/rel_notes/release_22_11.rst
>>>> @@ -55,6 +55,12 @@ New Features
>>>>         Also, make sure to start the actual text at the margin.
>>>> =======================================================
>>>>    +* **Added memarea library.**
>>>> +
>>>> +  The memarea library is an allocator of variable-size objects, it 
>>>> is oriented
>>>> +  towards the application layer, which could provides 
>>>> 'region-based memory
>>>> +  management' function.
>>>> +
>>>>    * **Added configuration for asynchronous flow connection 
>>>> tracking.**
>>>>        Added connection tracking action number hint to 
>>>> ``rte_flow_configure``
>>>> diff --git a/lib/eal/common/eal_common_log.c 
>>>> b/lib/eal/common/eal_common_log.c
>>>> index bd7b188ceb..3d62af59c6 100644
>>>> --- a/lib/eal/common/eal_common_log.c
>>>> +++ b/lib/eal/common/eal_common_log.c
>>>> @@ -369,6 +369,7 @@ static const struct logtype logtype_strings[] = {
>>>>        {RTE_LOGTYPE_EFD,        "lib.efd"},
>>>>        {RTE_LOGTYPE_EVENTDEV,   "lib.eventdev"},
>>>>        {RTE_LOGTYPE_GSO,        "lib.gso"},
>>>> +    {RTE_LOGTYPE_MEMAREA,    "lib.memarea"},
>>>>        {RTE_LOGTYPE_USER1,      "user1"},
>>>>        {RTE_LOGTYPE_USER2,      "user2"},
>>>>        {RTE_LOGTYPE_USER3,      "user3"},
>>>> diff --git a/lib/eal/include/rte_log.h b/lib/eal/include/rte_log.h
>>>> index 25ce42cdfc..708f3a39dd 100644
>>>> --- a/lib/eal/include/rte_log.h
>>>> +++ b/lib/eal/include/rte_log.h
>>>> @@ -48,6 +48,7 @@ extern "C" {
>>>>    #define RTE_LOGTYPE_EFD       18 /**< Log related to EFD. */
>>>>    #define RTE_LOGTYPE_EVENTDEV  19 /**< Log related to eventdev. */
>>>>    #define RTE_LOGTYPE_GSO       20 /**< Log related to GSO. */
>>>> +#define RTE_LOGTYPE_MEMAREA   21 /**< Log related to memarea. */
>>>>      /* these log types can be used in an application */
>>>>    #define RTE_LOGTYPE_USER1     24 /**< User-defined log type 1. */
>>>> diff --git a/lib/memarea/memarea_private.h 
>>>> b/lib/memarea/memarea_private.h
>>>> new file mode 100644
>>>> index 0000000000..c76392d3e6
>>>> --- /dev/null
>>>> +++ b/lib/memarea/memarea_private.h
>>>> @@ -0,0 +1,30 @@
>>>> +/* SPDX-License-Identifier: BSD-3-Clause
>>>> + * Copyright(c) 2022 HiSilicon Limited
>>>> + */
>>>> +
>>>> +#ifndef MEMAREA_PRIVATE_H
>>>> +#define MEMAREA_PRIVATE_H
>>>> +
>>>> +#include <rte_memarea.h>
>>>> +
>>>> +#define MEMAREA_FREE_ELEM_COOKIE    0xFFFFFFFF
>>>> +
>>>> +struct memarea_elem {
>>>> +    size_t   size;
>>>> +    uint32_t cookie;
>>>> +    int32_t  refcnt; /* Non-zero indicates that it has been 
>>>> allocated */
>>>> +    TAILQ_ENTRY(memarea_elem) elem_node;
>>>> +    TAILQ_ENTRY(memarea_elem) free_node;
>>>> +} __rte_cache_aligned;
>>>> +
>>>
>>> Why is the elem type cache line aligned? Need the elem data start be 
>>> cache line aligned?
>>
>> Yes, the elem data align at cache-line default.
>>
>>>
>>>> +TAILQ_HEAD(memarea_elem_list, memarea_elem);
>>>> +
>>>> +struct rte_memarea {
>>>> +    struct rte_memarea_param init;
>>>> +    rte_spinlock_t           lock;
>>>> +    void                    *area_addr;
>>>> +    struct memarea_elem_list elem_list;
>>>> +    struct memarea_elem_list free_list;
>>>> +} __rte_cache_aligned;
>>>> +
>>>> +#endif /* MEMAREA_PRIVATE_H */
>>>> diff --git a/lib/memarea/meson.build b/lib/memarea/meson.build
>>>> new file mode 100644
>>>> index 0000000000..0a74fb4cd1
>>>> --- /dev/null
>>>> +++ b/lib/memarea/meson.build
>>>> @@ -0,0 +1,16 @@
>>>> +# SPDX-License-Identifier: BSD-3-Clause
>>>> +# Copyright(c) 2022 HiSilicon Limited
>>>> +
>>>> +if is_windows
>>>> +    build = false
>>>> +    reason = 'not supported on Windows'
>>>> +    subdir_done()
>>>> +endif
>>>> +
>>>> +sources = files(
>>>> +        'rte_memarea.c',
>>>> +)
>>>> +headers = files(
>>>> +        'rte_memarea.h',
>>>> +)
>>>> +deps += []
>>>> diff --git a/lib/memarea/rte_memarea.c b/lib/memarea/rte_memarea.c
>>>> new file mode 100644
>>>> index 0000000000..868da7661d
>>>> --- /dev/null
>>>> +++ b/lib/memarea/rte_memarea.c
>>>> @@ -0,0 +1,157 @@
>>>> +/* SPDX-License-Identifier: BSD-3-Clause
>>>> + * Copyright(c) 2022 HiSilicon Limited
>>>> + */
>>>> +
>>>> +#include <stdio.h>
>>>> +#include <stdlib.h>
>>>> +
>>>> +#include <rte_common.h>
>>>> +#include <rte_log.h>
>>>> +#include <rte_malloc.h>
>>>> +#include <rte_spinlock.h>
>>>> +
>>>> +#include "rte_memarea.h"
>>>> +#include "memarea_private.h"
>>>> +
>>>> +static int
>>>> +memarea_check_param(const struct rte_memarea_param *init)
>>>> +{
>>>> +    size_t len;
>>>> +
>>>> +    if (init == NULL) {
>>>> +        RTE_LOG(ERR, MEMAREA, "memarea init param is NULL!\n");
>>>> +        return -EINVAL;
>>>> +    }
>>>> +
>>>> +    len = strnlen(init->name, RTE_MEMAREA_NAMESIZE);
>>>> +    if (len == 0 || len >= RTE_MEMAREA_NAMESIZE) {
>>>> +        RTE_LOG(ERR, MEMAREA, "memarea name size %zu invalid!\n", 
>>>> len);
>>>> +        return -EINVAL;
>>>> +    }
>>>> +
>>>> +    if (init->source != RTE_MEMAREA_SOURCE_RTE_MEMORY &&
>>>> +        init->source != RTE_MEMAREA_SOURCE_SYSTEM_API &&
>>>> +        init->source != RTE_MEMAREA_SOURCE_USER_ADDR &&
>>>> +        init->source != RTE_MEMAREA_SOURCE_USER_MEMAREA) {
>>>> +        RTE_LOG(ERR, MEMAREA, "memarea: %s source: %d not 
>>>> supported!\n",
>>>> +            init->name, init->source);
>>>> +        return -EINVAL;
>>>> +    }
>>>> +
>>>> +    if (init->total_sz <= sizeof(struct memarea_elem)) {
>>>> +        RTE_LOG(ERR, MEMAREA, "memarea: %s total-size: %zu too 
>>>> small!\n",
>>>> +            init->name, init->total_sz);
>>>> +        return -EINVAL;
>>>> +    }
>>>> +
>>>> +    if (init->source == RTE_MEMAREA_SOURCE_USER_ADDR && 
>>>> init->user_addr == NULL) {
>>>> +        RTE_LOG(ERR, MEMAREA, "memarea: %s user provided addr is 
>>>> NULL!\n", init->name);
>>>> +        return -EINVAL;
>>>> +    }
>>>> +
>>>> +    if (init->source == RTE_MEMAREA_SOURCE_USER_ADDR &&
>>>> +        ((uintptr_t)init->user_addr & (RTE_CACHE_LINE_SIZE - 1))) {
>>>> +        RTE_LOG(ERR, MEMAREA, "memarea: %s user provided addr 
>>>> should align: %d!\n",
>>>> +            init->name, RTE_CACHE_LINE_SIZE);
>>>> +        return -EINVAL;
>>>> +    }
>>>> +
>>>> +    if (init->source == RTE_MEMAREA_SOURCE_USER_MEMAREA && 
>>>> init->user_memarea == NULL) {
>>>> +        RTE_LOG(ERR, MEMAREA, "memarea: %s user provided memarea 
>>>> is NULL!\n", init->name);
>>>> +        return -EINVAL;
>>>> +    }
>>>> +
>>>> +    if (init->alg != RTE_MEMAREA_ALG_DEFAULT) {
>>>> +        RTE_LOG(ERR, MEMAREA, "memarea: %s alg: %d not supported!\n",
>>>> +            init->name, init->alg);
>>>> +        return -EINVAL;
>>>> +    }
>>>> +
>>>> +    return 0;
>>>> +}
>>>> +
>>>> +static void *
>>>> +memarea_alloc_from_system_api(size_t size)
>>>> +{
>>>> +    void *ptr = NULL;
>>>> +    int ret;
>>>> +
>>>> +    ret = posix_memalign(&ptr, RTE_CACHE_LINE_SIZE, size);
>>>> +    if (ret)
>>>> +        return NULL;
>>>> +    return ptr;
>>>> +}
>>>> +
>>>> +static void *
>>>> +memarea_alloc_area(const struct rte_memarea_param *init)
>>>> +{
>>>> +    void *ptr = NULL;
>>>> +
>>>> +    if (init->source == RTE_MEMAREA_SOURCE_RTE_MEMORY)
>>>
>>> Delete MEMORY. Of course it's memory. What else? If you want to make 
>>> it clear it's from the RTE heap, it should spell out HEAP. Or MALLOC.
>>
>> HEAP seem better.
>>
>>>
>>>> +        ptr = rte_malloc_socket(NULL, init->total_sz, 
>>>> RTE_CACHE_LINE_SIZE,
>>>> +                    init->numa_socket);
>>>> +    else if (init->source == RTE_MEMAREA_SOURCE_SYSTEM_API)
>>>> +        ptr = memarea_alloc_from_system_api(init->total_sz);
>>>
>>> "SYSTEM_API" doesn't strike me as a good name.
>>>
>>> RTE_MEMAREA_SOURCE_LIBC
>>
>> LIBC seem better.
>>
>>> RTE_MEMAREA_SOURCE_STD_HEAP
>>> or at least remove API so it'll be
>>> RTE_MEMAREA_SOURCE_SYSTEM
>>>
>>>> +    else if (init->source == RTE_MEMAREA_SOURCE_USER_ADDR)
>>>
>>> I would delete "ADDR".
>>
>> +1
>>
>>>
>>>> +        ptr = init->user_addr;
>>>> +
>>>> +    if (ptr == NULL)
>>>> +        RTE_LOG(ERR, MEMAREA, "memarea: %s alloc memory area 
>>>> fail!\n", init->name);
>>>> +
>>>> +    return ptr;
>>>> +}
>>>> +
>>>> +struct rte_memarea *
>>>> +rte_memarea_create(const struct rte_memarea_param *init)
>>>> +{
>>>> +    struct memarea_elem *elem;
>>>> +    struct rte_memarea *ma;
>>>> +    void *addr;
>>>> +    int ret;
>>>> +
>>>> +    ret = memarea_check_param(init);
>>>> +    if (ret)
>>>> +        return NULL;
>>>> +
>>>> +    addr = memarea_alloc_area(init);
>>>> +    if (addr == NULL)
>>>> +        return NULL;
>>>> +
>>>> +    ma = rte_zmalloc(NULL, sizeof(struct rte_memarea), 
>>>> RTE_CACHE_LINE_SIZE);
>>>> +    if (ma == NULL) {
>>>> +        RTE_LOG(ERR, MEMAREA, "malloc memarea: %s management obj 
>>>> fail!\n", init->name);
>>>> +        return NULL;
>>>> +    }
>>>> +
>>>> +    ma->init = *init;
>>>> +    rte_spinlock_init(&ma->lock);
>>>> +    TAILQ_INIT(&ma->elem_list);
>>>> +    TAILQ_INIT(&ma->free_list);
>>>> +    ma->area_addr = addr;
>>>> +    elem = addr;
>>>> +    elem->size = init->total_sz - sizeof(struct memarea_elem);
>>>> +    elem->cookie = MEMAREA_FREE_ELEM_COOKIE;
>>>> +    elem->refcnt = 0;
>>>> +    TAILQ_INSERT_TAIL(&ma->elem_list, elem, elem_node);
>>>> +    TAILQ_INSERT_TAIL(&ma->free_list, elem, free_node);
>>>> +
>>>> +    return ma;
>>>> +}
>>>> +
>>>> +static void
>>>> +memarea_free_area(struct rte_memarea *ma)
>>>> +{
>>>> +    if (ma->init.source == RTE_MEMAREA_SOURCE_RTE_MEMORY)
>>>> +        rte_free(ma->area_addr);
>>>> +    else if (ma->init.source == RTE_MEMAREA_SOURCE_SYSTEM_API)
>>>> +        free(ma->area_addr);
>>>> +}
>>>> +
>>>> +void
>>>> +rte_memarea_destroy(struct rte_memarea *ma)
>>>> +{
>>>> +    if (ma == NULL)
>>>> +        return;
>>>> +    memarea_free_area(ma);
>>>> +    rte_free(ma);
>>>> +}
>>>> diff --git a/lib/memarea/rte_memarea.h b/lib/memarea/rte_memarea.h
>>>> new file mode 100644
>>>> index 0000000000..543cda4cac
>>>> --- /dev/null
>>>> +++ b/lib/memarea/rte_memarea.h
>>>> @@ -0,0 +1,145 @@
>>>> +/* SPDX-License-Identifier: BSD-3-Clause
>>>> + * Copyright(c) 2022 HiSilicon Limited
>>>> + */
>>>> +
>>>> +#ifndef RTE_MEMAREA_H
>>>> +#define RTE_MEMAREA_H
>>>> +
>>>> +/**
>>>> + * @file
>>>> + * RTE Memarea.
>>>> + *
>>>> + * The memarea is an allocator of variable-size object which based 
>>>> on a memory
>>>> + * region. It has the following features:
>>>> + *
>>>> + * - The default alignment size is RTE_CACHE_LINE_SIZE.
>>>
>>> This can be read as two things: the object size is aligned, or the 
>>> start address is aligned.
>>
>> It means the start address align, will define more clear in v6.
>>
>>>
>>>> + * - The memory region can be initialized from the following 
>>>> memory sources:
>>>> + *   1. RTE memory: e.g. invoke rte_malloc_socket to obtain.
>>>
>>> Remove "to obtain", or add "memory" after "obtain". Do you really 
>>> mean "e.g.", and not "i.e."?
>>
>> will fix in v6.
>>
>>>
>>>> + *   2. System API: e.g. invoke posix_memalign to obtain.
>>>> + *   3. User provided address: it can be from extended memory as 
>>>> long as it is
>>>> + *      available. The address must be aligned to 
>>>> RTE_CACHE_LINE_SIZE.
>>>
>>> What is extended memory?
>>
>> Like rte_extmen
>>
>>>
>>>> + *   4) User provided memarea: it can be from another memarea. So 
>>>> we can build
>>>> + *      the following memory management structure:
>>>> + *         \code{.unparsed}
>>>> + *                           -------------
>>>> + *                           | memarea-1 |
>>>> + *                           -------------
>>>> + *                                 |
>>>> + *                                 v
>>>> + *                  -------------------------------
>>>> + *                  |               |             |
>>>> + *                  v               v             v
>>>> + *            -------------   -------------   ----------
>>>> + *            | memarea-2 |   | memarea-3 |   | object |
>>>> + *            -------------   -------------   ----------
>>>> + *         \endcode
>>>> + *      As shown above, the memarea-2/3 both create from 
>>>> memarea-1's memory.
>>>> + * - It provides refcnt feature which could be useful in 
>>>> multi-reader scenario.
>>>> + * - It supports MT-safe as long as it's specified at creation 
>>>> time. If not
>>>> + *   specified, all the functions of the memarea API are 
>>>> lock-free, and assume
>>>> + *   to not be invoked in parallel on different logical cores to 
>>>> work on the
>>>> + *   same memarea.
>>>> + */
>>>> +
>>>> +#include <stdbool.h>
>>>> +#include <stdint.h>
>>>> +#include <stdio.h>
>>>> +
>>>> +#include <rte_compat.h>
>>>> +
>>>> +#ifdef __cplusplus
>>>> +extern "C" {
>>>> +#endif
>>>> +
>>>> +#define RTE_MEMAREA_NAMESIZE    64
>>>> +
>>>> +/**
>>>> + * Memarea memory source.
>>>> + */
>>>> +enum rte_memarea_source {
>>>> +    /** Memory source comes from rte memory. */
>>>> +    RTE_MEMAREA_SOURCE_RTE_MEMORY,
>>>> +    /** Memory source comes from system API. */
>>>> +    RTE_MEMAREA_SOURCE_SYSTEM_API,
>>>> +    /** Memory source comes from user-provided address. */
>>>> +    RTE_MEMAREA_SOURCE_USER_ADDR,
>>>> +    /** Memory source comes from user-provided memarea. */
>>>> +    RTE_MEMAREA_SOURCE_USER_MEMAREA,
>>>> +};
>>>> +
>>>> +/**
>>>> + * Memarea memory management algorithm.
>>>> + */
>>>> +enum rte_memarea_alg {
>>>> +    /* The default management algorithm is a variant of the next fit
>>>> +     * algorithm. It uses a free-list to apply for memory and uses an
>>>> +     * element-list in ascending order of address to support merging
>>>> +     * upon free.
>>>> +     */
>>>> +    RTE_MEMAREA_ALG_DEFAULT,
>>>> +};
>
> Do you need to expose the algorithm/management scheme option in the 
> public API, if there is only one implementation to choose from?


Yes, we plan to support SLAB algorithm in future by adding a new alg.


>
> You can always have a rte_memarea_create_alg(/../) in the future, or 
> just change the signature between ABI-breaking releases.


I don't think add a new API is a good idea.

You can see that, we put all init parameter in one struct in this 
design, and could extend function by adding new field .


>
>
> Also, shouldn't the default algorithm have name? Rather than just 
> DEFAULT. RTE_MEMAREA_ALG_NEXTFIT maybe.


Yes, will fix in next version.


>
>>>> +
>>>> +struct rte_memarea;
>>>> +
>>>> +struct rte_memarea_param {
>>>
>>> Does this struct need to be public?
>>
>> Yes, the rte_memarea_param contains create parameters for create 
>> memarea which need be public.
>>
>
> Why isn't the public API just a bunch of create-function parameters? 
> Or, alternatively, you have an assortment of create functions, for 
> different combinations of parameters. Then you don't have to think 
> about having reserved bits or other kind of ABI-related issues due to 
> the struct being public.


These are two API design styles,and I prefer the one create-function API 
style just it seem simple (by inner usage voice).


>
>> And rte_memarea which pointer implementation struction which just a 
>> declare here.
>>
>>>
>>>> +    char name[RTE_MEMAREA_NAMESIZE]; /**< Name of memarea. */
>>>> +    enum rte_memarea_source source;  /**< Memory source of 
>>>> memarea. */
>>>> +    enum rte_memarea_alg alg;        /**< Memory management 
>>>> algorithm. */
>>>> +    size_t total_sz;                 /**< total size (bytes) of 
>>>> memarea. */
>>>> +    /** Indicates whether the memarea API should be MT-safe. */
>>>> +    uint32_t mt_safe : 1;
>>>
>>> Why not bool?
>>
>> Use bit field other than bool will provides more reserved field.
>>
>>>
>>>> +    union {
>>>> +        /** Numa socket from which to apply for memarea's memory, 
>>>> this
>>>> +         * field is valid only when the source is set to be
>>>> +         * RTE_MEMAREA_SOURCE_RTE_MEMORY.
>>>> +         */
>>>> +        int numa_socket;
>>>> +        /** User provided address, this field is valid only when the
>>>> +         * source is set to be RTE_MEMAREA_SOURCE_USER_ADDR.
>>>> +         * Note: the provided address must align at least
>>>> +         * RTE_CACHE_LINE_SIZE.
>>>> +         */
>>>> +        void *user_addr;
>>>> +        /** User provided memarea, this field is valid only when the
>>>> +         * source is set to be RTE_MEMAREA_SOURCE_USER_MEMAREA.
>>>> +         */
>>>> +        struct rte_memarea *user_memarea;
>>>> +    };
>>>> +};
>>>> +
>>>> +/**
>>>> + * @warning
>>>> + * @b EXPERIMENTAL: this API may change without prior notice.
>>>> + *
>>>> + * Create memarea.
>>>> + *
>>>> + * Create one new memarea.
>>>> + *
>>>> + * @param init
>>>> + *   The init parameter of memarea.
>>>> + *
>>>> + * @return
>>>> + *   Non-NULL on success. Otherwise NULL is returned.
>>>> + */
>>>> +__rte_experimental
>>>> +struct rte_memarea *rte_memarea_create(const struct 
>>>> rte_memarea_param *init);
>>>> +
>>>> +/**
>>>> + * @warning
>>>> + * @b EXPERIMENTAL: this API may change without prior notice.
>>>> + *
>>>> + * Destroy memarea.
>>>> + *
>>>> + * Destroy the memarea.
>>>> + *
>>>> + * @param ma
>>>> + *   The pointer of memarea.
>>>> + */
>>>> +__rte_experimental
>>>> +void rte_memarea_destroy(struct rte_memarea *ma);
>>>> +
>>>> +#ifdef __cplusplus
>>>> +}
>>>> +#endif
>>>> +
>>>> +#endif /* RTE_MEMAREA_H */
>>>> diff --git a/lib/memarea/version.map b/lib/memarea/version.map
>>>> new file mode 100644
>>>> index 0000000000..f36a04d7cf
>>>> --- /dev/null
>>>> +++ b/lib/memarea/version.map
>>>> @@ -0,0 +1,12 @@
>>>> +EXPERIMENTAL {
>>>> +    global:
>>>> +
>>>> +    rte_memarea_create;
>>>> +    rte_memarea_destroy;
>>>> +
>>>> +    local: *;
>>>> +};
>>>> +
>>>> +INTERNAL {
>>>> +    local: *;
>>>> +};
>>>> diff --git a/lib/meson.build b/lib/meson.build
>>>> index c648f7d800..521a25d6c0 100644
>>>> --- a/lib/meson.build
>>>> +++ b/lib/meson.build
>>>> @@ -42,6 +42,7 @@ libraries = [
>>>>            'kni',
>>>>            'latencystats',
>>>>            'lpm',
>>>> +        'memarea',
>>>>            'member',
>>>>            'pcapng',
>>>>            'power',
>>>
>>> .
>

  reply	other threads:[~2022-10-10 23:33 UTC|newest]

Thread overview: 222+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-21  4:46 [RFC] memarea: introduce memory area library Chengwen Feng
2022-07-21 15:22 ` Stephen Hemminger
2022-08-04  6:36 ` Jerin Jacob
2022-08-30 12:41 ` Dmitry Kozlyuk
2022-09-20  3:46 ` [PATCH 0/8] introduce memarea library Chengwen Feng
2022-09-20  3:46   ` [PATCH 1/8] memarea: introduce memory area library Chengwen Feng
2022-09-20 11:30     ` Dmitry Kozlyuk
2022-09-20 11:31       ` Dmitry Kozlyuk
2022-09-20 12:06       ` fengchengwen
2022-09-20  3:46   ` [PATCH 2/8] test/memarea: support memarea test Chengwen Feng
2022-09-20  3:46   ` [PATCH 3/8] memarea: support alloc/free/update-refcnt API Chengwen Feng
2022-09-20  3:46   ` [PATCH 4/8] test/memarea: support alloc/free/update-refcnt test Chengwen Feng
2022-09-20  3:46   ` [PATCH 5/8] memarea: support dump API Chengwen Feng
2022-09-20  3:46   ` [PATCH 6/8] test/memarea: support dump test Chengwen Feng
2022-09-20  3:46   ` [PATCH 7/8] memarea: support backup memory mechanism Chengwen Feng
2022-09-20  3:46   ` [PATCH 8/8] test/memarea: support backup memory test Chengwen Feng
2022-09-21  3:12 ` [PATCH v2 0/9] introduce memarea library Chengwen Feng
2022-09-21  3:12   ` [PATCH v2 1/9] memarea: introduce memory area library Chengwen Feng
2022-09-21  3:12   ` [PATCH v2 2/9] test/memarea: support memarea test Chengwen Feng
2022-09-21  3:12   ` [PATCH v2 3/9] memarea: support alloc/free/update-refcnt API Chengwen Feng
2022-09-21  3:12   ` [PATCH v2 4/9] test/memarea: support alloc/free/update-refcnt test Chengwen Feng
2022-09-21  3:12   ` [PATCH v2 5/9] memarea: support dump API Chengwen Feng
2022-09-21  3:12   ` [PATCH v2 6/9] test/memarea: support dump test Chengwen Feng
2022-09-21  3:12   ` [PATCH v2 7/9] memarea: support backup memory mechanism Chengwen Feng
2022-09-21  3:12   ` [PATCH v2 8/9] test/memarea: support backup memory test Chengwen Feng
2022-09-21  3:12   ` [PATCH v2 9/9] test/memarea: support no MT-safe test Chengwen Feng
2022-09-24  7:49 ` [PATCH v3 00/10] introduce memarea library Chengwen Feng
2022-09-24  7:49   ` [PATCH v3 01/10] memarea: " Chengwen Feng
2022-09-24  7:49   ` [PATCH v3 02/10] test/memarea: support memarea test Chengwen Feng
2022-09-24  7:49   ` [PATCH v3 03/10] memarea: support alloc/free/update-refcnt API Chengwen Feng
2022-09-24  7:49   ` [PATCH v3 04/10] test/memarea: support alloc/free/update-refcnt test Chengwen Feng
2022-09-24  7:49   ` [PATCH v3 05/10] memarea: support dump API Chengwen Feng
2022-09-24  7:49   ` [PATCH v3 06/10] test/memarea: support dump test Chengwen Feng
2022-09-24  7:49   ` [PATCH v3 07/10] memarea: support backup memory mechanism Chengwen Feng
2022-09-24  7:49   ` [PATCH v3 08/10] test/memarea: support backup memory test Chengwen Feng
2022-09-24  7:49   ` [PATCH v3 09/10] memarea: detect memory corruption based on magic Chengwen Feng
2022-09-24  7:49   ` [PATCH v3 10/10] test/memarea: support no MT-safe test Chengwen Feng
2022-10-03  7:42   ` [PATCH v3 00/10] introduce memarea library David Marchand
2022-10-05  4:19     ` datshan
2022-10-05  3:38 ` [PATCH v4 " datshan
     [not found] ` <20221005033848.2241-1-datshan@qq.com>
2022-10-05  3:38   ` [PATCH v4 01/10] memarea: " datshan
2022-10-05  3:38   ` [PATCH v4 02/10] test/memarea: support memarea test datshan
2022-10-05  3:38   ` [PATCH v4 03/10] memarea: support alloc/free/update-refcnt API datshan
2022-10-05  3:38   ` [PATCH v4 04/10] test/memarea: support alloc/free/update-refcnt test datshan
2022-10-05  3:38   ` [PATCH v4 05/10] memarea: support dump API datshan
2022-10-05  3:38   ` [PATCH v4 06/10] test/memarea: support dump test datshan
2022-10-05  3:38   ` [PATCH v4 07/10] memarea: support backup memory mechanism datshan
2022-10-05  3:38   ` [PATCH v4 08/10] test/memarea: support backup memory test datshan
2022-10-05  3:38   ` [PATCH v4 09/10] memarea: detect memory corruption based on magic datshan
2022-10-05  3:38   ` [PATCH v4 10/10] test/memarea: support no MT-safe test datshan
2022-10-05  4:09 ` [PATCH v5 00/10] introduce memarea library datshan
     [not found] ` <20221005040952.8166-1-datshan@qq.com>
2022-10-05  4:09   ` [PATCH v5 01/10] memarea: " datshan
2022-10-06 20:15     ` Mattias Rönnblom
2022-10-08  7:53       ` fengchengwen
2022-10-10 16:53         ` Mattias Rönnblom
2022-10-10 23:33           ` fengchengwen [this message]
2022-10-11 15:35             ` Mattias Rönnblom
2022-10-05  4:09   ` [PATCH v5 02/10] test/memarea: support memarea test datshan
2022-10-05  4:09   ` [PATCH v5 03/10] memarea: support alloc/free/update-refcnt API datshan
2022-10-06 19:43     ` Mattias Rönnblom
2022-10-08  8:02       ` fengchengwen
2022-10-05  4:09   ` [PATCH v5 04/10] test/memarea: support alloc/free/update-refcnt test datshan
2022-10-05  4:09   ` [PATCH v5 05/10] memarea: support dump API datshan
2022-10-05  4:09   ` [PATCH v5 06/10] test/memarea: support dump test datshan
2022-10-05  4:09   ` [PATCH v5 07/10] memarea: support backup memory mechanism datshan
2022-10-06 19:53     ` Mattias Rönnblom
2022-10-08  7:56       ` fengchengwen
2022-10-05  4:09   ` [PATCH v5 08/10] test/memarea: support backup memory test datshan
2022-10-05  4:09   ` [PATCH v5 09/10] memarea: detect memory corruption based on magic datshan
2022-10-05  4:09   ` [PATCH v5 10/10] test/memarea: support no MT-safe test datshan
2022-10-08 11:33 ` [PATCH v6 00/10] introduce memarea library Chengwen Feng
2022-10-08 11:33   ` [PATCH v6 01/10] memarea: " Chengwen Feng
2022-10-08 11:33   ` [PATCH v6 02/10] test/memarea: support memarea test Chengwen Feng
2022-10-08 11:33   ` [PATCH v6 03/10] memarea: support alloc/free/update-refcnt API Chengwen Feng
2022-10-08 11:33   ` [PATCH v6 04/10] test/memarea: support alloc/free/update-refcnt test Chengwen Feng
2022-10-08 11:33   ` [PATCH v6 05/10] memarea: support dump API Chengwen Feng
2022-10-08 11:33   ` [PATCH v6 06/10] test/memarea: support dump test Chengwen Feng
2022-10-08 11:33   ` [PATCH v6 07/10] memarea: support backup memory mechanism Chengwen Feng
2022-10-08 11:33   ` [PATCH v6 08/10] test/memarea: support backup memory test Chengwen Feng
2022-10-08 11:33   ` [PATCH v6 09/10] memarea: detect memory corruption based on magic Chengwen Feng
2022-10-08 11:33   ` [PATCH v6 10/10] test/memarea: support no MT-safe test Chengwen Feng
2022-10-08 11:58 ` [PATCH v7 00/10] introduce memarea library Chengwen Feng
2022-10-08 11:58   ` [PATCH v7 01/10] memarea: " Chengwen Feng
2022-10-08 11:58   ` [PATCH v7 02/10] test/memarea: support memarea test Chengwen Feng
2022-10-08 11:58   ` [PATCH v7 03/10] memarea: support alloc/free/update-refcnt API Chengwen Feng
2022-10-08 11:58   ` [PATCH v7 04/10] test/memarea: support alloc/free/update-refcnt test Chengwen Feng
2022-10-08 11:58   ` [PATCH v7 05/10] memarea: support dump API Chengwen Feng
2022-10-08 11:58   ` [PATCH v7 06/10] test/memarea: support dump test Chengwen Feng
2022-10-08 11:58   ` [PATCH v7 07/10] memarea: support backup memory mechanism Chengwen Feng
2022-10-08 11:58   ` [PATCH v7 08/10] test/memarea: support backup memory test Chengwen Feng
2022-10-08 11:58   ` [PATCH v7 09/10] memarea: detect memory corruption based on magic Chengwen Feng
2022-10-08 11:58   ` [PATCH v7 10/10] test/memarea: support no MT-safe test Chengwen Feng
2022-10-08 12:14   ` [PATCH v7 00/10] introduce memarea library fengchengwen
2022-10-11 12:17 ` [PATCH v8 0/9] " Chengwen Feng
2022-10-11 12:17   ` [PATCH v8 1/9] memarea: " Chengwen Feng
2022-10-11 15:58     ` Dmitry Kozlyuk
2022-10-12  4:06       ` fengchengwen
2022-10-13 10:45         ` fengchengwen
2022-10-11 12:17   ` [PATCH v8 2/9] test/memarea: support memarea test Chengwen Feng
2022-10-11 12:17   ` [PATCH v8 3/9] memarea: support alloc/free/update-refcnt API Chengwen Feng
2022-10-11 15:58     ` Dmitry Kozlyuk
2022-10-12  7:28       ` fengchengwen
2022-10-11 12:17   ` [PATCH v8 4/9] test/memarea: support alloc/free/update-refcnt test Chengwen Feng
2022-10-11 12:17   ` [PATCH v8 5/9] memarea: support dump API Chengwen Feng
2022-10-11 12:17   ` [PATCH v8 6/9] test/memarea: support dump test Chengwen Feng
2022-10-11 12:17   ` [PATCH v8 7/9] memarea: support backup memory mechanism Chengwen Feng
2022-10-11 15:58     ` Dmitry Kozlyuk
2022-10-11 20:26       ` Mattias Rönnblom
2022-10-12  8:23         ` fengchengwen
2022-10-12  7:57       ` fengchengwen
2022-10-11 12:17   ` [PATCH v8 8/9] test/memarea: support backup memory test Chengwen Feng
2022-10-11 12:17   ` [PATCH v8 9/9] app/test: add memarea to malloc-perf-autotest Chengwen Feng
2022-10-11 15:58     ` Dmitry Kozlyuk
2022-10-12  8:03       ` fengchengwen
2022-10-12 10:47 ` [PATCH v9 0/7] introduce memarea library Chengwen Feng
2022-10-12 10:47   ` [PATCH v9 1/7] memarea: " Chengwen Feng
2022-10-12 10:48   ` [PATCH v9 2/7] test/memarea: support memarea test Chengwen Feng
2022-10-12 10:48   ` [PATCH v9 3/7] memarea: support alloc/free/refcnt-update API Chengwen Feng
2022-10-12 10:48   ` [PATCH v9 4/7] test/memarea: support alloc/free/refcnt-update test Chengwen Feng
2022-10-12 10:48   ` [PATCH v9 5/7] memarea: support dump API Chengwen Feng
2022-10-12 10:48   ` [PATCH v9 6/7] test/memarea: support dump test Chengwen Feng
2022-10-12 10:48   ` [PATCH v9 7/7] app/test: add memarea to malloc-perf-autotest Chengwen Feng
2022-10-17  3:40 ` [PATCH v10 0/7] introduce memarea library Chengwen Feng
2022-10-17  3:40   ` [PATCH v10 1/7] memarea: " Chengwen Feng
2022-10-17  3:40   ` [PATCH v10 2/7] test/memarea: support memarea test Chengwen Feng
2022-10-17  3:40   ` [PATCH v10 3/7] memarea: support alloc/free/refcnt-update API Chengwen Feng
2022-10-17  3:40   ` [PATCH v10 4/7] test/memarea: support alloc/free/refcnt-update test Chengwen Feng
2022-10-17  3:40   ` [PATCH v10 5/7] memarea: support dump API Chengwen Feng
2022-10-17  3:40   ` [PATCH v10 6/7] test/memarea: support dump test Chengwen Feng
2022-10-17  3:40   ` [PATCH v10 7/7] app/test: add memarea to malloc-perf-autotest Chengwen Feng
2022-12-13  9:13 ` [PATCH v11 0/6] introduce memarea library Chengwen Feng
2022-12-13  9:13   ` [PATCH v11 1/6] memarea: " Chengwen Feng
2022-12-13  9:13   ` [PATCH v11 2/6] test/memarea: support memarea test Chengwen Feng
2022-12-13  9:13   ` [PATCH v11 3/6] memarea: support alloc/free/refcnt-update API Chengwen Feng
2023-01-10  2:16     ` Dongdong Liu
2022-12-13  9:13   ` [PATCH v11 4/6] test/memarea: support alloc/free/refcnt-update test Chengwen Feng
2022-12-13  9:13   ` [PATCH v11 5/6] memarea: support dump API Chengwen Feng
2022-12-13  9:13   ` [PATCH v11 6/6] test/memarea: support dump test Chengwen Feng
2023-01-10  2:21   ` [PATCH v11 0/6] introduce memarea library Dongdong Liu
2023-01-14 11:49 ` [PATCH v12 " Chengwen Feng
2023-01-14 11:49   ` [PATCH v12 1/6] memarea: " Chengwen Feng
2023-01-15  7:58     ` Morten Brørup
2023-01-20  8:20       ` fengchengwen
2023-01-20  9:05         ` Morten Brørup
2023-01-14 11:49   ` [PATCH v12 2/6] test/memarea: support memarea test Chengwen Feng
2023-01-14 11:49   ` [PATCH v12 3/6] memarea: support alloc and free API Chengwen Feng
2023-01-14 11:49   ` [PATCH v12 4/6] test/memarea: support alloc and free API test Chengwen Feng
2023-01-14 11:49   ` [PATCH v12 5/6] memarea: support dump API Chengwen Feng
2023-01-14 11:49   ` [PATCH v12 6/6] test/memarea: support dump API test Chengwen Feng
2023-02-08  8:24 ` [PATCH v13 0/6] introduce memarea library Chengwen Feng
2023-02-08  8:24   ` [PATCH v13 1/6] memarea: " Chengwen Feng
2023-02-09  0:04     ` Stephen Hemminger
2023-02-09  6:48       ` fengchengwen
2023-02-08  8:24   ` [PATCH v13 2/6] test/memarea: support memarea test Chengwen Feng
2023-02-08  8:24   ` [PATCH v13 3/6] memarea: support alloc and free API Chengwen Feng
2023-02-08  8:24   ` [PATCH v13 4/6] test/memarea: support alloc and free API test Chengwen Feng
2023-02-08  8:24   ` [PATCH v13 5/6] memarea: support dump API Chengwen Feng
2023-02-08  8:24   ` [PATCH v13 6/6] test/memarea: support dump API test Chengwen Feng
2023-02-08  8:43   ` [PATCH v13 0/6] introduce memarea library Morten Brørup
2023-02-09  6:36 ` [PATCH v14 " Chengwen Feng
2023-02-09  6:36   ` [PATCH v14 1/6] memarea: " Chengwen Feng
2023-06-21 10:52     ` Burakov, Anatoly
2023-06-21 12:05     ` Burakov, Anatoly
2023-02-09  6:36   ` [PATCH v14 2/6] test/memarea: support memarea test Chengwen Feng
2023-06-21 11:00     ` Burakov, Anatoly
2023-02-09  6:36   ` [PATCH v14 3/6] memarea: support alloc and free API Chengwen Feng
2023-06-22 15:29     ` Burakov, Anatoly
2023-02-09  6:36   ` [PATCH v14 4/6] test/memarea: support alloc and free API test Chengwen Feng
2023-02-09  6:36   ` [PATCH v14 5/6] memarea: support dump API Chengwen Feng
2023-06-22 15:55     ` Burakov, Anatoly
2023-06-28  1:25       ` fengchengwen
2023-06-28  1:39         ` Thomas Monjalon
2023-06-28  1:48           ` fengchengwen
2023-07-03 10:29           ` Burakov, Anatoly
2023-02-09  6:36   ` [PATCH v14 6/6] test/memarea: support dump API test Chengwen Feng
2023-06-12 13:53   ` [PATCH v14 0/6] introduce memarea library Ferruh Yigit
2023-06-13  9:50     ` fengchengwen
2023-06-13 11:04       ` Burakov, Anatoly
2023-06-13 12:46         ` fengchengwen
2023-07-09 13:00 ` [PATCH v15 " Chengwen Feng
2023-07-09 13:00   ` [PATCH v15 1/6] memarea: " Chengwen Feng
2023-07-09 19:46     ` Stephen Hemminger
2023-07-09 13:00   ` [PATCH v15 2/6] test/memarea: support memarea test Chengwen Feng
2023-07-09 13:00   ` [PATCH v15 3/6] memarea: support alloc and free API Chengwen Feng
2023-07-09 13:00   ` [PATCH v15 4/6] test/memarea: support alloc and free API test Chengwen Feng
2023-07-09 13:00   ` [PATCH v15 5/6] memarea: support dump API Chengwen Feng
2023-07-09 13:00   ` [PATCH v15 6/6] test/memarea: support dump API test Chengwen Feng
2023-07-10  6:49 ` [PATCH v16 0/6] introduce memarea library Chengwen Feng
2023-07-10  6:49   ` [PATCH v16 1/6] memarea: " Chengwen Feng
2023-07-17 13:19     ` Burakov, Anatoly
2023-07-10  6:49   ` [PATCH v16 2/6] test/memarea: support memarea test Chengwen Feng
2023-07-17 13:22     ` Burakov, Anatoly
2023-07-10  6:49   ` [PATCH v16 3/6] memarea: support alloc and free API Chengwen Feng
2023-07-17 13:33     ` Burakov, Anatoly
2023-07-10  6:49   ` [PATCH v16 4/6] test/memarea: support alloc and free API test Chengwen Feng
2023-07-17 13:57     ` Burakov, Anatoly
2023-07-18  2:49       ` fengchengwen
2023-07-10  6:49   ` [PATCH v16 5/6] memarea: support dump API Chengwen Feng
2023-07-10  6:49   ` [PATCH v16 6/6] test/memarea: support dump API test Chengwen Feng
2023-07-19 12:09     ` Burakov, Anatoly
2023-07-20  9:35       ` fengchengwen
2023-07-18  2:40 ` [PATCH v17 0/6] introduce memarea library Chengwen Feng
2023-07-18  2:40   ` [PATCH v17 1/6] memarea: " Chengwen Feng
2023-07-18  2:40   ` [PATCH v17 2/6] test/memarea: support memarea test Chengwen Feng
2023-07-18  2:40   ` [PATCH v17 3/6] memarea: support alloc and free API Chengwen Feng
2023-07-18  2:40   ` [PATCH v17 4/6] test/memarea: support alloc and free API test Chengwen Feng
2023-07-18  2:40   ` [PATCH v17 5/6] memarea: support dump API Chengwen Feng
2023-07-18  2:40   ` [PATCH v17 6/6] test/memarea: support dump API test Chengwen Feng
2023-07-18 13:46 ` [PATCH v18 0/6] introduce memarea library Chengwen Feng
2023-07-18 13:46   ` [PATCH v18 1/6] memarea: " Chengwen Feng
2023-07-18 13:46   ` [PATCH v18 2/6] test/memarea: support memarea test Chengwen Feng
2023-07-18 13:46   ` [PATCH v18 3/6] memarea: support alloc and free API Chengwen Feng
2023-07-18 13:46   ` [PATCH v18 4/6] test/memarea: support alloc and free API test Chengwen Feng
2023-07-18 13:46   ` [PATCH v18 5/6] memarea: support dump API Chengwen Feng
2023-07-18 13:46   ` [PATCH v18 6/6] test/memarea: support dump API test Chengwen Feng
2023-07-20  9:22 ` [PATCH v19 0/6] introduce memarea library Chengwen Feng
2023-07-20  9:22   ` [PATCH v19 1/6] memarea: " Chengwen Feng
2023-07-20  9:22   ` [PATCH v19 2/6] test/memarea: support memarea test Chengwen Feng
2023-07-20  9:22   ` [PATCH v19 3/6] memarea: support alloc and free API Chengwen Feng
2023-07-20  9:22   ` [PATCH v19 4/6] test/memarea: support alloc and free API test Chengwen Feng
2023-07-20  9:22   ` [PATCH v19 5/6] memarea: support dump API Chengwen Feng
2023-07-20  9:22   ` [PATCH v19 6/6] test/memarea: support dump API test Chengwen Feng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1faa55d7-6fab-9d1c-4416-30cf16c3fd20@huawei.com \
    --to=fengchengwen@huawei.com \
    --cc=anatoly.burakov@intel.com \
    --cc=datshan@qq.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=dmitry.kozliuk@gmail.com \
    --cc=hofors@lysator.liu.se \
    --cc=jerinjacobk@gmail.com \
    --cc=mb@smartsharesystems.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).