From: Brian Norris <briannorris@chromium.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Aleksandrs Vinarskis <alex.vinarskis@gmail.com>,
Tsai Sung-Fu <danielsftsai@google.com>,
Douglas Anderson <dianders@chromium.org>,
linux-kernel@vger.kernel.org, Johan Hovold <johan@kernel.org>
Subject: Re: [PATCH v2 1/2] genirq: Retain depth for managed IRQs across CPU hotplug
Date: Wed, 11 Jun 2025 11:51:59 -0700 [thread overview]
Message-ID: <aEnQT3PdjdNJGi25@google.com> (raw)
In-Reply-To: <87o6uuoe5j.ffs@tglx>
Hi Thomas,
On Wed, Jun 11, 2025 at 10:50:32AM +0200, Thomas Gleixner wrote:
> On Wed, Jun 11 2025 at 08:50, Thomas Gleixner wrote:
> > On Tue, Jun 10 2025 at 13:07, Brian Norris wrote:
> >> On Mon, Jun 09, 2025 at 08:19:58PM +0200, Aleksandrs Vinarskis wrote:
> >>
> >> void irq_startup_managed(struct irq_desc *desc)
> >> {
> >> + struct irq_data *d = irq_desc_get_irq_data(desc);
> >> +
> >> /*
> >> * Only start it up when the disable depth is 1, so that a disable,
> >> * hotunplug, hotplug sequence does not end up enabling it during
> >> * hotplug unconditionally.
> >> */
> >> desc->depth--;
> >> + irqd_clr_managed_shutdown(d);
> >
> > If depth > 0, then it's still shutdown and the subsequent enable
> > operation which brings it down to 0 will take care of it. So what are
> > you trying to solve here?
>
> I found the previous version which has an explanation for this. That
Right, I didn't update and carry the explanations here, as I figured I'd
format this all as proper patches after getting Alex's testing
feedbabck. (I think I'll split to two patches, since there are two
distinct bugs I'm fixing in here.)
> makes sense. You really want this to be:
>
> struct irq_data *d = irq_desc_get_irq_data(desc);
>
> /* Proper comment */
> irqd_clr_managed_shutdown(d);
Ack, will add a comment.
> /*
> * Only start it up when the disable depth is 1, so that a disable,
> * hotunplug, hotplug sequence does not end up enabling it during
> * hotplug unconditionally.
> */
> desc->depth--;
>
> ...
>
> >> if (!desc->depth)
> >> irq_startup(desc, IRQ_RESEND, IRQ_START_COND);
> >> }
> >> diff --git a/kernel/irq/cpuhotplug.c b/kernel/irq/cpuhotplug.c
> >> index f07529ae4895..755346ea9819 100644
> >> --- a/kernel/irq/cpuhotplug.c
> >> +++ b/kernel/irq/cpuhotplug.c
> >> @@ -210,13 +210,6 @@ static void irq_restore_affinity_of_irq(struct irq_desc *desc, unsigned int cpu)
> >> !irq_data_get_irq_chip(data) || !cpumask_test_cpu(cpu, affinity))
> >> return;
> >>
> >> - /*
> >> - * Don't restore suspended interrupts here when a system comes back
> >> - * from S3. They are reenabled via resume_device_irqs().
> >> - */
> >> - if (desc->istate & IRQS_SUSPENDED)
> >> - return;
> >> -
> >
> > Huch? Care to read:
> >
> > a60dd06af674 ("genirq/cpuhotplug: Skip suspended interrupts when restoring affinity")
>
> Never mind. After staring long enough at it, this should work because
> suspend increments depth and shutdown does too.
Yeah, that one definitely deserves an explanation :)
I wrote out a commit message already, but didn't include it here yet, as
I was only looking for testing. Sorry to have sent you staring so long
at it.
One snippet:
This effectively reverts commit a60dd06af674 ("genirq/cpuhotplug: Skip
suspended interrupts when restoring affinity"), because it is replaced
by commit 788019eb559f ("genirq: Retain disable depth for managed
interrupts across CPU hotplug").
IOW, the depth-tracking we added accomplishes the same goal as commit
a60dd06af674, but including both causes further bugs/imbalances.
Brian
next prev parent reply other threads:[~2025-06-11 18:52 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-14 20:13 [PATCH v2 0/2] genirq: Retain depth for managed IRQs across CPU hotplug Brian Norris
2025-05-14 20:13 ` [PATCH v2 1/2] " Brian Norris
2025-05-15 14:51 ` [tip: irq/core] genirq: Retain disable depth for managed interrupts " tip-bot2 for Brian Norris
2025-06-06 12:21 ` [PATCH v2 1/2] genirq: Retain depth for managed IRQs " Aleksandrs Vinarskis
2025-06-09 17:13 ` Brian Norris
2025-06-09 18:19 ` Aleksandrs Vinarskis
2025-06-10 20:07 ` Brian Norris
2025-06-11 6:50 ` Thomas Gleixner
2025-06-11 8:50 ` Thomas Gleixner
2025-06-11 18:51 ` Brian Norris [this message]
2025-06-11 6:56 ` Aleksandrs Vinarskis
2025-06-11 19:08 ` Brian Norris
2025-06-12 18:40 ` Brian Norris
2025-06-18 10:17 ` Johan Hovold
2025-06-18 17:10 ` Brian Norris
2025-06-19 8:32 ` Johan Hovold
2025-05-14 20:13 ` [PATCH v2 2/2] genirq: Add kunit tests for depth counts Brian Norris
2025-05-15 14:01 ` kernel test robot
2025-05-15 17:21 ` Brian Norris
2025-05-15 22:24 ` Thomas Gleixner
2025-05-15 14:51 ` [tip: irq/core] genirq: Add kunit tests for disable " tip-bot2 for Brian Norris
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=aEnQT3PdjdNJGi25@google.com \
--to=briannorris@chromium.org \
--cc=alex.vinarskis@gmail.com \
--cc=danielsftsai@google.com \
--cc=dianders@chromium.org \
--cc=johan@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--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.