From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wu, Jingjing" Subject: Re: [PATCH v2 2/2] net/i40e: add hot plug monitor in i40e Date: Thu, 29 Jun 2017 01:41:36 +0000 Message-ID: <9BB6961774997848B5B42BEC655768F810DB57FE@SHSMSX103.ccr.corp.intel.com> References: <1495986280-26207-1-git-send-email-jia.guo@intel.com> <1498648044-57541-1-git-send-email-jia.guo@intel.com> <1498648044-57541-2-git-send-email-jia.guo@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "dev@dpdk.org" To: "Guo, Jia" , "Zhang, Helin" Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 08CC82C8 for ; Thu, 29 Jun 2017 03:41:40 +0200 (CEST) In-Reply-To: <1498648044-57541-2-git-send-email-jia.guo@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" > -----Original Message----- > From: Guo, Jia > Sent: Wednesday, June 28, 2017 7:07 PM > To: Zhang, Helin ; Wu, Jingjing > > Cc: dev@dpdk.org; Guo, Jia > Subject: [PATCH v2 2/2] net/i40e: add hot plug monitor in i40e >=20 > From: "Guo, Jia" >=20 > This patch enable the hot plug feature in i40e, by monitoring the hot plu= g > uevent of the device. When remove event got, call the app callback functi= on to > handle the detach process. >=20 > Signed-off-by: Guo, Jia > --- > v2->v1: remove unused part for current stage. > --- > drivers/net/i40e/i40e_ethdev.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) >=20 > diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethde= v.c > index 4ee1113..122187e 100644 > --- a/drivers/net/i40e/i40e_ethdev.c > +++ b/drivers/net/i40e/i40e_ethdev.c > @@ -1283,6 +1283,7 @@ static inline void i40e_GLQF_reg_init(struct i40e_h= w > *hw) >=20 > /* enable uio intr after callback register */ > rte_intr_enable(intr_handle); > + > /* > * Add an ethertype filter to drop all flow control frames transmitted > * from VSIs. By doing so, we stop VF from sending out PAUSE or PFC > @@ -5832,11 +5833,28 @@ struct i40e_vsi * { > struct rte_eth_dev *dev =3D (struct rte_eth_dev *)param; > struct i40e_hw *hw =3D I40E_DEV_PRIVATE_TO_HW(dev->data- > >dev_private); > + struct rte_uevent event; > uint32_t icr0; > + struct rte_pci_device *pci_dev; > + struct rte_intr_handle *intr_handle; > + > + pci_dev =3D RTE_ETH_DEV_TO_PCI(dev); > + intr_handle =3D &pci_dev->intr_handle; >=20 > /* Disable interrupt */ > i40e_pf_disable_irq0(hw); >=20 > + /* check device uevent */ > + if (rte_uevent_get(intr_handle->uevent_fd, &event) > 0) { You declare the rte_uevnet_get like + * @return + * - On success, zero. + * - On failure, a negative value. + */ +int +rte_uevent_get(int fd, struct rte_uevent *uevent); But here you check if it > 0? > + if (event.subsystem =3D=3D RTE_UEVENT_SUBSYSTEM_UIO) { > + if (event.action =3D=3D RTE_UEVENT_REMOVE) { > + _rte_eth_dev_callback_process(dev, > + RTE_ETH_EVENT_INTR_RMV, NULL); > + } > + } > + goto done; I think when the remove happen, no need to goto done, you can just return. > + } > + > /* read out interrupt causes */ > icr0 =3D I40E_READ_REG(hw, I40E_PFINT_ICR0); >=20 > -- > 1.8.3.1