avf: put sentinel at correct place
The previous fix was adding the sentinel before refilling rx,
which gave the NIC time to overwrite it with a new descriptor.
Ticket: VPP-2087
Type: fix
Fixes: 8b4d474abd
Change-Id: I32bde4a763a62fb66c5c3871d9f10af6066e2d47
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
This commit is contained in:
@@ -125,6 +125,9 @@ avf_rxq_refill (vlib_main_t * vm, vlib_node_runtime_t * node, avf_rxq_t * rxq,
|
||||
n_alloc -= 8;
|
||||
}
|
||||
|
||||
/* RXQ can be smaller than 256 packets, especially if jumbo. */
|
||||
rxq->descs[slot].qword[1] = 0;
|
||||
|
||||
avf_tail_write (rxq->qrx_tail, slot);
|
||||
}
|
||||
|
||||
@@ -423,9 +426,6 @@ no_more_desc:
|
||||
rxq->next = next;
|
||||
rxq->n_enqueued -= n_rx_packets + n_tail_desc;
|
||||
|
||||
/* avoid eating our own tail */
|
||||
rxq->descs[(next + rxq->n_enqueued) & mask].qword[1] = 0;
|
||||
|
||||
#if defined(CLIB_HAVE_VEC256) || defined(CLIB_HAVE_VEC128)
|
||||
or_qw1 |= or_q1x4[0] | or_q1x4[1] | or_q1x4[2] | or_q1x4[3];
|
||||
#endif
|
||||
|
||||
@@ -111,6 +111,9 @@ iavf_rxq_refill (vlib_main_t *vm, vlib_node_runtime_t *node,
|
||||
n_alloc -= 8;
|
||||
}
|
||||
|
||||
/* RXQ can be smaller than 256 packets, especially if jumbo. */
|
||||
arq->descs[slot].qword[1] = 0;
|
||||
|
||||
__atomic_store_n (arq->qrx_tail, slot, __ATOMIC_RELEASE);
|
||||
}
|
||||
|
||||
@@ -399,9 +402,6 @@ no_more_desc:
|
||||
arq->next = next;
|
||||
arq->n_enqueued -= n_rx_packets + n_tail_desc;
|
||||
|
||||
/* avoid eating our own tail */
|
||||
arq->descs[(next + arq->n_enqueued) & mask].qword[1] = 0;
|
||||
|
||||
#if defined(CLIB_HAVE_VEC256) || defined(CLIB_HAVE_VEC128)
|
||||
or_qw1 |= or_q1x4[0] | or_q1x4[1] | or_q1x4[2] | or_q1x4[3];
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user