On 11/12/2019 8:47 AM, Matan Azrad wrote: > The port was not validated before detaching. > > Ignore port detach operation when the port is not valid. > > Fixes: f8e5baa2662d ("app/testpmd: check not detaching device twice") > Cc: tho...@monjalon.net > Cc: sta...@dpdk.org > > Signed-off-by: Matan Azrad <ma...@mellanox.com> > --- > app/test-pmd/testpmd.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > index 4444346..370eefe 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -2545,6 +2545,9 @@ struct extmem_param { > > printf("Removing a device...\n"); > > + if (port_id_is_invalid(port_id, ENABLED_WARN)) > + return; > + > dev = rte_eth_devices[port_id].device; > if (dev == NULL) { > printf("Device already removed\n"); >
The patch is already in 19.11 [1] but it is breaking the testpmd hotplug support. Before 'detach_port_device()' called, the port has been stopped and closed [2], which will make port fail from 'port_id_is_invalid()' check and the device removal path never fully called. The implication is, since device not detached, vfio request interrupt keeps triggered continuously and re-starts the detach path, but because of the half cleaned device it fails and app gets stuck with a continuous log [3]. I wonder if the actual hotplug has been tested with this patch, the commit log is not clear about the motivation and implication of the patch, I am not clear why this check is added but I am sending a patch soon to remove it back. Regards, ferruh [1] https://git.dpdk.org/dpdk/commit/?id=43d0e304980a1527bcac92dc679057b189e2545a [2] rmv_port_callback stop_port(port_id); close_port(port_id); detach_port_device(port_id); [3] EAL: can not get port by device 0000:00:05.0! EAL: can not get port by device 0000:00:05.0! EAL: can not get port by device 0000:00:05.0! EAL: can not get port by device 0000:00:05.0! EAL: can not get port by device 0000:00:05.0! EAL: can not get port by device 0000:00:05.0! ...