[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