};
static int
-iavf_tm_ops_get(struct rte_eth_dev *dev __rte_unused,
+iavf_tm_ops_get(struct rte_eth_dev *dev,
void *arg)
{
+ struct iavf_adapter *adapter =
+ IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
+
+ if (adapter->closed)
+ return -EIO;
+
if (!arg)
return -EINVAL;
return -EINVAL;
}
+ if (adapter->closed)
+ return -EIO;
+
/* flush previous addresses */
err = iavf_add_del_mc_addr_list(adapter, vf->mc_addrs, vf->mc_addrs_num,
false);
dev->data->nb_tx_queues);
int ret;
+ if (ad->closed)
+ return -EIO;
+
ad->rx_bulk_alloc_allowed = true;
/* Initialize to TRUE. If any of Rx queues doesn't meet the
* vector Rx/Tx preconditions, it will be reset.
PMD_INIT_FUNC_TRACE();
+ if (adapter->closed)
+ return -1;
+
adapter->stopped = 0;
vf->max_pkt_len = dev->data->mtu + IAVF_ETH_OVERHEAD;
PMD_INIT_FUNC_TRACE();
+ if (adapter->closed)
+ return -1;
+
if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) &&
dev->data->dev_conf.intr_conf.rxq != 0)
rte_intr_disable(intr_handle);
IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
struct iavf_info *vf = &adapter->vf;
+ if (adapter->closed)
+ return -EIO;
+
dev_info->max_rx_queues = IAVF_MAX_NUM_QUEUES_LV;
dev_info->max_tx_queues = IAVF_MAX_NUM_QUEUES_LV;
dev_info->min_rx_bufsize = IAVF_BUF_SIZE_MIN;
struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter);
int err;
+ if (adapter->closed)
+ return -EIO;
+
if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN_V2) {
err = iavf_add_del_vlan_v2(adapter, vlan_id, on);
if (err)
struct rte_eth_conf *dev_conf = &dev->data->dev_conf;
int err;
+ if (adapter->closed)
+ return -EIO;
+
if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN_V2)
return iavf_dev_vlan_offload_set_v2(dev, mask);
uint16_t i, idx, shift;
int ret;
+ if (adapter->closed)
+ return -EIO;
+
if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF))
return -ENOTSUP;
struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter);
uint16_t i, idx, shift;
+ if (adapter->closed)
+ return -EIO;
+
if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF))
return -ENOTSUP;
adapter->dev_data->dev_conf.rx_adv_conf.rss_conf = *rss_conf;
+ if (adapter->closed)
+ return -EIO;
+
if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF))
return -ENOTSUP;
IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter);
+ if (adapter->closed)
+ return -EIO;
+
if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF))
return -ENOTSUP;
struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter);
uint16_t msix_intr;
+ if (adapter->closed)
+ return -EIO;
+
msix_intr = rte_intr_vec_list_index_get(pci_dev->intr_handle,
queue_id);
if (msix_intr == IAVF_MISC_VEC_ID) {
iavf_dev_flow_ops_get(struct rte_eth_dev *dev,
const struct rte_flow_ops **ops)
{
- if (!dev)
- return -EINVAL;
+ struct iavf_adapter *adapter =
+ IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
+
+ if (adapter->closed)
+ return -EIO;
*ops = &iavf_flow_ops;
return 0;
/* Start device watchdog */
iavf_dev_watchdog_enable(adapter);
-
+ adapter->closed = false;
return 0;
if (rte_eal_process_type() != RTE_PROC_PRIMARY)
return 0;
+ if (adapter->closed)
+ return 0;
+
ret = iavf_dev_stop(dev);
+ adapter->closed = true;
iavf_flow_flush(dev, NULL);
iavf_flow_uninit(adapter);
struct virtchnl_pf_event *pf_msg =
(struct virtchnl_pf_event *)msg;
+ if (adapter->closed) {
+ PMD_DRV_LOG(DEBUG, "Port closed");
+ return;
+ }
+
if (msglen < sizeof(struct virtchnl_pf_event)) {
PMD_DRV_LOG(DEBUG, "Error event");
return;
struct iavf_cmd_info args;
int err;
+ if (adapter->closed)
+ return -EIO;
+
memset(&queue_select, 0, sizeof(queue_select));
queue_select.vsi_id = vf->vsi_res->vsi_id;
if (rx)
struct iavf_cmd_info args;
int err;
+ if (adapter->closed)
+ return -EIO;
+
memset(&q_stats, 0, sizeof(q_stats));
q_stats.vsi_id = vf->vsi_res->vsi_id;
args.ops = VIRTCHNL_OP_GET_STATS;
struct iavf_cmd_info args;
int err;
+ if (adapter->closed)
+ return -EIO;
+
promisc.flags = 0;
promisc.vsi_id = vf->vsi_res->vsi_id;
struct iavf_cmd_info args;
int err;
+ if (adapter->closed)
+ return -EIO;
+
list = (struct virtchnl_ether_addr_list *)cmd_buffer;
list->vsi_id = vf->vsi_res->vsi_id;
list->num_elements = 1;