From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Lu, Wenzhuo" Subject: Re: [PATCH v2 02/20] net/ice: support device initialization Date: Thu, 6 Dec 2018 05:01:14 +0000 Message-ID: <6A0DE07E22DDAD4C9103DF62FEBC09093FE1167A@shsmsx102.ccr.corp.intel.com> References: <1542956179-80951-1-git-send-email-wenzhuo.lu@intel.com> <1543820821-108122-1-git-send-email-wenzhuo.lu@intel.com> <1543820821-108122-3-git-send-email-wenzhuo.lu@intel.com> <4C9E0AB70F954A408CC4ADDBF0F8FA7D4D2C452C@BGSMSX101.gar.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "Yang, Qiming" , "Li, Xiaoyun" , "Wu, Jingjing" To: "Varghese, Vipin" , "dev@dpdk.org" Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 289894C90 for ; Thu, 6 Dec 2018 06:01:21 +0100 (CET) In-Reply-To: <4C9E0AB70F954A408CC4ADDBF0F8FA7D4D2C452C@BGSMSX101.gar.corp.intel.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Vipin, > -----Original Message----- > From: Varghese, Vipin > Sent: Tuesday, December 4, 2018 12:41 PM > To: Lu, Wenzhuo ; dev@dpdk.org > Cc: Lu, Wenzhuo ; Yang, Qiming > ; Li, Xiaoyun ; Wu, Jingjing > > Subject: RE: [dpdk-dev] [PATCH v2 02/20] net/ice: support device > initialization >=20 >=20 > Snipped >=20 > > + /* 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 =3D=3D 0xFAC688 > > + */ > > + info->ingress_table =3D rte_cpu_to_le_32(0x00FAC688); > > + info->egress_table =3D rte_cpu_to_le_32(0x00FAC688); > > + info->outer_up_table =3D rte_cpu_to_le_32(0x00FAC688); >=20 > Can we use MACRO instead of exact values for ingress, egress and outer_up > table. Good suggestion. Will update it in the next version. >=20 > > + return 0; > > +} > > + >=20 > snipped >=20 > > +static int > > +ice_dev_init(struct rte_eth_dev *dev) { > > + struct rte_pci_device *pci_dev; > > + struct ice_hw *hw =3D ICE_DEV_PRIVATE_TO_HW(dev->data- > > >dev_private); > > + struct ice_pf *pf =3D ICE_DEV_PRIVATE_TO_PF(dev->data- > >dev_private); > > + int ret; > > + > > + dev->dev_ops =3D &ice_eth_dev_ops; > > + > > + pci_dev =3D RTE_DEV_TO_PCI(dev->device); > > + > > + rte_eth_copy_pci_info(dev, pci_dev); > > + pf->adapter =3D ICE_DEV_PRIVATE_TO_ADAPTER(dev->data- > > >dev_private); > > + pf->adapter->eth_dev =3D dev; > > + pf->dev_data =3D dev->data; > > + hw->back =3D pf->adapter; > > + hw->hw_addr =3D (uint8_t *)pci_dev->mem_resource[0].addr; > > + hw->vendor_id =3D pci_dev->id.vendor_id; > > + hw->device_id =3D pci_dev->id.device_id; > > + hw->subsystem_vendor_id =3D pci_dev->id.subsystem_vendor_id; > > + hw->subsystem_device_id =3D pci_dev->id.subsystem_device_id; > > + hw->bus.device =3D pci_dev->addr.devid; > > + hw->bus.func =3D pci_dev->addr.function; > > + > > + ice_init_controlq_parameter(hw); > > + > > + ret =3D ice_init_hw(hw); > > + if (ret) { > > + PMD_INIT_LOG(ERR, "Failed to initialize HW"); > > + return -EINVAL; > > + } >=20 > 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 initi= alized > by primary? It's a patch split issue. We add the check in later patch. Will put it in t= his patch in the new version. >=20 > > + > > + 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); > > + >=20 > Snipped >=20 > > + > > +static int > > +ice_dev_uninit(struct rte_eth_dev *dev) { > > + struct ice_hw *hw =3D ICE_DEV_PRIVATE_TO_HW(dev->data- > > >dev_private); > > + struct ice_pf *pf =3D ICE_DEV_PRIVATE_TO_PF(dev->data- > >dev_private); > > + > > + ICE_PROC_SECONDARY_CHECK_RET_0; >=20 > 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 wi= thout uninit. Comparing with that, I have more concern about this scenario, if the primar= y 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. >=20 > > + > > + ice_dev_close(dev); > > + > > + dev->dev_ops =3D NULL; > > + dev->rx_pkt_burst =3D NULL; > > + dev->tx_pkt_burst =3D NULL; > > + > > + rte_free(dev->data->mac_addrs); > > + dev->data->mac_addrs =3D NULL; > > + > > + ice_release_vsi(pf->main_vsi); > > + ice_sched_cleanup_all(hw); > > + rte_free(hw->port_info); > > + ice_shutdown_all_ctrlq(hw); > > + > > + return 0; > > +} > > + >=20 > snipped >=20 > > +static void > > +ice_dev_close(struct rte_eth_dev *dev) { > > + struct ice_pf *pf =3D ICE_DEV_PRIVATE_TO_PF(dev->data- > >dev_private); > > + struct ice_hw *hw =3D ICE_DEV_PRIVATE_TO_HW(dev->data- > > >dev_private); > > + > > + ICE_PROC_SECONDARY_CHECK_NO_ERR; > > + >=20 > 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? >=20 > > + ice_res_pool_destroy(&pf->msix_pool); > > + ice_release_vsi(pf->main_vsi); > > + > > + ice_shutdown_all_ctrlq(hw); > > +} >=20 > snipped