[dpdk-dev] [PATCH 19/20] app/testpmd: reset port status on close notification

Ferruh Yigit ferruh.yigit at intel.com
Wed Sep 23 18:45:19 CEST 2020


On 9/13/2020 11:07 PM, Thomas Monjalon wrote:
> Since rte_eth_dev_release_port() is called on all port close operations,
> the event RTE_ETH_EVENT_DESTROY can be reliably used for resetting
> the port status on the application side.
> 
> The intermediate state RTE_PORT_HANDLING is removed in close_port()
> because a port can also be closed by a PMD in a device remove operation.
> 
> In case multiple ports are closed, calling remove_invalid_ports()
> only once is enough.
> 
> Signed-off-by: Thomas Monjalon <thomas at monjalon.net>

<...>

> @@ -3118,6 +3093,13 @@ eth_event_callback(portid_t port_id, enum rte_eth_event_type type, void *param,
>   				rmv_port_callback, (void *)(intptr_t)port_id))
>   			fprintf(stderr, "Could not set up deferred device removal\n");
>   		break;
> +	case RTE_ETH_EVENT_DESTROY:
> +		if (rte_atomic16_cmpset(&(ports[port_id].port_status),
> +					RTE_PORT_STOPPED,
> +					RTE_PORT_CLOSED) == 0)
> +			printf("Port %d cannot be set to closed\n", port_id);
> +		printf("Port %u is closed\n", port_id);
> +		break;

This is failing if a port closed without application port stop command, 
PMD may be doing port stop within the close function but since 
application didn't give the stop command, the port status is not 
'RTE_PORT_STOPPED', hence 'port_status' is not updated correctly.


More information about the dev mailing list