examples/ip_frag: fix use of ethdev internal device array
[dpdk.git] / drivers / net / mlx5 / mlx5_rxtx_vec.c
index 1453f4f..073044f 100644 (file)
@@ -197,7 +197,7 @@ rxq_handle_pending_error(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts,
        for (i = 0; i < pkts_n; ++i) {
                struct rte_mbuf *pkt = pkts[i];
 
-               if (pkt->packet_type == RTE_PTYPE_ALL_MASK) {
+               if (pkt->packet_type == RTE_PTYPE_ALL_MASK || rxq->err_state) {
 #ifdef MLX5_PMD_SOFT_COUNTERS
                        err_bytes += PKT_LEN(pkt);
 #endif
@@ -212,6 +212,7 @@ rxq_handle_pending_error(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts,
        rxq->stats.ipackets -= (pkts_n - n);
        rxq->stats.ibytes -= err_bytes;
 #endif
+       mlx5_rx_err_handle(rxq, 1);
        return n;
 }
 
@@ -236,7 +237,7 @@ mlx5_rx_burst_vec(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
        uint64_t err = 0;
 
        nb_rx = rxq_burst_v(rxq, pkts, pkts_n, &err);
-       if (unlikely(err))
+       if (unlikely(err | rxq->err_state))
                nb_rx = rxq_handle_pending_error(rxq, pkts, nb_rx);
        return nb_rx;
 }
@@ -273,11 +274,11 @@ mlx5_check_raw_vec_tx_support(struct rte_eth_dev *dev)
 int __attribute__((cold))
 mlx5_check_vec_tx_support(struct rte_eth_dev *dev)
 {
-       struct priv *priv = dev->data->dev_private;
+       struct mlx5_priv *priv = dev->data->dev_private;
        uint64_t offloads = dev->data->dev_conf.txmode.offloads;
 
        if (!priv->config.tx_vec_en ||
-           priv->txqs_n > MLX5_VPMD_MIN_TXQS ||
+           priv->txqs_n > (unsigned int)priv->config.txqs_vec ||
            priv->config.mps != MLX5_MPW_ENHANCED ||
            offloads & ~MLX5_VEC_TX_OFFLOAD_CAP)
                return -ENOTSUP;
@@ -318,7 +319,7 @@ mlx5_rxq_check_vec_support(struct mlx5_rxq_data *rxq)
 int __attribute__((cold))
 mlx5_check_vec_rx_support(struct rte_eth_dev *dev)
 {
-       struct priv *priv = dev->data->dev_private;
+       struct mlx5_priv *priv = dev->data->dev_private;
        uint16_t i;
 
        if (!priv->config.rx_vec_en)