app/testpmd: fix hot-unplug detaching
authorThomas Monjalon <thomas@monjalon.net>
Thu, 13 Feb 2020 15:52:26 +0000 (16:52 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 14 Feb 2020 11:42:13 +0000 (12:42 +0100)
commit0654d4a8ad694821e3ce274e87b1ab89fd587f1c
treeceb4ec825f96f4d39ac6fdc3705e475c51f0fc67
parent5edee5f6da59ac2291a7060463a5b9bfb85abd9f
app/testpmd: fix hot-unplug detaching

There is a possible race condition in the hotplug path
in rmv_port_callback(). If a port is created between
close_port(port_id) and detach_port_device(port_id),
then the port_id will have been reallocated to a different
device which will be wrongly detached.

Since a check was added in detach_port_device() for
manual detach case, the hotplug path was even more broken.
It became impossible to run because the new check prevented
to run detach_port_device() after the port is closed.

The solution for both issues is to not rely on the port_id
for detaching the rte_device.
The function detach_port_device() is split to allow calling
detach_device() directly with the rte_device pointer, saved
before closing the port.

Fixes: 43d0e304980a ("app/testpmd: fix invalid port detaching")
Cc: stable@dpdk.org
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
app/test-pmd/testpmd.c