return -E_RTE_SECONDARY;
priv_lock(priv);
- if (priv->started) {
- priv_unlock(priv);
- return 0;
- }
/* Update Rx/Tx callback. */
priv_dev_select_tx_function(priv, dev);
priv_dev_select_rx_function(priv, dev);
err = priv_create_hash_rxqs(priv);
if (!err)
err = priv_rehash_flows(priv);
- if (!err)
- priv->started = 1;
else {
ERROR("%p: an error occurred while configuring hash RX queues:"
" %s",
(void *)priv, strerror(err));
goto error;
}
- if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_NONE)
- priv_fdir_enable(priv);
err = priv_flow_start(priv);
if (err) {
- priv->started = 0;
ERROR("%p: an error occurred while configuring flows:"
" %s",
(void *)priv, strerror(err));
return;
priv_lock(priv);
- if (!priv->started) {
- priv_unlock(priv);
- return;
- }
DEBUG("%p: cleaning up and destroying hash RX queues", (void *)dev);
priv_special_flow_disable_all(priv);
priv_mac_addrs_disable(priv);
priv_destroy_hash_rxqs(priv);
- priv_fdir_disable(priv);
priv_flow_stop(priv);
priv_rx_intr_vec_disable(priv);
priv_dev_interrupt_handler_uninstall(priv, dev);
- priv->started = 0;
priv_unlock(priv);
}