From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id CF2171B05D for ; Mon, 9 Jul 2018 12:14:33 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Jul 2018 03:14:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,330,1526367600"; d="scan'208";a="71165279" Received: from jguo15x-mobl3.ccr.corp.intel.com (HELO [10.67.68.84]) ([10.67.68.84]) by orsmga001.jf.intel.com with ESMTP; 09 Jul 2018 03:14:27 -0700 To: Matan Azrad , "Lu, Wenzhuo" , "stephen@networkplumber.org" , "Richardson, Bruce" , "Yigit, Ferruh" , "Ananyev, Konstantin" , "gaetan.rivet@6wind.com" , "Wu, Jingjing" , Thomas Monjalon , Mordechay Haimovsky , "Van Haaren, Harry" , "Zhang, Qi Z" , "He, Shaopeng" , "Iremonger, Bernard" , "arybchenko@solarflare.com" References: <1530787185-5915-1-git-send-email-jia.guo@intel.com> <1531119413-17298-1-git-send-email-jia.guo@intel.com> <1531119413-17298-2-git-send-email-jia.guo@intel.com> <6A0DE07E22DDAD4C9103DF62FEBC09093B800FC5@shsmsx102.ccr.corp.intel.com> <7b8ec59a-a52b-91b3-4c68-dc8cc7f66eb2@intel.com> Cc: "jblunck@infradead.org" , "shreyansh.jain@nxp.com" , "dev@dpdk.org" , "Zhang, Helin" From: Jeff Guo Message-ID: Date: Mon, 9 Jul 2018 18:14:26 +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=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v2 1/3] net/ixgbe: enable hotplug detect in ixgbe 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: Mon, 09 Jul 2018 10:14:35 -0000 On 7/9/2018 6:01 PM, Matan Azrad wrote: > Hi > > From: Jeff Guo >> On 7/9/2018 5:04 PM, Matan Azrad wrote: >>> Hi >>> >>> From: Jeff Guo >>>> hi, wenzhuo and matan. >>>> >>>> >>>> On 7/9/2018 3:51 PM, Matan Azrad wrote: >>>>> Hi >>>>> >>>>> From: Lu, Wenzhuo >>>>>> Hi Jeff, >>>>>> >>>>>>> -----Original Message----- >>>>>>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jeff Guo >>>>>>> Sent: Monday, July 9, 2018 2:57 PM >>>>>>> To: stephen@networkplumber.org; Richardson, Bruce >>>>>>> ; Yigit, Ferruh >>>>>>> ; Ananyev, Konstantin >>>>>>> ; gaetan.rivet@6wind.com; Wu, >>>> Jingjing >>>>>>> ; thomas@monjalon.net; >>>> motih@mellanox.com; >>>>>>> matan@mellanox.com; >>>>>> Van >>>>>>> Haaren, Harry ; Zhang, Qi Z >>>>>>> ; He, Shaopeng ; >>>>>>> Iremonger, Bernard ; >>>>>>> arybchenko@solarflare.com >>>>>>> Cc: jblunck@infradead.org; shreyansh.jain@nxp.com; dev@dpdk.org; >>>>>>> Guo, Jia ; Zhang, Helin >>>>>>> Subject: [dpdk-dev] [PATCH v2 1/3] net/ixgbe: enable hotplug >>>>>>> detect in ixgbe >>>>>>> >>>>>>> This patch aim to enable hotplug detect in ixgbe pmd driver. >>>>>>> Firstly it set the flags RTE_PCI_DRV_INTR_RMV in drv_flags to >>>>>>> announce the hotplug ability, and then use >>>>>>> rte_dev_event_callback_register to register the hotplug event >>>>>>> callback to eal. When eal detect the hotplug event, it will call >>>>>>> the callback to process it, if the event is hotplug remove, it >>>>>>> will trigger the RTE_ETH_EVENT_INTR_RMV event into ethdev >> callback to let app process the hotplug for the ethdev. >>>>>>> This is an example for other driver, that if any driver support >>>>>>> hotplug feature could be use this way to enable hotplug detect. >>>>>>> >>>>>>> Signed-off-by: Jeff Guo >>>>>>> --- >>>>>>> v2->v1: >>>>>>> refine some doc. >>>>>>> --- >>>>>>> drivers/net/ixgbe/ixgbe_ethdev.c | 46 >>>>>>> +++++++++++++++++++++++++++++++++++++++- >>>>>>> 1 file changed, 45 insertions(+), 1 deletion(-) >>>>>>> >>>>>>> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c >>>>>>> b/drivers/net/ixgbe/ixgbe_ethdev.c >>>>>>> index 87d2ad0..83ce026 100644 >>>>>>> --- a/drivers/net/ixgbe/ixgbe_ethdev.c >>>>>>> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c >>>>>>> @@ -1534,6 +1534,47 @@ generate_random_mac_addr(struct >>>> ether_addr >>>>>>> *mac_addr) >>>>>>> memcpy(&mac_addr->addr_bytes[3], &random, 3); } >>>>>>> >>>>>>> +static void >>>>>>> +eth_dev_event_callback(char *device_name, enum >>>> rte_dev_event_type >>>>>>> type, >>>>>>> + __rte_unused void *arg) >>>>>>> +{ >>>>>>> + uint32_t pid; >>>>>>> + >>>>>>> + if (type >= RTE_DEV_EVENT_MAX) { >>>>>>> + fprintf(stderr, "%s called upon invalid event %d\n", >>>>>>> + __func__, type); >>>>>>> + fflush(stderr); >>>>>>> + } >>>>>>> + >>>>>>> + switch (type) { >>>>>>> + case RTE_DEV_EVENT_REMOVE: >>>>>>> + PMD_DRV_LOG(INFO, "The device: %s has been >>>>>> removed!\n", >>>>>>> + device_name); >>>>>>> + >>>>>>> + if (!device_name) >>>>>>> + return; >>>>>>> + >>>>>>> + for (pid = 0; pid < RTE_MAX_ETHPORTS; pid++) { >>>>>>> + if (rte_eth_devices[pid].device) { >>>>>>> + if (!strcmp(device_name, >>>>>>> + rte_eth_devices[pid].device- >>> name)) { >>>>>>> + >> _rte_eth_dev_callback_process( >>>>>>> + >> &rte_eth_devices[pid], >>>>>>> + >> RTE_ETH_EVENT_INTR_RMV, >>>>>>> NULL); >>>>>>> + continue; >>>>>>> + } >>>>>>> + } >>>>>>> + } >>>>>>> + break; >>>>>>> + case RTE_DEV_EVENT_ADD: >>>>>>> + RTE_LOG(INFO, EAL, "The device: %s has been >> added!\n", >>>>>>> + device_name); >>>>>>> + break; >>>>>>> + default: >>>>>>> + break; >>>>>>> + } >>>>>>> +} >>>>>> I don't get the point. Looks like this's a very common rte code. >>>>>> Why is it put in ixgbe pmd? >>>>> Jeff needs to detect if the removed device is related to this PMD, >>>>> than to >>>> raise RMV events for all this PMD ethdev associated ports. >>>>> He should not raise RMV events for other PMD ports. >>>>> >>>> It should be like wenzhuo said that i could no strong reason to let >>>> common way in ixgbe pmd. And sure raise RMV events for none related >>>> PMD ports is not my hope. >>>> Will plan to let it go into the eth dev layer to process it. >>>> >>> How can you run ethdev function from EAL context? >>> How can the ethdev layer know which ports are related to the EAL device >> removal? >>> How can ethdev layer know if the port supports removal? >> i mean that still let driver manage the callback , just let the common ethdev >> functional in ethdev layer. >> It just define "rte_eth_dev_event_callback" in ethdev layer, and register the >> common ethdev callback in pmd driver as bellow. the eth_dev could be pass >> by the whole process. >> >> rte_dev_event_callback_register(eth_dev->device->name, >> rte_eth_dev_event_callback, >> (void *)eth_dev); >> > Sorry, but I don't understand, can you explain step by step the notification path? the step should be: 1) add a ethdev driver api "rte_dev_event_callback_register" in the rte_ethdev_driver.h, let pmd driver call it. rte_eth_dev_event_callback(char *device_name, enum rte_dev_event_type event, void *cb_arg); 2) register eth eal device event callback in pmd driver as below, the rte eth (eth_dev) could be set to cb_arg of the callback. rte_dev_event_callback_register(eth_dev->device->name, rte_eth_dev_event_callback, (void *)eth_dev); 3)when hotplug event detect, the callback be called, then could be use the device name of the eth_dev to compare the hotplug eal device name. 4) go to the common way of RMV eth dev hotplug process.