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

Thomas Monjalon thomas at monjalon.net
Wed Sep 23 22:32:39 CEST 2020


23/09/2020 18:45, Ferruh Yigit:
> 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.

Do you think we should give up with the atomic state transition,
and just assign the state as closed?




More information about the dev mailing list