app/testpmd: cleanup port resources after implicit close
When a port is closed implicitly by the PMD, for example, if it is a representor port and its master port is detached, flow indirect actions could remain with their handles no longer valid. If a newly attached device is assigned the same ID as the closed port, those indirect actions became accessible again. Any attempt to use them resulted in an undefined behavior. Flow flex items had no such issue on close, but had it on detach. Introduce flush_port_owned_resources() function for consistent cleanup and call it when a port is closed or detached. Make it flush flow rules and multicast addresses too because they logically belong to the port being removed. Fixes:55509e3a49
("app/testpmd: support shared flow action") Fixes:59f3a8acbc
("app/testpmd: add flex item commands") Cc: stable@dpdk.org Signed-off-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com> Acked-by: Matan Azrad <matan@nvidia.com> Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
This commit is contained in:
parent
b275e298c1
commit
4b27989d24
@ -3206,6 +3206,15 @@ remove_invalid_ports(void)
|
||||
nb_cfg_ports = nb_fwd_ports;
|
||||
}
|
||||
|
||||
static void
|
||||
flush_port_owned_resources(portid_t pi)
|
||||
{
|
||||
mcast_addr_pool_destroy(pi);
|
||||
port_flow_flush(pi);
|
||||
port_flex_item_flush(pi);
|
||||
port_action_handle_flush(pi);
|
||||
}
|
||||
|
||||
static void
|
||||
clear_bonding_slave_device(portid_t *slave_pids, uint16_t num_slaves)
|
||||
{
|
||||
@ -3270,10 +3279,7 @@ close_port(portid_t pid)
|
||||
}
|
||||
|
||||
if (is_proc_primary()) {
|
||||
mcast_addr_pool_destroy(pi);
|
||||
port_flow_flush(pi);
|
||||
port_flex_item_flush(pi);
|
||||
port_action_handle_flush(pi);
|
||||
flush_port_owned_resources(pi);
|
||||
#ifdef RTE_NET_BOND
|
||||
if (port->bond_flag == 1)
|
||||
num_slaves = rte_eth_bond_slaves_get(pi,
|
||||
@ -3430,7 +3436,7 @@ detach_device(struct rte_device *dev)
|
||||
sibling);
|
||||
return;
|
||||
}
|
||||
port_flow_flush(sibling);
|
||||
flush_port_owned_resources(sibling);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3497,7 +3503,7 @@ detach_devargs(char *identifier)
|
||||
rte_devargs_reset(&da);
|
||||
return;
|
||||
}
|
||||
port_flow_flush(port_id);
|
||||
flush_port_owned_resources(port_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user