DPDK patches and discussions
 help / color / mirror / Atom feed
From: Anatoly Burakov <anatoly.burakov@intel.com>
To: dev@dpdk.org
Cc: Hemant Agrawal <hemant.agrawal@nxp.com>,
	Shreyansh Jain <shreyansh.jain@nxp.com>,
	Matan Azrad <matan@mellanox.com>,
	Shahaf Shuler <shahafs@mellanox.com>,
	Yongseok Koh <yskoh@mellanox.com>,
	Maxime Coquelin <maxime.coquelin@redhat.com>,
	Tiwei Bie <tiwei.bie@intel.com>,
	Zhihong Wang <zhihong.wang@intel.com>,
	Bruce Richardson <bruce.richardson@intel.com>,
	Olivier Matz <olivier.matz@6wind.com>,
	Andrew Rybchenko <arybchenko@solarflare.com>,
	laszlo.madarassy@ericsson.com, laszlo.vadkerti@ericsson.com,
	andras.kovacs@ericsson.com, winnie.tian@ericsson.com,
	daniel.andrasi@ericsson.com, janos.kobor@ericsson.com,
	srinath.mannam@broadcom.com, scott.branden@broadcom.com,
	ajit.khaparde@broadcom.com, keith.wiles@intel.com,
	thomas@monjalon.net
Subject: [dpdk-dev] [PATCH 02/16] mem: allow memseg lists to be marked as external
Date: Tue,  4 Sep 2018 14:11:37 +0100	[thread overview]
Message-ID: <e044616faa33794c4f59844112137ef28b0ce57f.1536064999.git.anatoly.burakov@intel.com> (raw)
In-Reply-To: <cover.1536064999.git.anatoly.burakov@intel.com>
In-Reply-To: <cover.1536064999.git.anatoly.burakov@intel.com>

When we allocate and use DPDK memory, we need to be able to
differentiate between DPDK hugepage segments and segments that
were made part of DPDK but are externally allocated. Add such
a property to memseg lists.

All current calls for memseg walk functions were adjusted to
ignore external segments where it made sense. Mempools is a
special case, because we may be asked to allocate a mempool on
a specific socket, and we need to ignore all page sizes on
other heaps or other sockets. Previously, this assumption of
knowing all page sizes was not a problem, but it will be now,
so we have to match socket ID with page size when calculating
minimum page size for a mempool.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---

Notes:
    v1:
    - Adjust all calls to memseg walk functions to ignore external
      segments where it made sense to do so

 drivers/bus/fslmc/fslmc_vfio.c                |  7 +++--
 drivers/net/mlx4/mlx4_mr.c                    |  3 ++
 drivers/net/mlx5/mlx5.c                       |  5 ++-
 drivers/net/mlx5/mlx5_mr.c                    |  3 ++
 drivers/net/virtio/virtio_user/vhost_kernel.c |  5 ++-
 lib/librte_eal/bsdapp/eal/eal.c               |  3 ++
 lib/librte_eal/bsdapp/eal/eal_memory.c        |  7 +++--
 lib/librte_eal/common/eal_common_memory.c     |  4 +++
 .../common/include/rte_eal_memconfig.h        |  1 +
 lib/librte_eal/common/include/rte_memory.h    |  9 ++++++
 lib/librte_eal/common/malloc_heap.c           |  9 ++++--
 lib/librte_eal/linuxapp/eal/eal.c             |  3 ++
 lib/librte_eal/linuxapp/eal/eal_memalloc.c    |  9 ++++++
 lib/librte_eal/linuxapp/eal/eal_vfio.c        | 17 +++++++---
 lib/librte_mempool/rte_mempool.c              | 31 ++++++++++++++-----
 test/test/test_malloc.c                       |  3 ++
 test/test/test_memzone.c                      |  3 ++
 17 files changed, 102 insertions(+), 20 deletions(-)

diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c
index 4c2cd2a87..2e9244fb7 100644
--- a/drivers/bus/fslmc/fslmc_vfio.c
+++ b/drivers/bus/fslmc/fslmc_vfio.c
@@ -317,12 +317,15 @@ fslmc_unmap_dma(uint64_t vaddr, uint64_t iovaddr __rte_unused, size_t len)
 }
 
 static int
-fslmc_dmamap_seg(const struct rte_memseg_list *msl __rte_unused,
-		 const struct rte_memseg *ms, void *arg)
+fslmc_dmamap_seg(const struct rte_memseg_list *msl, const struct rte_memseg *ms,
+		void *arg)
 {
 	int *n_segs = arg;
 	int ret;
 
+	if (msl->external)
+		return 0;
+
 	ret = fslmc_map_dma(ms->addr_64, ms->iova, ms->len);
 	if (ret)
 		DPAA2_BUS_ERR("Unable to VFIO map (addr=%p, len=%zu)",
diff --git a/drivers/net/mlx4/mlx4_mr.c b/drivers/net/mlx4/mlx4_mr.c
index d23d3c613..9f5d790b6 100644
--- a/drivers/net/mlx4/mlx4_mr.c
+++ b/drivers/net/mlx4/mlx4_mr.c
@@ -496,6 +496,9 @@ mr_find_contig_memsegs_cb(const struct rte_memseg_list *msl,
 {
 	struct mr_find_contig_memsegs_data *data = arg;
 
+	if (msl->external)
+		return 0;
+
 	if (data->addr < ms->addr_64 || data->addr >= ms->addr_64 + len)
 		return 0;
 	/* Found, save it and stop walking. */
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index ec63bc6e2..d9ed15880 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -568,11 +568,14 @@ static struct rte_pci_driver mlx5_driver;
 static void *uar_base;
 
 static int
-find_lower_va_bound(const struct rte_memseg_list *msl __rte_unused,
+find_lower_va_bound(const struct rte_memseg_list *msl,
 		const struct rte_memseg *ms, void *arg)
 {
 	void **addr = arg;
 
+	if (msl->external)
+		return 0;
+
 	if (*addr == NULL)
 		*addr = ms->addr;
 	else
diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c
index 1d1bcb5fe..fd4345f9c 100644
--- a/drivers/net/mlx5/mlx5_mr.c
+++ b/drivers/net/mlx5/mlx5_mr.c
@@ -486,6 +486,9 @@ mr_find_contig_memsegs_cb(const struct rte_memseg_list *msl,
 {
 	struct mr_find_contig_memsegs_data *data = arg;
 
+	if (msl->external)
+		return 0;
+
 	if (data->addr < ms->addr_64 || data->addr >= ms->addr_64 + len)
 		return 0;
 	/* Found, save it and stop walking. */
diff --git a/drivers/net/virtio/virtio_user/vhost_kernel.c b/drivers/net/virtio/virtio_user/vhost_kernel.c
index b2444096c..885c59c8a 100644
--- a/drivers/net/virtio/virtio_user/vhost_kernel.c
+++ b/drivers/net/virtio/virtio_user/vhost_kernel.c
@@ -75,13 +75,16 @@ struct walk_arg {
 	uint32_t region_nr;
 };
 static int
-add_memory_region(const struct rte_memseg_list *msl __rte_unused,
+add_memory_region(const struct rte_memseg_list *msl,
 		const struct rte_memseg *ms, size_t len, void *arg)
 {
 	struct walk_arg *wa = arg;
 	struct vhost_memory_region *mr;
 	void *start_addr;
 
+	if (msl->external)
+		return 0;
+
 	if (wa->region_nr >= max_regions)
 		return -1;
 
diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c
index d7ae9d686..7735194a3 100644
--- a/lib/librte_eal/bsdapp/eal/eal.c
+++ b/lib/librte_eal/bsdapp/eal/eal.c
@@ -502,6 +502,9 @@ check_socket(const struct rte_memseg_list *msl, void *arg)
 {
 	int *socket_id = arg;
 
+	if (msl->external)
+		return 0;
+
 	if (msl->socket_id == *socket_id && msl->memseg_arr.count != 0)
 		return 1;
 
diff --git a/lib/librte_eal/bsdapp/eal/eal_memory.c b/lib/librte_eal/bsdapp/eal/eal_memory.c
index 65ea670f9..4b092e1f2 100644
--- a/lib/librte_eal/bsdapp/eal/eal_memory.c
+++ b/lib/librte_eal/bsdapp/eal/eal_memory.c
@@ -236,12 +236,15 @@ struct attach_walk_args {
 	int seg_idx;
 };
 static int
-attach_segment(const struct rte_memseg_list *msl __rte_unused,
-		const struct rte_memseg *ms, void *arg)
+attach_segment(const struct rte_memseg_list *msl, const struct rte_memseg *ms,
+		void *arg)
 {
 	struct attach_walk_args *wa = arg;
 	void *addr;
 
+	if (msl->external)
+		return 0;
+
 	addr = mmap(ms->addr, ms->len, PROT_READ | PROT_WRITE,
 			MAP_SHARED | MAP_FIXED, wa->fd_hugepage,
 			wa->seg_idx * EAL_PAGE_SIZE);
diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c
index 0868bf681..55a11bf4d 100644
--- a/lib/librte_eal/common/eal_common_memory.c
+++ b/lib/librte_eal/common/eal_common_memory.c
@@ -272,6 +272,9 @@ physmem_size(const struct rte_memseg_list *msl, void *arg)
 {
 	uint64_t *total_len = arg;
 
+	if (msl->external)
+		return 0;
+
 	*total_len += msl->memseg_arr.count * msl->page_sz;
 
 	return 0;
@@ -547,6 +550,7 @@ rte_memseg_list_walk(rte_memseg_list_walk_t func, void *arg)
 	return ret;
 }
 
+
 /* init memory subsystem */
 int
 rte_eal_memory_init(void)
diff --git a/lib/librte_eal/common/include/rte_eal_memconfig.h b/lib/librte_eal/common/include/rte_eal_memconfig.h
index 1d8b0a6fe..76faf9a4a 100644
--- a/lib/librte_eal/common/include/rte_eal_memconfig.h
+++ b/lib/librte_eal/common/include/rte_eal_memconfig.h
@@ -33,6 +33,7 @@ struct rte_memseg_list {
 	size_t len; /**< Length of memory area covered by this memseg list. */
 	int socket_id; /**< Socket ID for all memsegs in this list. */
 	uint64_t page_sz; /**< Page size for all memsegs in this list. */
+	bool external; /**< true if this list points to external memory */
 	volatile uint32_t version; /**< version number for multiprocess sync. */
 	struct rte_fbarray memseg_arr;
 };
diff --git a/lib/librte_eal/common/include/rte_memory.h b/lib/librte_eal/common/include/rte_memory.h
index c4b7f4cff..b381d1cb6 100644
--- a/lib/librte_eal/common/include/rte_memory.h
+++ b/lib/librte_eal/common/include/rte_memory.h
@@ -215,6 +215,9 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  * @note This function read-locks the memory hotplug subsystem, and thus cannot
  *       be used within memory-related callback functions.
  *
+ * @note This function will also walk through externally allocated segments. It
+ *       is up to the user to decide whether to skip through these segments.
+ *
  * @param func
  *   Iterator function
  * @param arg
@@ -233,6 +236,9 @@ rte_memseg_walk(rte_memseg_walk_t func, void *arg);
  * @note This function read-locks the memory hotplug subsystem, and thus cannot
  *       be used within memory-related callback functions.
  *
+ * @note This function will also walk through externally allocated segments. It
+ *       is up to the user to decide whether to skip through these segments.
+ *
  * @param func
  *   Iterator function
  * @param arg
@@ -251,6 +257,9 @@ rte_memseg_contig_walk(rte_memseg_contig_walk_t func, void *arg);
  * @note This function read-locks the memory hotplug subsystem, and thus cannot
  *       be used within memory-related callback functions.
  *
+ * @note This function will also walk through externally allocated segments. It
+ *       is up to the user to decide whether to skip through these segments.
+ *
  * @param func
  *   Iterator function
  * @param arg
diff --git a/lib/librte_eal/common/malloc_heap.c b/lib/librte_eal/common/malloc_heap.c
index 12aaf2d72..8c37b9d7c 100644
--- a/lib/librte_eal/common/malloc_heap.c
+++ b/lib/librte_eal/common/malloc_heap.c
@@ -95,6 +95,9 @@ malloc_add_seg(const struct rte_memseg_list *msl,
 	struct malloc_heap *heap;
 	int msl_idx;
 
+	if (msl->external)
+		return 0;
+
 	heap = &mcfg->malloc_heaps[msl->socket_id];
 
 	/* msl is const, so find it */
@@ -756,8 +759,10 @@ malloc_heap_free(struct malloc_elem *elem)
 	/* anything after this is a bonus */
 	ret = 0;
 
-	/* ...of which we can't avail if we are in legacy mode */
-	if (internal_config.legacy_mem)
+	/* ...of which we can't avail if we are in legacy mode, or if this is an
+	 * externally allocated segment.
+	 */
+	if (internal_config.legacy_mem || msl->external)
 		goto free_unlock;
 
 	/* check if we can free any memory back to the system */
diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index e59ac6577..729ae2060 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -725,6 +725,9 @@ check_socket(const struct rte_memseg_list *msl, void *arg)
 {
 	int *socket_id = arg;
 
+	if (msl->external)
+		return 0;
+
 	return *socket_id == msl->socket_id;
 }
 
diff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c
index d040a2f71..8b0bbe43f 100644
--- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c
+++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c
@@ -1250,6 +1250,9 @@ sync_walk(const struct rte_memseg_list *msl, void *arg __rte_unused)
 	unsigned int i;
 	int msl_idx;
 
+	if (msl->external)
+		return 0;
+
 	msl_idx = msl - mcfg->memsegs;
 	primary_msl = &mcfg->memsegs[msl_idx];
 	local_msl = &local_memsegs[msl_idx];
@@ -1298,6 +1301,9 @@ secondary_msl_create_walk(const struct rte_memseg_list *msl,
 	char name[PATH_MAX];
 	int msl_idx, ret;
 
+	if (msl->external)
+		return 0;
+
 	msl_idx = msl - mcfg->memsegs;
 	primary_msl = &mcfg->memsegs[msl_idx];
 	local_msl = &local_memsegs[msl_idx];
@@ -1328,6 +1334,9 @@ secondary_lock_list_create_walk(const struct rte_memseg_list *msl,
 	int msl_idx;
 	int *data;
 
+	if (msl->external)
+		return 0;
+
 	msl_idx = msl - mcfg->memsegs;
 	len = msl->memseg_arr.len;
 
diff --git a/lib/librte_eal/linuxapp/eal/eal_vfio.c b/lib/librte_eal/linuxapp/eal/eal_vfio.c
index c68dc38e0..fddbc3b54 100644
--- a/lib/librte_eal/linuxapp/eal/eal_vfio.c
+++ b/lib/librte_eal/linuxapp/eal/eal_vfio.c
@@ -1082,11 +1082,14 @@ rte_vfio_get_group_num(const char *sysfs_base,
 }
 
 static int
-type1_map(const struct rte_memseg_list *msl __rte_unused,
-		const struct rte_memseg *ms, void *arg)
+type1_map(const struct rte_memseg_list *msl, const struct rte_memseg *ms,
+		void *arg)
 {
 	int *vfio_container_fd = arg;
 
+	if (msl->external)
+		return 0;
+
 	return vfio_type1_dma_mem_map(*vfio_container_fd, ms->addr_64, ms->iova,
 			ms->len, 1);
 }
@@ -1196,11 +1199,14 @@ vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
 }
 
 static int
-vfio_spapr_map_walk(const struct rte_memseg_list *msl __rte_unused,
+vfio_spapr_map_walk(const struct rte_memseg_list *msl,
 		const struct rte_memseg *ms, void *arg)
 {
 	int *vfio_container_fd = arg;
 
+	if (msl->external)
+		return 0;
+
 	return vfio_spapr_dma_mem_map(*vfio_container_fd, ms->addr_64, ms->iova,
 			ms->len, 1);
 }
@@ -1210,12 +1216,15 @@ struct spapr_walk_param {
 	uint64_t hugepage_sz;
 };
 static int
-vfio_spapr_window_size_walk(const struct rte_memseg_list *msl __rte_unused,
+vfio_spapr_window_size_walk(const struct rte_memseg_list *msl,
 		const struct rte_memseg *ms, void *arg)
 {
 	struct spapr_walk_param *param = arg;
 	uint64_t max = ms->iova + ms->len;
 
+	if (msl->external)
+		return 0;
+
 	if (max > param->window_size) {
 		param->hugepage_sz = ms->hugepage_sz;
 		param->window_size = max;
diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c
index 03e6b5f73..4eae7bec6 100644
--- a/lib/librte_mempool/rte_mempool.c
+++ b/lib/librte_mempool/rte_mempool.c
@@ -99,25 +99,40 @@ static unsigned optimize_object_size(unsigned obj_size)
 	return new_obj_size * RTE_MEMPOOL_ALIGN;
 }
 
+struct pagesz_walk_arg {
+	int socket_id;
+	size_t min;
+};
+
 static int
 find_min_pagesz(const struct rte_memseg_list *msl, void *arg)
 {
-	size_t *min = arg;
+	struct pagesz_walk_arg *wa = arg;
+	bool valid;
 
-	if (msl->page_sz < *min)
-		*min = msl->page_sz;
+	valid = msl->socket_id == wa->socket_id;
+	valid |= wa->socket_id == SOCKET_ID_ANY && !msl->external;
+
+	if (!valid)
+		return 0;
+
+	if (msl->page_sz < wa->min)
+		wa->min = msl->page_sz;
 
 	return 0;
 }
 
 static size_t
-get_min_page_size(void)
+get_min_page_size(int socket_id)
 {
-	size_t min_pagesz = SIZE_MAX;
+	struct pagesz_walk_arg wa;
 
-	rte_memseg_list_walk(find_min_pagesz, &min_pagesz);
+	wa.min = SIZE_MAX;
+	wa.socket_id = socket_id;
 
-	return min_pagesz == SIZE_MAX ? (size_t) getpagesize() : min_pagesz;
+	rte_memseg_list_walk(find_min_pagesz, &wa);
+
+	return wa.min == SIZE_MAX ? (size_t) getpagesize() : wa.min;
 }
 
 
@@ -470,7 +485,7 @@ rte_mempool_populate_default(struct rte_mempool *mp)
 		pg_sz = 0;
 		pg_shift = 0;
 	} else if (try_contig) {
-		pg_sz = get_min_page_size();
+		pg_sz = get_min_page_size(mp->socket_id);
 		pg_shift = rte_bsf32(pg_sz);
 	} else {
 		pg_sz = getpagesize();
diff --git a/test/test/test_malloc.c b/test/test/test_malloc.c
index 4b5abb4e0..5e5272419 100644
--- a/test/test/test_malloc.c
+++ b/test/test/test_malloc.c
@@ -711,6 +711,9 @@ check_socket_mem(const struct rte_memseg_list *msl, void *arg)
 {
 	int32_t *socket = arg;
 
+	if (msl->external)
+		return 0;
+
 	return *socket == msl->socket_id;
 }
 
diff --git a/test/test/test_memzone.c b/test/test/test_memzone.c
index 452d7cc5e..9fe465e62 100644
--- a/test/test/test_memzone.c
+++ b/test/test/test_memzone.c
@@ -115,6 +115,9 @@ find_available_pagesz(const struct rte_memseg_list *msl, void *arg)
 {
 	struct walk_arg *wa = arg;
 
+	if (msl->external)
+		return 0;
+
 	if (msl->page_sz == RTE_PGSIZE_2M)
 		wa->hugepage_2MB_avail = 1;
 	if (msl->page_sz == RTE_PGSIZE_1G)
-- 
2.17.1

  parent reply	other threads:[~2018-09-04 13:11 UTC|newest]

Thread overview: 225+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-04 13:11 [dpdk-dev] [PATCH 00/16] Support externally allocated memory in DPDK Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 01/16] mem: add length to memseg list Anatoly Burakov
2018-09-04 13:11 ` Anatoly Burakov [this message]
2018-09-04 13:11 ` [dpdk-dev] [PATCH 03/16] malloc: index heaps using heap ID rather than NUMA node Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 04/16] mem: do not check for invalid socket ID Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 05/16] flow_classify: " Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 06/16] pipeline: " Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 07/16] sched: " Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 08/16] malloc: add name to malloc heaps Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 09/16] malloc: add function to query socket ID of named heap Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 10/16] malloc: allow creating malloc heaps Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 11/16] malloc: allow destroying heaps Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 12/16] malloc: allow adding memory to named heaps Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 13/16] malloc: allow removing memory from " Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 14/16] malloc: allow attaching to external memory chunks Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 15/16] malloc: allow detaching from external memory Anatoly Burakov
2018-09-04 13:11 ` [dpdk-dev] [PATCH 16/16] test: add unit tests for external memory support Anatoly Burakov
2018-09-13  7:44 ` [dpdk-dev] [PATCH 00/16] Support externally allocated memory in DPDK Shahaf Shuler
2018-09-17 10:07   ` Burakov, Anatoly
2018-09-17 12:16     ` Shahaf Shuler
2018-09-17 13:00       ` Burakov, Anatoly
2018-09-18 12:29         ` Shreyansh Jain
2018-09-18 15:15           ` Burakov, Anatoly
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 00/20] " Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 " Anatoly Burakov
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 " Anatoly Burakov
2018-09-23 21:21       ` Thomas Monjalon
2018-09-24  8:54         ` Burakov, Anatoly
2018-09-26 11:21       ` [dpdk-dev] [PATCH v5 00/21] " Anatoly Burakov
2018-09-27 10:40         ` [dpdk-dev] [PATCH v6 " Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 " Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 " Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 " Anatoly Burakov
2018-10-11  9:15                 ` Thomas Monjalon
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 01/21] mem: add length to memseg list Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 02/21] mem: allow memseg lists to be marked as external Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 03/21] malloc: index heaps using heap ID rather than NUMA node Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 04/21] mem: do not check for invalid socket ID Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 05/21] flow_classify: " Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 06/21] pipeline: " Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 07/21] sched: " Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 08/21] malloc: add name to malloc heaps Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 09/21] malloc: add function to query socket ID of named heap Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 10/21] malloc: add function to check if socket is external Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 11/21] malloc: allow creating malloc heaps Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 12/21] malloc: allow destroying heaps Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 13/21] malloc: allow adding memory to named heaps Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 14/21] malloc: allow removing memory from " Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 15/21] malloc: allow attaching to external memory chunks Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 16/21] malloc: allow detaching from external memory Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 17/21] malloc: enable event callbacks for " Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 18/21] test: add unit tests for external memory support Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 19/21] app/testpmd: add support for external memory Anatoly Burakov
2018-10-02 14:05                 ` Iremonger, Bernard
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 20/21] doc: add external memory feature to the release notes Anatoly Burakov
2018-10-02 13:34               ` [dpdk-dev] [PATCH v9 21/21] doc: add external memory feature to programmer's guide Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 01/21] mem: add length to memseg list Anatoly Burakov
2018-10-01 17:01               ` Stephen Hemminger
2018-10-02  9:03                 ` Burakov, Anatoly
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 02/21] mem: allow memseg lists to be marked as external Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 03/21] malloc: index heaps using heap ID rather than NUMA node Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 04/21] mem: do not check for invalid socket ID Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 05/21] flow_classify: " Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 06/21] pipeline: " Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 07/21] sched: " Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 08/21] malloc: add name to malloc heaps Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 09/21] malloc: add function to query socket ID of named heap Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 10/21] malloc: add function to check if socket is external Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 11/21] malloc: allow creating malloc heaps Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 12/21] malloc: allow destroying heaps Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 13/21] malloc: allow adding memory to named heaps Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 14/21] malloc: allow removing memory from " Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 15/21] malloc: allow attaching to external memory chunks Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 16/21] malloc: allow detaching from external memory Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 17/21] malloc: enable event callbacks for " Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 18/21] test: add unit tests for external memory support Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 19/21] app/testpmd: add support for external memory Anatoly Burakov
2018-10-01 15:11               ` Iremonger, Bernard
2018-10-01 15:23                 ` Burakov, Anatoly
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 20/21] doc: add external memory feature to the release notes Anatoly Burakov
2018-10-01 12:56             ` [dpdk-dev] [PATCH v8 21/21] doc: add external memory feature to programmer's guide Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 01/21] mem: add length to memseg list Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 02/21] mem: allow memseg lists to be marked as external Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 03/21] malloc: index heaps using heap ID rather than NUMA node Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 04/21] mem: do not check for invalid socket ID Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 05/21] flow_classify: " Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 06/21] pipeline: " Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 07/21] sched: " Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 08/21] malloc: add name to malloc heaps Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 09/21] malloc: add function to query socket ID of named heap Anatoly Burakov
2018-10-01 11:04           ` [dpdk-dev] [PATCH v7 10/21] malloc: add function to check if socket is external Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 11/21] malloc: allow creating malloc heaps Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 12/21] malloc: allow destroying heaps Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 13/21] malloc: allow adding memory to named heaps Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 14/21] malloc: allow removing memory from " Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 15/21] malloc: allow attaching to external memory chunks Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 16/21] malloc: allow detaching from external memory Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 17/21] malloc: enable event callbacks for " Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 18/21] test: add unit tests for external memory support Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 19/21] app/testpmd: add support for external memory Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 20/21] doc: add external memory feature to the release notes Anatoly Burakov
2018-10-01 11:05           ` [dpdk-dev] [PATCH v7 21/21] doc: add external memory feature to programmer's guide Anatoly Burakov
2018-09-27 10:40         ` [dpdk-dev] [PATCH v6 01/21] mem: add length to memseg list Anatoly Burakov
2018-09-27 11:05           ` Shreyansh Jain
2018-09-27 10:40         ` [dpdk-dev] [PATCH v6 02/21] mem: allow memseg lists to be marked as external Anatoly Burakov
2018-09-27 11:03           ` Shreyansh Jain
2018-09-27 11:08             ` Burakov, Anatoly
2018-09-27 11:12               ` Shreyansh Jain
2018-09-27 11:29                 ` Burakov, Anatoly
2018-09-29  0:09           ` Yongseok Koh
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 03/21] malloc: index heaps using heap ID rather than NUMA node Anatoly Burakov
2018-09-27 13:01           ` Alejandro Lucero
2018-09-27 13:18             ` Burakov, Anatoly
2018-09-27 13:21               ` Alejandro Lucero
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 04/21] mem: do not check for invalid socket ID Anatoly Burakov
2018-09-27 13:14           ` Alejandro Lucero
2018-09-27 13:21             ` Burakov, Anatoly
2018-09-27 13:42               ` Alejandro Lucero
2018-09-27 14:04                 ` Burakov, Anatoly
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 05/21] flow_classify: " Anatoly Burakov
2018-09-27 16:14           ` Iremonger, Bernard
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 06/21] pipeline: " Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 07/21] sched: " Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 08/21] malloc: add name to malloc heaps Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 09/21] malloc: add function to query socket ID of named heap Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 10/21] malloc: add function to check if socket is external Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 11/21] malloc: allow creating malloc heaps Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 12/21] malloc: allow destroying heaps Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 13/21] malloc: allow adding memory to named heaps Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 14/21] malloc: allow removing memory from " Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 15/21] malloc: allow attaching to external memory chunks Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 16/21] malloc: allow detaching from external memory Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 17/21] malloc: enable event callbacks for " Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 18/21] test: add unit tests for external memory support Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 19/21] app/testpmd: add support for external memory Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 20/21] doc: add external memory feature to the release notes Anatoly Burakov
2018-09-27 10:41         ` [dpdk-dev] [PATCH v6 21/21] doc: add external memory feature to programmer's guide Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 01/21] mem: add length to memseg list Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 02/21] mem: allow memseg lists to be marked as external Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 03/21] malloc: index heaps using heap ID rather than NUMA node Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 04/21] mem: do not check for invalid socket ID Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 05/21] flow_classify: " Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 06/21] pipeline: " Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 07/21] sched: " Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 08/21] malloc: add name to malloc heaps Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 09/21] malloc: add function to query socket ID of named heap Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 10/21] malloc: add function to check if socket is external Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 11/21] malloc: allow creating malloc heaps Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 12/21] malloc: allow destroying heaps Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 13/21] malloc: allow adding memory to named heaps Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 14/21] malloc: allow removing memory from " Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 15/21] malloc: allow attaching to external memory chunks Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 16/21] malloc: allow detaching from external memory Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 17/21] malloc: enable event callbacks for " Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 18/21] test: add unit tests for external memory support Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 19/21] app/testpmd: add support for external memory Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 20/21] doc: add external memory feature to the release notes Anatoly Burakov
2018-09-26 11:22       ` [dpdk-dev] [PATCH v5 21/21] doc: add external memory feature to programmer's guide Anatoly Burakov
2018-09-26 15:19         ` Kovacevic, Marko
2018-09-26 16:00           ` Burakov, Anatoly
2018-09-26 16:17             ` Kovacevic, Marko
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 01/20] mem: add length to memseg list Anatoly Burakov
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 02/20] mem: allow memseg lists to be marked as external Anatoly Burakov
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 03/20] malloc: index heaps using heap ID rather than NUMA node Anatoly Burakov
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 04/20] mem: do not check for invalid socket ID Anatoly Burakov
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 05/20] flow_classify: " Anatoly Burakov
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 06/20] pipeline: " Anatoly Burakov
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 07/20] sched: " Anatoly Burakov
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 08/20] malloc: add name to malloc heaps Anatoly Burakov
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 09/20] malloc: add function to query socket ID of named heap Anatoly Burakov
2018-09-21 16:13     ` [dpdk-dev] [PATCH v4 10/20] malloc: add function to check if socket is external Anatoly Burakov
2018-09-21 16:14     ` [dpdk-dev] [PATCH v4 11/20] malloc: allow creating malloc heaps Anatoly Burakov
2018-09-21 16:14     ` [dpdk-dev] [PATCH v4 12/20] malloc: allow destroying heaps Anatoly Burakov
2018-09-21 16:14     ` [dpdk-dev] [PATCH v4 13/20] malloc: allow adding memory to named heaps Anatoly Burakov
2018-09-21 16:14     ` [dpdk-dev] [PATCH v4 14/20] malloc: allow removing memory from " Anatoly Burakov
2018-09-21 16:14     ` [dpdk-dev] [PATCH v4 15/20] malloc: allow attaching to external memory chunks Anatoly Burakov
2018-09-21 16:14     ` [dpdk-dev] [PATCH v4 16/20] malloc: allow detaching from external memory Anatoly Burakov
2018-09-21 16:14     ` [dpdk-dev] [PATCH v4 17/20] test: add unit tests for external memory support Anatoly Burakov
2018-09-21 16:14     ` [dpdk-dev] [PATCH v4 18/20] app/testpmd: add support for external memory Anatoly Burakov
2018-09-21 16:14     ` [dpdk-dev] [PATCH v4 19/20] doc: add external memory feature to the release notes Anatoly Burakov
2018-09-21 16:14     ` [dpdk-dev] [PATCH v4 20/20] doc: add external memory feature to programmer's guide Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 01/20] mem: add length to memseg list Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 02/20] mem: allow memseg lists to be marked as external Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 03/20] malloc: index heaps using heap ID rather than NUMA node Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 04/20] mem: do not check for invalid socket ID Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 05/20] flow_classify: " Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 06/20] pipeline: " Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 07/20] sched: " Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 08/20] malloc: add name to malloc heaps Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 09/20] malloc: add function to query socket ID of named heap Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 10/20] malloc: allow creating malloc heaps Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 11/20] malloc: allow destroying heaps Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 12/20] malloc: allow adding memory to named heaps Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 13/20] malloc: allow removing memory from " Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 14/20] malloc: allow attaching to external memory chunks Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 15/20] malloc: allow detaching from external memory Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 16/20] test: add unit tests for external memory support Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 17/20] examples: add external memory example app Anatoly Burakov
2018-09-20 22:47     ` Ananyev, Konstantin
2018-09-21  9:03       ` Burakov, Anatoly
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 18/20] doc: add external memory feature to the release notes Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 19/20] doc: add external memory feature to programmer's guide Anatoly Burakov
2018-09-20 11:36   ` [dpdk-dev] [PATCH v3 20/20] doc: add external memory sample application guide Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 01/20] mem: add length to memseg list Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 02/20] mem: allow memseg lists to be marked as external Anatoly Burakov
2018-09-20  9:30   ` Andrew Rybchenko
2018-09-20  9:54     ` Burakov, Anatoly
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 03/20] malloc: index heaps using heap ID rather than NUMA node Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 04/20] mem: do not check for invalid socket ID Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 05/20] flow_classify: " Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 06/20] pipeline: " Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 07/20] sched: " Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 08/20] malloc: add name to malloc heaps Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 09/20] malloc: add function to query socket ID of named heap Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 10/20] malloc: allow creating malloc heaps Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 11/20] malloc: allow destroying heaps Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 12/20] malloc: allow adding memory to named heaps Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 13/20] malloc: allow removing memory from " Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 14/20] malloc: allow attaching to external memory chunks Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 15/20] malloc: allow detaching from external memory Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 16/20] test: add unit tests for external memory support Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 17/20] examples: add external memory example app Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 18/20] doc: add external memory feature to the release notes Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 19/20] doc: add external memory feature to programmer's guide Anatoly Burakov
2018-09-19 13:56 ` [dpdk-dev] [PATCH v2 20/20] doc: add external memory sample application guide Anatoly Burakov

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=e044616faa33794c4f59844112137ef28b0ce57f.1536064999.git.anatoly.burakov@intel.com \
    --to=anatoly.burakov@intel.com \
    --cc=ajit.khaparde@broadcom.com \
    --cc=andras.kovacs@ericsson.com \
    --cc=arybchenko@solarflare.com \
    --cc=bruce.richardson@intel.com \
    --cc=daniel.andrasi@ericsson.com \
    --cc=dev@dpdk.org \
    --cc=hemant.agrawal@nxp.com \
    --cc=janos.kobor@ericsson.com \
    --cc=keith.wiles@intel.com \
    --cc=laszlo.madarassy@ericsson.com \
    --cc=laszlo.vadkerti@ericsson.com \
    --cc=matan@mellanox.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=olivier.matz@6wind.com \
    --cc=scott.branden@broadcom.com \
    --cc=shahafs@mellanox.com \
    --cc=shreyansh.jain@nxp.com \
    --cc=srinath.mannam@broadcom.com \
    --cc=thomas@monjalon.net \
    --cc=tiwei.bie@intel.com \
    --cc=winnie.tian@ericsson.com \
    --cc=yskoh@mellanox.com \
    --cc=zhihong.wang@intel.com \
    /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).