From f8b43e542102d36ec18fc6a9886bd175afaf5a49 Mon Sep 17 00:00:00 2001 From: Milan Lenco Date: Tue, 26 Jun 2018 15:16:15 +0200 Subject: libmemif: fixing head/tail arithmetics & queue reallocation Change-Id: Ibc1f01b1cc99e7be77e892e53b7e1283f2a145cf Signed-off-by: Milan Lenco --- extras/libmemif/src/main.c | 13 ++++--------- extras/libmemif/src/socket.c | 4 ++-- 2 files changed, 6 insertions(+), 11 deletions(-) (limited to 'extras') 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; -- cgit 1.2.3-korg