[v3,09/14] eal: hide shared memory config
Checks
Commit Message
Now that everything that has ever accessed the shared memory
config is doing so through the public API's, we can make it
internal. Since we're removing quite a few headers from
rte_eal_memconfig.h, we need to add them back in places
where this header is used.
This bumps the ABI, so also change all build files and make
update documentation.
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
app/test/test_memzone.c | 1 +
app/test/test_tailq.c | 1 +
doc/guides/rel_notes/deprecation.rst | 3 -
doc/guides/rel_notes/release_19_08.rst | 8 +-
drivers/bus/pci/linux/pci_vfio.c | 1 +
lib/librte_acl/rte_acl.c | 2 +
lib/librte_distributor/rte_distributor.c | 1 +
lib/librte_distributor/rte_distributor_v20.c | 1 +
lib/librte_eal/common/eal_common_mcfg.c | 2 +
lib/librte_eal/common/eal_common_memory.c | 1 +
lib/librte_eal/common/eal_common_memzone.c | 1 +
lib/librte_eal/common/eal_common_tailqs.c | 1 +
lib/librte_eal/common/eal_memcfg.h | 79 +++++++++++++++++++
.../common/include/rte_eal_memconfig.h | 75 ++----------------
lib/librte_eal/common/malloc_heap.c | 2 +
lib/librte_eal/common/malloc_mp.c | 1 +
lib/librte_eal/common/rte_malloc.c | 1 +
lib/librte_eal/freebsd/eal/Makefile | 2 +-
lib/librte_eal/freebsd/eal/eal_memory.c | 1 +
lib/librte_eal/linux/eal/Makefile | 2 +-
lib/librte_eal/linux/eal/eal.c | 1 +
lib/librte_eal/linux/eal/eal_memalloc.c | 1 +
lib/librte_eal/linux/eal/eal_memory.c | 1 +
lib/librte_eal/linux/eal/eal_vfio.c | 1 +
lib/librte_eal/meson.build | 2 +-
lib/librte_efd/rte_efd.c | 1 +
lib/librte_hash/rte_cuckoo_hash.c | 1 +
lib/librte_hash/rte_fbk_hash.c | 1 +
lib/librte_lpm/rte_lpm.c | 1 +
lib/librte_lpm/rte_lpm6.c | 1 +
lib/librte_member/rte_member.c | 1 +
lib/librte_mempool/rte_mempool.c | 1 +
lib/librte_reorder/rte_reorder.c | 1 +
lib/librte_ring/rte_ring.c | 1 +
34 files changed, 125 insertions(+), 76 deletions(-)
create mode 100644 lib/librte_eal/common/eal_memcfg.h
Comments
On Thu, Jun 27, 2019 at 1:39 PM Anatoly Burakov <anatoly.burakov@intel.com>
wrote:
> diff --git a/lib/librte_eal/common/include/rte_eal_memconfig.h
> b/lib/librte_eal/common/include/rte_eal_memconfig.h
> index 58dcbb96d..1b615c892 100644
> --- a/lib/librte_eal/common/include/rte_eal_memconfig.h
> +++ b/lib/librte_eal/common/include/rte_eal_memconfig.h
> @@ -5,13 +5,12 @@
> #ifndef _RTE_EAL_MEMCONFIG_H_
> #define _RTE_EAL_MEMCONFIG_H_
>
> -#include <rte_config.h>
> -#include <rte_tailq.h>
> -#include <rte_memory.h>
> -#include <rte_memzone.h>
> -#include <rte_malloc_heap.h>
> -#include <rte_rwlock.h>
> -#include <rte_pause.h>
> +/**
> + * @file
> + *
> + * This API allows access to EAL shared memory configuration through an
> API.
> + */
> +
> #include <rte_fbarray.h>
>
> #ifdef __cplusplus
> @@ -38,68 +37,6 @@ struct rte_memseg_list {
> struct rte_fbarray memseg_arr;
> };
>
>
You left the rte_memseg_list definition here and the inclusion of
rte_fbarray.h.
Is this intentional?
I would expect it to be defined in a header like rte_memory.h.
If you agree, this could be done in a follow-up patch.
-/**
> - * the structure for the memory configuration for the RTE.
> - * Used by the rte_config structure. It is separated out, as for
> multi-process
> - * support, the memory details should be shared across instances
> - */
> -struct rte_mem_config {
> - volatile uint32_t magic; /**< Magic number - Sanity check. */
> -
> - /* memory topology */
> - uint32_t nchannel; /**< Number of channels (0 if unknown). */
> - uint32_t nrank; /**< Number of ranks (0 if unknown). */
> -
> - /**
> - * current lock nest order
> - * - qlock->mlock (ring/hash/lpm)
> - * - mplock->qlock->mlock (mempool)
> - * Notice:
> - * *ALWAYS* obtain qlock first if having to obtain both qlock and
> mlock
> - */
> - rte_rwlock_t mlock; /**< only used by memzone LIB for
> thread-safe. */
> - rte_rwlock_t qlock; /**< used for tailq operation for thread
> safe. */
> - rte_rwlock_t mplock; /**< only used by mempool LIB for
> thread-safe. */
> -
> - rte_rwlock_t memory_hotplug_lock;
> - /**< indicates whether memory hotplug request is in progress. */
> -
> - /* memory segments and zones */
> - struct rte_fbarray memzones; /**< Memzone descriptors. */
> -
> - struct rte_memseg_list memsegs[RTE_MAX_MEMSEG_LISTS];
> - /**< list of dynamic arrays holding memsegs */
> -
> - struct rte_tailq_head tailq_head[RTE_MAX_TAILQ]; /**< Tailqs for
> objects */
> -
> - /* Heaps of Malloc */
> - struct malloc_heap malloc_heaps[RTE_MAX_HEAPS];
> -
> - /* next socket ID for external malloc heap */
> - int next_socket_id;
> -
> - /* address of mem_config in primary process. used to map shared
> config into
> - * exact same address the primary process maps it.
> - */
> - uint64_t mem_cfg_addr;
> -
> - /* legacy mem and single file segments options are shared */
> - uint32_t legacy_mem;
> - uint32_t single_file_segments;
> -
> - /* keeps the more restricted dma mask */
> - uint8_t dma_maskbits;
> -} __attribute__((__packed__));
> -
> -
> -inline static void
> -rte_eal_mcfg_wait_complete(struct rte_mem_config* mcfg)
> -{
> - /* wait until shared mem_config finish initialising */
> - while(mcfg->magic != RTE_MAGIC)
> - rte_pause();
> -}
> -
> /**
> * Lock the internal EAL shared memory configuration for shared access.
> */
>
On 04-Jul-19 8:43 AM, David Marchand wrote:
> On Thu, Jun 27, 2019 at 1:39 PM Anatoly Burakov <anatoly.burakov@intel.com>
> wrote:
>
>> diff --git a/lib/librte_eal/common/include/rte_eal_memconfig.h
>> b/lib/librte_eal/common/include/rte_eal_memconfig.h
>> index 58dcbb96d..1b615c892 100644
>> --- a/lib/librte_eal/common/include/rte_eal_memconfig.h
>> +++ b/lib/librte_eal/common/include/rte_eal_memconfig.h
>> @@ -5,13 +5,12 @@
>> #ifndef _RTE_EAL_MEMCONFIG_H_
>> #define _RTE_EAL_MEMCONFIG_H_
>>
>> -#include <rte_config.h>
>> -#include <rte_tailq.h>
>> -#include <rte_memory.h>
>> -#include <rte_memzone.h>
>> -#include <rte_malloc_heap.h>
>> -#include <rte_rwlock.h>
>> -#include <rte_pause.h>
>> +/**
>> + * @file
>> + *
>> + * This API allows access to EAL shared memory configuration through an
>> API.
>> + */
>> +
>> #include <rte_fbarray.h>
>>
>> #ifdef __cplusplus
>> @@ -38,68 +37,6 @@ struct rte_memseg_list {
>> struct rte_fbarray memseg_arr;
>> };
>>
>>
> You left the rte_memseg_list definition here and the inclusion of
> rte_fbarray.h.
> Is this intentional?
Yes, it is intentional. I can move them to rte_memory, but they have to
be externally visible.
On Thu, Jul 4, 2019 at 12:47 PM Burakov, Anatoly <anatoly.burakov@intel.com>
wrote:
> On 04-Jul-19 8:43 AM, David Marchand wrote:
> > On Thu, Jun 27, 2019 at 1:39 PM Anatoly Burakov <
> anatoly.burakov@intel.com>
> > wrote:
> >
> >> diff --git a/lib/librte_eal/common/include/rte_eal_memconfig.h
> >> b/lib/librte_eal/common/include/rte_eal_memconfig.h
> >> index 58dcbb96d..1b615c892 100644
> >> --- a/lib/librte_eal/common/include/rte_eal_memconfig.h
> >> +++ b/lib/librte_eal/common/include/rte_eal_memconfig.h
> >> @@ -5,13 +5,12 @@
> >> #ifndef _RTE_EAL_MEMCONFIG_H_
> >> #define _RTE_EAL_MEMCONFIG_H_
> >>
> >> -#include <rte_config.h>
> >> -#include <rte_tailq.h>
> >> -#include <rte_memory.h>
> >> -#include <rte_memzone.h>
> >> -#include <rte_malloc_heap.h>
> >> -#include <rte_rwlock.h>
> >> -#include <rte_pause.h>
> >> +/**
> >> + * @file
> >> + *
> >> + * This API allows access to EAL shared memory configuration through an
> >> API.
> >> + */
> >> +
> >> #include <rte_fbarray.h>
> >>
> >> #ifdef __cplusplus
> >> @@ -38,68 +37,6 @@ struct rte_memseg_list {
> >> struct rte_fbarray memseg_arr;
> >> };
> >>
> >>
> > You left the rte_memseg_list definition here and the inclusion of
> > rte_fbarray.h.
> > Is this intentional?
>
> Yes, it is intentional. I can move them to rte_memory, but they have to
> be externally visible.
>
It makes more sense in rte_memory.h yes.
But I tried to do this, and hit compilation issues with conflicts on bool
type in base drivers...
Anyway, this could be a cleanup later.
27/06/2019 13:39, Anatoly Burakov:
> +/**
> + * the structure for the memory configuration for the RTE.
> + * Used by the rte_config structure. It is separated out, as for multi-process
> + * support, the memory details should be shared across instances
> + */
> +struct rte_mem_config {
> + volatile uint32_t magic; /**< Magic number - Sanity check. */
> +
> + /* memory topology */
> + uint32_t nchannel; /**< Number of channels (0 if unknown). */
> + uint32_t nrank; /**< Number of ranks (0 if unknown). */
> +
> + /**
> + * current lock nest order
> + * - qlock->mlock (ring/hash/lpm)
> + * - mplock->qlock->mlock (mempool)
> + * Notice:
> + * *ALWAYS* obtain qlock first if having to obtain both qlock and mlock
> + */
> + rte_rwlock_t mlock; /**< only used by memzone LIB for thread-safe. */
> + rte_rwlock_t qlock; /**< used for tailq operation for thread safe. */
> + rte_rwlock_t mplock; /**< only used by mempool LIB for thread-safe. */
> +
> + rte_rwlock_t memory_hotplug_lock;
> + /**< indicates whether memory hotplug request is in progress. */
> +
> + /* memory segments and zones */
> + struct rte_fbarray memzones; /**< Memzone descriptors. */
> +
> + struct rte_memseg_list memsegs[RTE_MAX_MEMSEG_LISTS];
> + /**< list of dynamic arrays holding memsegs */
> +
> + struct rte_tailq_head tailq_head[RTE_MAX_TAILQ];
> + /**< Tailqs for objects */
> +
> + /* Heaps of Malloc */
> + struct malloc_heap malloc_heaps[RTE_MAX_HEAPS];
> +
> + /* next socket ID for external malloc heap */
> + int next_socket_id;
> +
> + /* address of mem_config in primary process. used to map shared config
> + * into exact same address the primary process maps it.
> + */
> + uint64_t mem_cfg_addr;
> +
> + /* legacy mem and single file segments options are shared */
> + uint32_t legacy_mem;
> + uint32_t single_file_segments;
> +
> + /* keeps the more restricted dma mask */
> + uint8_t dma_maskbits;
> +} __attribute__((packed));
While moving it, you could take the opportunity to do some
small cleanups of the comments, like removing "for the RTE",
or adding some uppercases and dots, etc.
@@ -19,6 +19,7 @@
#include <rte_errno.h>
#include <rte_malloc.h>
#include "../../lib/librte_eal/common/malloc_elem.h"
+#include "../../lib/librte_eal/common/eal_memcfg.h"
#include "test.h"
@@ -12,6 +12,7 @@
#include <rte_eal.h>
#include <rte_eal_memconfig.h>
#include <rte_string_fns.h>
+#include <rte_tailq.h>
#include "test.h"
@@ -23,9 +23,6 @@ Deprecation Notices
* eal: The function ``rte_eal_remote_launch`` will return new error codes
after read or write error on the pipe, instead of calling ``rte_panic``.
-* eal: the ``rte_mem_config`` struct will be made private to remove it from the
- externally visible ABI and allow it to be updated in the future.
-
* eal: both declaring and identifying devices will be streamlined in v18.11.
New functions will appear to query a specific port from buses, classes of
device and device drivers. Device declaration will be made coherent with the
@@ -132,6 +132,10 @@ API Changes
Also, make sure to start the actual text at the margin.
=========================================================
+* The ``rte_mem_config`` structure has been made private. The new accessor
+ ``rte_mcfg_*`` functions were introduced to provide replacement for direct
+ access to the shared mem config.
+
* The network structures, definitions and functions have
been prefixed by ``rte_`` to resolve conflicts with libc headers.
@@ -151,6 +155,8 @@ ABI Changes
Also, make sure to start the actual text at the margin.
=========================================================
+* The ``rte_mem_config`` structure has been made private.
+
Shared Library Versions
-----------------------
@@ -184,7 +190,7 @@ The libraries prepended with a plus sign were incremented in this version.
librte_compressdev.so.1
librte_cryptodev.so.7
librte_distributor.so.1
- librte_eal.so.10
+ + librte_eal.so.11
librte_efd.so.1
librte_ethdev.so.12
librte_eventdev.so.6
@@ -20,6 +20,7 @@
#include <rte_eal.h>
#include <rte_bus.h>
#include <rte_spinlock.h>
+#include <rte_tailq.h>
#include "eal_filesystem.h"
@@ -4,6 +4,8 @@
#include <rte_string_fns.h>
#include <rte_acl.h>
+#include <rte_tailq.h>
+
#include "acl.h"
TAILQ_HEAD(rte_acl_list, rte_tailq_entry);
@@ -14,6 +14,7 @@
#include <rte_string_fns.h>
#include <rte_eal_memconfig.h>
#include <rte_pause.h>
+#include <rte_tailq.h>
#include "rte_distributor_private.h"
#include "rte_distributor.h"
@@ -13,6 +13,7 @@
#include <rte_string_fns.h>
#include <rte_eal_memconfig.h>
#include <rte_pause.h>
+#include <rte_tailq.h>
#include "rte_distributor_v20.h"
#include "rte_distributor_private.h"
@@ -5,6 +5,8 @@
#include <rte_config.h>
#include <rte_eal_memconfig.h>
+#include "eal_memcfg.h"
+
void
rte_mcfg_mem_read_lock(void)
{
@@ -24,6 +24,7 @@
#include "eal_memalloc.h"
#include "eal_private.h"
#include "eal_internal_cfg.h"
+#include "eal_memcfg.h"
#include "malloc_heap.h"
/*
@@ -24,6 +24,7 @@
#include "malloc_heap.h"
#include "malloc_elem.h"
#include "eal_private.h"
+#include "eal_memcfg.h"
static inline const struct rte_memzone *
memzone_lookup_thread_unsafe(const char *name)
@@ -23,6 +23,7 @@
#include <rte_debug.h>
#include "eal_private.h"
+#include "eal_memcfg.h"
TAILQ_HEAD(rte_tailq_elem_head, rte_tailq_elem);
/* local tailq list */
new file mode 100644
@@ -0,0 +1,79 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019 Intel Corporation
+ */
+
+#ifndef EAL_MEMCFG_H
+#define EAL_MEMCFG_H
+
+#include <rte_config.h>
+#include <rte_eal_memconfig.h>
+#include <rte_malloc_heap.h>
+#include <rte_memory.h>
+#include <rte_memzone.h>
+#include <rte_pause.h>
+#include <rte_rwlock.h>
+#include <rte_tailq.h>
+
+/**
+ * the structure for the memory configuration for the RTE.
+ * Used by the rte_config structure. It is separated out, as for multi-process
+ * support, the memory details should be shared across instances
+ */
+struct rte_mem_config {
+ volatile uint32_t magic; /**< Magic number - Sanity check. */
+
+ /* memory topology */
+ uint32_t nchannel; /**< Number of channels (0 if unknown). */
+ uint32_t nrank; /**< Number of ranks (0 if unknown). */
+
+ /**
+ * current lock nest order
+ * - qlock->mlock (ring/hash/lpm)
+ * - mplock->qlock->mlock (mempool)
+ * Notice:
+ * *ALWAYS* obtain qlock first if having to obtain both qlock and mlock
+ */
+ rte_rwlock_t mlock; /**< only used by memzone LIB for thread-safe. */
+ rte_rwlock_t qlock; /**< used for tailq operation for thread safe. */
+ rte_rwlock_t mplock; /**< only used by mempool LIB for thread-safe. */
+
+ rte_rwlock_t memory_hotplug_lock;
+ /**< indicates whether memory hotplug request is in progress. */
+
+ /* memory segments and zones */
+ struct rte_fbarray memzones; /**< Memzone descriptors. */
+
+ struct rte_memseg_list memsegs[RTE_MAX_MEMSEG_LISTS];
+ /**< list of dynamic arrays holding memsegs */
+
+ struct rte_tailq_head tailq_head[RTE_MAX_TAILQ];
+ /**< Tailqs for objects */
+
+ /* Heaps of Malloc */
+ struct malloc_heap malloc_heaps[RTE_MAX_HEAPS];
+
+ /* next socket ID for external malloc heap */
+ int next_socket_id;
+
+ /* address of mem_config in primary process. used to map shared config
+ * into exact same address the primary process maps it.
+ */
+ uint64_t mem_cfg_addr;
+
+ /* legacy mem and single file segments options are shared */
+ uint32_t legacy_mem;
+ uint32_t single_file_segments;
+
+ /* keeps the more restricted dma mask */
+ uint8_t dma_maskbits;
+} __attribute__((packed));
+
+static inline void
+rte_eal_mcfg_wait_complete(struct rte_mem_config *mcfg)
+{
+ /* wait until shared mem_config finish initialising */
+ while (mcfg->magic != RTE_MAGIC)
+ rte_pause();
+}
+
+#endif /* EAL_MEMCFG_H */
@@ -5,13 +5,12 @@
#ifndef _RTE_EAL_MEMCONFIG_H_
#define _RTE_EAL_MEMCONFIG_H_
-#include <rte_config.h>
-#include <rte_tailq.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_malloc_heap.h>
-#include <rte_rwlock.h>
-#include <rte_pause.h>
+/**
+ * @file
+ *
+ * This API allows access to EAL shared memory configuration through an API.
+ */
+
#include <rte_fbarray.h>
#ifdef __cplusplus
@@ -38,68 +37,6 @@ struct rte_memseg_list {
struct rte_fbarray memseg_arr;
};
-/**
- * the structure for the memory configuration for the RTE.
- * Used by the rte_config structure. It is separated out, as for multi-process
- * support, the memory details should be shared across instances
- */
-struct rte_mem_config {
- volatile uint32_t magic; /**< Magic number - Sanity check. */
-
- /* memory topology */
- uint32_t nchannel; /**< Number of channels (0 if unknown). */
- uint32_t nrank; /**< Number of ranks (0 if unknown). */
-
- /**
- * current lock nest order
- * - qlock->mlock (ring/hash/lpm)
- * - mplock->qlock->mlock (mempool)
- * Notice:
- * *ALWAYS* obtain qlock first if having to obtain both qlock and mlock
- */
- rte_rwlock_t mlock; /**< only used by memzone LIB for thread-safe. */
- rte_rwlock_t qlock; /**< used for tailq operation for thread safe. */
- rte_rwlock_t mplock; /**< only used by mempool LIB for thread-safe. */
-
- rte_rwlock_t memory_hotplug_lock;
- /**< indicates whether memory hotplug request is in progress. */
-
- /* memory segments and zones */
- struct rte_fbarray memzones; /**< Memzone descriptors. */
-
- struct rte_memseg_list memsegs[RTE_MAX_MEMSEG_LISTS];
- /**< list of dynamic arrays holding memsegs */
-
- struct rte_tailq_head tailq_head[RTE_MAX_TAILQ]; /**< Tailqs for objects */
-
- /* Heaps of Malloc */
- struct malloc_heap malloc_heaps[RTE_MAX_HEAPS];
-
- /* next socket ID for external malloc heap */
- int next_socket_id;
-
- /* address of mem_config in primary process. used to map shared config into
- * exact same address the primary process maps it.
- */
- uint64_t mem_cfg_addr;
-
- /* legacy mem and single file segments options are shared */
- uint32_t legacy_mem;
- uint32_t single_file_segments;
-
- /* keeps the more restricted dma mask */
- uint8_t dma_maskbits;
-} __attribute__((__packed__));
-
-
-inline static void
-rte_eal_mcfg_wait_complete(struct rte_mem_config* mcfg)
-{
- /* wait until shared mem_config finish initialising */
- while(mcfg->magic != RTE_MAGIC)
- rte_pause();
-}
-
/**
* Lock the internal EAL shared memory configuration for shared access.
*/
@@ -20,11 +20,13 @@
#include <rte_string_fns.h>
#include <rte_spinlock.h>
#include <rte_memcpy.h>
+#include <rte_memzone.h>
#include <rte_atomic.h>
#include <rte_fbarray.h>
#include "eal_internal_cfg.h"
#include "eal_memalloc.h"
+#include "eal_memcfg.h"
#include "malloc_elem.h"
#include "malloc_heap.h"
#include "malloc_mp.h"
@@ -10,6 +10,7 @@
#include <rte_string_fns.h>
#include "eal_memalloc.h"
+#include "eal_memcfg.h"
#include "malloc_elem.h"
#include "malloc_mp.h"
@@ -25,6 +25,7 @@
#include "malloc_elem.h"
#include "malloc_heap.h"
#include "eal_memalloc.h"
+#include "eal_memcfg.h"
/* Free the memory space back to heap */
@@ -22,7 +22,7 @@ LDLIBS += -lrte_kvargs
EXPORT_MAP := ../../rte_eal_version.map
-LIBABIVER := 10
+LIBABIVER := 11
# specific to freebsd exec-env
SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) := eal.c
@@ -18,6 +18,7 @@
#include "eal_private.h"
#include "eal_internal_cfg.h"
#include "eal_filesystem.h"
+#include "eal_memcfg.h"
#define EAL_PAGE_SIZE (sysconf(_SC_PAGESIZE))
@@ -10,7 +10,7 @@ ARCH_DIR ?= $(RTE_ARCH)
EXPORT_MAP := ../../rte_eal_version.map
VPATH += $(RTE_SDK)/lib/librte_eal/common/arch/$(ARCH_DIR)
-LIBABIVER := 10
+LIBABIVER := 11
VPATH += $(RTE_SDK)/lib/librte_eal/common
@@ -57,6 +57,7 @@
#include "eal_internal_cfg.h"
#include "eal_filesystem.h"
#include "eal_hugepages.h"
+#include "eal_memcfg.h"
#include "eal_options.h"
#include "eal_vfio.h"
@@ -44,6 +44,7 @@
#include "eal_filesystem.h"
#include "eal_internal_cfg.h"
#include "eal_memalloc.h"
+#include "eal_memcfg.h"
#include "eal_private.h"
const int anonymous_hugepages_supported =
@@ -46,6 +46,7 @@
#include "eal_private.h"
#include "eal_memalloc.h"
+#include "eal_memcfg.h"
#include "eal_internal_cfg.h"
#include "eal_filesystem.h"
#include "eal_hugepages.h"
@@ -15,6 +15,7 @@
#include <rte_vfio.h>
#include "eal_filesystem.h"
+#include "eal_memcfg.h"
#include "eal_vfio.h"
#include "eal_private.h"
@@ -12,7 +12,7 @@ subdir('common') # defines common_sources, common_objs, etc.
dpdk_conf.set('RTE_EXEC_ENV_' + exec_env.to_upper(), 1)
subdir(exec_env + '/eal')
-version = 10 # the version of the EAL API
+version = 11 # the version of the EAL API
allow_experimental_apis = true
deps += 'kvargs'
if dpdk_conf.has('RTE_USE_LIBBSD')
@@ -20,6 +20,7 @@
#include <rte_ring.h>
#include <rte_jhash.h>
#include <rte_hash_crc.h>
+#include <rte_tailq.h>
#include "rte_efd.h"
#if defined(RTE_ARCH_X86)
@@ -27,6 +27,7 @@
#include <rte_ring.h>
#include <rte_compat.h>
#include <rte_vect.h>
+#include <rte_tailq.h>
#include "rte_hash.h"
#include "rte_cuckoo_hash.h"
@@ -20,6 +20,7 @@
#include <rte_cpuflags.h>
#include <rte_log.h>
#include <rte_spinlock.h>
+#include <rte_tailq.h>
#include "rte_fbk_hash.h"
@@ -21,6 +21,7 @@
#include <rte_errno.h>
#include <rte_rwlock.h>
#include <rte_spinlock.h>
+#include <rte_tailq.h>
#include "rte_lpm.h"
@@ -24,6 +24,7 @@
#include <rte_hash.h>
#include <assert.h>
#include <rte_jhash.h>
+#include <rte_tailq.h>
#include "rte_lpm6.h"
@@ -10,6 +10,7 @@
#include <rte_memory.h>
#include <rte_malloc.h>
#include <rte_errno.h>
+#include <rte_tailq.h>
#include "rte_member.h"
#include "rte_member_ht.h"
@@ -30,6 +30,7 @@
#include <rte_errno.h>
#include <rte_string_fns.h>
#include <rte_spinlock.h>
+#include <rte_tailq.h>
#include "rte_mempool.h"
@@ -11,6 +11,7 @@
#include <rte_eal_memconfig.h>
#include <rte_errno.h>
#include <rte_malloc.h>
+#include <rte_tailq.h>
#include "rte_reorder.h"
@@ -30,6 +30,7 @@
#include <rte_errno.h>
#include <rte_string_fns.h>
#include <rte_spinlock.h>
+#include <rte_tailq.h>
#include "rte_ring.h"