patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: Nithin Dabilpuram <ndabilpuram@marvell.com>
Cc: Jerin Jacob <jerinj@marvell.com>,
	Shahed Shaikh <shshaikh@marvell.com>,
	David Marchand <david.marchand@redhat.com>,
	dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'eal: add ack interrupt API' has been queued to LTS release 18.11.6
Date: Wed, 11 Dec 2019 21:26:09 +0000	[thread overview]
Message-ID: <20191211212702.27851-17-ktraynor@redhat.com> (raw)
In-Reply-To: <20191211212702.27851-1-ktraynor@redhat.com>

Hi,

FYI, your patch has been queued to LTS release 18.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 12/17/19. 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-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/3e41c8bc75845ff157a00581797431bf5fb35770

Thanks.

Kevin.

---
From 3e41c8bc75845ff157a00581797431bf5fb35770 Mon Sep 17 00:00:00 2001
From: Nithin Dabilpuram <ndabilpuram@marvell.com>
Date: Tue, 23 Jul 2019 10:04:18 +0200
Subject: [PATCH] eal: add ack interrupt API

[upstream commit a159730c2f3ae3fdabc52c20565470a9d8abd98a]

Add new ack interrupt API to avoid using
VFIO_IRQ_SET_ACTION_TRIGGER(rte_intr_enable()) for
acking interrupt purpose for VFIO based interrupt handlers.
This implementation is specific to Linux.

Using rte_intr_enable() for acking interrupt has below issues

 * Time consuming to do for every interrupt received as it will
   free_irq() followed by request_irq() and all other initializations
 * A race condition because of a window between free_irq() and
   request_irq() with packet reception still on and device still
   enabled and would throw warning messages like below.
   [158764.159833] do_IRQ: 9.34 No irq handler for vector

In this patch, rte_intr_ack() is a no-op for VFIO_MSIX/VFIO_MSI interrupts
as they are edge triggered and kernel would not mask the interrupt before
delivering the event to userspace and we don't need to ack.

Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Tested-by: Shahed Shaikh <shshaikh@marvell.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
(cherry picked from commit a159730c2f3ae3fdabc52c20565470a9d8abd98a)
---
 lib/librte_eal/bsdapp/eal/eal_interrupts.c    |  9 ++
 .../common/include/rte_interrupts.h           | 21 +++++
 lib/librte_eal/linuxapp/eal/eal_interrupts.c  | 82 +++++++++++++++++++
 lib/librte_eal/rte_eal_version.map            |  1 +
 4 files changed, 113 insertions(+)

diff --git a/lib/librte_eal/bsdapp/eal/eal_interrupts.c b/lib/librte_eal/bsdapp/eal/eal_interrupts.c
index 2feee2d52..9aa9178d5 100644
--- a/lib/librte_eal/bsdapp/eal/eal_interrupts.c
+++ b/lib/librte_eal/bsdapp/eal/eal_interrupts.c
@@ -328,4 +328,13 @@ rte_intr_disable(const struct rte_intr_handle *intr_handle)
 }
 
+int
+rte_intr_ack(const struct rte_intr_handle *intr_handle)
+{
+	if (intr_handle && intr_handle->type == RTE_INTR_HANDLE_VDEV)
+		return 0;
+
+	return -1;
+}
+
 static void
 eal_intr_process_interrupts(struct kevent *events, int nfds)
diff --git a/lib/librte_eal/common/include/rte_interrupts.h b/lib/librte_eal/common/include/rte_interrupts.h
index bcd935805..9d9bda171 100644
--- a/lib/librte_eal/common/include/rte_interrupts.h
+++ b/lib/librte_eal/common/include/rte_interrupts.h
@@ -7,4 +7,5 @@
 
 #include <rte_common.h>
+#include <rte_compat.h>
 
 /**
@@ -86,4 +87,24 @@ int rte_intr_enable(const struct rte_intr_handle *intr_handle);
 int rte_intr_disable(const struct rte_intr_handle *intr_handle);
 
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * It acknowledges an interrupt raised for the specified handle.
+ *
+ * This function should be called at the end of each interrupt handler either
+ * from application or driver, so that currently raised interrupt is acked and
+ * further new interrupts are raised.
+ *
+ * @param intr_handle
+ *  pointer to the interrupt handle.
+ *
+ * @return
+ *  - On success, zero.
+ *  - On failure, a negative value.
+ */
+__rte_experimental
+int rte_intr_ack(const struct rte_intr_handle *intr_handle);
+
 #ifdef __cplusplus
 }
diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
index cbac451e1..102a9549e 100644
--- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c
+++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
@@ -196,4 +196,26 @@ vfio_disable_intx(const struct rte_intr_handle *intr_handle) {
 }
 
+/* unmask/ack legacy (INTx) interrupts */
+static int
+vfio_ack_intx(const struct rte_intr_handle *intr_handle)
+{
+	struct vfio_irq_set irq_set;
+
+	/* unmask INTx */
+	memset(&irq_set, 0, sizeof(irq_set));
+	irq_set.argsz = sizeof(irq_set);
+	irq_set.count = 1;
+	irq_set.flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_UNMASK;
+	irq_set.index = VFIO_PCI_INTX_IRQ_INDEX;
+	irq_set.start = 0;
+
+	if (ioctl(intr_handle->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, &irq_set)) {
+		RTE_LOG(ERR, EAL, "Error unmasking INTx interrupts for fd %d\n",
+			intr_handle->fd);
+		return -1;
+	}
+	return 0;
+}
+
 /* enable MSI interrupts */
 static int
@@ -639,4 +661,64 @@ rte_intr_enable(const struct rte_intr_handle *intr_handle)
 }
 
+/**
+ * PMD generally calls this function at the end of its IRQ callback.
+ * Internally, it unmasks the interrupt if possible.
+ *
+ * For INTx, unmasking is required as the interrupt is auto-masked prior to
+ * invoking callback.
+ *
+ * For MSI/MSI-X, unmasking is typically not needed as the interrupt is not
+ * auto-masked. In fact, for interrupt handle types VFIO_MSIX and VFIO_MSI,
+ * this function is no-op.
+ */
+int
+rte_intr_ack(const struct rte_intr_handle *intr_handle)
+{
+	if (intr_handle && intr_handle->type == RTE_INTR_HANDLE_VDEV)
+		return 0;
+
+	if (!intr_handle || intr_handle->fd < 0 || intr_handle->uio_cfg_fd < 0)
+		return -1;
+
+	switch (intr_handle->type) {
+	/* Both acking and enabling are same for UIO */
+	case RTE_INTR_HANDLE_UIO:
+		if (uio_intr_enable(intr_handle))
+			return -1;
+		break;
+	case RTE_INTR_HANDLE_UIO_INTX:
+		if (uio_intx_intr_enable(intr_handle))
+			return -1;
+		break;
+	/* not used at this moment */
+	case RTE_INTR_HANDLE_ALARM:
+		return -1;
+#ifdef VFIO_PRESENT
+	/* VFIO MSI* is implicitly acked unlike INTx, nothing to do */
+	case RTE_INTR_HANDLE_VFIO_MSIX:
+	case RTE_INTR_HANDLE_VFIO_MSI:
+		return 0;
+	case RTE_INTR_HANDLE_VFIO_LEGACY:
+		if (vfio_ack_intx(intr_handle))
+			return -1;
+		break;
+#ifdef HAVE_VFIO_DEV_REQ_INTERFACE
+	case RTE_INTR_HANDLE_VFIO_REQ:
+		return -1;
+#endif
+#endif
+	/* not used at this moment */
+	case RTE_INTR_HANDLE_DEV_EVENT:
+		return -1;
+	/* unknown handle type */
+	default:
+		RTE_LOG(ERR, EAL, "Unknown handle type of fd %d\n",
+			intr_handle->fd);
+		return -1;
+	}
+
+	return 0;
+}
+
 int
 rte_intr_disable(const struct rte_intr_handle *intr_handle)
diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map
index 3fe78260d..f39c18f4d 100644
--- a/lib/librte_eal/rte_eal_version.map
+++ b/lib/librte_eal/rte_eal_version.map
@@ -319,4 +319,5 @@ EXPERIMENTAL {
 	rte_fbarray_set_free;
 	rte_fbarray_set_used;
+	rte_intr_ack;
 	rte_log_register_type_and_pick_level;
 	rte_malloc_dump_heaps;
-- 
2.21.0


  parent reply	other threads:[~2019-12-11 21:28 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-11 21:25 [dpdk-stable] patch 'net/qede: fix setting MTU' " Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/qede: fix setting VLAN strip mode' " Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/ixgbe: support packet type with NEON' " Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/ixgbe: fix MACsec setting' " Kevin Traynor
2019-12-12  2:42   ` Sun, GuinanX
2019-12-12 10:01     ` Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/ixgbe: fix performance drop caused by MACsec' " Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/ixgbe: fix link status' " Kevin Traynor
2019-12-11 21:25 ` [dpdk-stable] patch 'net/bnxt: fix debug log level' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/bnxt: fix L4 checksum indication in non-vector Rx' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/bnxt: fix IP checksum error indication' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'vhost: do not limit packed ring size' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'vhost: fix build dependency on hash lib' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/virtio-user: fix setting filters' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/mlx5: allow pattern start from IP' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'ethdev: fix expand RSS flows' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'ethdev: fix item expansion for RSS flow' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'ethdev: fix last item detection on RSS flow expand' " Kevin Traynor
2019-12-11 21:26 ` Kevin Traynor [this message]
2019-12-11 21:26 ` [dpdk-stable] patch 'net/qede: use ack in interrupt handlers' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/enic: re-enable link status change interrupt' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/sfc: fix adapter lock usage on rule creation' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/testpmd: block xstats for hidden ports' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/dpaa2: fix Rx offload flags on jumbo MTU set' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples/vm_power: fix OOB frequency oscillations' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'bus/pci: align next mapping address on page boundary' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'test: optimise fd closing in forks' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'doc: fix internal links for older releases' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'doc: fix link to AESNI mb external library' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'doc/guides: clean repeated words' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'mempool: use actual IOVA addresses when populating' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'build: remove unneeded meson option' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'lib: fix log typos' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'lib: fix doxygen " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'malloc: fix realloc copy size' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'malloc: fix realloc padded element " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples/ipsec-secgw: fix default configuration' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples/fips_validation: fix auth verify' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/mlx5: fix check of RSS queue index' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/bnxt: fix crash in xstats get' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/bonding: fix selection logic' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'ethdev: avoid undefined behaviour on configuration copy' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/bnxt: fix resource qcaps with older FW' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/testpmd: report invalid command line parameter' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples: hide error for missing pkg-config path flag' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'common/octeontx: add missing public symbol' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/testpmd: fix invalid port detaching' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'power: handle frequency increase with turbo disabled' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'mk: remove library search path from binary' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples/multi_process: check server port validity' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'examples/multi_process: fix client crash with sparse ports' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/eventdev: fix divide by zero' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/eventdev: check function errors' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'app/crypto-perf: fix input of AEAD decrypt' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'doc: fix l2fwd-crypto usage in CCP guide' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'crypto/ccp: fix maximum queues and burst size' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'crypto/ccp: fix CPU authentication crash' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'crypto/ccp: fix scheduling of burst' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'crypto/ccp: fix digest size capabilities' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'malloc: fix memory element size in case of padding' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'eal: fix header file install with meson' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/virtio-user: drop attribute unused for memory callback' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'doc: fix tap guide' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/e1000: fix link status update' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/ixgbe: fix link status' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/e1000: " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'net/ifc: check VFIO query error' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'ethdev: limit maximum number of queues' " Kevin Traynor
2019-12-11 21:26 ` [dpdk-stable] patch 'event/octeontx: fix partial Rx packet handling' " Kevin Traynor
2019-12-11 21:27 ` [dpdk-stable] patch 'test/service: fix wait for service core' " Kevin Traynor
2019-12-11 21:27 ` [dpdk-stable] patch 'usertools: fix typo in SPDX tag of telemetry script' " Kevin Traynor
2019-12-11 21:27 ` [dpdk-stable] patch 'doc: update arm64 cross build tool version' " 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=20191211212702.27851-17-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=david.marchand@redhat.com \
    --cc=jerinj@marvell.com \
    --cc=ndabilpuram@marvell.com \
    --cc=shshaikh@marvell.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).