DPDK patches and discussions
 help / color / mirror / Atom feed
From: Andrew Rybchenko <arybchenko@solarflare.com>
To: <dev@dpdk.org>
Cc: Olivier MATZ <olivier.matz@6wind.com>,
	"Artem V. Andreev" <Artem.Andreev@oktetlabs.ru>
Subject: [dpdk-dev] [PATCH v3 3/6] mempool: support block dequeue operation
Date: Wed, 25 Apr 2018 17:32:19 +0100	[thread overview]
Message-ID: <1524673942-22726-4-git-send-email-arybchenko@solarflare.com> (raw)
In-Reply-To: <1524673942-22726-1-git-send-email-arybchenko@solarflare.com>

From: "Artem V. Andreev" <Artem.Andreev@oktetlabs.ru>

If mempool manager supports object blocks (physically and virtual
contiguous set of objects), it is sufficient to get the first
object only and the function allows to avoid filling in of
information about each block member.

Signed-off-by: Artem V. Andreev <Artem.Andreev@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
---
 doc/guides/rel_notes/deprecation.rst       |   7 --
 lib/librte_mempool/Makefile                |   1 +
 lib/librte_mempool/meson.build             |   2 +
 lib/librte_mempool/rte_mempool.c           |  39 +++++++++
 lib/librte_mempool/rte_mempool.h           | 131 +++++++++++++++++++++++++++--
 lib/librte_mempool/rte_mempool_ops.c       |   1 +
 lib/librte_mempool/rte_mempool_version.map |   1 +
 7 files changed, 170 insertions(+), 12 deletions(-)

diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst
index bce97a2a9..faf1e527e 100644
--- a/doc/guides/rel_notes/deprecation.rst
+++ b/doc/guides/rel_notes/deprecation.rst
@@ -42,13 +42,6 @@ Deprecation Notices
 
   - ``rte_eal_mbuf_default_mempool_ops``
 
-* mempool: several API and ABI changes are planned in v18.05.
-
-  The following changes are planned:
-
-  - addition of new op to allocate contiguous
-    block of objects if underlying driver supports it.
-
 * mbuf: The opaque ``mbuf->hash.sched`` field will be updated to support generic
   definition in line with the ethdev TM and MTR APIs. Currently, this field
   is defined in librte_sched in a non-generic way. The new generic format
diff --git a/lib/librte_mempool/Makefile b/lib/librte_mempool/Makefile
index 7f19f005a..e3c32b14f 100644
--- a/lib/librte_mempool/Makefile
+++ b/lib/librte_mempool/Makefile
@@ -10,6 +10,7 @@ CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 # Allow deprecated symbol to use deprecated rte_mempool_populate_iova_tab()
 # from earlier deprecated rte_mempool_populate_phys_tab()
 CFLAGS += -Wno-deprecated-declarations
+CFLAGS += -DALLOW_EXPERIMENTAL_API
 LDLIBS += -lrte_eal -lrte_ring
 
 EXPORT_MAP := rte_mempool_version.map
diff --git a/lib/librte_mempool/meson.build b/lib/librte_mempool/meson.build
index baf2d24d5..d507e5511 100644
--- a/lib/librte_mempool/meson.build
+++ b/lib/librte_mempool/meson.build
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
+allow_experimental_apis = true
+
 extra_flags = []
 
 # Allow deprecated symbol to use deprecated rte_mempool_populate_iova_tab()
diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c
index 84b3d640f..cf5d124ec 100644
--- a/lib/librte_mempool/rte_mempool.c
+++ b/lib/librte_mempool/rte_mempool.c
@@ -1255,6 +1255,36 @@ void rte_mempool_check_cookies(const struct rte_mempool *mp,
 #endif
 }
 
+void
+rte_mempool_contig_blocks_check_cookies(const struct rte_mempool *mp,
+	void * const *first_obj_table_const, unsigned int n, int free)
+{
+#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
+	struct rte_mempool_info info;
+	const size_t total_elt_sz =
+		mp->header_size + mp->elt_size + mp->trailer_size;
+	unsigned int i, j;
+
+	rte_mempool_ops_get_info(mp, &info);
+
+	for (i = 0; i < n; ++i) {
+		void *first_obj = first_obj_table_const[i];
+
+		for (j = 0; j < info.contig_block_size; ++j) {
+			void *obj;
+
+			obj = (void *)((uintptr_t)first_obj + j * total_elt_sz);
+			rte_mempool_check_cookies(mp, &obj, 1, free);
+		}
+	}
+#else
+	RTE_SET_USED(mp);
+	RTE_SET_USED(first_obj_table_const);
+	RTE_SET_USED(n);
+	RTE_SET_USED(free);
+#endif
+}
+
 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
 static void
 mempool_obj_audit(struct rte_mempool *mp, __rte_unused void *opaque,
@@ -1320,6 +1350,7 @@ void
 rte_mempool_dump(FILE *f, struct rte_mempool *mp)
 {
 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
+	struct rte_mempool_info info;
 	struct rte_mempool_debug_stats sum;
 	unsigned lcore_id;
 #endif
@@ -1361,6 +1392,7 @@ rte_mempool_dump(FILE *f, struct rte_mempool *mp)
 
 	/* sum and dump statistics */
 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
+	rte_mempool_ops_get_info(mp, &info);
 	memset(&sum, 0, sizeof(sum));
 	for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
 		sum.put_bulk += mp->stats[lcore_id].put_bulk;
@@ -1369,6 +1401,8 @@ rte_mempool_dump(FILE *f, struct rte_mempool *mp)
 		sum.get_success_objs += mp->stats[lcore_id].get_success_objs;
 		sum.get_fail_bulk += mp->stats[lcore_id].get_fail_bulk;
 		sum.get_fail_objs += mp->stats[lcore_id].get_fail_objs;
+		sum.get_success_blks += mp->stats[lcore_id].get_success_blks;
+		sum.get_fail_blks += mp->stats[lcore_id].get_fail_blks;
 	}
 	fprintf(f, "  stats:\n");
 	fprintf(f, "    put_bulk=%"PRIu64"\n", sum.put_bulk);
@@ -1377,6 +1411,11 @@ rte_mempool_dump(FILE *f, struct rte_mempool *mp)
 	fprintf(f, "    get_success_objs=%"PRIu64"\n", sum.get_success_objs);
 	fprintf(f, "    get_fail_bulk=%"PRIu64"\n", sum.get_fail_bulk);
 	fprintf(f, "    get_fail_objs=%"PRIu64"\n", sum.get_fail_objs);
+	if (info.contig_block_size > 0) {
+		fprintf(f, "    get_success_blks=%"PRIu64"\n",
+			sum.get_success_blks);
+		fprintf(f, "    get_fail_blks=%"PRIu64"\n", sum.get_fail_blks);
+	}
 #else
 	fprintf(f, "  no statistics available\n");
 #endif
diff --git a/lib/librte_mempool/rte_mempool.h b/lib/librte_mempool/rte_mempool.h
index 853f2da4d..1f59553b3 100644
--- a/lib/librte_mempool/rte_mempool.h
+++ b/lib/librte_mempool/rte_mempool.h
@@ -70,6 +70,10 @@ struct rte_mempool_debug_stats {
 	uint64_t get_success_objs; /**< Objects successfully allocated. */
 	uint64_t get_fail_bulk;    /**< Failed allocation number. */
 	uint64_t get_fail_objs;    /**< Objects that failed to be allocated. */
+	/** Successful allocation number of contiguous blocks. */
+	uint64_t get_success_blks;
+	/** Failed allocation number of contiguous blocks. */
+	uint64_t get_fail_blks;
 } __rte_cache_aligned;
 #endif
 
@@ -199,11 +203,8 @@ struct rte_mempool_memhdr {
  * a number of cases when something small is added.
  */
 struct rte_mempool_info {
-	/*
-	 * Dummy structure member to make it non emtpy until the first
-	 * real member is added.
-	 */
-	unsigned int dummy;
+	/** Number of objects in the contiguous block */
+	unsigned int contig_block_size;
 } __rte_cache_aligned;
 
 /**
@@ -282,8 +283,16 @@ struct rte_mempool {
 			mp->stats[__lcore_id].name##_bulk += 1;	\
 		}                                               \
 	} while(0)
+#define __MEMPOOL_CONTIG_BLOCKS_STAT_ADD(mp, name, n) do {                    \
+		unsigned int __lcore_id = rte_lcore_id();       \
+		if (__lcore_id < RTE_MAX_LCORE) {               \
+			mp->stats[__lcore_id].name##_blks += n;	\
+			mp->stats[__lcore_id].name##_bulk += 1;	\
+		}                                               \
+	} while (0)
 #else
 #define __MEMPOOL_STAT_ADD(mp, name, n) do {} while(0)
+#define __MEMPOOL_CONTIG_BLOCKS_STAT_ADD(mp, name, n) do {} while (0)
 #endif
 
 /**
@@ -351,6 +360,38 @@ void rte_mempool_check_cookies(const struct rte_mempool *mp,
 #define __mempool_check_cookies(mp, obj_table_const, n, free) do {} while(0)
 #endif /* RTE_LIBRTE_MEMPOOL_DEBUG */
 
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * @internal Check contiguous object blocks and update cookies or panic.
+ *
+ * @param mp
+ *   Pointer to the memory pool.
+ * @param first_obj_table_const
+ *   Pointer to a table of void * pointers (first object of the contiguous
+ *   object blocks).
+ * @param n
+ *   Number of contiguous object blocks.
+ * @param free
+ *   - 0: object is supposed to be allocated, mark it as free
+ *   - 1: object is supposed to be free, mark it as allocated
+ *   - 2: just check that cookie is valid (free or allocated)
+ */
+void rte_mempool_contig_blocks_check_cookies(const struct rte_mempool *mp,
+	void * const *first_obj_table_const, unsigned int n, int free);
+
+#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
+#define __mempool_contig_blocks_check_cookies(mp, first_obj_table_const, n, \
+					      free) \
+	rte_mempool_contig_blocks_check_cookies(mp, first_obj_table_const, n, \
+						free)
+#else
+#define __mempool_contig_blocks_check_cookies(mp, first_obj_table_const, n, \
+					      free) \
+	do {} while (0)
+#endif /* RTE_LIBRTE_MEMPOOL_DEBUG */
+
 #define RTE_MEMPOOL_OPS_NAMESIZE 32 /**< Max length of ops struct name. */
 
 /**
@@ -382,6 +423,15 @@ typedef int (*rte_mempool_enqueue_t)(struct rte_mempool *mp,
 typedef int (*rte_mempool_dequeue_t)(struct rte_mempool *mp,
 		void **obj_table, unsigned int n);
 
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Dequeue a number of contiquous object blocks from the external pool.
+ */
+typedef int (*rte_mempool_dequeue_contig_blocks_t)(struct rte_mempool *mp,
+		 void **first_obj_table, unsigned int n);
+
 /**
  * Return the number of available objects in the external pool.
  */
@@ -548,6 +598,10 @@ struct rte_mempool_ops {
 	 * Get mempool info
 	 */
 	rte_mempool_get_info_t get_info;
+	/**
+	 * Dequeue a number of contiguous object blocks.
+	 */
+	rte_mempool_dequeue_contig_blocks_t dequeue_contig_blocks;
 } __rte_cache_aligned;
 
 #define RTE_MEMPOOL_MAX_OPS_IDX 16  /**< Max registered ops structs */
@@ -625,6 +679,30 @@ rte_mempool_ops_dequeue_bulk(struct rte_mempool *mp,
 	return ops->dequeue(mp, obj_table, n);
 }
 
+/**
+ * @internal Wrapper for mempool_ops dequeue_contig_blocks callback.
+ *
+ * @param[in] mp
+ *   Pointer to the memory pool.
+ * @param[out] first_obj_table
+ *   Pointer to a table of void * pointers (first objects).
+ * @param[in] n
+ *   Number of blocks to get.
+ * @return
+ *   - 0: Success; got n objects.
+ *   - <0: Error; code of dequeue function.
+ */
+static inline int
+rte_mempool_ops_dequeue_contig_blocks(struct rte_mempool *mp,
+		void **first_obj_table, unsigned int n)
+{
+	struct rte_mempool_ops *ops;
+
+	ops = rte_mempool_get_ops(mp->ops_index);
+	RTE_ASSERT(ops->dequeue_contig_blocks != NULL);
+	return ops->dequeue_contig_blocks(mp, first_obj_table, n);
+}
+
 /**
  * @internal wrapper for mempool_ops enqueue callback.
  *
@@ -1539,6 +1617,49 @@ rte_mempool_get(struct rte_mempool *mp, void **obj_p)
 	return rte_mempool_get_bulk(mp, obj_p, 1);
 }
 
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Get a contiguous blocks of objects from the mempool.
+ *
+ * If cache is enabled, consider to flush it first, to reuse objects
+ * as soon as possible.
+ *
+ * The application should check that the driver supports the operation
+ * by calling rte_mempool_ops_get_info() and checking that `contig_block_size`
+ * is not zero.
+ *
+ * @param mp
+ *   A pointer to the mempool structure.
+ * @param first_obj_table
+ *   A pointer to a pointer to the first object in each block.
+ * @param n
+ *   The number of blocks to get from mempool.
+ * @return
+ *   - 0: Success; blocks taken.
+ *   - -ENOBUFS: Not enough entries in the mempool; no object is retrieved.
+ *   - -EOPNOTSUPP: The mempool driver does not support block dequeue
+ */
+static __rte_always_inline int
+__rte_experimental
+rte_mempool_get_contig_blocks(struct rte_mempool *mp,
+			      void **first_obj_table, unsigned int n)
+{
+	int ret;
+
+	ret = rte_mempool_ops_dequeue_contig_blocks(mp, first_obj_table, n);
+	if (ret == 0) {
+		__MEMPOOL_CONTIG_BLOCKS_STAT_ADD(mp, get_success, n);
+		__mempool_contig_blocks_check_cookies(mp, first_obj_table, n,
+						      1);
+	} else {
+		__MEMPOOL_CONTIG_BLOCKS_STAT_ADD(mp, get_fail, n);
+	}
+
+	return ret;
+}
+
 /**
  * Return the number of entries in the mempool.
  *
diff --git a/lib/librte_mempool/rte_mempool_ops.c b/lib/librte_mempool/rte_mempool_ops.c
index efc1c084c..a27e1fa51 100644
--- a/lib/librte_mempool/rte_mempool_ops.c
+++ b/lib/librte_mempool/rte_mempool_ops.c
@@ -60,6 +60,7 @@ rte_mempool_register_ops(const struct rte_mempool_ops *h)
 	ops->calc_mem_size = h->calc_mem_size;
 	ops->populate = h->populate;
 	ops->get_info = h->get_info;
+	ops->dequeue_contig_blocks = h->dequeue_contig_blocks;
 
 	rte_spinlock_unlock(&rte_mempool_ops_table.sl);
 
diff --git a/lib/librte_mempool/rte_mempool_version.map b/lib/librte_mempool/rte_mempool_version.map
index c9d16ecc4..1c406b5b0 100644
--- a/lib/librte_mempool/rte_mempool_version.map
+++ b/lib/librte_mempool/rte_mempool_version.map
@@ -53,6 +53,7 @@ DPDK_17.11 {
 DPDK_18.05 {
 	global:
 
+	rte_mempool_contig_blocks_check_cookies;
 	rte_mempool_op_calc_mem_size_default;
 	rte_mempool_op_populate_default;
 
-- 
2.14.1

  parent reply	other threads:[~2018-04-25 16:32 UTC|newest]

Thread overview: 197+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-24 16:06 [dpdk-dev] [RFC PATCH 0/6] mempool: add bucket mempool driver Andrew Rybchenko
2017-11-24 16:06 ` [dpdk-dev] [RFC PATCH 1/6] mempool: implement abstract mempool info API Andrew Rybchenko
2017-12-14 13:36   ` Olivier MATZ
2018-01-17 15:03     ` Andrew Rybchenko
2017-11-24 16:06 ` [dpdk-dev] [RFC PATCH 2/6] mempool: implement clustered object allocation Andrew Rybchenko
2017-12-14 13:37   ` Olivier MATZ
2018-01-17 15:03     ` Andrew Rybchenko
2018-01-17 15:55       ` santosh
2018-01-17 16:37         ` Andrew Rybchenko
2017-11-24 16:06 ` [dpdk-dev] [RFC PATCH 3/6] mempool/bucket: implement bucket mempool manager Andrew Rybchenko
2017-12-14 13:38   ` Olivier MATZ
2018-01-17 15:06     ` Andrew Rybchenko
2017-11-24 16:06 ` [dpdk-dev] [RFC PATCH 4/6] mempool: add a function to flush default cache Andrew Rybchenko
2017-12-14 13:38   ` Olivier MATZ
2018-01-17 15:07     ` Andrew Rybchenko
2017-11-24 16:06 ` [dpdk-dev] [RFC PATCH 5/6] mempool: support block dequeue operation Andrew Rybchenko
2017-12-14 13:38   ` Olivier MATZ
2017-11-24 16:06 ` [dpdk-dev] [RFC PATCH 6/6] mempool/bucket: implement " Andrew Rybchenko
2017-12-14 13:36 ` [dpdk-dev] [RFC PATCH 0/6] mempool: add bucket mempool driver Olivier MATZ
2018-01-17 15:03   ` Andrew Rybchenko
2018-01-23 13:15 ` [dpdk-dev] [RFC v2 00/17] " Andrew Rybchenko
2018-01-23 13:15   ` [dpdk-dev] [RFC v2 01/17] mempool: fix phys contig check if populate default skipped Andrew Rybchenko
2018-01-31 16:45     ` Olivier Matz
2018-02-01  5:05       ` santosh
2018-02-01  6:54         ` Andrew Rybchenko
2018-02-01  9:09           ` santosh
2018-02-01  9:18             ` Andrew Rybchenko
2018-02-01  9:30               ` santosh
2018-02-01 10:00                 ` Andrew Rybchenko
2018-02-01 10:14                   ` Olivier Matz
2018-02-01 10:33                     ` santosh
2018-02-01 14:02                       ` Andrew Rybchenko
2018-02-01 10:17                   ` santosh
2018-02-01 14:02     ` [dpdk-dev] [PATCH] " Andrew Rybchenko
2018-02-05 23:53       ` [dpdk-dev] [dpdk-stable] " Thomas Monjalon
2018-01-23 13:15   ` [dpdk-dev] [RFC v2 02/17] mempool: add op to calculate memory size to be allocated Andrew Rybchenko
2018-01-31 16:45     ` Olivier Matz
2018-02-01  7:15       ` Andrew Rybchenko
2018-01-23 13:15   ` [dpdk-dev] [RFC v2 03/17] mempool/octeontx: add callback to calculate memory size Andrew Rybchenko
     [not found]     ` <BN3PR07MB2513732462EB5FE5E1B05713E3FA0@BN3PR07MB2513.namprd07.prod.outlook.com>
2018-02-01 10:01       ` santosh
2018-02-01 13:40         ` santosh
2018-03-10 15:49           ` Andrew Rybchenko
2018-03-11  6:31             ` santosh
2018-01-23 13:15   ` [dpdk-dev] [RFC v2 04/17] mempool: add op to populate objects using provided memory Andrew Rybchenko
2018-01-31 16:45     ` Olivier Matz
2018-02-01  8:51       ` Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 05/17] mempool/octeontx: implement callback to populate objects Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 06/17] mempool: remove callback to get capabilities Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 07/17] mempool: deprecate xmem functions Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 08/17] mempool/octeontx: prepare to remove register memory area op Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 09/17] mempool/dpaa: convert to use populate driver op Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 10/17] mempool: remove callback to register memory area Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 11/17] mempool: ensure the mempool is initialized before populating Andrew Rybchenko
2018-01-31 16:45     ` Olivier Matz
2018-02-01  8:53       ` Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 12/17] mempool/bucket: implement bucket mempool manager Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 13/17] mempool: support flushing the default cache of the mempool Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 14/17] mempool: implement abstract mempool info API Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 15/17] mempool: support block dequeue operation Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 16/17] mempool/bucket: implement " Andrew Rybchenko
2018-01-23 13:16   ` [dpdk-dev] [RFC v2 17/17] mempool/bucket: do not allow one lcore to grab all buckets Andrew Rybchenko
2018-01-31 16:44   ` [dpdk-dev] [RFC v2 00/17] mempool: add bucket mempool driver Olivier Matz
2018-03-10 15:39   ` [dpdk-dev] [PATCH v1 0/9] mempool: prepare to add bucket driver Andrew Rybchenko
2018-03-10 15:39     ` [dpdk-dev] [PATCH v1 1/9] mempool: add op to calculate memory size to be allocated Andrew Rybchenko
2018-03-11 12:51       ` santosh
2018-03-12  6:53         ` Andrew Rybchenko
2018-03-19 17:03       ` Olivier Matz
2018-03-20 10:29         ` Andrew Rybchenko
2018-03-20 14:41         ` Bruce Richardson
2018-03-10 15:39     ` [dpdk-dev] [PATCH v1 2/9] mempool: add op to populate objects using provided memory Andrew Rybchenko
2018-03-19 17:04       ` Olivier Matz
2018-03-21  7:05         ` Andrew Rybchenko
2018-03-10 15:39     ` [dpdk-dev] [PATCH v1 3/9] mempool: remove callback to get capabilities Andrew Rybchenko
2018-03-14 14:40       ` Burakov, Anatoly
2018-03-14 16:12         ` Andrew Rybchenko
2018-03-14 16:53           ` Burakov, Anatoly
2018-03-14 17:24             ` Andrew Rybchenko
2018-03-15  9:48               ` Burakov, Anatoly
2018-03-15 11:49                 ` Andrew Rybchenko
2018-03-15 12:00                   ` Burakov, Anatoly
2018-03-15 12:44                     ` Andrew Rybchenko
2018-03-19 17:05                       ` Olivier Matz
2018-03-19 17:06       ` Olivier Matz
2018-03-10 15:39     ` [dpdk-dev] [PATCH v1 4/9] mempool: deprecate xmem functions Andrew Rybchenko
2018-03-10 15:39     ` [dpdk-dev] [PATCH v1 5/9] mempool/octeontx: prepare to remove register memory area op Andrew Rybchenko
2018-03-10 15:39     ` [dpdk-dev] [PATCH v1 6/9] mempool/dpaa: " Andrew Rybchenko
2018-03-10 15:39     ` [dpdk-dev] [PATCH v1 7/9] mempool: remove callback to register memory area Andrew Rybchenko
2018-03-10 15:39     ` [dpdk-dev] [PATCH v1 8/9] mempool: ensure the mempool is initialized before populating Andrew Rybchenko
2018-03-19 17:06       ` Olivier Matz
2018-03-20 13:32         ` Andrew Rybchenko
2018-03-20 16:57           ` Olivier Matz
2018-03-10 15:39     ` [dpdk-dev] [PATCH v1 9/9] mempool: support flushing the default cache of the mempool Andrew Rybchenko
2018-03-14 15:49     ` [dpdk-dev] [PATCH v1 0/9] mempool: prepare to add bucket driver santosh
2018-03-14 15:57       ` Andrew Rybchenko
2018-03-19 17:03     ` Olivier Matz
2018-03-20 10:09       ` Andrew Rybchenko
2018-03-20 11:04         ` Thomas Monjalon
2018-03-25 16:20   ` [dpdk-dev] [PATCH v2 00/11] " Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 01/11] mempool: fix memhdr leak when no objects are populated Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 02/11] mempool: rename flag to control IOVA-contiguous objects Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 03/11] mempool: ensure the mempool is initialized before populating Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 04/11] mempool: add op to calculate memory size to be allocated Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 05/11] mempool: add op to populate objects using provided memory Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 06/11] mempool: remove callback to get capabilities Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 07/11] mempool: deprecate xmem functions Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 08/11] mempool/octeontx: prepare to remove register memory area op Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 09/11] mempool/dpaa: " Andrew Rybchenko
2018-03-26  7:13       ` Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 10/11] mempool: remove callback to register memory area Andrew Rybchenko
2018-03-25 16:20     ` [dpdk-dev] [PATCH v2 11/11] mempool: support flushing the default cache of the mempool Andrew Rybchenko
2018-03-26 16:09   ` [dpdk-dev] [PATCH v3 00/11] mempool: prepare to add bucket driver Andrew Rybchenko
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 01/11] mempool: fix memhdr leak when no objects are populated Andrew Rybchenko
2018-04-06 15:50       ` Olivier Matz
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 02/11] mempool: rename flag to control IOVA-contiguous objects Andrew Rybchenko
2018-04-06 15:50       ` Olivier Matz
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 03/11] mempool: ensure the mempool is initialized before populating Andrew Rybchenko
2018-04-04 15:06       ` santosh
2018-04-06 15:50       ` Olivier Matz
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 04/11] mempool: add op to calculate memory size to be allocated Andrew Rybchenko
2018-04-04 15:08       ` santosh
2018-04-06 15:51       ` Olivier Matz
2018-04-12 15:22       ` Burakov, Anatoly
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 05/11] mempool: add op to populate objects using provided memory Andrew Rybchenko
2018-04-04 15:09       ` santosh
2018-04-06 15:51       ` Olivier Matz
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 06/11] mempool: remove callback to get capabilities Andrew Rybchenko
2018-04-04 15:10       ` santosh
2018-04-06 15:51       ` Olivier Matz
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 07/11] mempool: deprecate xmem functions Andrew Rybchenko
2018-04-06 15:52       ` Olivier Matz
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 08/11] mempool/octeontx: prepare to remove register memory area op Andrew Rybchenko
2018-04-04 15:12       ` santosh
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 09/11] mempool/dpaa: " Andrew Rybchenko
2018-04-05  8:25       ` Hemant Agrawal
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 10/11] mempool: remove callback to register memory area Andrew Rybchenko
2018-04-04 15:13       ` santosh
2018-04-06 15:52       ` Olivier Matz
2018-03-26 16:09     ` [dpdk-dev] [PATCH v3 11/11] mempool: support flushing the default cache of the mempool Andrew Rybchenko
2018-04-06 15:53       ` Olivier Matz
2018-03-26 16:12   ` [dpdk-dev] [PATCH v1 0/6] mempool: add bucket driver Andrew Rybchenko
2018-03-26 16:12     ` [dpdk-dev] [PATCH v1 1/6] mempool/bucket: implement bucket mempool manager Andrew Rybchenko
2018-03-26 16:12     ` [dpdk-dev] [PATCH v1 2/6] mempool: implement abstract mempool info API Andrew Rybchenko
2018-04-19 16:42       ` Olivier Matz
2018-04-25  9:57         ` Andrew Rybchenko
2018-04-25 10:26           ` Olivier Matz
2018-03-26 16:12     ` [dpdk-dev] [PATCH v1 3/6] mempool: support block dequeue operation Andrew Rybchenko
2018-04-19 16:41       ` Olivier Matz
2018-04-25  9:49         ` Andrew Rybchenko
2018-03-26 16:12     ` [dpdk-dev] [PATCH v1 4/6] mempool/bucket: implement " Andrew Rybchenko
2018-03-26 16:12     ` [dpdk-dev] [PATCH v1 5/6] mempool/bucket: do not allow one lcore to grab all buckets Andrew Rybchenko
2018-03-26 16:12     ` [dpdk-dev] [PATCH v1 6/6] doc: advertise bucket mempool driver Andrew Rybchenko
2018-04-19 16:43       ` Olivier Matz
2018-04-19 16:41     ` [dpdk-dev] [PATCH v1 0/6] mempool: add bucket driver Olivier Matz
2018-04-16 13:24 ` [dpdk-dev] [PATCH v4 00/11] mempool: prepare to " Andrew Rybchenko
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 01/11] mempool: fix memhdr leak when no objects are populated Andrew Rybchenko
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 02/11] mempool: rename flag to control IOVA-contiguous objects Andrew Rybchenko
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 03/11] mempool: ensure the mempool is initialized before populating Andrew Rybchenko
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 04/11] mempool: add op to calculate memory size to be allocated Andrew Rybchenko
2018-04-16 15:33     ` Olivier Matz
2018-04-16 15:41       ` Andrew Rybchenko
2018-04-17 10:23     ` Burakov, Anatoly
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 05/11] mempool: add op to populate objects using provided memory Andrew Rybchenko
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 06/11] mempool: remove callback to get capabilities Andrew Rybchenko
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 07/11] mempool: deprecate xmem functions Andrew Rybchenko
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 08/11] mempool/octeontx: prepare to remove register memory area op Andrew Rybchenko
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 09/11] mempool/dpaa: " Andrew Rybchenko
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 10/11] mempool: remove callback to register memory area Andrew Rybchenko
2018-04-16 13:24   ` [dpdk-dev] [PATCH v4 11/11] mempool: support flushing the default cache of the mempool Andrew Rybchenko
2018-04-24  0:20   ` [dpdk-dev] [PATCH v4 00/11] mempool: prepare to add bucket driver Thomas Monjalon
2018-04-16 13:33 ` [dpdk-dev] [PATCH v2 0/6] mempool: " Andrew Rybchenko
2018-04-16 13:33   ` [dpdk-dev] [PATCH v2 1/6] mempool/bucket: implement bucket mempool manager Andrew Rybchenko
2018-04-16 13:33   ` [dpdk-dev] [PATCH v2 2/6] mempool: implement abstract mempool info API Andrew Rybchenko
2018-04-25  8:44     ` Olivier Matz
2018-04-16 13:33   ` [dpdk-dev] [PATCH v2 3/6] mempool: support block dequeue operation Andrew Rybchenko
2018-04-25  8:45     ` Olivier Matz
2018-04-16 13:33   ` [dpdk-dev] [PATCH v2 4/6] mempool/bucket: implement " Andrew Rybchenko
2018-04-16 13:33   ` [dpdk-dev] [PATCH v2 5/6] mempool/bucket: do not allow one lcore to grab all buckets Andrew Rybchenko
2018-04-16 13:33   ` [dpdk-dev] [PATCH v2 6/6] doc: advertise bucket mempool driver Andrew Rybchenko
2018-04-24 23:00   ` [dpdk-dev] [PATCH v2 0/6] mempool: add bucket driver Thomas Monjalon
2018-04-25  8:43     ` Olivier Matz
2018-04-25 16:32 ` [dpdk-dev] [PATCH v3 " Andrew Rybchenko
2018-04-25 16:32   ` [dpdk-dev] [PATCH v3 1/6] mempool/bucket: implement bucket mempool manager Andrew Rybchenko
2018-04-25 16:32   ` [dpdk-dev] [PATCH v3 2/6] mempool: implement abstract mempool info API Andrew Rybchenko
2018-04-25 16:32   ` Andrew Rybchenko [this message]
2018-04-25 16:32   ` [dpdk-dev] [PATCH v3 4/6] mempool/bucket: implement block dequeue operation Andrew Rybchenko
2018-04-25 16:32   ` [dpdk-dev] [PATCH v3 5/6] mempool/bucket: do not allow one lcore to grab all buckets Andrew Rybchenko
2018-04-25 16:32   ` [dpdk-dev] [PATCH v3 6/6] doc: advertise bucket mempool driver Andrew Rybchenko
2018-04-25 21:56     ` Thomas Monjalon
2018-04-25 22:04       ` Thomas Monjalon
2018-04-26  9:50         ` Andrew Rybchenko
2018-04-26 10:59 ` [dpdk-dev] [PATCH v4 0/5] mempool: add bucket driver Andrew Rybchenko
2018-04-26 10:59   ` [dpdk-dev] [PATCH v4 1/5] mempool/bucket: implement bucket mempool manager Andrew Rybchenko
2018-04-26 10:59   ` [dpdk-dev] [PATCH v4 2/5] mempool: implement abstract mempool info API Andrew Rybchenko
2018-04-26 10:59   ` [dpdk-dev] [PATCH v4 3/5] mempool: support block dequeue operation Andrew Rybchenko
2018-04-26 10:59   ` [dpdk-dev] [PATCH v4 4/5] mempool/bucket: implement " Andrew Rybchenko
2018-04-26 10:59   ` [dpdk-dev] [PATCH v4 5/5] mempool/bucket: do not allow one lcore to grab all buckets Andrew Rybchenko
2018-04-26 21:35   ` [dpdk-dev] [PATCH v4 0/5] mempool: add bucket driver Thomas Monjalon

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=1524673942-22726-4-git-send-email-arybchenko@solarflare.com \
    --to=arybchenko@solarflare.com \
    --cc=Artem.Andreev@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=olivier.matz@6wind.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).