libmemif: fixing head/tail arithmetics & queue reallocation 24/13224/5
authorMilan Lenco <milan.lenco@pantheon.tech>
Tue, 26 Jun 2018 13:16:15 +0000 (15:16 +0200)
committerDamjan Marion <dmarion@me.com>
Thu, 28 Jun 2018 13:50:28 +0000 (13:50 +0000)
Change-Id: Ibc1f01b1cc99e7be77e892e53b7e1283f2a145cf
Signed-off-by: Milan Lenco <milan.lenco@pantheon.tech>
extras/libmemif/src/main.c
extras/libmemif/src/socket.c

index d5a4319..1f4672c 100644 (file)
@@ -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 =
index e8b14c9..fd40056 100644 (file)
@@ -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;