summaryrefslogtreecommitdiff
path: root/drivers/net/mlx5/mlx5_trigger.c
diff options
context:
space:
mode:
authorYongseok Koh <yskoh@mellanox.com>2018-01-17 09:44:13 -0800
committerFerruh Yigit <ferruh.yigit@intel.com>2018-01-21 15:51:52 +0100
commitc7bf62255edf718f49f3c5279463e23b6a2199ac (patch)
tree26660e9669aa8cd39b9c60b02063a50833061a97 /drivers/net/mlx5/mlx5_trigger.c
parenta3688046995f88c518fa27c45b39ae389260b18d (diff)
downloaddpdk-c7bf62255edf718f49f3c5279463e23b6a2199ac.zip
dpdk-c7bf62255edf718f49f3c5279463e23b6a2199ac.tar.gz
dpdk-c7bf62255edf718f49f3c5279463e23b6a2199ac.tar.xz
net/mlx5: fix handling link status event
Even though link of a port gets down, device still can receive traffic. That is the reason why mlx5_set_link_up/down() switches rx/tx_pkt_burst(). However, if link gets down by an external command (e.g. ifconfig), it isn't effective. It is better to change burst functions when link status change is detected. Fixes: 62072098b54e ("mlx5: support setting link up or down") Cc: stable@dpdk.org Signed-off-by: Yongseok Koh <yskoh@mellanox.com> Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Diffstat (limited to 'drivers/net/mlx5/mlx5_trigger.c')
-rw-r--r--drivers/net/mlx5/mlx5_trigger.c23
1 files changed, 4 insertions, 19 deletions
diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c
index 1a20967..6f5c799 100644
--- a/drivers/net/mlx5/mlx5_trigger.c
+++ b/drivers/net/mlx5/mlx5_trigger.c
@@ -151,38 +151,23 @@ mlx5_dev_start(struct rte_eth_dev *dev)
(void *)dev, strerror(err));
goto error;
}
- /* Update send callback. */
- dev->tx_pkt_burst = priv_select_tx_function(priv, dev);
err = priv_rxq_start(priv);
if (err) {
ERROR("%p: RXQ allocation failed: %s",
(void *)dev, strerror(err));
goto error;
}
- /* Update receive callback. */
- dev->rx_pkt_burst = priv_select_rx_function(priv, dev);
- err = priv_dev_traffic_enable(priv, dev);
- if (err) {
- ERROR("%p: an error occurred while configuring control flows:"
- " %s",
- (void *)priv, strerror(err));
- goto error;
- }
- err = priv_flow_start(priv, &priv->flows);
- if (err) {
- ERROR("%p: an error occurred while configuring flows:"
- " %s",
- (void *)priv, strerror(err));
- goto error;
- }
err = priv_rx_intr_vec_enable(priv);
if (err) {
ERROR("%p: RX interrupt vector creation failed",
(void *)priv);
goto error;
}
- priv_dev_interrupt_handler_install(priv, dev);
priv_xstats_init(priv);
+ /* Update link status and Tx/Rx callbacks for the first time. */
+ memset(&dev->data->dev_link, 0, sizeof(struct rte_eth_link));
+ priv_link_update(priv, 1);
+ priv_dev_interrupt_handler_install(priv, dev);
priv_unlock(priv);
return 0;
error: