git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/ixgbe/base: limit iXFI setup to X552 devices
[dpdk.git]
/
lib
/
librte_ring
/
rte_ring.h
diff --git
a/lib/librte_ring/rte_ring.h
b/lib/librte_ring/rte_ring.h
index
943c97c
..
e359aff
100644
(file)
--- a/
lib/librte_ring/rte_ring.h
+++ b/
lib/librte_ring/rte_ring.h
@@
-100,12
+100,13
@@
extern "C" {
#include <rte_lcore.h>
#include <rte_atomic.h>
#include <rte_branch_prediction.h>
#include <rte_lcore.h>
#include <rte_atomic.h>
#include <rte_branch_prediction.h>
+#include <rte_memzone.h>
#define RTE_TAILQ_RING_NAME "RTE_RING"
enum rte_ring_queue_behavior {
RTE_RING_QUEUE_FIXED = 0, /* Enq/Deq a fixed number of items from a ring */
#define RTE_TAILQ_RING_NAME "RTE_RING"
enum rte_ring_queue_behavior {
RTE_RING_QUEUE_FIXED = 0, /* Enq/Deq a fixed number of items from a ring */
- RTE_RING_QUEUE_VARIABLE /* Enq/Deq as many items a possible from ring */
+ RTE_RING_QUEUE_VARIABLE /* Enq/Deq as many items a
s
possible from ring */
};
#ifdef RTE_LIBRTE_RING_DEBUG
};
#ifdef RTE_LIBRTE_RING_DEBUG
@@
-126,8
+127,10
@@
struct rte_ring_debug_stats {
} __rte_cache_aligned;
#endif
} __rte_cache_aligned;
#endif
-#define RTE_RING_NAMESIZE 32 /**< The maximum length of a ring name. */
#define RTE_RING_MZ_PREFIX "RG_"
#define RTE_RING_MZ_PREFIX "RG_"
+/**< The maximum length of a ring name. */
+#define RTE_RING_NAMESIZE (RTE_MEMZONE_NAMESIZE - \
+ sizeof(RTE_RING_MZ_PREFIX) + 1)
#ifndef RTE_RING_PAUSE_REP_COUNT
#define RTE_RING_PAUSE_REP_COUNT 0 /**< Yield after pause num of times, no yield
#ifndef RTE_RING_PAUSE_REP_COUNT
#define RTE_RING_PAUSE_REP_COUNT 0 /**< Yield after pause num of times, no yield
@@
-147,7
+150,12
@@
struct rte_memzone; /* forward declaration, so as not to require memzone.h */
* a problem.
*/
struct rte_ring {
* a problem.
*/
struct rte_ring {
- char name[RTE_RING_NAMESIZE]; /**< Name of the ring. */
+ /*
+ * Note: this field kept the RTE_MEMZONE_NAMESIZE size due to ABI
+ * compatibility requirements, it could be changed to RTE_RING_NAMESIZE
+ * next time the ABI changes
+ */
+ char name[RTE_MEMZONE_NAMESIZE]; /**< Name of the ring. */
int flags; /**< Flags supplied at creation. */
const struct rte_memzone *memzone;
/**< Memzone, if any, containing the rte_ring */
int flags; /**< Flags supplied at creation. */
const struct rte_memzone *memzone;
/**< Memzone, if any, containing the rte_ring */
@@
-179,7
+187,7
@@
struct rte_ring {
struct rte_ring_debug_stats stats[RTE_MAX_LCORE];
#endif
struct rte_ring_debug_stats stats[RTE_MAX_LCORE];
#endif
- void *
ring[0] __rte_cache_aligned;
/**< Memory space of ring starts here.
+ void *
ring[] __rte_cache_aligned;
/**< Memory space of ring starts here.
* not volatile so need to be careful
* about compiler re-ordering */
};
* not volatile so need to be careful
* about compiler re-ordering */
};
@@
-333,7
+341,7
@@
void rte_ring_free(struct rte_ring *r);
int rte_ring_set_water_mark(struct rte_ring *r, unsigned count);
/**
int rte_ring_set_water_mark(struct rte_ring *r, unsigned count);
/**
- * Dump the status of the ring to
the conso
le.
+ * Dump the status of the ring to
a fi
le.
*
* @param f
* A pointer to a file for output
*
* @param f
* A pointer to a file for output
@@
-431,6
+439,11
@@
__rte_ring_mp_do_enqueue(struct rte_ring *r, void * const *obj_table,
uint32_t mask = r->prod.mask;
int ret;
uint32_t mask = r->prod.mask;
int ret;
+ /* Avoid the unnecessary cmpset operation below, which is also
+ * potentially harmful when n equals 0. */
+ if (n == 0)
+ return 0;
+
/* move prod.head atomically */
do {
/* Reset n to the initial burst count */
/* move prod.head atomically */
do {
/* Reset n to the initial burst count */
@@
-618,6
+631,11
@@
__rte_ring_mc_do_dequeue(struct rte_ring *r, void **obj_table,
unsigned i, rep = 0;
uint32_t mask = r->prod.mask;
unsigned i, rep = 0;
uint32_t mask = r->prod.mask;
+ /* Avoid the unnecessary cmpset operation below, which is also
+ * potentially harmful when n equals 0. */
+ if (n == 0)
+ return 0;
+
/* move cons.head atomically */
do {
/* Restore n as it may change every loop */
/* move cons.head atomically */
do {
/* Restore n as it may change every loop */