[dpdk-dev,1/2] ixgbe: vector rx rearm after queue reset
Commit Message
zero values in ixgbe_reset_rx_queue() used by vector receive so that
rearming the rx queue happens at the right time. Not doing so can in
some cases result in the software inadvertently setting the card's rx
tail pointer equal to the head pointer, which indicates that there are
no descriptors available. This causes receive to stop indefinitely
on that queue.
Fixes: 01fa1d6215fa ("ixgbe: unify Rx setup")
Signed-off-by: Eric Kinzie <ehkinzie@gmail.com>
---
drivers/net/ixgbe/ixgbe_rxtx.c | 4 ++++
1 file changed, 4 insertions(+)
Comments
2015-06-25 11:25, Eric Kinzie:
> zero values in ixgbe_reset_rx_queue() used by vector receive so that
> rearming the rx queue happens at the right time. Not doing so can in
> some cases result in the software inadvertently setting the card's rx
> tail pointer equal to the head pointer, which indicates that there are
> no descriptors available. This causes receive to stop indefinitely
> on that queue.
>
> Fixes: 01fa1d6215fa ("ixgbe: unify Rx setup")
>
> Signed-off-by: Eric Kinzie <ehkinzie@gmail.com>
[...]
> --- a/drivers/net/ixgbe/ixgbe_rxtx.c
> +++ b/drivers/net/ixgbe/ixgbe_rxtx.c
> @@ -2261,6 +2261,10 @@ ixgbe_reset_rx_queue(struct ixgbe_adapter *adapter, struct ixgbe_rx_queue *rxq)
> rxq->nb_rx_hold = 0;
> rxq->pkt_first_seg = NULL;
> rxq->pkt_last_seg = NULL;
> +#ifdef RTE_IXGBE_INC_VECTOR
> + rxq->rxrearm_nb = 0;
> + rxq->rxrearm_start = 0;
> +#endif
A similar patch has been applied:
http://dpdk.org/browse/dpdk/commit/?id=48e967695ba78
Thanks
@@ -2261,6 +2261,10 @@ ixgbe_reset_rx_queue(struct ixgbe_adapter *adapter, struct ixgbe_rx_queue *rxq)
rxq->nb_rx_hold = 0;
rxq->pkt_first_seg = NULL;
rxq->pkt_last_seg = NULL;
+#ifdef RTE_IXGBE_INC_VECTOR
+ rxq->rxrearm_nb = 0;
+ rxq->rxrearm_start = 0;
+#endif
}
int