patch 'interrupts: add interrupt event info' has been queued to stable release 24.11.5
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Thu Mar 19 23:01:56 CET 2026
Hi,
FYI, your patch has been queued to stable release 24.11.5
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 03/21/26. 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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/e687750f42409b37ec5751241f835a351017bd73
Thanks.
Luca Boccassi
---
>From e687750f42409b37ec5751241f835a351017bd73 Mon Sep 17 00:00:00 2001
From: Kevin Traynor <ktraynor at redhat.com>
Date: Tue, 3 Mar 2026 18:58:17 +0000
Subject: [PATCH] interrupts: add interrupt event info
[ upstream commit 0b0c6f85bea1e9a595174ac39c1e7cb1c13c9e7b ]
Add RTE_INTR_EVENT_* defines and a new internal API
rte_intr_active_events_flags() in order to retrieve them.
As the events are in the context of the current interrupt,
rte_intr_active_events_flags() must be called from the context of
an interrupt callback.
Signed-off-by: Kevin Traynor <ktraynor at redhat.com>
Acked-by: Stephen Hemminger <stephen at networkplumber.org>
Acked-by: David Marchand <david.marchand at redhat.com>
---
lib/eal/freebsd/eal_interrupts.c | 6 ++++++
lib/eal/include/rte_interrupts.h | 21 +++++++++++++++++++++
lib/eal/linux/eal_interrupts.c | 30 +++++++++++++++++++++++++++++-
lib/eal/version.map | 1 +
lib/eal/windows/eal_interrupts.c | 6 ++++++
5 files changed, 63 insertions(+), 1 deletion(-)
diff --git a/lib/eal/freebsd/eal_interrupts.c b/lib/eal/freebsd/eal_interrupts.c
index 23747babc2..445a1c706f 100644
--- a/lib/eal/freebsd/eal_interrupts.c
+++ b/lib/eal/freebsd/eal_interrupts.c
@@ -748,3 +748,9 @@ int rte_thread_is_intr(void)
{
return rte_thread_equal(intr_thread, rte_thread_self());
}
+
+uint32_t
+rte_intr_active_events_flags(void)
+{
+ return 0;
+}
diff --git a/lib/eal/include/rte_interrupts.h b/lib/eal/include/rte_interrupts.h
index 1b9a0b2a78..0ae16bbe19 100644
--- a/lib/eal/include/rte_interrupts.h
+++ b/lib/eal/include/rte_interrupts.h
@@ -39,6 +39,12 @@ struct rte_intr_handle;
#define RTE_INTR_VEC_ZERO_OFFSET 0
#define RTE_INTR_VEC_RXTX_OFFSET 1
+/** Interrupt event flags returned by rte_intr_active_events_flags() */
+#define RTE_INTR_EVENT_IN RTE_BIT32(0) /**< Data available to read */
+#define RTE_INTR_EVENT_ERR RTE_BIT32(1) /**< Error condition on fd */
+#define RTE_INTR_EVENT_HUP RTE_BIT32(2) /**< Hang up / disconnect */
+#define RTE_INTR_EVENT_RDHUP RTE_BIT32(3) /**< Read hang up / disconnect */
+
/**
* The interrupt source type, e.g. UIO, VFIO, ALARM etc.
*/
@@ -196,6 +202,21 @@ int rte_intr_ack(const struct rte_intr_handle *intr_handle);
*/
int rte_thread_is_intr(void);
+/**
+ * @internal
+ * Return the event flags for the interrupt currently being processed.
+ *
+ * Must be called from an interrupt callback running on the EAL
+ * interrupt thread. The returned value is a bitmask of
+ * RTE_INTR_EVENT_* flags.
+ *
+ * @return
+ * Active event flags, or 0 if not in interrupt context or
+ * on platforms that do not support this feature.
+ */
+__rte_internal
+uint32_t rte_intr_active_events_flags(void);
+
/**
* It allocates memory for interrupt instance. API takes flag as an argument
* which define from where memory should be allocated i.e. using DPDK memory
diff --git a/lib/eal/linux/eal_interrupts.c b/lib/eal/linux/eal_interrupts.c
index 5d8ee9a18a..14472ee929 100644
--- a/lib/eal/linux/eal_interrupts.c
+++ b/lib/eal/linux/eal_interrupts.c
@@ -36,6 +36,8 @@
static RTE_DEFINE_PER_LCORE(int, _epfd) = -1; /**< epoll fd per thread */
+static uint32_t active_events; /**< events for active interrupt */
+
/**
* union for pipe fds.
*/
@@ -894,6 +896,22 @@ out:
return rc;
}
+static uint32_t
+epoll_to_intr_events(uint32_t epoll_events)
+{
+ uint32_t ev = 0;
+
+ if (epoll_events & EPOLLIN)
+ ev |= RTE_INTR_EVENT_IN;
+ if (epoll_events & EPOLLERR)
+ ev |= RTE_INTR_EVENT_ERR;
+ if (epoll_events & EPOLLHUP)
+ ev |= RTE_INTR_EVENT_HUP;
+ if (epoll_events & EPOLLRDHUP)
+ ev |= RTE_INTR_EVENT_RDHUP;
+ return ev;
+}
+
static void
eal_intr_source_remove_and_free(struct rte_intr_source *src)
{
@@ -1025,7 +1043,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
rte_spinlock_lock(&intr_lock);
if (call) {
-
+ active_events = epoll_to_intr_events(events[n].events);
/* Finally, call all callbacks. */
TAILQ_FOREACH(cb, &src->callbacks, next) {
@@ -1039,6 +1057,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
/*get the lock back. */
rte_spinlock_lock(&intr_lock);
}
+ active_events = 0;
}
/* we done with that interrupt source, release it. */
src->active = 0;
@@ -1623,3 +1642,12 @@ int rte_thread_is_intr(void)
{
return rte_thread_equal(intr_thread, rte_thread_self());
}
+
+uint32_t
+rte_intr_active_events_flags(void)
+{
+ if (rte_thread_is_intr())
+ return active_events;
+
+ return 0;
+}
diff --git a/lib/eal/version.map b/lib/eal/version.map
index a20c713eb1..e2a622c3e4 100644
--- a/lib/eal/version.map
+++ b/lib/eal/version.map
@@ -408,6 +408,7 @@ INTERNAL {
rte_eal_get_baseaddr;
rte_eal_parse_coremask;
rte_firmware_read;
+ rte_intr_active_events_flags;
rte_intr_allow_others;
rte_intr_cap_multiple;
rte_intr_dev_fd_get;
diff --git a/lib/eal/windows/eal_interrupts.c b/lib/eal/windows/eal_interrupts.c
index c97118d231..2a0a26eaa5 100644
--- a/lib/eal/windows/eal_interrupts.c
+++ b/lib/eal/windows/eal_interrupts.c
@@ -114,6 +114,12 @@ rte_thread_is_intr(void)
return rte_thread_equal(intr_thread, rte_thread_self());
}
+uint32_t
+rte_intr_active_events_flags(void)
+{
+ return 0;
+}
+
int
rte_intr_rx_ctl(__rte_unused struct rte_intr_handle *intr_handle,
__rte_unused int epfd, __rte_unused int op,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-03-19 22:00:47.971964452 +0000
+++ 0004-interrupts-add-interrupt-event-info.patch 2026-03-19 22:00:47.762359372 +0000
@@ -1 +1 @@
-From 0b0c6f85bea1e9a595174ac39c1e7cb1c13c9e7b Mon Sep 17 00:00:00 2001
+From e687750f42409b37ec5751241f835a351017bd73 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 0b0c6f85bea1e9a595174ac39c1e7cb1c13c9e7b ]
+
@@ -13,2 +14,0 @@
-Cc: stable at dpdk.org
-
@@ -19 +19 @@
- lib/eal/freebsd/eal_interrupts.c | 7 +++++++
+ lib/eal/freebsd/eal_interrupts.c | 6 ++++++
@@ -21,3 +21,4 @@
- lib/eal/linux/eal_interrupts.c | 31 ++++++++++++++++++++++++++++++-
- lib/eal/windows/eal_interrupts.c | 7 +++++++
- 4 files changed, 65 insertions(+), 1 deletion(-)
+ lib/eal/linux/eal_interrupts.c | 30 +++++++++++++++++++++++++++++-
+ lib/eal/version.map | 1 +
+ lib/eal/windows/eal_interrupts.c | 6 ++++++
+ 5 files changed, 63 insertions(+), 1 deletion(-)
@@ -26 +27 @@
-index 5c3ab6699e..bb2bc529f2 100644
+index 23747babc2..445a1c706f 100644
@@ -29 +30 @@
-@@ -768,3 +768,10 @@ int rte_thread_is_intr(void)
+@@ -748,3 +748,9 @@ int rte_thread_is_intr(void)
@@ -34 +34,0 @@
-+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_active_events_flags)
@@ -80 +80 @@
-index f3f6bdd01d..5d0607effe 100644
+index 5d8ee9a18a..14472ee929 100644
@@ -83 +83 @@
-@@ -40,6 +40,8 @@
+@@ -36,6 +36,8 @@
@@ -92 +92 @@
-@@ -886,6 +888,22 @@ out:
+@@ -894,6 +896,22 @@ out:
@@ -115 +115 @@
-@@ -1013,7 +1031,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
+@@ -1025,7 +1043,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
@@ -124 +124 @@
-@@ -1027,6 +1045,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
+@@ -1039,6 +1057,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
@@ -132 +132 @@
-@@ -1641,3 +1660,13 @@ int rte_thread_is_intr(void)
+@@ -1623,3 +1642,12 @@ int rte_thread_is_intr(void)
@@ -137 +136,0 @@
-+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_active_events_flags)
@@ -145,0 +145,12 @@
+diff --git a/lib/eal/version.map b/lib/eal/version.map
+index a20c713eb1..e2a622c3e4 100644
+--- a/lib/eal/version.map
++++ b/lib/eal/version.map
+@@ -408,6 +408,7 @@ INTERNAL {
+ rte_eal_get_baseaddr;
+ rte_eal_parse_coremask;
+ rte_firmware_read;
++ rte_intr_active_events_flags;
+ rte_intr_allow_others;
+ rte_intr_cap_multiple;
+ rte_intr_dev_fd_get;
@@ -147 +158 @@
-index 5ff30c7631..5650b84d1f 100644
+index c97118d231..2a0a26eaa5 100644
@@ -150 +161 @@
-@@ -116,6 +116,13 @@ rte_thread_is_intr(void)
+@@ -114,6 +114,12 @@ rte_thread_is_intr(void)
@@ -154 +164,0 @@
-+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_active_events_flags)
@@ -161 +170,0 @@
- RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_rx_ctl)
@@ -163,0 +173 @@
+ __rte_unused int epfd, __rte_unused int op,
More information about the stable
mailing list