Hi Vipin,

> -----Original Message-----
> From: Varghese, Vipin
> Sent: Tuesday, December 4, 2018 12:41 PM
> To: Lu, Wenzhuo <wenzhuo...@intel.com>; dev@dpdk.org
> Cc: Lu, Wenzhuo <wenzhuo...@intel.com>; Yang, Qiming
> <qiming.y...@intel.com>; Li, Xiaoyun <xiaoyun...@intel.com>; Wu, Jingjing
> <jingjing...@intel.com>
> Subject: RE: [dpdk-dev] [PATCH v2 02/20] net/ice: support device
> initialization
> 
> 
> Snipped
> 
> > +   /* Set the info.ingress_table and info.egress_table
> > +    * for UP translate table. Now just set it to 1:1 map by default
> > +    * -- 0b 111 110 101 100 011 010 001 000 == 0xFAC688
> > +    */
> > +   info->ingress_table  = rte_cpu_to_le_32(0x00FAC688);
> > +   info->egress_table   = rte_cpu_to_le_32(0x00FAC688);
> > +   info->outer_up_table = rte_cpu_to_le_32(0x00FAC688);
> 
> Can we use MACRO instead of exact values for ingress, egress and outer_up
> table.
Good suggestion. Will update it in the next version.

> 
> > +   return 0;
> > +}
> > +
> 
> snipped
> 
> > +static int
> > +ice_dev_init(struct rte_eth_dev *dev) {
> > +   struct rte_pci_device *pci_dev;
> > +   struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data-
> > >dev_private);
> > +   struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data-
> >dev_private);
> > +   int ret;
> > +
> > +   dev->dev_ops = &ice_eth_dev_ops;
> > +
> > +   pci_dev = RTE_DEV_TO_PCI(dev->device);
> > +
> > +   rte_eth_copy_pci_info(dev, pci_dev);
> > +   pf->adapter = ICE_DEV_PRIVATE_TO_ADAPTER(dev->data-
> > >dev_private);
> > +   pf->adapter->eth_dev = dev;
> > +   pf->dev_data = dev->data;
> > +   hw->back = pf->adapter;
> > +   hw->hw_addr = (uint8_t *)pci_dev->mem_resource[0].addr;
> > +   hw->vendor_id = pci_dev->id.vendor_id;
> > +   hw->device_id = pci_dev->id.device_id;
> > +   hw->subsystem_vendor_id = pci_dev->id.subsystem_vendor_id;
> > +   hw->subsystem_device_id = pci_dev->id.subsystem_device_id;
> > +   hw->bus.device = pci_dev->addr.devid;
> > +   hw->bus.func = pci_dev->addr.function;
> > +
> > +   ice_init_controlq_parameter(hw);
> > +
> > +   ret = ice_init_hw(hw);
> > +   if (ret) {
> > +           PMD_INIT_LOG(ERR, "Failed to initialize HW");
> > +           return -EINVAL;
> > +   }
> 
> Definition for ice_init_hw in patch 01/20 does not check for primary-
> secondary. Are we allowing secondary to invoke ice_init_hw if it is 
> initialized
> by primary?
It's a patch split issue. We add the check in later patch. Will put it in this 
patch in the new version.

> 
> > +
> > +   PMD_INIT_LOG(INFO, "FW %d.%d.%05d API %d.%d",
> > +                hw->fw_maj_ver, hw->fw_min_ver, hw->fw_build,
> > +                hw->api_maj_ver, hw->api_min_ver);
> > +
> 
> Snipped
> 
> > +
> > +static int
> > +ice_dev_uninit(struct rte_eth_dev *dev) {
> > +   struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data-
> > >dev_private);
> > +   struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data-
> >dev_private);
> > +
> > +   ICE_PROC_SECONDARY_CHECK_RET_0;
> 
> Should not we check if primary is alive and NIC is used or initialized by
> primary then ' ICE_PROC_SECONDARY_CHECK_RET_0'?
I think it's not a critical issue if the process is terminate abnormally 
without uninit.
Comparing with that, I have more concern about this scenario, if the primary 
process exit and uninit the resource, the secondary process is left alone. And 
also to me it looks not a good solution to change every PMD for this feature. I 
don't see many PMD support it. Maybe we'd better not support it now and wait 
for a better whole picture.
The same below.

> 
> > +
> > +   ice_dev_close(dev);
> > +
> > +   dev->dev_ops = NULL;
> > +   dev->rx_pkt_burst = NULL;
> > +   dev->tx_pkt_burst = NULL;
> > +
> > +   rte_free(dev->data->mac_addrs);
> > +   dev->data->mac_addrs = NULL;
> > +
> > +   ice_release_vsi(pf->main_vsi);
> > +   ice_sched_cleanup_all(hw);
> > +   rte_free(hw->port_info);
> > +   ice_shutdown_all_ctrlq(hw);
> > +
> > +   return 0;
> > +}
> > +
> 
> snipped
> 
> > +static void
> > +ice_dev_close(struct rte_eth_dev *dev) {
> > +   struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data-
> >dev_private);
> > +   struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data-
> > >dev_private);
> > +
> > +   ICE_PROC_SECONDARY_CHECK_NO_ERR;
> > +
> 
> I am just wondering in a multi process (primary-secondary) if primary is
> killed or exited, then if we try to stop the secondary due to this check the 
> vsi,
> pool and shutdown is not called. Should not we check if primary is still 
> alive,
> if yes then ICE_PROC_SECONDARY_CHECK_NO_ERR?
> 
> > +   ice_res_pool_destroy(&pf->msix_pool);
> > +   ice_release_vsi(pf->main_vsi);
> > +
> > +   ice_shutdown_all_ctrlq(hw);
> > +}
> 
> snipped

Reply via email to