summaryrefslogtreecommitdiffstats
path: root/extras
diff options
context:
space:
mode:
authorMilan Lenco <milan.lenco@pantheon.tech>2018-06-26 15:16:15 +0200
committerDamjan Marion <dmarion@me.com>2018-06-28 13:50:28 +0000
commitf8b43e542102d36ec18fc6a9886bd175afaf5a49 (patch)
tree1a06ec80c3198891978cf9533decb0f895a7833f /extras
parent8dcfed5da8c36852fdc3077ed96ef9c7b3574b77 (diff)
libmemif: fixing head/tail arithmetics & queue reallocation
Change-Id: Ibc1f01b1cc99e7be77e892e53b7e1283f2a145cf Signed-off-by: Milan Lenco <milan.lenco@pantheon.tech>
Diffstat (limited to 'extras')
-rw-r--r--extras/libmemif/src/main.c13
-rw-r--r--extras/libmemif/src/socket.c4
2 files changed, 6 insertions, 11 deletions
diff --git a/extras/libmemif/src/main.c b/extras/libmemif/src/main.c
index d5a4319f131..1f4672ca4eb 100644
--- a/extras/libmemif/src/main.c
+++ b/extras/libmemif/src/main.c
@@ -1480,13 +1480,11 @@ memif_buffer_enq_tx (memif_conn_handle_t conn, uint16_t qid,
*count_out = 0;
ring_size = (1 << mq->log2_ring_size);
- ns = ring->tail - mq->last_tail;
- mq->last_tail += ns;
slot = (c->args.is_master) ? ring->tail : ring->head;
slot += mq->alloc_bufs;
/* can only be called by slave */
- ns = ring_size - ring->head + mq->alloc_bufs + mq->last_tail;
+ ns = ring_size - (ring->head + mq->alloc_bufs) + ring->tail;
b0 = bufs;
@@ -1562,15 +1560,13 @@ memif_buffer_alloc (memif_conn_handle_t conn, uint16_t qid,
*count_out = 0;
ring_size = (1 << mq->log2_ring_size);
- ns = ring->tail - mq->last_tail;
- mq->last_tail += ns;
slot = (c->args.is_master) ? ring->tail : ring->head;
slot += mq->alloc_bufs;
if (c->args.is_master)
- ns = ring->head + mq->alloc_bufs - ring->tail;
+ ns = ring->head - (ring->tail + mq->alloc_bufs);
else
- ns = ring_size - ring->head + mq->alloc_bufs + mq->last_tail;
+ ns = ring_size - (ring->head + mq->alloc_bufs) + ring->tail;
while (count && ns)
{
@@ -1597,7 +1593,6 @@ memif_buffer_alloc (memif_conn_handle_t conn, uint16_t qid,
*count_out += 1;
mq->alloc_bufs++;
ns--;
- count--;
ring->desc[b0->desc_index & mask].flags |=
MEMIF_DESC_FLAG_NEXT;
@@ -1695,7 +1690,7 @@ memif_refill_queue (memif_conn_handle_t conn, uint16_t qid, uint16_t count,
if (headroom)
{
- slot = (c->args.is_master) ? ring->head : ring->tail;
+ slot = ring->head;
while (slot < head)
{
uint16_t x =
diff --git a/extras/libmemif/src/socket.c b/extras/libmemif/src/socket.c
index e8b14c9acdb..fd4005645e1 100644
--- a/extras/libmemif/src/socket.c
+++ b/extras/libmemif/src/socket.c
@@ -530,7 +530,7 @@ memif_msg_receive_add_ring (memif_connection_t * c, memif_msg_t * msg, int fd)
mq =
(memif_queue_t *) realloc (c->rx_queues,
sizeof (memif_queue_t) * (ar->index + 1));
- memset (mq, 0, sizeof (memif_queue_t) * (ar->index + 1));
+ memset (mq + ar->index, 0, sizeof (memif_queue_t));
if (mq == NULL)
return memif_syscall_error_handler (errno);
c->rx_queues = mq;
@@ -550,7 +550,7 @@ memif_msg_receive_add_ring (memif_connection_t * c, memif_msg_t * msg, int fd)
mq =
(memif_queue_t *) realloc (c->tx_queues,
sizeof (memif_queue_t) * (ar->index + 1));
- memset (mq, 0, sizeof (memif_queue_t) * (ar->index + 1));
+ memset (mq + ar->index, 0, sizeof (memif_queue_t));
if (mq == NULL)
return memif_syscall_error_handler (errno);
c->tx_queues = mq;