[dpdk-dev] [PATCH V21 4/4] app/testpmd: show example to handle hot unplug
Guo, Jia
jia.guo at intel.com
Fri Jun 15 10:32:41 CEST 2018
On 6/14/2018 8:59 PM, Iremonger, Bernard wrote:
> Hi Jeff,
>
>> -----Original Message-----
>> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Jeff Guo
>> Sent: Thursday, May 3, 2018 11:49 AM
>> To: stephen at networkplumber.org; Richardson, Bruce
>> <bruce.richardson at intel.com>; Yigit, Ferruh <ferruh.yigit at intel.com>;
>> Ananyev, Konstantin <konstantin.ananyev at intel.com>;
>> gaetan.rivet at 6wind.com; Wu, Jingjing <jingjing.wu at intel.com>;
>> thomas at monjalon.net; motih at mellanox.com; matan at mellanox.com; Van
>> Haaren, Harry <harry.van.haaren at intel.com>; Tan, Jianfeng
>> <jianfeng.tan at intel.com>
>> Cc: jblunck at infradead.org; shreyansh.jain at nxp.com; dev at dpdk.org; Guo,
>> Jia <jia.guo at intel.com>; Zhang, Helin <helin.zhang at intel.com>
>> Subject: [dpdk-dev] [PATCH V21 4/4] app/testpmd: show example to handle
>> hot unplug
>>
>> Use testpmd for example, to show how an application smoothly handle
>> failure when device being hot unplug. Once app detect the removal event,
>> the callback would be called, it first stop the packet forwarding, then stop the
>> port, close the port and finally detach the port.
>>
>> Signed-off-by: Jeff Guo <jia.guo at intel.com>
>> ---
>> v21->v20:
>> fix attach port issue, let it work for multiple device case.
>> combind rmv callback to only one.
>> ---
>> app/test-pmd/testpmd.c | 27 ++++++++++++++++++---------
>> 1 file changed, 18 insertions(+), 9 deletions(-)
>>
>> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index
>> db23f23..a1ff8f3 100644
>> --- a/app/test-pmd/testpmd.c
>> +++ b/app/test-pmd/testpmd.c
>> @@ -1908,9 +1908,10 @@ eth_dev_event_callback_unregister(void)
>> void
>> attach_port(char *identifier)
>> {
>> - portid_t pi = 0;
>> unsigned int socket_id;
>>
>> + portid_t pi = rte_eth_dev_count_avail();
>> +
>> printf("Attaching a new port...\n");
>>
>> if (identifier == NULL) {
>> @@ -2071,12 +2072,14 @@ rmv_event_callback(void *arg)
>> RTE_ETH_VALID_PORTID_OR_RET(port_id);
>> dev = &rte_eth_devices[port_id];
>>
>> + if (dev->state == RTE_ETH_DEV_UNUSED)
>> + return;
>> +
>> + printf("removing device %s\n", dev->device->name);
>> + stop_packet_forwarding();
>> stop_port(port_id);
>> close_port(port_id);
>> - printf("removing device %s\n", dev->device->name);
>> - if (rte_eal_dev_detach(dev->device))
>> - TESTPMD_LOG(ERR, "Failed to detach device %s\n",
>> - dev->device->name);
>> + detach_port(port_id);
>> }
>>
>> /* This function is used by the interrupt thread */ @@ -2131,19 +2134,26
>> @@ 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);
>> fflush(stderr);
>> }
>>
>> + ret = rte_eth_dev_get_port_by_name(device_name, &port_id);
>> + if (ret) {
>> + printf("can not get port by device %s!\n", device_name);
>> + return;
>> + }
>> +
>> switch (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.
>> - */
>> + 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",
>> @@ -2666,7 +2676,6 @@ main(int argc, char** argv)
>> return -1;
>> }
>> eth_dev_event_callback_register();
>> -
>> }
>>
>> if (start_port(RTE_PORT_ALL) != 0)
>> --
>> 2.7.4
> This patch fails to apply to dpdk 18.08-rc0 and needs to be rebased.
>
> Regards,
>
> Bernard.
thanks your notify, bernard, the coming next patch set will update to
fix it.
More information about the dev
mailing list