X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx5%2Fmlx5_trigger.c;h=ab6937ab10d108f31ef007f40fa4789dd0826cfa;hb=fde4341b665786632c6e4375ac25af65a3a5eebb;hp=f66b6eefcb0fa499b29c9bb61a019a913dc33ad1;hpb=63bd16292c3a519029a1b451e734b8f4489c2fd3;p=dpdk.git diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index f66b6eefcb..ab6937ab10 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -106,9 +106,12 @@ mlx5_rxq_start(struct rte_eth_dev *dev) unsigned int i; int ret = 0; enum mlx5_rxq_obj_type obj_type = MLX5_RXQ_OBJ_TYPE_IBV; + struct mlx5_rxq_data *rxq = NULL; for (i = 0; i < priv->rxqs_n; ++i) { - if ((*priv->rxqs)[i]->lro) { + rxq = (*priv->rxqs)[i]; + + if (rxq && rxq->lro) { obj_type = MLX5_RXQ_OBJ_TYPE_DEVX_RQ; break; } @@ -402,6 +405,24 @@ mlx5_traffic_enable(struct rte_eth_dev *dev) unsigned int j; int ret; + /* + * Hairpin txq default flow should be created no matter if it is + * isolation mode. Or else all the packets to be sent will be sent + * out directly without the TX flow actions, e.g. encapsulation. + */ + for (i = 0; i != priv->txqs_n; ++i) { + struct mlx5_txq_ctrl *txq_ctrl = mlx5_txq_get(dev, i); + if (!txq_ctrl) + continue; + if (txq_ctrl->type == MLX5_TXQ_TYPE_HAIRPIN) { + ret = mlx5_ctrl_flow_source_queue(dev, i); + if (ret) { + mlx5_txq_release(dev, i); + goto error; + } + } + mlx5_txq_release(dev, i); + } if (priv->config.dv_esw_en && !priv->config.vf) if (!mlx5_flow_create_esw_table_zero_flow(dev)) goto error;