From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id EC3593250 for ; Mon, 9 Jul 2018 11:54:41 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Jul 2018 02:54:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,330,1526367600"; d="scan'208";a="238871077" Received: from jguo15x-mobl3.ccr.corp.intel.com (HELO [10.67.68.84]) ([10.67.68.84]) by orsmga005.jf.intel.com with ESMTP; 09 Jul 2018 02:54:37 -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> Cc: "jblunck@infradead.org" , "shreyansh.jain@nxp.com" , "dev@dpdk.org" , "Zhang, Helin" From: Jeff Guo Message-ID: <7b8ec59a-a52b-91b3-4c68-dc8cc7f66eb2@intel.com> Date: Mon, 9 Jul 2018 17:54:34 +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 09:54:42 -0000 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);