mempool: add namespace to flags
[dpdk.git] / lib / mempool / rte_mempool.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation.
3  * Copyright(c) 2016 6WIND S.A.
4  */
5
6 #ifndef _RTE_MEMPOOL_H_
7 #define _RTE_MEMPOOL_H_
8
9 /**
10  * @file
11  * RTE Mempool.
12  *
13  * A memory pool is an allocator of fixed-size object. It is
14  * identified by its name, and uses a ring to store free objects. It
15  * provides some other optional services, like a per-core object
16  * cache, and an alignment helper to ensure that objects are padded
17  * to spread them equally on all RAM channels, ranks, and so on.
18  *
19  * Objects owned by a mempool should never be added in another
20  * mempool. When an object is freed using rte_mempool_put() or
21  * equivalent, the object data is not modified; the user can save some
22  * meta-data in the object data and retrieve them when allocating a
23  * new object.
24  *
25  * Note: the mempool implementation is not preemptible. An lcore must not be
26  * interrupted by another task that uses the same mempool (because it uses a
27  * ring which is not preemptible). Also, usual mempool functions like
28  * rte_mempool_get() or rte_mempool_put() are designed to be called from an EAL
29  * thread due to the internal per-lcore cache. Due to the lack of caching,
30  * rte_mempool_get() or rte_mempool_put() performance will suffer when called
31  * by unregistered non-EAL threads. Instead, unregistered non-EAL threads
32  * should call rte_mempool_generic_get() or rte_mempool_generic_put() with a
33  * user cache created with rte_mempool_cache_create().
34  */
35
36 #include <stdio.h>
37 #include <stdlib.h>
38 #include <stdint.h>
39 #include <errno.h>
40 #include <inttypes.h>
41
42 #include <rte_config.h>
43 #include <rte_spinlock.h>
44 #include <rte_log.h>
45 #include <rte_debug.h>
46 #include <rte_lcore.h>
47 #include <rte_memory.h>
48 #include <rte_branch_prediction.h>
49 #include <rte_ring.h>
50 #include <rte_memcpy.h>
51 #include <rte_common.h>
52
53 #include "rte_mempool_trace_fp.h"
54
55 #ifdef __cplusplus
56 extern "C" {
57 #endif
58
59 #define RTE_MEMPOOL_HEADER_COOKIE1  0xbadbadbadadd2e55ULL /**< Header cookie. */
60 #define RTE_MEMPOOL_HEADER_COOKIE2  0xf2eef2eedadd2e55ULL /**< Header cookie. */
61 #define RTE_MEMPOOL_TRAILER_COOKIE  0xadd2e55badbadbadULL /**< Trailer cookie.*/
62
63 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
64 /**
65  * A structure that stores the mempool statistics (per-lcore).
66  * Note: Cache stats (put_cache_bulk/objs, get_cache_bulk/objs) are not
67  * captured since they can be calculated from other stats.
68  * For example: put_cache_objs = put_objs - put_common_pool_objs.
69  */
70 struct rte_mempool_debug_stats {
71         uint64_t put_bulk;             /**< Number of puts. */
72         uint64_t put_objs;             /**< Number of objects successfully put. */
73         uint64_t put_common_pool_bulk; /**< Number of bulks enqueued in common pool. */
74         uint64_t put_common_pool_objs; /**< Number of objects enqueued in common pool. */
75         uint64_t get_common_pool_bulk; /**< Number of bulks dequeued from common pool. */
76         uint64_t get_common_pool_objs; /**< Number of objects dequeued from common pool. */
77         uint64_t get_success_bulk;     /**< Successful allocation number. */
78         uint64_t get_success_objs;     /**< Objects successfully allocated. */
79         uint64_t get_fail_bulk;        /**< Failed allocation number. */
80         uint64_t get_fail_objs;        /**< Objects that failed to be allocated. */
81         uint64_t get_success_blks;     /**< Successful allocation number of contiguous blocks. */
82         uint64_t get_fail_blks;        /**< Failed allocation number of contiguous blocks. */
83 } __rte_cache_aligned;
84 #endif
85
86 /**
87  * A structure that stores a per-core object cache.
88  */
89 struct rte_mempool_cache {
90         uint32_t size;        /**< Size of the cache */
91         uint32_t flushthresh; /**< Threshold before we flush excess elements */
92         uint32_t len;         /**< Current cache count */
93         /*
94          * Cache is allocated to this size to allow it to overflow in certain
95          * cases to avoid needless emptying of cache.
96          */
97         void *objs[RTE_MEMPOOL_CACHE_MAX_SIZE * 3]; /**< Cache objects */
98 } __rte_cache_aligned;
99
100 /**
101  * A structure that stores the size of mempool elements.
102  */
103 struct rte_mempool_objsz {
104         uint32_t elt_size;     /**< Size of an element. */
105         uint32_t header_size;  /**< Size of header (before elt). */
106         uint32_t trailer_size; /**< Size of trailer (after elt). */
107         uint32_t total_size;
108         /**< Total size of an object (header + elt + trailer). */
109 };
110
111 /**< Maximum length of a memory pool's name. */
112 #define RTE_MEMPOOL_NAMESIZE (RTE_RING_NAMESIZE - \
113                               sizeof(RTE_MEMPOOL_MZ_PREFIX) + 1)
114 #define RTE_MEMPOOL_MZ_PREFIX "MP_"
115
116 /* "MP_<name>" */
117 #define RTE_MEMPOOL_MZ_FORMAT   RTE_MEMPOOL_MZ_PREFIX "%s"
118
119 #define MEMPOOL_PG_SHIFT_MAX    (sizeof(uintptr_t) * CHAR_BIT - 1)
120
121 /** Mempool over one chunk of physically continuous memory */
122 #define MEMPOOL_PG_NUM_DEFAULT  1
123
124 #ifndef RTE_MEMPOOL_ALIGN
125 /**
126  * Alignment of elements inside mempool.
127  */
128 #define RTE_MEMPOOL_ALIGN       RTE_CACHE_LINE_SIZE
129 #endif
130
131 #define RTE_MEMPOOL_ALIGN_MASK  (RTE_MEMPOOL_ALIGN - 1)
132
133 /**
134  * Mempool object header structure
135  *
136  * Each object stored in mempools are prefixed by this header structure,
137  * it allows to retrieve the mempool pointer from the object and to
138  * iterate on all objects attached to a mempool. When debug is enabled,
139  * a cookie is also added in this structure preventing corruptions and
140  * double-frees.
141  */
142 struct rte_mempool_objhdr {
143         RTE_STAILQ_ENTRY(rte_mempool_objhdr) next; /**< Next in list. */
144         struct rte_mempool *mp;          /**< The mempool owning the object. */
145         rte_iova_t iova;                 /**< IO address of the object. */
146 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
147         uint64_t cookie;                 /**< Debug cookie. */
148 #endif
149 };
150
151 /**
152  * A list of object headers type
153  */
154 RTE_STAILQ_HEAD(rte_mempool_objhdr_list, rte_mempool_objhdr);
155
156 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
157
158 /**
159  * Mempool object trailer structure
160  *
161  * In debug mode, each object stored in mempools are suffixed by this
162  * trailer structure containing a cookie preventing memory corruptions.
163  */
164 struct rte_mempool_objtlr {
165         uint64_t cookie;                 /**< Debug cookie. */
166 };
167
168 #endif
169
170 /**
171  * A list of memory where objects are stored
172  */
173 RTE_STAILQ_HEAD(rte_mempool_memhdr_list, rte_mempool_memhdr);
174
175 /**
176  * Callback used to free a memory chunk
177  */
178 typedef void (rte_mempool_memchunk_free_cb_t)(struct rte_mempool_memhdr *memhdr,
179         void *opaque);
180
181 /**
182  * Mempool objects memory header structure
183  *
184  * The memory chunks where objects are stored. Each chunk is virtually
185  * and physically contiguous.
186  */
187 struct rte_mempool_memhdr {
188         RTE_STAILQ_ENTRY(rte_mempool_memhdr) next; /**< Next in list. */
189         struct rte_mempool *mp;  /**< The mempool owning the chunk */
190         void *addr;              /**< Virtual address of the chunk */
191         rte_iova_t iova;         /**< IO address of the chunk */
192         size_t len;              /**< length of the chunk */
193         rte_mempool_memchunk_free_cb_t *free_cb; /**< Free callback */
194         void *opaque;            /**< Argument passed to the free callback */
195 };
196
197 /**
198  * Additional information about the mempool
199  *
200  * The structure is cache-line aligned to avoid ABI breakages in
201  * a number of cases when something small is added.
202  */
203 struct rte_mempool_info {
204         /** Number of objects in the contiguous block */
205         unsigned int contig_block_size;
206 } __rte_cache_aligned;
207
208 /**
209  * The RTE mempool structure.
210  */
211 struct rte_mempool {
212         char name[RTE_MEMPOOL_NAMESIZE]; /**< Name of mempool. */
213         RTE_STD_C11
214         union {
215                 void *pool_data;         /**< Ring or pool to store objects. */
216                 uint64_t pool_id;        /**< External mempool identifier. */
217         };
218         void *pool_config;               /**< optional args for ops alloc. */
219         const struct rte_memzone *mz;    /**< Memzone where pool is alloc'd. */
220         unsigned int flags;              /**< Flags of the mempool. */
221         int socket_id;                   /**< Socket id passed at create. */
222         uint32_t size;                   /**< Max size of the mempool. */
223         uint32_t cache_size;
224         /**< Size of per-lcore default local cache. */
225
226         uint32_t elt_size;               /**< Size of an element. */
227         uint32_t header_size;            /**< Size of header (before elt). */
228         uint32_t trailer_size;           /**< Size of trailer (after elt). */
229
230         unsigned private_data_size;      /**< Size of private data. */
231         /**
232          * Index into rte_mempool_ops_table array of mempool ops
233          * structs, which contain callback function pointers.
234          * We're using an index here rather than pointers to the callbacks
235          * to facilitate any secondary processes that may want to use
236          * this mempool.
237          */
238         int32_t ops_index;
239
240         struct rte_mempool_cache *local_cache; /**< Per-lcore local cache */
241
242         uint32_t populated_size;         /**< Number of populated objects. */
243         struct rte_mempool_objhdr_list elt_list; /**< List of objects in pool */
244         uint32_t nb_mem_chunks;          /**< Number of memory chunks */
245         struct rte_mempool_memhdr_list mem_list; /**< List of memory chunks */
246
247 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
248         /** Per-lcore statistics. */
249         struct rte_mempool_debug_stats stats[RTE_MAX_LCORE];
250 #endif
251 }  __rte_cache_aligned;
252
253 /** Spreading among memory channels not required. */
254 #define RTE_MEMPOOL_F_NO_SPREAD         0x0001
255 /**
256  * Backward compatibility synonym for RTE_MEMPOOL_F_NO_SPREAD.
257  * To be deprecated.
258  */
259 #define MEMPOOL_F_NO_SPREAD             RTE_MEMPOOL_F_NO_SPREAD
260 /** Do not align objects on cache lines. */
261 #define RTE_MEMPOOL_F_NO_CACHE_ALIGN    0x0002
262 /**
263  * Backward compatibility synonym for RTE_MEMPOOL_F_NO_CACHE_ALIGN.
264  * To be deprecated.
265  */
266 #define MEMPOOL_F_NO_CACHE_ALIGN        RTE_MEMPOOL_F_NO_CACHE_ALIGN
267 /** Default put is "single-producer". */
268 #define RTE_MEMPOOL_F_SP_PUT            0x0004
269 /**
270  * Backward compatibility synonym for RTE_MEMPOOL_F_SP_PUT.
271  * To be deprecated.
272  */
273 #define MEMPOOL_F_SP_PUT                RTE_MEMPOOL_F_SP_PUT
274 /** Default get is "single-consumer". */
275 #define RTE_MEMPOOL_F_SC_GET            0x0008
276 /**
277  * Backward compatibility synonym for RTE_MEMPOOL_F_SC_GET.
278  * To be deprecated.
279  */
280 #define MEMPOOL_F_SC_GET                RTE_MEMPOOL_F_SC_GET
281 /** Internal: pool is created. */
282 #define RTE_MEMPOOL_F_POOL_CREATED      0x0010
283 /** Don't need IOVA contiguous objects. */
284 #define RTE_MEMPOOL_F_NO_IOVA_CONTIG    0x0020
285 /**
286  * Backward compatibility synonym for RTE_MEMPOOL_F_NO_IOVA_CONTIG.
287  * To be deprecated.
288  */
289 #define MEMPOOL_F_NO_IOVA_CONTIG        RTE_MEMPOOL_F_NO_IOVA_CONTIG
290 /** Internal: no object from the pool can be used for device IO (DMA). */
291 #define RTE_MEMPOOL_F_NON_IO            0x0040
292
293 /**
294  * @internal When debug is enabled, store some statistics.
295  *
296  * @param mp
297  *   Pointer to the memory pool.
298  * @param name
299  *   Name of the statistics field to increment in the memory pool.
300  * @param n
301  *   Number to add to the object-oriented statistics.
302  */
303 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
304 #define __MEMPOOL_STAT_ADD(mp, name, n) do {                    \
305                 unsigned __lcore_id = rte_lcore_id();           \
306                 if (__lcore_id < RTE_MAX_LCORE) {               \
307                         mp->stats[__lcore_id].name += n;        \
308                 }                                               \
309         } while(0)
310 #else
311 #define __MEMPOOL_STAT_ADD(mp, name, n) do {} while(0)
312 #endif
313
314 /**
315  * Calculate the size of the mempool header.
316  *
317  * @param mp
318  *   Pointer to the memory pool.
319  * @param cs
320  *   Size of the per-lcore cache.
321  */
322 #define MEMPOOL_HEADER_SIZE(mp, cs) \
323         (sizeof(*(mp)) + (((cs) == 0) ? 0 : \
324         (sizeof(struct rte_mempool_cache) * RTE_MAX_LCORE)))
325
326 /* return the header of a mempool object (internal) */
327 static inline struct rte_mempool_objhdr *__mempool_get_header(void *obj)
328 {
329         return (struct rte_mempool_objhdr *)RTE_PTR_SUB(obj,
330                 sizeof(struct rte_mempool_objhdr));
331 }
332
333 /**
334  * Return a pointer to the mempool owning this object.
335  *
336  * @param obj
337  *   An object that is owned by a pool. If this is not the case,
338  *   the behavior is undefined.
339  * @return
340  *   A pointer to the mempool structure.
341  */
342 static inline struct rte_mempool *rte_mempool_from_obj(void *obj)
343 {
344         struct rte_mempool_objhdr *hdr = __mempool_get_header(obj);
345         return hdr->mp;
346 }
347
348 /* return the trailer of a mempool object (internal) */
349 static inline struct rte_mempool_objtlr *__mempool_get_trailer(void *obj)
350 {
351         struct rte_mempool *mp = rte_mempool_from_obj(obj);
352         return (struct rte_mempool_objtlr *)RTE_PTR_ADD(obj, mp->elt_size);
353 }
354
355 /**
356  * @internal Check and update cookies or panic.
357  *
358  * @param mp
359  *   Pointer to the memory pool.
360  * @param obj_table_const
361  *   Pointer to a table of void * pointers (objects).
362  * @param n
363  *   Index of object in object table.
364  * @param free
365  *   - 0: object is supposed to be allocated, mark it as free
366  *   - 1: object is supposed to be free, mark it as allocated
367  *   - 2: just check that cookie is valid (free or allocated)
368  */
369 void rte_mempool_check_cookies(const struct rte_mempool *mp,
370         void * const *obj_table_const, unsigned n, int free);
371
372 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
373 #define __mempool_check_cookies(mp, obj_table_const, n, free) \
374         rte_mempool_check_cookies(mp, obj_table_const, n, free)
375 #else
376 #define __mempool_check_cookies(mp, obj_table_const, n, free) do {} while(0)
377 #endif /* RTE_LIBRTE_MEMPOOL_DEBUG */
378
379 /**
380  * @internal Check contiguous object blocks and update cookies or panic.
381  *
382  * @param mp
383  *   Pointer to the memory pool.
384  * @param first_obj_table_const
385  *   Pointer to a table of void * pointers (first object of the contiguous
386  *   object blocks).
387  * @param n
388  *   Number of contiguous object blocks.
389  * @param free
390  *   - 0: object is supposed to be allocated, mark it as free
391  *   - 1: object is supposed to be free, mark it as allocated
392  *   - 2: just check that cookie is valid (free or allocated)
393  */
394 void rte_mempool_contig_blocks_check_cookies(const struct rte_mempool *mp,
395         void * const *first_obj_table_const, unsigned int n, int free);
396
397 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
398 #define __mempool_contig_blocks_check_cookies(mp, first_obj_table_const, n, \
399                                               free) \
400         rte_mempool_contig_blocks_check_cookies(mp, first_obj_table_const, n, \
401                                                 free)
402 #else
403 #define __mempool_contig_blocks_check_cookies(mp, first_obj_table_const, n, \
404                                               free) \
405         do {} while (0)
406 #endif /* RTE_LIBRTE_MEMPOOL_DEBUG */
407
408 #define RTE_MEMPOOL_OPS_NAMESIZE 32 /**< Max length of ops struct name. */
409
410 /**
411  * Prototype for implementation specific data provisioning function.
412  *
413  * The function should provide the implementation specific memory for
414  * use by the other mempool ops functions in a given mempool ops struct.
415  * E.g. the default ops provides an instance of the rte_ring for this purpose.
416  * it will most likely point to a different type of data structure, and
417  * will be transparent to the application programmer.
418  * This function should set mp->pool_data.
419  */
420 typedef int (*rte_mempool_alloc_t)(struct rte_mempool *mp);
421
422 /**
423  * Free the opaque private data pointed to by mp->pool_data pointer.
424  */
425 typedef void (*rte_mempool_free_t)(struct rte_mempool *mp);
426
427 /**
428  * Enqueue an object into the external pool.
429  */
430 typedef int (*rte_mempool_enqueue_t)(struct rte_mempool *mp,
431                 void * const *obj_table, unsigned int n);
432
433 /**
434  * Dequeue an object from the external pool.
435  */
436 typedef int (*rte_mempool_dequeue_t)(struct rte_mempool *mp,
437                 void **obj_table, unsigned int n);
438
439 /**
440  * Dequeue a number of contiguous object blocks from the external pool.
441  */
442 typedef int (*rte_mempool_dequeue_contig_blocks_t)(struct rte_mempool *mp,
443                  void **first_obj_table, unsigned int n);
444
445 /**
446  * Return the number of available objects in the external pool.
447  */
448 typedef unsigned (*rte_mempool_get_count)(const struct rte_mempool *mp);
449
450 /**
451  * Calculate memory size required to store given number of objects.
452  *
453  * If mempool objects are not required to be IOVA-contiguous
454  * (the flag RTE_MEMPOOL_F_NO_IOVA_CONTIG is set), min_chunk_size defines
455  * virtually contiguous chunk size. Otherwise, if mempool objects must
456  * be IOVA-contiguous (the flag RTE_MEMPOOL_F_NO_IOVA_CONTIG is clear),
457  * min_chunk_size defines IOVA-contiguous chunk size.
458  *
459  * @param[in] mp
460  *   Pointer to the memory pool.
461  * @param[in] obj_num
462  *   Number of objects.
463  * @param[in] pg_shift
464  *   LOG2 of the physical pages size. If set to 0, ignore page boundaries.
465  * @param[out] min_chunk_size
466  *   Location for minimum size of the memory chunk which may be used to
467  *   store memory pool objects.
468  * @param[out] align
469  *   Location for required memory chunk alignment.
470  * @return
471  *   Required memory size.
472  */
473 typedef ssize_t (*rte_mempool_calc_mem_size_t)(const struct rte_mempool *mp,
474                 uint32_t obj_num,  uint32_t pg_shift,
475                 size_t *min_chunk_size, size_t *align);
476
477 /**
478  * @internal Helper to calculate memory size required to store given
479  * number of objects.
480  *
481  * This function is internal to mempool library and mempool drivers.
482  *
483  * If page boundaries may be ignored, it is just a product of total
484  * object size including header and trailer and number of objects.
485  * Otherwise, it is a number of pages required to store given number of
486  * objects without crossing page boundary.
487  *
488  * Note that if object size is bigger than page size, then it assumes
489  * that pages are grouped in subsets of physically continuous pages big
490  * enough to store at least one object.
491  *
492  * Minimum size of memory chunk is the total element size.
493  * Required memory chunk alignment is the cache line size.
494  *
495  * @param[in] mp
496  *   A pointer to the mempool structure.
497  * @param[in] obj_num
498  *   Number of objects to be added in mempool.
499  * @param[in] pg_shift
500  *   LOG2 of the physical pages size. If set to 0, ignore page boundaries.
501  * @param[in] chunk_reserve
502  *   Amount of memory that must be reserved at the beginning of each page,
503  *   or at the beginning of the memory area if pg_shift is 0.
504  * @param[out] min_chunk_size
505  *   Location for minimum size of the memory chunk which may be used to
506  *   store memory pool objects.
507  * @param[out] align
508  *   Location for required memory chunk alignment.
509  * @return
510  *   Required memory size.
511  */
512 ssize_t rte_mempool_op_calc_mem_size_helper(const struct rte_mempool *mp,
513                 uint32_t obj_num, uint32_t pg_shift, size_t chunk_reserve,
514                 size_t *min_chunk_size, size_t *align);
515
516 /**
517  * Default way to calculate memory size required to store given number of
518  * objects.
519  *
520  * Equivalent to rte_mempool_op_calc_mem_size_helper(mp, obj_num, pg_shift,
521  * 0, min_chunk_size, align).
522  */
523 ssize_t rte_mempool_op_calc_mem_size_default(const struct rte_mempool *mp,
524                 uint32_t obj_num, uint32_t pg_shift,
525                 size_t *min_chunk_size, size_t *align);
526
527 /**
528  * Function to be called for each populated object.
529  *
530  * @param[in] mp
531  *   A pointer to the mempool structure.
532  * @param[in] opaque
533  *   An opaque pointer passed to iterator.
534  * @param[in] vaddr
535  *   Object virtual address.
536  * @param[in] iova
537  *   Input/output virtual address of the object or RTE_BAD_IOVA.
538  */
539 typedef void (rte_mempool_populate_obj_cb_t)(struct rte_mempool *mp,
540                 void *opaque, void *vaddr, rte_iova_t iova);
541
542 /**
543  * Populate memory pool objects using provided memory chunk.
544  *
545  * Populated objects should be enqueued to the pool, e.g. using
546  * rte_mempool_ops_enqueue_bulk().
547  *
548  * If the given IO address is unknown (iova = RTE_BAD_IOVA),
549  * the chunk doesn't need to be physically contiguous (only virtually),
550  * and allocated objects may span two pages.
551  *
552  * @param[in] mp
553  *   A pointer to the mempool structure.
554  * @param[in] max_objs
555  *   Maximum number of objects to be populated.
556  * @param[in] vaddr
557  *   The virtual address of memory that should be used to store objects.
558  * @param[in] iova
559  *   The IO address
560  * @param[in] len
561  *   The length of memory in bytes.
562  * @param[in] obj_cb
563  *   Callback function to be executed for each populated object.
564  * @param[in] obj_cb_arg
565  *   An opaque pointer passed to the callback function.
566  * @return
567  *   The number of objects added on success.
568  *   On error, no objects are populated and a negative errno is returned.
569  */
570 typedef int (*rte_mempool_populate_t)(struct rte_mempool *mp,
571                 unsigned int max_objs,
572                 void *vaddr, rte_iova_t iova, size_t len,
573                 rte_mempool_populate_obj_cb_t *obj_cb, void *obj_cb_arg);
574
575 /**
576  * Align objects on addresses multiple of total_elt_sz.
577  */
578 #define RTE_MEMPOOL_POPULATE_F_ALIGN_OBJ 0x0001
579
580 /**
581  * @internal Helper to populate memory pool object using provided memory
582  * chunk: just slice objects one by one, taking care of not
583  * crossing page boundaries.
584  *
585  * If RTE_MEMPOOL_POPULATE_F_ALIGN_OBJ is set in flags, the addresses
586  * of object headers will be aligned on a multiple of total_elt_sz.
587  * This feature is used by octeontx hardware.
588  *
589  * This function is internal to mempool library and mempool drivers.
590  *
591  * @param[in] mp
592  *   A pointer to the mempool structure.
593  * @param[in] flags
594  *   Logical OR of following flags:
595  *   - RTE_MEMPOOL_POPULATE_F_ALIGN_OBJ: align objects on addresses
596  *     multiple of total_elt_sz.
597  * @param[in] max_objs
598  *   Maximum number of objects to be added in mempool.
599  * @param[in] vaddr
600  *   The virtual address of memory that should be used to store objects.
601  * @param[in] iova
602  *   The IO address corresponding to vaddr, or RTE_BAD_IOVA.
603  * @param[in] len
604  *   The length of memory in bytes.
605  * @param[in] obj_cb
606  *   Callback function to be executed for each populated object.
607  * @param[in] obj_cb_arg
608  *   An opaque pointer passed to the callback function.
609  * @return
610  *   The number of objects added in mempool.
611  */
612 int rte_mempool_op_populate_helper(struct rte_mempool *mp,
613                 unsigned int flags, unsigned int max_objs,
614                 void *vaddr, rte_iova_t iova, size_t len,
615                 rte_mempool_populate_obj_cb_t *obj_cb, void *obj_cb_arg);
616
617 /**
618  * Default way to populate memory pool object using provided memory chunk.
619  *
620  * Equivalent to rte_mempool_op_populate_helper(mp, 0, max_objs, vaddr, iova,
621  * len, obj_cb, obj_cb_arg).
622  */
623 int rte_mempool_op_populate_default(struct rte_mempool *mp,
624                 unsigned int max_objs,
625                 void *vaddr, rte_iova_t iova, size_t len,
626                 rte_mempool_populate_obj_cb_t *obj_cb, void *obj_cb_arg);
627
628 /**
629  * Get some additional information about a mempool.
630  */
631 typedef int (*rte_mempool_get_info_t)(const struct rte_mempool *mp,
632                 struct rte_mempool_info *info);
633
634
635 /** Structure defining mempool operations structure */
636 struct rte_mempool_ops {
637         char name[RTE_MEMPOOL_OPS_NAMESIZE]; /**< Name of mempool ops struct. */
638         rte_mempool_alloc_t alloc;       /**< Allocate private data. */
639         rte_mempool_free_t free;         /**< Free the external pool. */
640         rte_mempool_enqueue_t enqueue;   /**< Enqueue an object. */
641         rte_mempool_dequeue_t dequeue;   /**< Dequeue an object. */
642         rte_mempool_get_count get_count; /**< Get qty of available objs. */
643         /**
644          * Optional callback to calculate memory size required to
645          * store specified number of objects.
646          */
647         rte_mempool_calc_mem_size_t calc_mem_size;
648         /**
649          * Optional callback to populate mempool objects using
650          * provided memory chunk.
651          */
652         rte_mempool_populate_t populate;
653         /**
654          * Get mempool info
655          */
656         rte_mempool_get_info_t get_info;
657         /**
658          * Dequeue a number of contiguous object blocks.
659          */
660         rte_mempool_dequeue_contig_blocks_t dequeue_contig_blocks;
661 } __rte_cache_aligned;
662
663 #define RTE_MEMPOOL_MAX_OPS_IDX 16  /**< Max registered ops structs */
664
665 /**
666  * Structure storing the table of registered ops structs, each of which contain
667  * the function pointers for the mempool ops functions.
668  * Each process has its own storage for this ops struct array so that
669  * the mempools can be shared across primary and secondary processes.
670  * The indices used to access the array are valid across processes, whereas
671  * any function pointers stored directly in the mempool struct would not be.
672  * This results in us simply having "ops_index" in the mempool struct.
673  */
674 struct rte_mempool_ops_table {
675         rte_spinlock_t sl;     /**< Spinlock for add/delete. */
676         uint32_t num_ops;      /**< Number of used ops structs in the table. */
677         /**
678          * Storage for all possible ops structs.
679          */
680         struct rte_mempool_ops ops[RTE_MEMPOOL_MAX_OPS_IDX];
681 } __rte_cache_aligned;
682
683 /** Array of registered ops structs. */
684 extern struct rte_mempool_ops_table rte_mempool_ops_table;
685
686 /**
687  * @internal Get the mempool ops struct from its index.
688  *
689  * @param ops_index
690  *   The index of the ops struct in the ops struct table. It must be a valid
691  *   index: (0 <= idx < num_ops).
692  * @return
693  *   The pointer to the ops struct in the table.
694  */
695 static inline struct rte_mempool_ops *
696 rte_mempool_get_ops(int ops_index)
697 {
698         RTE_VERIFY((ops_index >= 0) && (ops_index < RTE_MEMPOOL_MAX_OPS_IDX));
699
700         return &rte_mempool_ops_table.ops[ops_index];
701 }
702
703 /**
704  * @internal Wrapper for mempool_ops alloc callback.
705  *
706  * @param mp
707  *   Pointer to the memory pool.
708  * @return
709  *   - 0: Success; successfully allocated mempool pool_data.
710  *   - <0: Error; code of alloc function.
711  */
712 int
713 rte_mempool_ops_alloc(struct rte_mempool *mp);
714
715 /**
716  * @internal Wrapper for mempool_ops dequeue callback.
717  *
718  * @param mp
719  *   Pointer to the memory pool.
720  * @param obj_table
721  *   Pointer to a table of void * pointers (objects).
722  * @param n
723  *   Number of objects to get.
724  * @return
725  *   - 0: Success; got n objects.
726  *   - <0: Error; code of dequeue function.
727  */
728 static inline int
729 rte_mempool_ops_dequeue_bulk(struct rte_mempool *mp,
730                 void **obj_table, unsigned n)
731 {
732         struct rte_mempool_ops *ops;
733         int ret;
734
735         rte_mempool_trace_ops_dequeue_bulk(mp, obj_table, n);
736         ops = rte_mempool_get_ops(mp->ops_index);
737         ret = ops->dequeue(mp, obj_table, n);
738         if (ret == 0) {
739                 __MEMPOOL_STAT_ADD(mp, get_common_pool_bulk, 1);
740                 __MEMPOOL_STAT_ADD(mp, get_common_pool_objs, n);
741         }
742         return ret;
743 }
744
745 /**
746  * @internal Wrapper for mempool_ops dequeue_contig_blocks callback.
747  *
748  * @param[in] mp
749  *   Pointer to the memory pool.
750  * @param[out] first_obj_table
751  *   Pointer to a table of void * pointers (first objects).
752  * @param[in] n
753  *   Number of blocks to get.
754  * @return
755  *   - 0: Success; got n objects.
756  *   - <0: Error; code of dequeue function.
757  */
758 static inline int
759 rte_mempool_ops_dequeue_contig_blocks(struct rte_mempool *mp,
760                 void **first_obj_table, unsigned int n)
761 {
762         struct rte_mempool_ops *ops;
763
764         ops = rte_mempool_get_ops(mp->ops_index);
765         RTE_ASSERT(ops->dequeue_contig_blocks != NULL);
766         rte_mempool_trace_ops_dequeue_contig_blocks(mp, first_obj_table, n);
767         return ops->dequeue_contig_blocks(mp, first_obj_table, n);
768 }
769
770 /**
771  * @internal wrapper for mempool_ops enqueue callback.
772  *
773  * @param mp
774  *   Pointer to the memory pool.
775  * @param obj_table
776  *   Pointer to a table of void * pointers (objects).
777  * @param n
778  *   Number of objects to put.
779  * @return
780  *   - 0: Success; n objects supplied.
781  *   - <0: Error; code of enqueue function.
782  */
783 static inline int
784 rte_mempool_ops_enqueue_bulk(struct rte_mempool *mp, void * const *obj_table,
785                 unsigned n)
786 {
787         struct rte_mempool_ops *ops;
788
789         __MEMPOOL_STAT_ADD(mp, put_common_pool_bulk, 1);
790         __MEMPOOL_STAT_ADD(mp, put_common_pool_objs, n);
791         rte_mempool_trace_ops_enqueue_bulk(mp, obj_table, n);
792         ops = rte_mempool_get_ops(mp->ops_index);
793         return ops->enqueue(mp, obj_table, n);
794 }
795
796 /**
797  * @internal wrapper for mempool_ops get_count callback.
798  *
799  * @param mp
800  *   Pointer to the memory pool.
801  * @return
802  *   The number of available objects in the external pool.
803  */
804 unsigned
805 rte_mempool_ops_get_count(const struct rte_mempool *mp);
806
807 /**
808  * @internal wrapper for mempool_ops calc_mem_size callback.
809  * API to calculate size of memory required to store specified number of
810  * object.
811  *
812  * @param[in] mp
813  *   Pointer to the memory pool.
814  * @param[in] obj_num
815  *   Number of objects.
816  * @param[in] pg_shift
817  *   LOG2 of the physical pages size. If set to 0, ignore page boundaries.
818  * @param[out] min_chunk_size
819  *   Location for minimum size of the memory chunk which may be used to
820  *   store memory pool objects.
821  * @param[out] align
822  *   Location for required memory chunk alignment.
823  * @return
824  *   Required memory size aligned at page boundary.
825  */
826 ssize_t rte_mempool_ops_calc_mem_size(const struct rte_mempool *mp,
827                                       uint32_t obj_num, uint32_t pg_shift,
828                                       size_t *min_chunk_size, size_t *align);
829
830 /**
831  * @internal wrapper for mempool_ops populate callback.
832  *
833  * Populate memory pool objects using provided memory chunk.
834  *
835  * @param[in] mp
836  *   A pointer to the mempool structure.
837  * @param[in] max_objs
838  *   Maximum number of objects to be populated.
839  * @param[in] vaddr
840  *   The virtual address of memory that should be used to store objects.
841  * @param[in] iova
842  *   The IO address
843  * @param[in] len
844  *   The length of memory in bytes.
845  * @param[in] obj_cb
846  *   Callback function to be executed for each populated object.
847  * @param[in] obj_cb_arg
848  *   An opaque pointer passed to the callback function.
849  * @return
850  *   The number of objects added on success.
851  *   On error, no objects are populated and a negative errno is returned.
852  */
853 int rte_mempool_ops_populate(struct rte_mempool *mp, unsigned int max_objs,
854                              void *vaddr, rte_iova_t iova, size_t len,
855                              rte_mempool_populate_obj_cb_t *obj_cb,
856                              void *obj_cb_arg);
857
858 /**
859  * Wrapper for mempool_ops get_info callback.
860  *
861  * @param[in] mp
862  *   Pointer to the memory pool.
863  * @param[out] info
864  *   Pointer to the rte_mempool_info structure
865  * @return
866  *   - 0: Success; The mempool driver supports retrieving supplementary
867  *        mempool information
868  *   - -ENOTSUP - doesn't support get_info ops (valid case).
869  */
870 int rte_mempool_ops_get_info(const struct rte_mempool *mp,
871                          struct rte_mempool_info *info);
872
873 /**
874  * @internal wrapper for mempool_ops free callback.
875  *
876  * @param mp
877  *   Pointer to the memory pool.
878  */
879 void
880 rte_mempool_ops_free(struct rte_mempool *mp);
881
882 /**
883  * Set the ops of a mempool.
884  *
885  * This can only be done on a mempool that is not populated, i.e. just after
886  * a call to rte_mempool_create_empty().
887  *
888  * @param mp
889  *   Pointer to the memory pool.
890  * @param name
891  *   Name of the ops structure to use for this mempool.
892  * @param pool_config
893  *   Opaque data that can be passed by the application to the ops functions.
894  * @return
895  *   - 0: Success; the mempool is now using the requested ops functions.
896  *   - -EINVAL - Invalid ops struct name provided.
897  *   - -EEXIST - mempool already has an ops struct assigned.
898  */
899 int
900 rte_mempool_set_ops_byname(struct rte_mempool *mp, const char *name,
901                 void *pool_config);
902
903 /**
904  * Register mempool operations.
905  *
906  * @param ops
907  *   Pointer to an ops structure to register.
908  * @return
909  *   - >=0: Success; return the index of the ops struct in the table.
910  *   - -EINVAL - some missing callbacks while registering ops struct.
911  *   - -ENOSPC - the maximum number of ops structs has been reached.
912  */
913 int rte_mempool_register_ops(const struct rte_mempool_ops *ops);
914
915 /**
916  * Macro to statically register the ops of a mempool handler.
917  * Note that the rte_mempool_register_ops fails silently here when
918  * more than RTE_MEMPOOL_MAX_OPS_IDX is registered.
919  */
920 #define MEMPOOL_REGISTER_OPS(ops)                               \
921         RTE_INIT(mp_hdlr_init_##ops)                            \
922         {                                                       \
923                 rte_mempool_register_ops(&ops);                 \
924         }
925
926 /**
927  * An object callback function for mempool.
928  *
929  * Used by rte_mempool_create() and rte_mempool_obj_iter().
930  */
931 typedef void (rte_mempool_obj_cb_t)(struct rte_mempool *mp,
932                 void *opaque, void *obj, unsigned obj_idx);
933 typedef rte_mempool_obj_cb_t rte_mempool_obj_ctor_t; /* compat */
934
935 /**
936  * A memory callback function for mempool.
937  *
938  * Used by rte_mempool_mem_iter().
939  */
940 typedef void (rte_mempool_mem_cb_t)(struct rte_mempool *mp,
941                 void *opaque, struct rte_mempool_memhdr *memhdr,
942                 unsigned mem_idx);
943
944 /**
945  * A mempool constructor callback function.
946  *
947  * Arguments are the mempool and the opaque pointer given by the user in
948  * rte_mempool_create().
949  */
950 typedef void (rte_mempool_ctor_t)(struct rte_mempool *, void *);
951
952 /**
953  * Create a new mempool named *name* in memory.
954  *
955  * This function uses ``rte_memzone_reserve()`` to allocate memory. The
956  * pool contains n elements of elt_size. Its size is set to n.
957  *
958  * @param name
959  *   The name of the mempool.
960  * @param n
961  *   The number of elements in the mempool. The optimum size (in terms of
962  *   memory usage) for a mempool is when n is a power of two minus one:
963  *   n = (2^q - 1).
964  * @param elt_size
965  *   The size of each element.
966  * @param cache_size
967  *   If cache_size is non-zero, the rte_mempool library will try to
968  *   limit the accesses to the common lockless pool, by maintaining a
969  *   per-lcore object cache. This argument must be lower or equal to
970  *   RTE_MEMPOOL_CACHE_MAX_SIZE and n / 1.5. It is advised to choose
971  *   cache_size to have "n modulo cache_size == 0": if this is
972  *   not the case, some elements will always stay in the pool and will
973  *   never be used. The access to the per-lcore table is of course
974  *   faster than the multi-producer/consumer pool. The cache can be
975  *   disabled if the cache_size argument is set to 0; it can be useful to
976  *   avoid losing objects in cache.
977  * @param private_data_size
978  *   The size of the private data appended after the mempool
979  *   structure. This is useful for storing some private data after the
980  *   mempool structure, as is done for rte_mbuf_pool for example.
981  * @param mp_init
982  *   A function pointer that is called for initialization of the pool,
983  *   before object initialization. The user can initialize the private
984  *   data in this function if needed. This parameter can be NULL if
985  *   not needed.
986  * @param mp_init_arg
987  *   An opaque pointer to data that can be used in the mempool
988  *   constructor function.
989  * @param obj_init
990  *   A function pointer that is called for each object at
991  *   initialization of the pool. The user can set some meta data in
992  *   objects if needed. This parameter can be NULL if not needed.
993  *   The obj_init() function takes the mempool pointer, the init_arg,
994  *   the object pointer and the object number as parameters.
995  * @param obj_init_arg
996  *   An opaque pointer to data that can be used as an argument for
997  *   each call to the object constructor function.
998  * @param socket_id
999  *   The *socket_id* argument is the socket identifier in the case of
1000  *   NUMA. The value can be *SOCKET_ID_ANY* if there is no NUMA
1001  *   constraint for the reserved zone.
1002  * @param flags
1003  *   The *flags* arguments is an OR of following flags:
1004  *   - RTE_MEMPOOL_F_NO_SPREAD: By default, objects addresses are spread
1005  *     between channels in RAM: the pool allocator will add padding
1006  *     between objects depending on the hardware configuration. See
1007  *     Memory alignment constraints for details. If this flag is set,
1008  *     the allocator will just align them to a cache line.
1009  *   - RTE_MEMPOOL_F_NO_CACHE_ALIGN: By default, the returned objects are
1010  *     cache-aligned. This flag removes this constraint, and no
1011  *     padding will be present between objects. This flag implies
1012  *     RTE_MEMPOOL_F_NO_SPREAD.
1013  *   - RTE_MEMPOOL_F_SP_PUT: If this flag is set, the default behavior
1014  *     when using rte_mempool_put() or rte_mempool_put_bulk() is
1015  *     "single-producer". Otherwise, it is "multi-producers".
1016  *   - RTE_MEMPOOL_F_SC_GET: If this flag is set, the default behavior
1017  *     when using rte_mempool_get() or rte_mempool_get_bulk() is
1018  *     "single-consumer". Otherwise, it is "multi-consumers".
1019  *   - RTE_MEMPOOL_F_NO_IOVA_CONTIG: If set, allocated objects won't
1020  *     necessarily be contiguous in IO memory.
1021  * @return
1022  *   The pointer to the new allocated mempool, on success. NULL on error
1023  *   with rte_errno set appropriately. Possible rte_errno values include:
1024  *    - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure
1025  *    - E_RTE_SECONDARY - function was called from a secondary process instance
1026  *    - EINVAL - cache size provided is too large or an unknown flag was passed
1027  *    - ENOSPC - the maximum number of memzones has already been allocated
1028  *    - EEXIST - a memzone with the same name already exists
1029  *    - ENOMEM - no appropriate memory area found in which to create memzone
1030  */
1031 struct rte_mempool *
1032 rte_mempool_create(const char *name, unsigned n, unsigned elt_size,
1033                    unsigned cache_size, unsigned private_data_size,
1034                    rte_mempool_ctor_t *mp_init, void *mp_init_arg,
1035                    rte_mempool_obj_cb_t *obj_init, void *obj_init_arg,
1036                    int socket_id, unsigned flags);
1037
1038 /**
1039  * Create an empty mempool
1040  *
1041  * The mempool is allocated and initialized, but it is not populated: no
1042  * memory is allocated for the mempool elements. The user has to call
1043  * rte_mempool_populate_*() to add memory chunks to the pool. Once
1044  * populated, the user may also want to initialize each object with
1045  * rte_mempool_obj_iter().
1046  *
1047  * @param name
1048  *   The name of the mempool.
1049  * @param n
1050  *   The maximum number of elements that can be added in the mempool.
1051  *   The optimum size (in terms of memory usage) for a mempool is when n
1052  *   is a power of two minus one: n = (2^q - 1).
1053  * @param elt_size
1054  *   The size of each element.
1055  * @param cache_size
1056  *   Size of the cache. See rte_mempool_create() for details.
1057  * @param private_data_size
1058  *   The size of the private data appended after the mempool
1059  *   structure. This is useful for storing some private data after the
1060  *   mempool structure, as is done for rte_mbuf_pool for example.
1061  * @param socket_id
1062  *   The *socket_id* argument is the socket identifier in the case of
1063  *   NUMA. The value can be *SOCKET_ID_ANY* if there is no NUMA
1064  *   constraint for the reserved zone.
1065  * @param flags
1066  *   Flags controlling the behavior of the mempool. See
1067  *   rte_mempool_create() for details.
1068  * @return
1069  *   The pointer to the new allocated mempool, on success. NULL on error
1070  *   with rte_errno set appropriately. See rte_mempool_create() for details.
1071  */
1072 struct rte_mempool *
1073 rte_mempool_create_empty(const char *name, unsigned n, unsigned elt_size,
1074         unsigned cache_size, unsigned private_data_size,
1075         int socket_id, unsigned flags);
1076 /**
1077  * Free a mempool
1078  *
1079  * Unlink the mempool from global list, free the memory chunks, and all
1080  * memory referenced by the mempool. The objects must not be used by
1081  * other cores as they will be freed.
1082  *
1083  * @param mp
1084  *   A pointer to the mempool structure.
1085  */
1086 void
1087 rte_mempool_free(struct rte_mempool *mp);
1088
1089 /**
1090  * Add physically contiguous memory for objects in the pool at init
1091  *
1092  * Add a virtually and physically contiguous memory chunk in the pool
1093  * where objects can be instantiated.
1094  *
1095  * If the given IO address is unknown (iova = RTE_BAD_IOVA),
1096  * the chunk doesn't need to be physically contiguous (only virtually),
1097  * and allocated objects may span two pages.
1098  *
1099  * @param mp
1100  *   A pointer to the mempool structure.
1101  * @param vaddr
1102  *   The virtual address of memory that should be used to store objects.
1103  * @param iova
1104  *   The IO address
1105  * @param len
1106  *   The length of memory in bytes.
1107  * @param free_cb
1108  *   The callback used to free this chunk when destroying the mempool.
1109  * @param opaque
1110  *   An opaque argument passed to free_cb.
1111  * @return
1112  *   The number of objects added on success (strictly positive).
1113  *   On error, the chunk is not added in the memory list of the
1114  *   mempool the following code is returned:
1115  *     (0): not enough room in chunk for one object.
1116  *     (-ENOSPC): mempool is already populated.
1117  *     (-ENOMEM): allocation failure.
1118  */
1119 int rte_mempool_populate_iova(struct rte_mempool *mp, char *vaddr,
1120         rte_iova_t iova, size_t len, rte_mempool_memchunk_free_cb_t *free_cb,
1121         void *opaque);
1122
1123 /**
1124  * Add virtually contiguous memory for objects in the pool at init
1125  *
1126  * Add a virtually contiguous memory chunk in the pool where objects can
1127  * be instantiated.
1128  *
1129  * @param mp
1130  *   A pointer to the mempool structure.
1131  * @param addr
1132  *   The virtual address of memory that should be used to store objects.
1133  * @param len
1134  *   The length of memory in bytes.
1135  * @param pg_sz
1136  *   The size of memory pages in this virtual area.
1137  * @param free_cb
1138  *   The callback used to free this chunk when destroying the mempool.
1139  * @param opaque
1140  *   An opaque argument passed to free_cb.
1141  * @return
1142  *   The number of objects added on success (strictly positive).
1143  *   On error, the chunk is not added in the memory list of the
1144  *   mempool the following code is returned:
1145  *     (0): not enough room in chunk for one object.
1146  *     (-ENOSPC): mempool is already populated.
1147  *     (-ENOMEM): allocation failure.
1148  */
1149 int
1150 rte_mempool_populate_virt(struct rte_mempool *mp, char *addr,
1151         size_t len, size_t pg_sz, rte_mempool_memchunk_free_cb_t *free_cb,
1152         void *opaque);
1153
1154 /**
1155  * Add memory for objects in the pool at init
1156  *
1157  * This is the default function used by rte_mempool_create() to populate
1158  * the mempool. It adds memory allocated using rte_memzone_reserve().
1159  *
1160  * @param mp
1161  *   A pointer to the mempool structure.
1162  * @return
1163  *   The number of objects added on success.
1164  *   On error, the chunk is not added in the memory list of the
1165  *   mempool and a negative errno is returned.
1166  */
1167 int rte_mempool_populate_default(struct rte_mempool *mp);
1168
1169 /**
1170  * Add memory from anonymous mapping for objects in the pool at init
1171  *
1172  * This function mmap an anonymous memory zone that is locked in
1173  * memory to store the objects of the mempool.
1174  *
1175  * @param mp
1176  *   A pointer to the mempool structure.
1177  * @return
1178  *   The number of objects added on success.
1179  *   On error, 0 is returned, rte_errno is set, and the chunk is not added in
1180  *   the memory list of the mempool.
1181  */
1182 int rte_mempool_populate_anon(struct rte_mempool *mp);
1183
1184 /**
1185  * Call a function for each mempool element
1186  *
1187  * Iterate across all objects attached to a rte_mempool and call the
1188  * callback function on it.
1189  *
1190  * @param mp
1191  *   A pointer to an initialized mempool.
1192  * @param obj_cb
1193  *   A function pointer that is called for each object.
1194  * @param obj_cb_arg
1195  *   An opaque pointer passed to the callback function.
1196  * @return
1197  *   Number of objects iterated.
1198  */
1199 uint32_t rte_mempool_obj_iter(struct rte_mempool *mp,
1200         rte_mempool_obj_cb_t *obj_cb, void *obj_cb_arg);
1201
1202 /**
1203  * Call a function for each mempool memory chunk
1204  *
1205  * Iterate across all memory chunks attached to a rte_mempool and call
1206  * the callback function on it.
1207  *
1208  * @param mp
1209  *   A pointer to an initialized mempool.
1210  * @param mem_cb
1211  *   A function pointer that is called for each memory chunk.
1212  * @param mem_cb_arg
1213  *   An opaque pointer passed to the callback function.
1214  * @return
1215  *   Number of memory chunks iterated.
1216  */
1217 uint32_t rte_mempool_mem_iter(struct rte_mempool *mp,
1218         rte_mempool_mem_cb_t *mem_cb, void *mem_cb_arg);
1219
1220 /**
1221  * Dump the status of the mempool to a file.
1222  *
1223  * @param f
1224  *   A pointer to a file for output
1225  * @param mp
1226  *   A pointer to the mempool structure.
1227  */
1228 void rte_mempool_dump(FILE *f, struct rte_mempool *mp);
1229
1230 /**
1231  * Create a user-owned mempool cache.
1232  *
1233  * This can be used by unregistered non-EAL threads to enable caching when they
1234  * interact with a mempool.
1235  *
1236  * @param size
1237  *   The size of the mempool cache. See rte_mempool_create()'s cache_size
1238  *   parameter description for more information. The same limits and
1239  *   considerations apply here too.
1240  * @param socket_id
1241  *   The socket identifier in the case of NUMA. The value can be
1242  *   SOCKET_ID_ANY if there is no NUMA constraint for the reserved zone.
1243  */
1244 struct rte_mempool_cache *
1245 rte_mempool_cache_create(uint32_t size, int socket_id);
1246
1247 /**
1248  * Free a user-owned mempool cache.
1249  *
1250  * @param cache
1251  *   A pointer to the mempool cache.
1252  */
1253 void
1254 rte_mempool_cache_free(struct rte_mempool_cache *cache);
1255
1256 /**
1257  * Get a pointer to the per-lcore default mempool cache.
1258  *
1259  * @param mp
1260  *   A pointer to the mempool structure.
1261  * @param lcore_id
1262  *   The logical core id.
1263  * @return
1264  *   A pointer to the mempool cache or NULL if disabled or unregistered non-EAL
1265  *   thread.
1266  */
1267 static __rte_always_inline struct rte_mempool_cache *
1268 rte_mempool_default_cache(struct rte_mempool *mp, unsigned lcore_id)
1269 {
1270         if (mp->cache_size == 0)
1271                 return NULL;
1272
1273         if (lcore_id >= RTE_MAX_LCORE)
1274                 return NULL;
1275
1276         rte_mempool_trace_default_cache(mp, lcore_id,
1277                 &mp->local_cache[lcore_id]);
1278         return &mp->local_cache[lcore_id];
1279 }
1280
1281 /**
1282  * Flush a user-owned mempool cache to the specified mempool.
1283  *
1284  * @param cache
1285  *   A pointer to the mempool cache.
1286  * @param mp
1287  *   A pointer to the mempool.
1288  */
1289 static __rte_always_inline void
1290 rte_mempool_cache_flush(struct rte_mempool_cache *cache,
1291                         struct rte_mempool *mp)
1292 {
1293         if (cache == NULL)
1294                 cache = rte_mempool_default_cache(mp, rte_lcore_id());
1295         if (cache == NULL || cache->len == 0)
1296                 return;
1297         rte_mempool_trace_cache_flush(cache, mp);
1298         rte_mempool_ops_enqueue_bulk(mp, cache->objs, cache->len);
1299         cache->len = 0;
1300 }
1301
1302 /**
1303  * @internal Put several objects back in the mempool; used internally.
1304  * @param mp
1305  *   A pointer to the mempool structure.
1306  * @param obj_table
1307  *   A pointer to a table of void * pointers (objects).
1308  * @param n
1309  *   The number of objects to store back in the mempool, must be strictly
1310  *   positive.
1311  * @param cache
1312  *   A pointer to a mempool cache structure. May be NULL if not needed.
1313  */
1314 static __rte_always_inline void
1315 __mempool_generic_put(struct rte_mempool *mp, void * const *obj_table,
1316                       unsigned int n, struct rte_mempool_cache *cache)
1317 {
1318         void **cache_objs;
1319
1320         /* increment stat now, adding in mempool always success */
1321         __MEMPOOL_STAT_ADD(mp, put_bulk, 1);
1322         __MEMPOOL_STAT_ADD(mp, put_objs, n);
1323
1324         /* No cache provided or if put would overflow mem allocated for cache */
1325         if (unlikely(cache == NULL || n > RTE_MEMPOOL_CACHE_MAX_SIZE))
1326                 goto ring_enqueue;
1327
1328         cache_objs = &cache->objs[cache->len];
1329
1330         /*
1331          * The cache follows the following algorithm
1332          *   1. Add the objects to the cache
1333          *   2. Anything greater than the cache min value (if it crosses the
1334          *   cache flush threshold) is flushed to the ring.
1335          */
1336
1337         /* Add elements back into the cache */
1338         rte_memcpy(&cache_objs[0], obj_table, sizeof(void *) * n);
1339
1340         cache->len += n;
1341
1342         if (cache->len >= cache->flushthresh) {
1343                 rte_mempool_ops_enqueue_bulk(mp, &cache->objs[cache->size],
1344                                 cache->len - cache->size);
1345                 cache->len = cache->size;
1346         }
1347
1348         return;
1349
1350 ring_enqueue:
1351
1352         /* push remaining objects in ring */
1353 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
1354         if (rte_mempool_ops_enqueue_bulk(mp, obj_table, n) < 0)
1355                 rte_panic("cannot put objects in mempool\n");
1356 #else
1357         rte_mempool_ops_enqueue_bulk(mp, obj_table, n);
1358 #endif
1359 }
1360
1361
1362 /**
1363  * Put several objects back in the mempool.
1364  *
1365  * @param mp
1366  *   A pointer to the mempool structure.
1367  * @param obj_table
1368  *   A pointer to a table of void * pointers (objects).
1369  * @param n
1370  *   The number of objects to add in the mempool from the obj_table.
1371  * @param cache
1372  *   A pointer to a mempool cache structure. May be NULL if not needed.
1373  */
1374 static __rte_always_inline void
1375 rte_mempool_generic_put(struct rte_mempool *mp, void * const *obj_table,
1376                         unsigned int n, struct rte_mempool_cache *cache)
1377 {
1378         rte_mempool_trace_generic_put(mp, obj_table, n, cache);
1379         __mempool_check_cookies(mp, obj_table, n, 0);
1380         __mempool_generic_put(mp, obj_table, n, cache);
1381 }
1382
1383 /**
1384  * Put several objects back in the mempool.
1385  *
1386  * This function calls the multi-producer or the single-producer
1387  * version depending on the default behavior that was specified at
1388  * mempool creation time (see flags).
1389  *
1390  * @param mp
1391  *   A pointer to the mempool structure.
1392  * @param obj_table
1393  *   A pointer to a table of void * pointers (objects).
1394  * @param n
1395  *   The number of objects to add in the mempool from obj_table.
1396  */
1397 static __rte_always_inline void
1398 rte_mempool_put_bulk(struct rte_mempool *mp, void * const *obj_table,
1399                      unsigned int n)
1400 {
1401         struct rte_mempool_cache *cache;
1402         cache = rte_mempool_default_cache(mp, rte_lcore_id());
1403         rte_mempool_trace_put_bulk(mp, obj_table, n, cache);
1404         rte_mempool_generic_put(mp, obj_table, n, cache);
1405 }
1406
1407 /**
1408  * Put one object back in the mempool.
1409  *
1410  * This function calls the multi-producer or the single-producer
1411  * version depending on the default behavior that was specified at
1412  * mempool creation time (see flags).
1413  *
1414  * @param mp
1415  *   A pointer to the mempool structure.
1416  * @param obj
1417  *   A pointer to the object to be added.
1418  */
1419 static __rte_always_inline void
1420 rte_mempool_put(struct rte_mempool *mp, void *obj)
1421 {
1422         rte_mempool_put_bulk(mp, &obj, 1);
1423 }
1424
1425 /**
1426  * @internal Get several objects from the mempool; used internally.
1427  * @param mp
1428  *   A pointer to the mempool structure.
1429  * @param obj_table
1430  *   A pointer to a table of void * pointers (objects).
1431  * @param n
1432  *   The number of objects to get, must be strictly positive.
1433  * @param cache
1434  *   A pointer to a mempool cache structure. May be NULL if not needed.
1435  * @return
1436  *   - >=0: Success; number of objects supplied.
1437  *   - <0: Error; code of ring dequeue function.
1438  */
1439 static __rte_always_inline int
1440 __mempool_generic_get(struct rte_mempool *mp, void **obj_table,
1441                       unsigned int n, struct rte_mempool_cache *cache)
1442 {
1443         int ret;
1444         uint32_t index, len;
1445         void **cache_objs;
1446
1447         /* No cache provided or cannot be satisfied from cache */
1448         if (unlikely(cache == NULL || n >= cache->size))
1449                 goto ring_dequeue;
1450
1451         cache_objs = cache->objs;
1452
1453         /* Can this be satisfied from the cache? */
1454         if (cache->len < n) {
1455                 /* No. Backfill the cache first, and then fill from it */
1456                 uint32_t req = n + (cache->size - cache->len);
1457
1458                 /* How many do we require i.e. number to fill the cache + the request */
1459                 ret = rte_mempool_ops_dequeue_bulk(mp,
1460                         &cache->objs[cache->len], req);
1461                 if (unlikely(ret < 0)) {
1462                         /*
1463                          * In the off chance that we are buffer constrained,
1464                          * where we are not able to allocate cache + n, go to
1465                          * the ring directly. If that fails, we are truly out of
1466                          * buffers.
1467                          */
1468                         goto ring_dequeue;
1469                 }
1470
1471                 cache->len += req;
1472         }
1473
1474         /* Now fill in the response ... */
1475         for (index = 0, len = cache->len - 1; index < n; ++index, len--, obj_table++)
1476                 *obj_table = cache_objs[len];
1477
1478         cache->len -= n;
1479
1480         __MEMPOOL_STAT_ADD(mp, get_success_bulk, 1);
1481         __MEMPOOL_STAT_ADD(mp, get_success_objs, n);
1482
1483         return 0;
1484
1485 ring_dequeue:
1486
1487         /* get remaining objects from ring */
1488         ret = rte_mempool_ops_dequeue_bulk(mp, obj_table, n);
1489
1490         if (ret < 0) {
1491                 __MEMPOOL_STAT_ADD(mp, get_fail_bulk, 1);
1492                 __MEMPOOL_STAT_ADD(mp, get_fail_objs, n);
1493         } else {
1494                 __MEMPOOL_STAT_ADD(mp, get_success_bulk, 1);
1495                 __MEMPOOL_STAT_ADD(mp, get_success_objs, n);
1496         }
1497
1498         return ret;
1499 }
1500
1501 /**
1502  * Get several objects from the mempool.
1503  *
1504  * If cache is enabled, objects will be retrieved first from cache,
1505  * subsequently from the common pool. Note that it can return -ENOENT when
1506  * the local cache and common pool are empty, even if cache from other
1507  * lcores are full.
1508  *
1509  * @param mp
1510  *   A pointer to the mempool structure.
1511  * @param obj_table
1512  *   A pointer to a table of void * pointers (objects) that will be filled.
1513  * @param n
1514  *   The number of objects to get from mempool to obj_table.
1515  * @param cache
1516  *   A pointer to a mempool cache structure. May be NULL if not needed.
1517  * @return
1518  *   - 0: Success; objects taken.
1519  *   - -ENOENT: Not enough entries in the mempool; no object is retrieved.
1520  */
1521 static __rte_always_inline int
1522 rte_mempool_generic_get(struct rte_mempool *mp, void **obj_table,
1523                         unsigned int n, struct rte_mempool_cache *cache)
1524 {
1525         int ret;
1526         ret = __mempool_generic_get(mp, obj_table, n, cache);
1527         if (ret == 0)
1528                 __mempool_check_cookies(mp, obj_table, n, 1);
1529         rte_mempool_trace_generic_get(mp, obj_table, n, cache);
1530         return ret;
1531 }
1532
1533 /**
1534  * Get several objects from the mempool.
1535  *
1536  * This function calls the multi-consumers or the single-consumer
1537  * version, depending on the default behaviour that was specified at
1538  * mempool creation time (see flags).
1539  *
1540  * If cache is enabled, objects will be retrieved first from cache,
1541  * subsequently from the common pool. Note that it can return -ENOENT when
1542  * the local cache and common pool are empty, even if cache from other
1543  * lcores are full.
1544  *
1545  * @param mp
1546  *   A pointer to the mempool structure.
1547  * @param obj_table
1548  *   A pointer to a table of void * pointers (objects) that will be filled.
1549  * @param n
1550  *   The number of objects to get from the mempool to obj_table.
1551  * @return
1552  *   - 0: Success; objects taken
1553  *   - -ENOENT: Not enough entries in the mempool; no object is retrieved.
1554  */
1555 static __rte_always_inline int
1556 rte_mempool_get_bulk(struct rte_mempool *mp, void **obj_table, unsigned int n)
1557 {
1558         struct rte_mempool_cache *cache;
1559         cache = rte_mempool_default_cache(mp, rte_lcore_id());
1560         rte_mempool_trace_get_bulk(mp, obj_table, n, cache);
1561         return rte_mempool_generic_get(mp, obj_table, n, cache);
1562 }
1563
1564 /**
1565  * Get one object from the mempool.
1566  *
1567  * This function calls the multi-consumers or the single-consumer
1568  * version, depending on the default behavior that was specified at
1569  * mempool creation (see flags).
1570  *
1571  * If cache is enabled, objects will be retrieved first from cache,
1572  * subsequently from the common pool. Note that it can return -ENOENT when
1573  * the local cache and common pool are empty, even if cache from other
1574  * lcores are full.
1575  *
1576  * @param mp
1577  *   A pointer to the mempool structure.
1578  * @param obj_p
1579  *   A pointer to a void * pointer (object) that will be filled.
1580  * @return
1581  *   - 0: Success; objects taken.
1582  *   - -ENOENT: Not enough entries in the mempool; no object is retrieved.
1583  */
1584 static __rte_always_inline int
1585 rte_mempool_get(struct rte_mempool *mp, void **obj_p)
1586 {
1587         return rte_mempool_get_bulk(mp, obj_p, 1);
1588 }
1589
1590 /**
1591  * Get a contiguous blocks of objects from the mempool.
1592  *
1593  * If cache is enabled, consider to flush it first, to reuse objects
1594  * as soon as possible.
1595  *
1596  * The application should check that the driver supports the operation
1597  * by calling rte_mempool_ops_get_info() and checking that `contig_block_size`
1598  * is not zero.
1599  *
1600  * @param mp
1601  *   A pointer to the mempool structure.
1602  * @param first_obj_table
1603  *   A pointer to a pointer to the first object in each block.
1604  * @param n
1605  *   The number of blocks to get from mempool.
1606  * @return
1607  *   - 0: Success; blocks taken.
1608  *   - -ENOBUFS: Not enough entries in the mempool; no object is retrieved.
1609  *   - -EOPNOTSUPP: The mempool driver does not support block dequeue
1610  */
1611 static __rte_always_inline int
1612 rte_mempool_get_contig_blocks(struct rte_mempool *mp,
1613                               void **first_obj_table, unsigned int n)
1614 {
1615         int ret;
1616
1617         ret = rte_mempool_ops_dequeue_contig_blocks(mp, first_obj_table, n);
1618         if (ret == 0) {
1619                 __MEMPOOL_STAT_ADD(mp, get_success_bulk, 1);
1620                 __MEMPOOL_STAT_ADD(mp, get_success_blks, n);
1621                 __mempool_contig_blocks_check_cookies(mp, first_obj_table, n,
1622                                                       1);
1623         } else {
1624                 __MEMPOOL_STAT_ADD(mp, get_fail_bulk, 1);
1625                 __MEMPOOL_STAT_ADD(mp, get_fail_blks, n);
1626         }
1627
1628         rte_mempool_trace_get_contig_blocks(mp, first_obj_table, n);
1629         return ret;
1630 }
1631
1632 /**
1633  * Return the number of entries in the mempool.
1634  *
1635  * When cache is enabled, this function has to browse the length of
1636  * all lcores, so it should not be used in a data path, but only for
1637  * debug purposes. User-owned mempool caches are not accounted for.
1638  *
1639  * @param mp
1640  *   A pointer to the mempool structure.
1641  * @return
1642  *   The number of entries in the mempool.
1643  */
1644 unsigned int rte_mempool_avail_count(const struct rte_mempool *mp);
1645
1646 /**
1647  * Return the number of elements which have been allocated from the mempool
1648  *
1649  * When cache is enabled, this function has to browse the length of
1650  * all lcores, so it should not be used in a data path, but only for
1651  * debug purposes.
1652  *
1653  * @param mp
1654  *   A pointer to the mempool structure.
1655  * @return
1656  *   The number of free entries in the mempool.
1657  */
1658 unsigned int
1659 rte_mempool_in_use_count(const struct rte_mempool *mp);
1660
1661 /**
1662  * Test if the mempool is full.
1663  *
1664  * When cache is enabled, this function has to browse the length of all
1665  * lcores, so it should not be used in a data path, but only for debug
1666  * purposes. User-owned mempool caches are not accounted for.
1667  *
1668  * @param mp
1669  *   A pointer to the mempool structure.
1670  * @return
1671  *   - 1: The mempool is full.
1672  *   - 0: The mempool is not full.
1673  */
1674 static inline int
1675 rte_mempool_full(const struct rte_mempool *mp)
1676 {
1677         return rte_mempool_avail_count(mp) == mp->size;
1678 }
1679
1680 /**
1681  * Test if the mempool is empty.
1682  *
1683  * When cache is enabled, this function has to browse the length of all
1684  * lcores, so it should not be used in a data path, but only for debug
1685  * purposes. User-owned mempool caches are not accounted for.
1686  *
1687  * @param mp
1688  *   A pointer to the mempool structure.
1689  * @return
1690  *   - 1: The mempool is empty.
1691  *   - 0: The mempool is not empty.
1692  */
1693 static inline int
1694 rte_mempool_empty(const struct rte_mempool *mp)
1695 {
1696         return rte_mempool_avail_count(mp) == 0;
1697 }
1698
1699 /**
1700  * Return the IO address of elt, which is an element of the pool mp.
1701  *
1702  * @param elt
1703  *   A pointer (virtual address) to the element of the pool.
1704  * @return
1705  *   The IO address of the elt element.
1706  *   If the mempool was created with RTE_MEMPOOL_F_NO_IOVA_CONTIG, the
1707  *   returned value is RTE_BAD_IOVA.
1708  */
1709 static inline rte_iova_t
1710 rte_mempool_virt2iova(const void *elt)
1711 {
1712         const struct rte_mempool_objhdr *hdr;
1713         hdr = (const struct rte_mempool_objhdr *)RTE_PTR_SUB(elt,
1714                 sizeof(*hdr));
1715         return hdr->iova;
1716 }
1717
1718 /**
1719  * Check the consistency of mempool objects.
1720  *
1721  * Verify the coherency of fields in the mempool structure. Also check
1722  * that the cookies of mempool objects (even the ones that are not
1723  * present in pool) have a correct value. If not, a panic will occur.
1724  *
1725  * @param mp
1726  *   A pointer to the mempool structure.
1727  */
1728 void rte_mempool_audit(struct rte_mempool *mp);
1729
1730 /**
1731  * Return a pointer to the private data in an mempool structure.
1732  *
1733  * @param mp
1734  *   A pointer to the mempool structure.
1735  * @return
1736  *   A pointer to the private data.
1737  */
1738 static inline void *rte_mempool_get_priv(struct rte_mempool *mp)
1739 {
1740         return (char *)mp +
1741                 MEMPOOL_HEADER_SIZE(mp, mp->cache_size);
1742 }
1743
1744 /**
1745  * Dump the status of all mempools on the console
1746  *
1747  * @param f
1748  *   A pointer to a file for output
1749  */
1750 void rte_mempool_list_dump(FILE *f);
1751
1752 /**
1753  * Search a mempool from its name
1754  *
1755  * @param name
1756  *   The name of the mempool.
1757  * @return
1758  *   The pointer to the mempool matching the name, or NULL if not found.
1759  *   NULL on error
1760  *   with rte_errno set appropriately. Possible rte_errno values include:
1761  *    - ENOENT - required entry not available to return.
1762  *
1763  */
1764 struct rte_mempool *rte_mempool_lookup(const char *name);
1765
1766 /**
1767  * Get the header, trailer and total size of a mempool element.
1768  *
1769  * Given a desired size of the mempool element and mempool flags,
1770  * calculates header, trailer, body and total sizes of the mempool object.
1771  *
1772  * @param elt_size
1773  *   The size of each element, without header and trailer.
1774  * @param flags
1775  *   The flags used for the mempool creation.
1776  *   Consult rte_mempool_create() for more information about possible values.
1777  *   The size of each element.
1778  * @param sz
1779  *   The calculated detailed size the mempool object. May be NULL.
1780  * @return
1781  *   Total size of the mempool object.
1782  */
1783 uint32_t rte_mempool_calc_obj_size(uint32_t elt_size, uint32_t flags,
1784         struct rte_mempool_objsz *sz);
1785
1786 /**
1787  * Walk list of all memory pools
1788  *
1789  * @param func
1790  *   Iterator function
1791  * @param arg
1792  *   Argument passed to iterator
1793  */
1794 void rte_mempool_walk(void (*func)(struct rte_mempool *, void *arg),
1795                       void *arg);
1796
1797 /**
1798  * @internal Get page size used for mempool object allocation.
1799  * This function is internal to mempool library and mempool drivers.
1800  */
1801 int
1802 rte_mempool_get_page_size(struct rte_mempool *mp, size_t *pg_sz);
1803
1804 /**
1805  * Mempool event type.
1806  * @internal
1807  */
1808 enum rte_mempool_event {
1809         /** Occurs after a mempool is fully populated. */
1810         RTE_MEMPOOL_EVENT_READY = 0,
1811         /** Occurs before the destruction of a mempool begins. */
1812         RTE_MEMPOOL_EVENT_DESTROY = 1,
1813 };
1814
1815 /**
1816  * @internal
1817  * Mempool event callback.
1818  *
1819  * rte_mempool_event_callback_register() may be called from within the callback,
1820  * but the callbacks registered this way will not be invoked for the same event.
1821  * rte_mempool_event_callback_unregister() may only be safely called
1822  * to remove the running callback.
1823  */
1824 typedef void (rte_mempool_event_callback)(
1825                 enum rte_mempool_event event,
1826                 struct rte_mempool *mp,
1827                 void *user_data);
1828
1829 /**
1830  * @internal
1831  * Register a callback function invoked on mempool life cycle event.
1832  * The function will be invoked in the process
1833  * that performs an action which triggers the callback.
1834  *
1835  * @param func
1836  *   Callback function.
1837  * @param user_data
1838  *   User data.
1839  *
1840  * @return
1841  *   0 on success, negative on failure and rte_errno is set.
1842  */
1843 __rte_internal
1844 int
1845 rte_mempool_event_callback_register(rte_mempool_event_callback *func,
1846                                     void *user_data);
1847
1848 /**
1849  * @internal
1850  * Unregister a callback added with rte_mempool_event_callback_register().
1851  * @p func and @p user_data must exactly match registration parameters.
1852  *
1853  * @param func
1854  *   Callback function.
1855  * @param user_data
1856  *   User data.
1857  *
1858  * @return
1859  *   0 on success, negative on failure and rte_errno is set.
1860  */
1861 __rte_internal
1862 int
1863 rte_mempool_event_callback_unregister(rte_mempool_event_callback *func,
1864                                       void *user_data);
1865
1866 #ifdef __cplusplus
1867 }
1868 #endif
1869
1870 #endif /* _RTE_MEMPOOL_H_ */