patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: Saurabh Singhal <saurabhs@arista.com>
Cc: Qi Zhang <qi.z.zhang@intel.com>, dpdk stable <stable@dpdk.org>
Subject: patch 'net/iavf: unregister interrupt handler before FD close' has been queued to stable release 21.11.6
Date: Thu,  2 Nov 2023 13:12:06 +0000	[thread overview]
Message-ID: <20231102131254.315947-60-ktraynor@redhat.com> (raw)
In-Reply-To: <20231102131254.315947-1-ktraynor@redhat.com>

Hi,

FYI, your patch has been queued to stable release 21.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/08/23. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/77aff6a04619079eb4fc934ba5c8859be5288b28

Thanks.

Kevin

---
From 77aff6a04619079eb4fc934ba5c8859be5288b28 Mon Sep 17 00:00:00 2001
From: Saurabh Singhal <saurabhs@arista.com>
Date: Wed, 6 Sep 2023 20:15:29 -0700
Subject: [PATCH] net/iavf: unregister interrupt handler before FD close

[ upstream commit e35a5737a7469423880a0946afffd2568f6156dd ]

Unregister VFIO interrupt handler before the interrupt fd gets closed in
case iavf_dev_init() returns an error.

dpdk creates a standalone thread named eal-intr-thread for processing
interrupts for the PCI devices. The interrupt handler callbacks are
registered by the VF driver(iavf, in this case).

When we do a PCI probe of the network interfaces, we register an
interrupt handler, open a vfio-device fd using ioctl, and an eventfd in
dpdk. These interrupt sources are registered in a global linked list
that the eal-intr-thread keeps iterating over for handling the
interrupts. In our internal testing, we see eal-intr-thread crash in
these two ways:

Error adding fd 660 epoll_ctl, Operation not permitted

or

Error adding fd 660 epoll_ctl, Bad file descriptor

epoll_ctl() returns EPERM if the target fd does not support poll.
It returns EBADF when the epoll fd itself is closed or the target fd is
closed.

When the first type of crash happens, we see that the fd 660 is
anon_inode:[vfio-device] which does not support poll.

When the second type of crash happens, we could see from the fd map of
the crashing process that the fd 660 was already closed.

This means the said fd has been closed and in certain cases may have
been reassigned to a different device by the operating system but the
eal-intr-thread does not know about it.

We observed that these crashes were always accompanied by an error in
iavf_dev_init() after rte_intr_callback_register() and
iavf_enable_irq0() have already happened. In the error path, the
intr_handle_fd was being closed but the interrupt handler wasn't being
unregistered.

The fix is to unregister the interrupt handle in the
iavf_dev_init() error path.

Ensure proper cleanup if iavf_security_init() or
iavf_security_ctx_create() fail. Earlier, we were leaking memory by
simply returning from iavf_dev_init().

Fixes: 22b123a36d07 ("net/avf: initialize PMD")
Fixes: 6bc987ecb860 ("net/iavf: support IPsec inline crypto")

Signed-off-by: Saurabh Singhal <saurabhs@arista.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 .mailmap                       |  1 +
 drivers/net/iavf/iavf_ethdev.c | 22 ++++++++++++++++++++--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/.mailmap b/.mailmap
index 743366389a..f0aac43189 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1194,4 +1194,5 @@ Satha Rao <skoteshwar@marvell.com> <skoteshwar@caviumnetworks.com>
 Satheesh Paul <psatheesh@marvell.com>
 Sathesh Edara <sedara@marvell.com>
+Saurabh Singhal <saurabhs@arista.com>
 Savinay Dharmappa <savinay.dharmappa@intel.com>
 Scott Branden <scott.branden@broadcom.com>
diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index f9eef7233d..2214ba9545 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -126,4 +126,6 @@ static int iavf_dev_rx_queue_intr_enable(struct rte_eth_dev *dev,
 static int iavf_dev_rx_queue_intr_disable(struct rte_eth_dev *dev,
 					 uint16_t queue_id);
+static void iavf_dev_interrupt_handler(void *param);
+static void iavf_disable_irq0(struct iavf_hw *hw);
 static int iavf_dev_flow_ops_get(struct rte_eth_dev *dev,
 				 const struct rte_flow_ops **ops);
@@ -2614,5 +2616,5 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
 		if (ret) {
 			PMD_INIT_LOG(ERR, "failed to create ipsec crypto security instance");
-			return ret;
+			goto flow_init_err;
 		}
 
@@ -2620,5 +2622,5 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
 		if (ret) {
 			PMD_INIT_LOG(ERR, "failed to initialized ipsec crypto resources");
-			return ret;
+			goto security_init_err;
 		}
 	}
@@ -2634,5 +2636,21 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
 	return 0;
 
+security_init_err:
+	iavf_security_ctx_destroy(adapter);
+
 flow_init_err:
+	iavf_disable_irq0(hw);
+
+	if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) {
+		/* disable uio intr before callback unregiser */
+		rte_intr_disable(pci_dev->intr_handle);
+
+		/* unregister callback func from eal lib */
+		rte_intr_callback_unregister(pci_dev->intr_handle,
+					     iavf_dev_interrupt_handler, eth_dev);
+	} else {
+		rte_eal_alarm_cancel(iavf_dev_alarm_handler, eth_dev);
+	}
+
 	rte_free(eth_dev->data->mac_addrs);
 	eth_dev->data->mac_addrs = NULL;
-- 
2.41.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2023-11-02 13:09:42.283195979 +0000
+++ 0060-net-iavf-unregister-interrupt-handler-before-FD-clos.patch	2023-11-02 13:09:40.870163518 +0000
@@ -1 +1 @@
-From e35a5737a7469423880a0946afffd2568f6156dd Mon Sep 17 00:00:00 2001
+From 77aff6a04619079eb4fc934ba5c8859be5288b28 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e35a5737a7469423880a0946afffd2568f6156dd ]
+
@@ -55 +56,0 @@
-Cc: stable@dpdk.org
@@ -65 +66 @@
-index 013ad8cbca..d35257d6eb 100644
+index 743366389a..f0aac43189 100644
@@ -68 +69 @@
-@@ -1236,4 +1236,5 @@ Satha Rao <skoteshwar@marvell.com> <skoteshwar@caviumnetworks.com>
+@@ -1194,4 +1194,5 @@ Satha Rao <skoteshwar@marvell.com> <skoteshwar@caviumnetworks.com>
@@ -75 +76 @@
-index 27a6a7b80f..97390237ba 100644
+index f9eef7233d..2214ba9545 100644
@@ -78 +79 @@
-@@ -134,4 +134,6 @@ static int iavf_dev_rx_queue_intr_enable(struct rte_eth_dev *dev,
+@@ -126,4 +126,6 @@ static int iavf_dev_rx_queue_intr_enable(struct rte_eth_dev *dev,
@@ -85 +86 @@
-@@ -2737,5 +2739,5 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
+@@ -2614,5 +2616,5 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
@@ -92 +93 @@
-@@ -2743,5 +2745,5 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
+@@ -2620,5 +2622,5 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
@@ -99 +100 @@
-@@ -2757,5 +2759,21 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
+@@ -2634,5 +2636,21 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)


  parent reply	other threads:[~2023-11-02 13:14 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-02 13:11 patch 'mempool: fix default ops for an empty mempool' " Kevin Traynor
2023-11-02 13:11 ` patch 'eal/unix: fix firmware reading with external xz helper' " Kevin Traynor
2023-11-02 13:11 ` patch 'rawdev: fix device class in log message' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/bonding: fix header for C++' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/sfc: set max Rx packet length for representors' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/sfc: account for data offset on Tx' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/sfc: add missing error code indication to MAE init path' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/hns3: fix VF default MAC modified when set failed' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/hns3: fix error code for multicast resource' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/hns3: fix flushing multicast MAC address' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/hns3: fix order in NEON Rx' " Kevin Traynor
2023-11-02 13:11 ` patch 'random: initialize state for unregistered non-EAL threads' " Kevin Traynor
2023-11-02 13:11 ` patch 'bus/dpaa: fix build with asserts for GCC 13' " Kevin Traynor
2023-11-02 13:11 ` patch 'hash: align SSE lookup to scalar implementation' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/netvsc: increase VSP response timeout to 60 seconds' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/txgbe: add Tx queue maximum limit' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/txgbe: fix GRE tunnel packet checksum' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/ngbe: fix flow control' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/txgbe: reconfigure MAC Rx when link update' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/ngbe: " Kevin Traynor
2023-11-02 13:11 ` patch 'net/txgbe: keep link down after device close' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/ngbe: " Kevin Traynor
2023-11-02 13:11 ` patch 'net/txgbe: check process type in close operation' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/ngbe: " Kevin Traynor
2023-11-02 13:11 ` patch 'net/tap: use MAC address parse API instead of local parser' " Kevin Traynor
2023-11-02 13:11 ` patch 'app/testpmd: fix help string' " Kevin Traynor
2023-11-02 13:11 ` patch 'cryptodev: add missing doc for security context' " Kevin Traynor
2023-11-02 13:11 ` patch 'doc: replace code blocks with includes in security guide' " Kevin Traynor
2023-11-02 13:11 ` patch 'test/crypto: fix IV in some vectors' " Kevin Traynor
2023-11-02 13:11 ` patch 'test/crypto: skip some synchronous tests with CPU crypto' " Kevin Traynor
2023-11-02 13:11 ` patch 'test/crypto: fix typo in asym tests' " Kevin Traynor
2023-11-02 13:11 ` patch 'crypto/ipsec_mb: add dependency check for cross build' " Kevin Traynor
2023-11-02 13:11 ` patch 'eventdev: fix symbol export for port maintenance' " Kevin Traynor
2023-11-02 13:11 ` patch 'bus/pci: fix device ID log' " Kevin Traynor
2023-11-02 13:11 ` patch 'event/cnxk: fix getwork mode devargs parsing' " Kevin Traynor
2023-11-02 13:11 ` patch 'event/cnxk: fix return values for capability API' " Kevin Traynor
2023-11-02 13:11 ` patch 'test/event: fix crypto null device creation' " Kevin Traynor
2023-11-02 13:11 ` patch 'event/sw: remove obsolete comment' " Kevin Traynor
2023-11-02 13:11 ` patch 'eventdev/eth_rx: fix timestamp field register in mbuf' " Kevin Traynor
2023-11-02 13:11 ` patch 'event/sw: fix ordering corruption with op release' " Kevin Traynor
2023-11-02 13:11 ` patch 'common/cnxk: fix default flow action setting' " Kevin Traynor
2023-11-02 13:11 ` patch 'common/cnxk: fix xstats for different packet sizes' " Kevin Traynor
2023-11-02 13:11 ` patch 'common/cnxk: fix different size bit operations' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/cnxk: fix uninitialized variable' " Kevin Traynor
2023-11-02 13:11 ` Kevin Traynor
2023-11-02 13:11 ` patch 'common/cnxk: fix DPI memzone name' " Kevin Traynor
2023-11-02 13:11 ` patch 'dma/cnxk: fix device state' " Kevin Traynor
2023-11-02 13:11 ` patch 'mempool/cnxk: fix free from non-EAL threads' " Kevin Traynor
2023-11-02 13:11 ` patch 'common/cnxk: fix aura disable handling' " Kevin Traynor
2023-11-02 13:11 ` patch 'common/cnxk: remove dead Meson code' " Kevin Traynor
2023-11-02 13:11 ` patch 'baseband/acc: fix ACC100 HARQ input alignment' " Kevin Traynor
2023-11-02 13:11 ` patch 'app/bbdev: fix link with NXP LA12XX' " Kevin Traynor
2023-11-02 13:11 ` patch 'net/i40e: fix FDIR queue receives broadcast packets' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/ice: write timestamp to first segment in scattered Rx' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/iavf: fix VLAN offload strip flag' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/iavf: fix checksum offloading' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/i40e: fix buffer leak on Rx reconfiguration' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/ice: fix TM configuration clearing' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/iavf: fix port stats " Kevin Traynor
2023-11-02 13:12 ` Kevin Traynor [this message]
2023-11-02 13:12 ` patch 'net/iavf: fix ESN session update' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/ice: fix initial link status' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/iavf: fix Tx debug' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/iavf: remove log from Tx prepare function' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/iavf: fix TSO with big segments' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/ice: remove log from Tx prepare function' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/ice: fix TSO with big segments' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/mlx5: fix leak in sysfs port name translation' " Kevin Traynor
2023-11-02 13:12 ` patch 'fib: fix adding default route overwriting entire table' " Kevin Traynor
2023-11-02 13:12 ` patch 'fib6: fix adding default route as first route' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/af_packet: fix Rx and Tx queue state' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/af_xdp: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/avp: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/bnx2x: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/bnxt: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/bonding: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/cxgbe: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/dpaa: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/dpaa2: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/e1000: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/ena: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/enetc: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/enic: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/hinic: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/ipn3ke: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/memif: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/mlx4: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/mvneta: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/mvpp2: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/ngbe: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/null: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/octeon_ep: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/pfe: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/ring: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/sfc: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/softnic: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/txgbe: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/vhost: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/virtio: " Kevin Traynor
2023-11-02 13:12 ` patch 'net/vmxnet3: " Kevin Traynor
2023-11-02 13:12 ` patch 'app/testpmd: fix primary process not polling all queues' " Kevin Traynor
2023-11-02 13:12 ` patch 'net/bonding: fix link status callback stop' " Kevin Traynor
2023-11-02 13:12 ` patch 'app/procinfo: remove unnecessary rte_malloc' " Kevin Traynor
2023-11-02 13:12 ` patch 'malloc: remove return from void functions' " Kevin Traynor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231102131254.315947-60-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=qi.z.zhang@intel.com \
    --cc=saurabhs@arista.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).