net/memif: do not update local copy of tail in Tx
authorHonnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Mon, 28 Sep 2020 19:03:27 +0000 (14:03 -0500)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 16 Oct 2020 17:18:47 +0000 (19:18 +0200)
In the case of S2M queues, the receiver synchronizes with the sender
(i.e. informs of the packets it has received) using ring->tail.
Hence, the sender does not need to update last_tail.

In the case of M2S queues, the receiver uses last_tail to
keep track of the descriptors it has received. The
sender is not required to update the last_tail. Updating
the last_tail makes it a shared variable between the
transmitter and receiver affecting the performance.

Fixes: 09c7e63a71f9 ("net/memif: introduce memory interface PMD")
Cc: stable@dpdk.org
Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Phil Yang <phil.yang@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
Reviewed-by: Jakub Grajciar <jgrajcia@cisco.com>
drivers/net/memif/rte_eth_memif.c

index ff8a580..d749b5b 100644 (file)
@@ -580,12 +580,10 @@ eth_memif_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
        ring_size = 1 << mq->log2_ring_size;
        mask = ring_size - 1;
 
-       n_free = __atomic_load_n(&ring->tail, __ATOMIC_ACQUIRE) - mq->last_tail;
-       mq->last_tail += n_free;
-
        if (type == MEMIF_RING_S2M) {
                slot = __atomic_load_n(&ring->head, __ATOMIC_ACQUIRE);
-               n_free = ring_size - slot + mq->last_tail;
+               n_free = ring_size - slot +
+                               __atomic_load_n(&ring->tail, __ATOMIC_ACQUIRE);
        } else {
                slot = __atomic_load_n(&ring->tail, __ATOMIC_ACQUIRE);
                n_free = __atomic_load_n(&ring->head, __ATOMIC_ACQUIRE) - slot;