> -----Original Message----- > From: David Marchand <david.march...@redhat.com> > Sent: Tuesday, November 2, 2021 3:53 PM > To: dev@dpdk.org > Cc: Jiang, YuX <yux.ji...@intel.com>; Harman Kalra <hka...@marvell.com> > Subject: [PATCH] eal: fix device hotplug > > The device event interrupt handler was always freed. > > Bugzilla ID: 845 > Fixes: c2bd9367e18f ("lib: remove direct access to interrupt handle") > > Signed-off-by: David Marchand <david.march...@redhat.com> > --- > lib/eal/linux/eal_dev.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/lib/eal/linux/eal_dev.c b/lib/eal/linux/eal_dev.c index > 06820a3666..925cdba553 100644 > --- a/lib/eal/linux/eal_dev.c > +++ b/lib/eal/linux/eal_dev.c > @@ -317,10 +317,12 @@ rte_dev_event_monitor_start(void) > goto exit; > } > > - if (rte_intr_type_set(intr_handle, RTE_INTR_HANDLE_DEV_EVENT)) > + ret = rte_intr_type_set(intr_handle, > RTE_INTR_HANDLE_DEV_EVENT); > + if (ret) > goto exit; > > - if (rte_intr_fd_set(intr_handle, -1)) > + ret = rte_intr_fd_set(intr_handle, -1); > + if (ret) > goto exit; > > ret = dev_uev_socket_fd_create(); > @@ -339,7 +341,10 @@ rte_dev_event_monitor_start(void) > monitor_refcount++; > > exit: > - rte_intr_instance_free(intr_handle); > + if (ret) { > + rte_intr_instance_free(intr_handle); > + intr_handle = NULL; > + } > rte_rwlock_write_unlock(&monitor_lock); > return ret; > } > @@ -370,6 +375,7 @@ rte_dev_event_monitor_stop(void) > > close(rte_intr_fd_get(intr_handle)); > rte_intr_instance_free(intr_handle); > + intr_handle = NULL; > > monitor_refcount--; > > -- > 2.23.0 Hi David,
The patch https://patchwork.dpdk.org/project/dpdk/patch/20211102075259.3392-1-david.march...@redhat.com/ failed to verify. after executing "device_del dev1" in the qemu window, the testpmd window hangs to death and output as following: EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0) EAL: Cannot find bus for device (0000:00:05.0)