libmemif: fix for memif_init_queues slot math 77/40077/6
authormbly <mbly@ciena.com>
Wed, 6 Dec 2023 20:22:14 +0000 (12:22 -0800)
committerDave Wallace <dwallacelf@gmail.com>
Fri, 12 Jan 2024 03:22:30 +0000 (03:22 +0000)
Increase slot variable to u32 to address combinations of num-queues and queue-size that cause slot variable to wrap when declared as u16, e.g. num-queues > 8 && queue-size is 2^12

Type: fix
Change-Id: I5bd6198d60395156a06f1a280ea2594824ceaa9d
Signed-off-by: mbly <mbly@ciena.com>
extras/libmemif/src/main.c

index cb07bf6..6f9ba2f 100644 (file)
@@ -1258,6 +1258,7 @@ memif_init_queues (memif_connection_t *conn)
   int i, j;
   memif_ring_t *ring;
   memif_socket_t *ms = (memif_socket_t *) conn->args.socket;
+  uint32_t ring_size = 1 << conn->run_args.log2_ring_size;
 
   for (i = 0; i < conn->run_args.num_s2m_rings; i++)
     {
@@ -1266,9 +1267,11 @@ memif_init_queues (memif_connection_t *conn)
       ring->head = ring->tail = 0;
       ring->cookie = MEMIF_COOKIE;
       ring->flags = 0;
-      for (j = 0; j < (1 << conn->run_args.log2_ring_size); j++)
+      uint32_t base = i;
+      uint32_t ring_offset = base * ring_size;
+      for (j = 0; j < ring_size; j++)
        {
-         uint16_t slot = i * (1 << conn->run_args.log2_ring_size) + j;
+         uint32_t slot = ring_offset + j;
          ring->desc[j].region = 1;
          ring->desc[j].offset =
            conn->regions[1].buffer_offset +
@@ -1283,10 +1286,11 @@ memif_init_queues (memif_connection_t *conn)
       ring->head = ring->tail = 0;
       ring->cookie = MEMIF_COOKIE;
       ring->flags = 0;
-      for (j = 0; j < (1 << conn->run_args.log2_ring_size); j++)
+      uint32_t base = conn->run_args.num_s2m_rings + i;
+      uint32_t ring_offset = base * ring_size;
+      for (j = 0; j < ring_size; j++)
        {
-         uint16_t slot = (i + conn->run_args.num_s2m_rings) *
-           (1 << conn->run_args.log2_ring_size) + j;
+         uint32_t slot = ring_offset + j;
          ring->desc[j].region = 1;
          ring->desc[j].offset =
            conn->regions[1].buffer_offset +