On 3/3/2017 4:56 AM, Wei Zhao wrote: > Implement the device reset function on vf port. > This restart function will detach device then > attach device, reconfigure dev, re-setup the Rx/Tx queues. > > Signed-off-by: Wei Zhao <wei.zh...@intel.com> > Signed-off-by: Wenzhuo Lu <wenzhuo...@intel.com>
<...> > +static int i40evf_dev_uninit(struct rte_eth_dev *eth_dev); > +static int i40evf_dev_init(struct rte_eth_dev *eth_dev); > +static void i40evf_dev_close(struct rte_eth_dev *dev); > +static int i40evf_dev_start(struct rte_eth_dev *dev); > +static int i40evf_dev_configure(struct rte_eth_dev *dev); > +static int i40evf_handle_vf_reset(struct rte_eth_dev *dev); Some of them already seems declared, please avoid unnecessary or duplicate declarations. > + > > /* Default hash key buffer for RSS */ > static uint32_t rss_key_default[I40E_VFQF_HKEY_MAX_INDEX + 1]; > @@ -230,6 +237,7 @@ static const struct eth_dev_ops i40evf_eth_dev_ops = { > .rss_hash_conf_get = i40evf_dev_rss_hash_conf_get, > .mtu_set = i40evf_dev_mtu_set, > .mac_addr_set = i40evf_set_default_mac_addr, > + .dev_reset = i40evf_handle_vf_reset, > }; > > /* > @@ -885,10 +893,13 @@ i40evf_add_mac_addr(struct rte_eth_dev *dev, > args.out_buffer = vf->aq_resp; > args.out_size = I40E_AQ_BUF_SZ; > err = i40evf_execute_vf_cmd(dev, &args); > - if (err) > + if (err) { > PMD_DRV_LOG(ERR, "fail to execute command " > "OP_ADD_ETHER_ADDRESS"); > - > + goto DONE; Please prefer lowercase labels, also this is error exit, I would prefer other name than "done" > + } > + vf->vsi.mac_num++; > +DONE: > return; > } > <...> > +static int > +i40evf_handle_vf_reset(struct rte_eth_dev *dev) > +{ > + struct i40e_adapter *adapter = > + I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); > + > + if (!dev->data->dev_started) > + return 0; > + > + adapter->reset_number = 1; > + i40e_vf_reset_dev(dev); What happens if user called this function for PF ? > + adapter->reset_number = 0; > + > + return 0; > +} > + <...>