From: Thomas Gleixner <tglx@linutronix.de>
To: Wladislav Wiebe <wladislav.wiebe@nokia.com>, corbet@lwn.net
Cc: akpm@linux-foundation.org, paulmck@kernel.org,
rostedt@goodmis.org, Neeraj.Upadhyay@amd.com, david@redhat.com,
bp@alien8.de, arnd@arndb.de, fvdl@google.com,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
wladislav.wiebe@nokia.com, peterz@infradead.org
Subject: Re: [PATCH v2] genirq: add support for warning on long-running IRQ handlers
Date: Fri, 18 Jul 2025 22:53:23 +0200 [thread overview]
Message-ID: <877c05w798.ffs@tglx> (raw)
In-Reply-To: <20250714084209.918-1-wladislav.wiebe@nokia.com>
On Mon, Jul 14 2025 at 10:41, Wladislav Wiebe wrote:
> This patch adds a mechanism to detect and warn about long-running IRQ
# git grep 'This patch' Documentation/process/
Also please read:
https://www.kernel.org/doc/html/latest/process/maintainer-tip.html#changelog
> +static int __init irqhandler_duration_check_setup(char *arg)
> +{
> + unsigned long val;
> + int ret;
> +
> + if (!arg)
> + return 0;
> +
> + ret = kstrtoul(arg, 0, &val);
> + if (ret)
> + return ret;
> +
> + if (val > 0) {
> + irqhandler_duration_threshold_us = val;
> + static_branch_enable(&irqhandler_duration_check_enabled);
> + } else {
> + pr_err("Invalid irqhandler.duration_warn_us setting (%lu)\n", val);
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +early_param("irqhandler.duration_warn_us", irqhandler_duration_check_setup);
Why early_param? Nothing cares about this during early boot.
> +static inline void irqhandler_duration_check(u64 ts_start, unsigned int irq,
> + struct irqaction *action)
> +{
> + u64 delta_us = (local_clock() - ts_start) >> 10;
Lacks a comment that this is an intentional approximation.
> + if (unlikely(delta_us > irqhandler_duration_threshold_us)) {
> + pr_warn_ratelimited("[CPU%d] long duration on IRQ[%u:%ps], took: %llu us\n",
> + smp_processor_id(), irq, action->handler, delta_us);
Please align the arguments in the second line properly.
https://www.kernel.org/doc/html/latest/process/maintainer-tip.html#line-breaks
> + }
> +}
> +
> irqreturn_t __handle_irq_event_percpu(struct irq_desc *desc)
> {
> irqreturn_t retval = IRQ_NONE;
> @@ -146,6 +184,7 @@ irqreturn_t __handle_irq_event_percpu(struct irq_desc *desc)
>
> for_each_action_of_desc(desc, action) {
> irqreturn_t res;
> + u64 ts_start;
This wants to be in the if() branch where it is actually used.
> /*
> * If this IRQ would be threaded under force_irqthreads, mark it so.
> @@ -155,7 +194,14 @@ irqreturn_t __handle_irq_event_percpu(struct irq_desc *desc)
> lockdep_hardirq_threaded();
>
> trace_irq_handler_entry(irq, action);
> - res = action->handler(irq, action->dev_id);
> +
> + if (static_branch_unlikely(&irqhandler_duration_check_enabled)) {
> + ts_start = local_clock();
> + res = action->handler(irq, action->dev_id);
> + irqhandler_duration_check(ts_start, irq, action);
> + } else
> + res = action->handler(irq, action->dev_id);
> +
Even if not required by C, the else clause wants brackets too for
symmetry.
if (foo)
bar();
else
baz();
parses perfectly fine.
if (foo) {
do_stuff();
bar();
} else
baz();
is asymmetrical and disturbs the reading flow, which is pattern
based. The extra brackets just make it easier to parse:
if (foo) {
do_stuff();
bar();
} else {
baz();
}
See?
Thanks,
tglx
next prev parent reply other threads:[~2025-07-18 20:53 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-14 8:41 [PATCH v2] genirq: add support for warning on long-running IRQ handlers Wladislav Wiebe
2025-07-18 20:53 ` Thomas Gleixner [this message]
2025-07-23 18:39 ` Wladislav Wiebe
2025-07-22 8:21 ` Jiri Slaby
2025-07-23 18:34 ` Wladislav Wiebe
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=877c05w798.ffs@tglx \
--to=tglx@linutronix.de \
--cc=Neeraj.Upadhyay@amd.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=bp@alien8.de \
--cc=corbet@lwn.net \
--cc=david@redhat.com \
--cc=fvdl@google.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=wladislav.wiebe@nokia.com \
/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.