X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=lib%2Flibrte_reorder%2Frte_reorder.c;h=3c9f0e2d086677fa202bf6e67685706e5d93712d;hb=9135705bb81df0b529821a121004c41f176995ff;hp=ecf539d2204df5864dea632abc29112588165064;hpb=369991d997e4abdee355e19ffbb41a4d246cafa2;p=dpdk.git diff --git a/lib/librte_reorder/rte_reorder.c b/lib/librte_reorder/rte_reorder.c index ecf539d220..3c9f0e2d08 100644 --- a/lib/librte_reorder/rte_reorder.c +++ b/lib/librte_reorder/rte_reorder.c @@ -5,11 +5,13 @@ #include #include +#include #include #include #include #include #include +#include #include "rte_reorder.h" @@ -82,7 +84,7 @@ rte_reorder_init(struct rte_reorder_buffer *b, unsigned int bufsize, } memset(b, 0, bufsize); - snprintf(b->name, sizeof(b->name), "%s", name); + strlcpy(b->name, name, sizeof(b->name)); b->memsize = bufsize; b->order_buf.size = b->ready_buf.size = size; b->order_buf.mask = b->ready_buf.mask = size - 1; @@ -118,7 +120,7 @@ rte_reorder_create(const char *name, unsigned socket_id, unsigned int size) return NULL; } - rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_lock(); /* guarantee there's no existing */ TAILQ_FOREACH(te, reorder_list, next) { @@ -151,7 +153,7 @@ rte_reorder_create(const char *name, unsigned socket_id, unsigned int size) } exit: - rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_unlock(); return b; } @@ -161,7 +163,7 @@ rte_reorder_reset(struct rte_reorder_buffer *b) char name[RTE_REORDER_NAMESIZE]; rte_reorder_free_mbufs(b); - snprintf(name, sizeof(name), "%s", b->name); + strlcpy(name, b->name, sizeof(name)); /* No error checking as current values should be valid */ rte_reorder_init(b, b->memsize, name, b->order_buf.size); } @@ -192,7 +194,7 @@ rte_reorder_free(struct rte_reorder_buffer *b) reorder_list = RTE_TAILQ_CAST(rte_reorder_tailq.head, rte_reorder_list); - rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_lock(); /* find our tailq entry */ TAILQ_FOREACH(te, reorder_list, next) { @@ -200,13 +202,13 @@ rte_reorder_free(struct rte_reorder_buffer *b) break; } if (te == NULL) { - rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_unlock(); return; } TAILQ_REMOVE(reorder_list, te, next); - rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_unlock(); rte_reorder_free_mbufs(b); @@ -221,15 +223,20 @@ rte_reorder_find_existing(const char *name) struct rte_tailq_entry *te; struct rte_reorder_list *reorder_list; + if (name == NULL) { + rte_errno = EINVAL; + return NULL; + } + reorder_list = RTE_TAILQ_CAST(rte_reorder_tailq.head, rte_reorder_list); - rte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_read_lock(); TAILQ_FOREACH(te, reorder_list, next) { b = (struct rte_reorder_buffer *) te->data; if (strncmp(name, b->name, RTE_REORDER_NAMESIZE) == 0) break; } - rte_rwlock_read_unlock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_read_unlock(); if (te == NULL) { rte_errno = ENOENT; @@ -294,8 +301,14 @@ int rte_reorder_insert(struct rte_reorder_buffer *b, struct rte_mbuf *mbuf) { uint32_t offset, position; - struct cir_buffer *order_buf = &b->order_buf; + struct cir_buffer *order_buf; + + if (b == NULL || mbuf == NULL) { + rte_errno = EINVAL; + return -1; + } + order_buf = &b->order_buf; if (!b->is_initialized) { b->min_seqn = mbuf->seqn; b->is_initialized = 1;