Hi,Ferruh > -----Original Message----- > From: Yigit, Ferruh > Sent: Wednesday, March 8, 2017 7:21 PM > To: Zhao1, Wei <wei.zh...@intel.com>; dev@dpdk.org > Cc: Lu, Wenzhuo <wenzhuo...@intel.com> > Subject: Re: [dpdk-dev] [PATCH 3/3] net/i40e: implement device reset on > port > > 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.
Ok, I will delete useless function declaration in V2 patch. > > > + > > > > /* 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" Ok, I will delete useless function declaration in V2 patch. > > > + } > > + 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 ? This is an illegal operation, so I will may be add an check of whether it is vf port, if not , a return command to avoid illegal operation. > > > + adapter->reset_number = 0; > > + > > + return 0; > > +} > > + > > <...>