On 1/23/2020 5:01 PM, Iremonger, Bernard wrote: > Hi Ferruh, > >> -----Original Message----- >> From: Yigit, Ferruh <ferruh.yi...@intel.com> >> Sent: Thursday, January 23, 2020 3:15 PM >> To: Lu, Wenzhuo <wenzhuo...@intel.com>; Wu, Jingjing >> <jingjing...@intel.com>; Iremonger, Bernard >> <bernard.iremon...@intel.com>; Matan Azrad <ma...@mellanox.com> >> Cc: dev@dpdk.org; sta...@dpdk.org >> Subject: [PATCH] app/testpmd: fix hotplug >> > This is reverting the original patch, which breaks hotplug. > I think the commit message should make this clear. > This patch is not fixing hotplug, the original patch seems to have revealed a > problem with hotplug. > Reverting this patch will not fix the underlying hotplug issue.
What is the problem revealed by the original patch? Did you able to reproduce it? > >> The 'port_id_is_invalid()' check in the 'detach_port_device()' is breaking >> the >> hotplug support, since at that stage port will be closed and validity check >> always fail [1] and removing the device is not really completed. >> >> But this cause the vfio request interrupt keep triggered continuously and >> makes the application unusable, since port is closed but device is not >> removed, the remove path keep generating error log: >> >> 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! >> >> Fixed by removing 'port_id_is_invalid()' check from 'detach_port_device()', >> anyway it shouldn't be required. Without this check device remove works as >> expected. >> >> Only "Invalid port_id=0" logs seen a few times, which is because the actual >> removal not done synchronously but an alarm set for it, until the alarm fired >> application may receive many interrupts, expect the first ones cause the >> error. >> So this patch also removes the logging from checking the invalid port in >> 'rmv_port_callback()' to reduce the noise. >> >> [1] >> rmv_port_callback() >> stop_port(port_id); >> close_port(port_id); >> detach_port_device(port_id); >> >> Fixes: 43d0e304980a ("app/testpmd: fix invalid port detaching") >> Cc: sta...@dpdk.org >> >> Signed-off-by: Ferruh Yigit <ferruh.yi...@intel.com> >> --- >> app/test-pmd/testpmd.c | 6 ++---- >> 1 file changed, 2 insertions(+), 4 deletions(-) >> >> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index >> f9f4cd1d3..3323013bb 100644 >> --- a/app/test-pmd/testpmd.c >> +++ b/app/test-pmd/testpmd.c >> @@ -2641,9 +2641,6 @@ detach_port_device(portid_t port_id) >> >> 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"); >> @@ -2875,7 +2872,8 @@ rmv_port_callback(void *arg) >> int org_no_link_check = no_link_check; >> portid_t port_id = (intptr_t)arg; >> >> -RTE_ETH_VALID_PORTID_OR_RET(port_id); >> +if (!rte_eth_dev_is_valid_port(port_id)) >> +return; >> >> if (!test_done && port_is_forwarding(port_id)) { >> need_to_start = 1; >> -- >> 2.24.1 > > Otherwise > Acked-by: Bernard Iremonger <bernard.iremon...@intel.com> >