From: Yunjian Wang Date: Wed, 13 Feb 2019 02:48:52 +0000 (+0800) Subject: net/ixgbe: fix crash on remove X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=ce66e351404f167db9bf47d6a70bd83e101126c9 net/ixgbe: fix crash on remove The NIC's interrupt source has some active handler when the port removed. We should cancel the delay handler before removing dev to prevent executing the delay handler. Call Trace: #0 ixgbe_disable_intr (hw=0x0, hw=0x0) at /usr/src/debug/dpdk-18.11/drivers/net/ixgbe/ixgbe_ethdev.c:852 #1 ixgbe_dev_interrupt_delayed_handler (param=0xadb9c0 ) at /usr/src/debug/dpdk-18.11/drivers/net/ixgbe/ixgbe_ethdev.c:4386 #2 0x00007f05782147af in eal_alarm_callback (arg=) at /usr/src/debug/dpdk-18.11/lib/librte_eal/linuxapp/eal/ eal_alarm.c:90 #3 0x00007f057821320a in eal_intr_process_interrupts (nfds=1, events=0x7f056cbf3e88) at /usr/src/debug/dpdk-18.11/lib/ librte_eal/linuxapp/eal/eal_interrupts.c:838 #4 eal_intr_handle_interrupts (totalfds=, pfd=18) at /usr/src/debug/dpdk-18.11/lib/librte_eal/linuxapp/eal/ eal_interrupts.c:885 #5 eal_intr_thread_main (arg=) at /usr/src/debug/dpdk-18.11/lib/librte_eal/linuxapp/eal/ eal_interrupts.c:965 #6 0x00007f05708a0e45 in start_thread () from /usr/lib64/libpthread.so.0 #7 0x00007f056eb4ab5d in clone () from /usr/lib64/libc.so.6 Fixes: 2866c5f1b87e ("ixgbe: support port hotplug") Cc: stable@dpdk.org Signed-off-by: Yunjian Wang Acked-by: Qi Zhang --- diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 4deedb0c80..c336937c27 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -1336,6 +1336,9 @@ eth_ixgbe_dev_uninit(struct rte_eth_dev *eth_dev) rte_delay_ms(100); } while (retries++ < (10 + IXGBE_LINK_UP_TIME)); + /* cancel the delay handler before remove dev */ + rte_eal_alarm_cancel(ixgbe_dev_interrupt_delayed_handler, eth_dev); + /* uninitialize PF if max_vfs not zero */ ixgbe_pf_host_uninit(eth_dev);