From mboxrd@z Thu Jan 1 00:00:00 1970 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) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Dec 2018 21:01:20 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,321,1539673200"; d="scan'208";a="299754277" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga006.fm.intel.com with ESMTP; 05 Dec 2018 21:01:20 -0800 Received: from FMSMSX109.amr.corp.intel.com (10.18.116.9) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 5 Dec 2018 21:01:17 -0800 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by fmsmsx109.amr.corp.intel.com (10.18.116.9) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 5 Dec 2018 21:01:16 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.182]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.203]) with mapi id 14.03.0415.000; Thu, 6 Dec 2018 13:01:15 +0800 From: "Lu, Wenzhuo" To: "Varghese, Vipin" , "dev@dpdk.org" CC: "Yang, Qiming" , "Li, Xiaoyun" , "Wu, Jingjing" Thread-Topic: [dpdk-dev] [PATCH v2 02/20] net/ice: support device initialization Thread-Index: AQHUitYuR+yAWQJ4GEyiD5F/jqN8sKVte0+AgAOsIeA= 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> In-Reply-To: <4C9E0AB70F954A408CC4ADDBF0F8FA7D4D2C452C@BGSMSX101.gar.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 02/20] net/ice: support device initialization X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Dec 2018 05:01:21 -0000 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