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/hns3: fix dumping VF register information
[dpdk.git]
/
lib
/
librte_stack
/
rte_stack.c
diff --git
a/lib/librte_stack/rte_stack.c
b/lib/librte_stack/rte_stack.c
index
610014b
..
d19824f
100644
(file)
--- a/
lib/librte_stack/rte_stack.c
+++ b/
lib/librte_stack/rte_stack.c
@@
-4,6
+4,7
@@
#include <string.h>
#include <string.h>
+#include <rte_string_fns.h>
#include <rte_atomic.h>
#include <rte_eal.h>
#include <rte_eal_memconfig.h>
#include <rte_atomic.h>
#include <rte_eal.h>
#include <rte_eal_memconfig.h>
@@
-14,7
+15,7
@@
#include <rte_tailq.h>
#include "rte_stack.h"
#include <rte_tailq.h>
#include "rte_stack.h"
-#include "
rte_
stack_pvt.h"
+#include "stack_pvt.h"
int stack_logtype;
int stack_logtype;
@@
-25,18
+26,25
@@
static struct rte_tailq_elem rte_stack_tailq = {
};
EAL_REGISTER_TAILQ(rte_stack_tailq)
};
EAL_REGISTER_TAILQ(rte_stack_tailq)
+
static void
static void
-rte_stack_init(struct rte_stack *s)
+rte_stack_init(struct rte_stack *s
, unsigned int count, uint32_t flags
)
{
memset(s, 0, sizeof(*s));
{
memset(s, 0, sizeof(*s));
- rte_stack_std_init(s);
+ if (flags & RTE_STACK_F_LF)
+ rte_stack_lf_init(s, count);
+ else
+ rte_stack_std_init(s);
}
static ssize_t
}
static ssize_t
-rte_stack_get_memsize(unsigned int count)
+rte_stack_get_memsize(unsigned int count
, uint32_t flags
)
{
{
- return rte_stack_std_get_memsize(count);
+ if (flags & RTE_STACK_F_LF)
+ return rte_stack_lf_get_memsize(count);
+ else
+ return rte_stack_std_get_memsize(count);
}
struct rte_stack *
}
struct rte_stack *
@@
-51,9
+59,16
@@
rte_stack_create(const char *name, unsigned int count, int socket_id,
unsigned int sz;
int ret;
unsigned int sz;
int ret;
- RTE_SET_USED(flags);
+#ifdef RTE_ARCH_64
+ RTE_BUILD_BUG_ON(sizeof(struct rte_stack_lf_head) != 16);
+#else
+ if (flags & RTE_STACK_F_LF) {
+ STACK_LOG_ERR("Lock-free stack is not supported on your platform\n");
+ return NULL;
+ }
+#endif
- sz = rte_stack_get_memsize(count);
+ sz = rte_stack_get_memsize(count
, flags
);
ret = snprintf(mz_name, sizeof(mz_name), "%s%s",
RTE_STACK_MZ_PREFIX, name);
ret = snprintf(mz_name, sizeof(mz_name), "%s%s",
RTE_STACK_MZ_PREFIX, name);
@@
-69,25
+84,25
@@
rte_stack_create(const char *name, unsigned int count, int socket_id,
return NULL;
}
return NULL;
}
- rte_
rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK
);
+ rte_
mcfg_tailq_write_lock(
);
mz = rte_memzone_reserve_aligned(mz_name, sz, socket_id,
0, __alignof__(*s));
if (mz == NULL) {
STACK_LOG_ERR("Cannot reserve stack memzone!\n");
mz = rte_memzone_reserve_aligned(mz_name, sz, socket_id,
0, __alignof__(*s));
if (mz == NULL) {
STACK_LOG_ERR("Cannot reserve stack memzone!\n");
- rte_
rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK
);
+ rte_
mcfg_tailq_write_unlock(
);
rte_free(te);
return NULL;
}
s = mz->addr;
rte_free(te);
return NULL;
}
s = mz->addr;
- rte_stack_init(s);
+ rte_stack_init(s
, count, flags
);
/* Store the name for later lookups */
/* Store the name for later lookups */
- ret = s
nprintf(s->name, sizeof(s->name), "%s", name
);
+ ret = s
trlcpy(s->name, name, sizeof(s->name)
);
if (ret < 0 || ret >= (int)sizeof(s->name)) {
if (ret < 0 || ret >= (int)sizeof(s->name)) {
- rte_
rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK
);
+ rte_
mcfg_tailq_write_unlock(
);
rte_errno = ENAMETOOLONG;
rte_free(te);
rte_errno = ENAMETOOLONG;
rte_free(te);
@@
-105,7
+120,7
@@
rte_stack_create(const char *name, unsigned int count, int socket_id,
TAILQ_INSERT_TAIL(stack_list, te, next);
TAILQ_INSERT_TAIL(stack_list, te, next);
- rte_
rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK
);
+ rte_
mcfg_tailq_write_unlock(
);
return s;
}
return s;
}
@@
-120,7
+135,7
@@
rte_stack_free(struct rte_stack *s)
return;
stack_list = RTE_TAILQ_CAST(rte_stack_tailq.head, rte_stack_list);
return;
stack_list = RTE_TAILQ_CAST(rte_stack_tailq.head, rte_stack_list);
- rte_
rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK
);
+ rte_
mcfg_tailq_write_lock(
);
/* find out tailq entry */
TAILQ_FOREACH(te, stack_list, next) {
/* find out tailq entry */
TAILQ_FOREACH(te, stack_list, next) {
@@
-129,13
+144,13
@@
rte_stack_free(struct rte_stack *s)
}
if (te == NULL) {
}
if (te == NULL) {
- rte_
rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK
);
+ rte_
mcfg_tailq_write_unlock(
);
return;
}
TAILQ_REMOVE(stack_list, te, next);
return;
}
TAILQ_REMOVE(stack_list, te, next);
- rte_
rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK
);
+ rte_
mcfg_tailq_write_unlock(
);
rte_free(te);
rte_free(te);
@@
-156,7
+171,7
@@
rte_stack_lookup(const char *name)
stack_list = RTE_TAILQ_CAST(rte_stack_tailq.head, rte_stack_list);
stack_list = RTE_TAILQ_CAST(rte_stack_tailq.head, rte_stack_list);
- rte_
rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK
);
+ rte_
mcfg_tailq_read_lock(
);
TAILQ_FOREACH(te, stack_list, next) {
r = (struct rte_stack *) te->data;
TAILQ_FOREACH(te, stack_list, next) {
r = (struct rte_stack *) te->data;
@@
-164,7
+179,7
@@
rte_stack_lookup(const char *name)
break;
}
break;
}
- rte_
rwlock_read_unlock(RTE_EAL_TAILQ_RWLOCK
);
+ rte_
mcfg_tailq_read_unlock(
);
if (te == NULL) {
rte_errno = ENOENT;
if (te == NULL) {
rte_errno = ENOENT;