From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id E3EA87EC7 for ; Tue, 3 Jul 2018 11:35:27 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Jul 2018 02:35:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,302,1526367600"; d="scan'208";a="52268898" Received: from jguo15x-mobl3.ccr.corp.intel.com (HELO [10.67.68.86]) ([10.67.68.86]) by fmsmga008.fm.intel.com with ESMTP; 03 Jul 2018 02:35:23 -0700 To: Matan Azrad , "stephen@networkplumber.org" , "bruce.richardson@intel.com" , "ferruh.yigit@intel.com" , "konstantin.ananyev@intel.com" , "gaetan.rivet@6wind.com" , "jingjing.wu@intel.com" , Thomas Monjalon , Mordechay Haimovsky , "harry.van.haaren@intel.com" , "qi.z.zhang@intel.com" , "shaopeng.he@intel.com" , "bernard.iremonger@intel.com" References: <1498711073-42917-1-git-send-email-jia.guo@intel.com> <1530268248-7328-1-git-send-email-jia.guo@intel.com> <1530268248-7328-9-git-send-email-jia.guo@intel.com> Cc: "jblunck@infradead.org" , "shreyansh.jain@nxp.com" , "dev@dpdk.org" , "helin.zhang@intel.com" From: "Guo, Jia" Message-ID: <07fb8f04-adee-fd0e-05b5-8d1bcca1338d@intel.com> Date: Tue, 3 Jul 2018 17:35:20 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [PATCH V4 8/9] app/testpmd: show example to handle hot unplug 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: Tue, 03 Jul 2018 09:35:28 -0000 mantan, On 7/1/2018 3:46 PM, Matan Azrad wrote: > Hi Jeff > > A good advance, thank you, but as I said in previous version, this patch inserts a bug and the next one fixes it. > Patch 9 should be before patch 8 while this patch just add 1 more option for EAL hotplug. i agree that patch 9 before patch 8 could be better. thank. > Please see 1 more comment below. > > From: Jeff Guo >> Use testpmd for example, to show how an application smoothly handle failure >> when device being hot unplug. If app have enabled the device event monitor >> and register the hot plug event’s callback before running, once app detect the >> removal event, the callback would be called. It will first stop the packet >> forwarding, then stop the port, close the port, and finally detach the port to >> remove the device out from the device lists. >> >> Signed-off-by: Jeff Guo >> --- >> v4->v3: >> remove some unused code >> --- >> app/test-pmd/testpmd.c | 13 +++++++++---- >> 1 file changed, 9 insertions(+), 4 deletions(-) >> >> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index >> 24c1998..42ed196 100644 >> --- a/app/test-pmd/testpmd.c >> +++ b/app/test-pmd/testpmd.c >> @@ -2196,6 +2196,9 @@ static void >> eth_dev_event_callback(char *device_name, enum rte_dev_event_type type, >> __rte_unused void *arg) >> { >> + uint16_t port_id; >> + int ret; >> + >> if (type >= RTE_DEV_EVENT_MAX) { >> fprintf(stderr, "%s called upon invalid event %d\n", >> __func__, type); >> @@ -2206,9 +2209,12 @@ eth_dev_event_callback(char *device_name, enum >> rte_dev_event_type type, >> case RTE_DEV_EVENT_REMOVE: >> RTE_LOG(ERR, EAL, "The device: %s has been removed!\n", >> device_name); >> - /* TODO: After finish failure handle, begin to stop >> - * packet forward, stop port, close port, detach port. >> - */ >> + ret = rte_eth_dev_get_port_by_name(device_name, &port_id); > As you probably know, 1 rte_device may be associated to more than one ethdev ports, so the ethdev port name can be different from rte_device name. > Looks like we need a new ethdev API to get all the ports associated to one rte_device. agree, seems that the the old ethdev API have some issue when got all port by device name. we could check with ethdev maintainer and fix it by specific ethdev patch later. >> + if (ret) { >> + printf("can not get port by device %s!\n", >> device_name); >> + return; >> + } >> + rmv_event_callback((void *)(intptr_t)port_id); >> break; >> case RTE_DEV_EVENT_ADD: >> RTE_LOG(ERR, EAL, "The device: %s has been added!\n", @@ - >> 2736,7 +2742,6 @@ main(int argc, char** argv) >> return -1; >> } >> eth_dev_event_callback_register(); >> - >> } >> >> if (start_port(RTE_PORT_ALL) != 0) >> -- >> 2.7.4