From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 392E544CF for ; Mon, 4 Jun 2018 03:56:16 +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 fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Jun 2018 18:56:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,473,1520924400"; d="scan'208";a="45000659" Received: from jguo15x-mobl3.ccr.corp.intel.com (HELO [10.67.68.67]) ([10.67.68.67]) by fmsmga008.fm.intel.com with ESMTP; 03 Jun 2018 18:56:13 -0700 To: Bruce Richardson References: <01BA8470C017D6468C8290E4B9C5E1E83B379B43@shsmsx102.ccr.corp.intel.com> <20180529112011.GA22740@bricha3-MOBL.ger.corp.intel.com> Cc: "dev@dpdk.org" , "Ananyev, Konstantin" , "stephen@networkplumber.org" , "Yigit, Ferruh" , "gaetan.rivet@6wind.com" , "Wu, Jingjing" , "thomas@monjalon.net" , "motih@mellanox.com" , "matan@mellanox.com" , "Van Haaren, Harry" , "Zhang, Qi Z" , "Zhang, Helin" , "jblunck@infradead.org" , "shreyansh.jain@nxp.com" From: "Guo, Jia" Message-ID: <851b7fb1-bb7c-b277-ee85-6c27cef67238@intel.com> Date: Mon, 4 Jun 2018 09:56:10 +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: <20180529112011.GA22740@bricha3-MOBL.ger.corp.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [RFC] hot plug failure handle mechanism 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, 04 Jun 2018 01:56:17 -0000 hi,bruce On 5/29/2018 7:20 PM, Bruce Richardson wrote: > On Thu, May 24, 2018 at 07:55:43AM +0100, Guo, Jia wrote: > >> The hot plug failure handle mechanism should be come across as bellow: >> >> 1. Add a new bus ops “handle_hot-unplug”in bus to handle bus >> read/write error, it is bus-specific and each >> >> kind of bus can implement its own logic. >> >> 2. Implement pci bus specific ops“pci_handle_hot_unplug”, in the >> function, base on the >> >> failure address to remap memory which belong to the corresponding >> device that unplugged. >> >> 3. Implement a new sigbus handler, and register it when start >> device event monitoring, >> >> once the MMIO sigbus error exposure, it will trigger the above hot plug >> failure handle mechanism, >> >> that will keep app, that working on packet processing, would not be >> broken and crash, then could >> >> keep going clean, fail-safe or other working task. >> >> 4. Also also will introduce the solution by use testpmd to show >> the example of the whole procedure like that: >> >> device unplug ->failure handle->stop forwarding->stop port->close >> port->detach port. >> > Hi Jeff, > > so if I understand this correctly the proposal is that we need two parallel > solutions to handle safe removal of a device. > > 1. We need a solution to support unpluging of the device at the bus level, > ie. remove the device from the list of devices and to make access to > that device invalid. > 2. Since the removal of the device from the software lists is not going to > be instantaneous, we need a mechanism to handle any accesses to the > device from the data path until such time as the removal is complete. To > support that, you propose to add a sigbus handler which will > automatically replace any mmio bar mappings with some other memory that is > ok to access - presumable zero memory or similar. > > Is this understanding correct? i think you are correct about that. > Point #2 seems reasonably clear to me, but for #1, presumably the trigger > to the bus needs to come from the kernel. What is planned to be used there? about point #1, i should clarify here is that, we will use the device event monitor mechanism to detect the hot unplug event. the monitor be enabled by app(or fail-safe driver), and app(fail-safe driver) register the event callback. Once the hot unplug behave be detected, the user's callback could be triggered to let app(fail-safe driver) know the event and manage the process, it will call APIs to stop the device and detach the device from the bus. > You also talk about using testpmd as a reference for this, but you don't > explain how an application can be notified of a device removal, or even why > that is necessary. Since all applications should now be using the proper > macros when iterating device lists, and not just assuming devices 0-N are > valid, what changes would you see a normal app having to make to be > hotplug-safe? we could use app or fail-safe driver to use these mechanism , but at this stage i will firstly use testpmd as a reference. as above reply, testpmd should enable device event mechanism to monitor the device removal, and register callback, the device bdf list is managed by bus and the hoplug fail handler will be process by the eal layer, then the app would be hotplug-safe. is there anything i miss to clarify? please shout. and i think i will detail more later. > Regards, > /Bruce