From: Luigi Rizzo <lrizzo@google.com>
To: Thomas Gleixner <tglx@linutronix.de>,
Marc Zyngier <maz@kernel.org>,
Luigi Rizzo <rizzo.unipi@gmail.com>,
Paolo Abeni <pabeni@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
Bjorn Helgaas <bhelgaas@google.com>,
Luigi Rizzo <lrizzo@google.com>
Subject: [PATCH v5 2/7] genirq: Add GSIM infrastructure
Date: Wed, 19 Aug 2026 12:43:36 +0000 [thread overview]
Message-ID: <20260819124341.4185621-3-lrizzo@google.com> (raw)
In-Reply-To: <20260819124341.4185621-1-lrizzo@google.com>
Introduce the Kconfig option CONFIG_IRQ_SW_MODERATION and GSIM fields in
struct irq_desc to support Global Software Interrupt Moderation (GSIM).
Note: This commit only introduces the configuration option and basic
data structures. The core moderation logic, procfs interface, and
integration into the interrupt flow are implemented in subsequent
commits. Enabling this option at this stage is a build-safe no-op.
Signed-off-by: Luigi Rizzo <lrizzo@google.com>
---
include/linux/irqdesc.h | 12 ++++++++++++
kernel/irq/Kconfig | 11 +++++++++++
kernel/irq/internals.h | 8 ++++++++
kernel/irq/irqdesc.c | 1 +
4 files changed, 32 insertions(+)
diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h
index 8080db17c1b1b..5ba130e224167 100644
--- a/include/linux/irqdesc.h
+++ b/include/linux/irqdesc.h
@@ -18,6 +18,16 @@ struct irq_desc;
struct irq_domain;
struct pt_regs;
+/**
+ * struct irq_desc_swmod - software interrupt moderation state
+ * @swmod_node: list head for per-CPU list of moderated irq_desc
+ */
+struct irq_desc_swmod {
+#ifdef CONFIG_IRQ_SW_MODERATION
+ struct list_head swmod_node;
+#endif
+};
+
/**
* struct irqstat - interrupt statistics
* @cnt: real-time interrupt count
@@ -59,6 +69,7 @@ struct irq_redirect {
* @threads_handled_last: comparator field for deferred spurious detection of threaded handlers
* @lock: locking for SMP
* @redirect: Facility for redirecting interrupts via irq_work
+ * @swmod_state: software interrupt moderation state
* @affinity_hint: hint to user space for preferred irq affinity
* @affinity_notify: context for notification of affinity changes
* @pending_mask: pending rebalanced interrupts
@@ -95,6 +106,7 @@ struct irq_desc {
atomic_t threads_handled;
int threads_handled_last;
raw_spinlock_t lock;
+ struct irq_desc_swmod swmod_state;
struct cpumask *percpu_enabled;
#ifdef CONFIG_SMP
struct irq_redirect redirect;
diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig
index 05cba4e16dad1..d8d556b4a279d 100644
--- a/kernel/irq/Kconfig
+++ b/kernel/irq/Kconfig
@@ -150,6 +150,17 @@ config IRQ_KUNIT_TEST
If unsure, say N.
+config IRQ_SW_MODERATION
+ bool "Enable Global Software Interrupt Moderation"
+ depends on PROC_FS
+ help
+ Enable Global Software Interrupt Moderation.
+ Uses a local timer to delay interrupts in configurable ways
+ and depending on various global system load indicators
+ and targets.
+
+ If you don't know what to do here, say N.
+
endmenu
config GENERIC_IRQ_MULTI_HANDLER
diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h
index 0ce21dd454047..716a7c2e3633a 100644
--- a/kernel/irq/internals.h
+++ b/kernel/irq/internals.h
@@ -395,3 +395,11 @@ static inline struct irq_data *irqd_get_parent_data(struct irq_data *irqd)
return NULL;
#endif
}
+#ifdef CONFIG_IRQ_SW_MODERATION
+static inline void irq_moderation_init_fields(struct irq_desc *desc)
+{
+ INIT_LIST_HEAD(&desc->swmod_state.swmod_node);
+}
+#else
+static inline void irq_moderation_init_fields(struct irq_desc *desc) {}
+#endif
diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
index 80ef4e27dcf47..e8488c9352d0c 100644
--- a/kernel/irq/irqdesc.c
+++ b/kernel/irq/irqdesc.c
@@ -120,6 +120,7 @@ static inline void free_masks(struct irq_desc *desc) { }
static void desc_set_defaults(unsigned int irq, struct irq_desc *desc, int node,
const struct cpumask *affinity, struct module *owner)
{
+ irq_moderation_init_fields(desc);
desc->irq_common_data.handler_data = NULL;
desc->irq_common_data.msi_desc = NULL;
--
2.55.0.737.g08866a6d13-goog
next prev parent reply other threads:[~2026-08-19 12:43 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-19 12:43 [PATCH v5 0/7] Global Software Interrupt Moderation (GSIM) Luigi Rizzo
2026-08-19 12:43 ` [PATCH v5 1/7] genirq: Add flags for software interrupt moderation Luigi Rizzo
2026-08-19 12:50 ` sashiko-bot
2026-08-19 12:43 ` Luigi Rizzo [this message]
2026-08-19 12:48 ` [PATCH v5 2/7] genirq: Add GSIM infrastructure sashiko-bot
2026-08-19 12:43 ` [PATCH v5 3/7] genirq: Implement core GSIM moderation logic Luigi Rizzo
2026-08-19 12:52 ` sashiko-bot
2026-08-19 12:43 ` [PATCH v5 4/7] genirq: Integrate GSIM into interrupt flow Luigi Rizzo
2026-08-19 12:58 ` sashiko-bot
2026-08-19 12:43 ` [PATCH v5 5/7] genirq: Add GSIM user space configuration (procfs) Luigi Rizzo
2026-08-19 12:58 ` sashiko-bot
2026-08-19 12:43 ` [PATCH v5 6/7] genirq: Adaptive Global Software Interrupt Moderation (GSIM) Luigi Rizzo
2026-08-19 12:59 ` sashiko-bot
2026-08-19 12:43 ` [PATCH v5 7/7] PCI/MSI: re-enable conditional parent mask/unmask with sw moderation Luigi Rizzo
2026-08-19 12:51 ` sashiko-bot
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=20260819124341.4185621-3-lrizzo@google.com \
--to=lrizzo@google.com \
--cc=bhelgaas@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=maz@kernel.org \
--cc=pabeni@redhat.com \
--cc=rizzo.unipi@gmail.com \
--cc=tglx@linutronix.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.