From: boris.brezillon@free-electrons.com (Boris Brezillon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 3/5] irqchip: Add DT binding doc for the virtual irq demuxer chip
Date: Wed, 11 Feb 2015 15:45:30 +0100 [thread overview]
Message-ID: <20150211154530.24abb00e@bbrezillon> (raw)
In-Reply-To: <2982569.CIWvqghzfx@vostro.rjw.lan>
On Wed, 11 Feb 2015 15:55:47 +0100
"Rafael J. Wysocki" <rjw@rjwysocki.net> wrote:
> On Wednesday, February 11, 2015 01:24:37 PM Boris Brezillon wrote:
> > Hi Mark,
> >
> > On Wed, 11 Feb 2015 11:11:06 +0000
> > Mark Rutland <mark.rutland@arm.com> wrote:
> >
> > > On Wed, Feb 11, 2015 at 08:53:39AM +0000, Boris Brezillon wrote:
> > > > Hi Mark,
> > > >
> > > > On Tue, 10 Feb 2015 20:48:36 +0000
> > > > Mark Rutland <mark.rutland@arm.com> wrote:
> > > >
> > > > > On Tue, Feb 10, 2015 at 03:52:01PM +0000, Boris Brezillon wrote:
> > > > > > Hi Mark,
> > > > > >
> > > > > > On Tue, 10 Feb 2015 15:36:28 +0000
> > > > > > Mark Rutland <mark.rutland@arm.com> wrote:
> > > > > >
> > > > > > > Hi Boris,
> > > > > > >
> > > > > > > On Thu, Jan 29, 2015 at 10:33:38AM +0000, Boris Brezillon wrote:
> > > > > > > > Add documentation for the virtual irq demuxer.
> > > > > > > >
> > > > > > > > Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> > > > > > > > Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> > > > > > > > ---
> > > > > > > > .../bindings/interrupt-controller/dumb-demux.txt | 41 ++++++++++++++++++++++
> > > > > > > > 1 file changed, 41 insertions(+)
> > > > > > > > create mode 100644 Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt
> > > > > > > >
> > > > > > > > diff --git a/Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt b/Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt
> > > > > > > > new file mode 100644
> > > > > > > > index 0000000..b9a7830
> > > > > > > > --- /dev/null
> > > > > > > > +++ b/Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt
> > > > > > > > @@ -0,0 +1,41 @@
> > > > > > > > +* Virtual Interrupt Demultiplexer
> > > > > > > > +
> > > > > > > > +This virtual demultiplexer simply forward all incoming interrupts to its
> > > > > > > > +enabled/unmasked children.
> > > > > > > > +It is only intended to be used by hardware that do not provide a proper way
> > > > > > > > +to demultiplex a source interrupt, and thus have to wake all their children
> > > > > > > > +up so that they can possibly handle the interrupt (if needed).
> > > > > > > > +This can be seen as an alternative to shared interrupts when at least one
> > > > > > > > +of the interrupt children is a timer (and require the irq to stay enabled
> > > > > > > > +on suspend) while others are not. This will prevent calling irq handlers of
> > > > > > > > +non timer devices while they are suspended.
> > > > > > >
> > > > > > > This sounds like a DT-workaround for a Linux implementation problem, and
> > > > > > > I don't think this the right way to solve your problem.
> > > > > >
> > > > > > I understand your concern, but why are you answering while I asked for
> > > > > > DT maintainers reviews for several days (if not several weeks).
> > > > > >
> > > > > > >
> > > > > > > Why does this have to be in DT at all? Why can we not fix the core to
> > > > > > > handle these details?
> > > > > >
> > > > > > We already discussed that with Rob and Thomas, and hiding such a
> > > > > > demuxer chip is not an easy task.
> > > > > > I'm open to any suggestion to do that, though I'd like you (I mean DT
> > > > > > guys) to provide a working implementation (or at least a viable concept)
> > > > > > that would silently demultiplex an irq.
> > > > > >
> > > > > > >
> > > > > > > I am very much not keen on this binding.
> > > > > >
> > > > > > Yes, but do you have anything else to propose.
> > > > > > We're experiencing this warning for 2 releases now, and this is time to
> > > > > > find a solution (even if it's not a perfect one).
> > > > >
> > > > > Thoughts on the patch below?
> > > >
> > > > That's pretty much what I proposed in my first attempt to solve this
> > > > problem [1] (except for a few things commented below).
> > > > Anyway, Thomas suggested to go for the "dumb/virt irq demultiplexer"
> > > > approach instead.
> > >
> > > There is one fundamental difference in that this patch does not require
> > > drivers to be updated (the new flag is only used internally). Which
> > > avoids having to patch every single driver that could possibly be used
> > > in combination with one wanting interrupts during suspend.
> >
> > Actually, that was one of the requirements expressed by Thomas (Thomas,
> > correct me if I'm wrong).
> > The point was to force shared irq users to explicitly specify that they
> > are mixing !IRQF_NO_SUSPEND and IRQF_NO_SUSPEND because they have no
> > other choice.
> >
> > With your patch, there's no way to inform users that they are
> > erroneously setting the IRQF_NO_SUSPEND flag on one of their shared
> > interrupt.
> >
> > >
> > > Any used which did not explicitly request with IRQF_NO_SUSPEND will not
> > > receive interrupts during suspend.
> > >
> > > [...]
> > >
> > > > > +static irqreturn_t __handle_irq_event_percpu(unsigned int irq, struct irqaction *action)
> > > > > +{
> > > > > + /*
> > > > > + * During suspend we must not call potentially unsafe irq handlers.
> > > > > + * See suspend_suspendable_actions.
> > > > > + */
> > > > > + if (unlikely(action->flags & IRQF_NO_ACTION))
> > > > > + return IRQ_NONE;
> > > >
> > > > Thomas was trying to avoid any new conditional code in the interrupt
> > > > handling path, that's why I added a suspended_action list in my
> > > > proposal.
> > > > Even if your 'unlikely' statement make things better I'm pretty sure it
> > > > adds some latency.
> > >
> > > I can see that we don't want to add more code here to keep things
> > > clean/pure, but I find it hard to believe that a single bit test and
> > > branch (for data that should be hot in the cache) are going to add
> > > measurable latency to a path that does pointer chasing to get to the
> > > irqaction in the first place. I could be wrong though, and I'm happy to
> > > benchmark.
> >
> > Again, I don't have enough experience to say this is (or isn't)
> > impacting irq handling latency, I'm just reporting what Thomas told me.
> >
> > >
> > > It would be possible to go for your list shuffling approach here while
> > > still keeping the flag internal and all the logic hidden away in
> > > kernel/irq/pm.c. I wasn't sure how actions could be manipulated during
> > > suspend, which made me wary of moving them to a separate list.
> >
> > Moving them to a temporary list on suspend and restoring them on
> > resume should not be a problem.
> > The only drawback I see is that actions might be reordered after the
> > first resume (anyway, relying on shared irq action order is dangerous
> > IMHO).
>
> We considered doing that too and saw some drawbacks (in addition to the
> reordering of actions you've mentioned). It added just too much complexity
> to the IRQ suspend-resume code.
>
> I, personally, would be fine with adding an IRQ flag to silence the
> warning mentioned by Alexandre. Something like IRQD_TIMER_SHARED that would
> be set automatically if someone requested IRQF_TIMER | IRQF_SHARED.
Yep, but that won't prevent irq handler from being called (even when
they are suspended), and IIRC, that was one of Thomas' concerns.
This shouldn't be a problem for the at91 platform though (actually, this
is the current behavior).
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
To: "Rafael J. Wysocki" <rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org>
Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>,
Nicolas Ferre
<nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>,
Jean-Christophe Plagniol-Villard
<plagnioj-sclMFOaUSTBWk0Htik3J/w@public.gmane.org>,
Alexandre Belloni
<alexandre.belloni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Pawel Moll <Pawel.Moll-5wv7dgnIgG8@public.gmane.org>,
Ian Campbell
<ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org>,
Kumar Gala <galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
"devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"Rafael J. Wysocki"
<rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH v4 3/5] irqchip: Add DT binding doc for the virtual irq demuxer chip
Date: Wed, 11 Feb 2015 15:45:30 +0100 [thread overview]
Message-ID: <20150211154530.24abb00e@bbrezillon> (raw)
In-Reply-To: <2982569.CIWvqghzfx-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
On Wed, 11 Feb 2015 15:55:47 +0100
"Rafael J. Wysocki" <rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org> wrote:
> On Wednesday, February 11, 2015 01:24:37 PM Boris Brezillon wrote:
> > Hi Mark,
> >
> > On Wed, 11 Feb 2015 11:11:06 +0000
> > Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org> wrote:
> >
> > > On Wed, Feb 11, 2015 at 08:53:39AM +0000, Boris Brezillon wrote:
> > > > Hi Mark,
> > > >
> > > > On Tue, 10 Feb 2015 20:48:36 +0000
> > > > Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org> wrote:
> > > >
> > > > > On Tue, Feb 10, 2015 at 03:52:01PM +0000, Boris Brezillon wrote:
> > > > > > Hi Mark,
> > > > > >
> > > > > > On Tue, 10 Feb 2015 15:36:28 +0000
> > > > > > Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org> wrote:
> > > > > >
> > > > > > > Hi Boris,
> > > > > > >
> > > > > > > On Thu, Jan 29, 2015 at 10:33:38AM +0000, Boris Brezillon wrote:
> > > > > > > > Add documentation for the virtual irq demuxer.
> > > > > > > >
> > > > > > > > Signed-off-by: Boris Brezillon <boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
> > > > > > > > Acked-by: Nicolas Ferre <nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
> > > > > > > > ---
> > > > > > > > .../bindings/interrupt-controller/dumb-demux.txt | 41 ++++++++++++++++++++++
> > > > > > > > 1 file changed, 41 insertions(+)
> > > > > > > > create mode 100644 Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt
> > > > > > > >
> > > > > > > > diff --git a/Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt b/Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt
> > > > > > > > new file mode 100644
> > > > > > > > index 0000000..b9a7830
> > > > > > > > --- /dev/null
> > > > > > > > +++ b/Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt
> > > > > > > > @@ -0,0 +1,41 @@
> > > > > > > > +* Virtual Interrupt Demultiplexer
> > > > > > > > +
> > > > > > > > +This virtual demultiplexer simply forward all incoming interrupts to its
> > > > > > > > +enabled/unmasked children.
> > > > > > > > +It is only intended to be used by hardware that do not provide a proper way
> > > > > > > > +to demultiplex a source interrupt, and thus have to wake all their children
> > > > > > > > +up so that they can possibly handle the interrupt (if needed).
> > > > > > > > +This can be seen as an alternative to shared interrupts when at least one
> > > > > > > > +of the interrupt children is a timer (and require the irq to stay enabled
> > > > > > > > +on suspend) while others are not. This will prevent calling irq handlers of
> > > > > > > > +non timer devices while they are suspended.
> > > > > > >
> > > > > > > This sounds like a DT-workaround for a Linux implementation problem, and
> > > > > > > I don't think this the right way to solve your problem.
> > > > > >
> > > > > > I understand your concern, but why are you answering while I asked for
> > > > > > DT maintainers reviews for several days (if not several weeks).
> > > > > >
> > > > > > >
> > > > > > > Why does this have to be in DT at all? Why can we not fix the core to
> > > > > > > handle these details?
> > > > > >
> > > > > > We already discussed that with Rob and Thomas, and hiding such a
> > > > > > demuxer chip is not an easy task.
> > > > > > I'm open to any suggestion to do that, though I'd like you (I mean DT
> > > > > > guys) to provide a working implementation (or at least a viable concept)
> > > > > > that would silently demultiplex an irq.
> > > > > >
> > > > > > >
> > > > > > > I am very much not keen on this binding.
> > > > > >
> > > > > > Yes, but do you have anything else to propose.
> > > > > > We're experiencing this warning for 2 releases now, and this is time to
> > > > > > find a solution (even if it's not a perfect one).
> > > > >
> > > > > Thoughts on the patch below?
> > > >
> > > > That's pretty much what I proposed in my first attempt to solve this
> > > > problem [1] (except for a few things commented below).
> > > > Anyway, Thomas suggested to go for the "dumb/virt irq demultiplexer"
> > > > approach instead.
> > >
> > > There is one fundamental difference in that this patch does not require
> > > drivers to be updated (the new flag is only used internally). Which
> > > avoids having to patch every single driver that could possibly be used
> > > in combination with one wanting interrupts during suspend.
> >
> > Actually, that was one of the requirements expressed by Thomas (Thomas,
> > correct me if I'm wrong).
> > The point was to force shared irq users to explicitly specify that they
> > are mixing !IRQF_NO_SUSPEND and IRQF_NO_SUSPEND because they have no
> > other choice.
> >
> > With your patch, there's no way to inform users that they are
> > erroneously setting the IRQF_NO_SUSPEND flag on one of their shared
> > interrupt.
> >
> > >
> > > Any used which did not explicitly request with IRQF_NO_SUSPEND will not
> > > receive interrupts during suspend.
> > >
> > > [...]
> > >
> > > > > +static irqreturn_t __handle_irq_event_percpu(unsigned int irq, struct irqaction *action)
> > > > > +{
> > > > > + /*
> > > > > + * During suspend we must not call potentially unsafe irq handlers.
> > > > > + * See suspend_suspendable_actions.
> > > > > + */
> > > > > + if (unlikely(action->flags & IRQF_NO_ACTION))
> > > > > + return IRQ_NONE;
> > > >
> > > > Thomas was trying to avoid any new conditional code in the interrupt
> > > > handling path, that's why I added a suspended_action list in my
> > > > proposal.
> > > > Even if your 'unlikely' statement make things better I'm pretty sure it
> > > > adds some latency.
> > >
> > > I can see that we don't want to add more code here to keep things
> > > clean/pure, but I find it hard to believe that a single bit test and
> > > branch (for data that should be hot in the cache) are going to add
> > > measurable latency to a path that does pointer chasing to get to the
> > > irqaction in the first place. I could be wrong though, and I'm happy to
> > > benchmark.
> >
> > Again, I don't have enough experience to say this is (or isn't)
> > impacting irq handling latency, I'm just reporting what Thomas told me.
> >
> > >
> > > It would be possible to go for your list shuffling approach here while
> > > still keeping the flag internal and all the logic hidden away in
> > > kernel/irq/pm.c. I wasn't sure how actions could be manipulated during
> > > suspend, which made me wary of moving them to a separate list.
> >
> > Moving them to a temporary list on suspend and restoring them on
> > resume should not be a problem.
> > The only drawback I see is that actions might be reordered after the
> > first resume (anyway, relying on shared irq action order is dangerous
> > IMHO).
>
> We considered doing that too and saw some drawbacks (in addition to the
> reordering of actions you've mentioned). It added just too much complexity
> to the IRQ suspend-resume code.
>
> I, personally, would be fine with adding an IRQ flag to silence the
> warning mentioned by Alexandre. Something like IRQD_TIMER_SHARED that would
> be set automatically if someone requested IRQF_TIMER | IRQF_SHARED.
Yep, but that won't prevent irq handler from being called (even when
they are suspended), and IIRC, that was one of Thomas' concerns.
This shouldn't be a problem for the at91 platform though (actually, this
is the current behavior).
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Mark Rutland <mark.rutland@arm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Jason Cooper <jason@lakedaemon.net>,
Nicolas Ferre <nicolas.ferre@atmel.com>,
Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>,
Alexandre Belloni <alexandre.belloni@free-electrons.com>,
Rob Herring <robh+dt@kernel.org>, Pawel Moll <Pawel.Moll@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Kumar Gala <galak@codeaurora.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v4 3/5] irqchip: Add DT binding doc for the virtual irq demuxer chip
Date: Wed, 11 Feb 2015 15:45:30 +0100 [thread overview]
Message-ID: <20150211154530.24abb00e@bbrezillon> (raw)
In-Reply-To: <2982569.CIWvqghzfx@vostro.rjw.lan>
On Wed, 11 Feb 2015 15:55:47 +0100
"Rafael J. Wysocki" <rjw@rjwysocki.net> wrote:
> On Wednesday, February 11, 2015 01:24:37 PM Boris Brezillon wrote:
> > Hi Mark,
> >
> > On Wed, 11 Feb 2015 11:11:06 +0000
> > Mark Rutland <mark.rutland@arm.com> wrote:
> >
> > > On Wed, Feb 11, 2015 at 08:53:39AM +0000, Boris Brezillon wrote:
> > > > Hi Mark,
> > > >
> > > > On Tue, 10 Feb 2015 20:48:36 +0000
> > > > Mark Rutland <mark.rutland@arm.com> wrote:
> > > >
> > > > > On Tue, Feb 10, 2015 at 03:52:01PM +0000, Boris Brezillon wrote:
> > > > > > Hi Mark,
> > > > > >
> > > > > > On Tue, 10 Feb 2015 15:36:28 +0000
> > > > > > Mark Rutland <mark.rutland@arm.com> wrote:
> > > > > >
> > > > > > > Hi Boris,
> > > > > > >
> > > > > > > On Thu, Jan 29, 2015 at 10:33:38AM +0000, Boris Brezillon wrote:
> > > > > > > > Add documentation for the virtual irq demuxer.
> > > > > > > >
> > > > > > > > Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> > > > > > > > Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> > > > > > > > ---
> > > > > > > > .../bindings/interrupt-controller/dumb-demux.txt | 41 ++++++++++++++++++++++
> > > > > > > > 1 file changed, 41 insertions(+)
> > > > > > > > create mode 100644 Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt
> > > > > > > >
> > > > > > > > diff --git a/Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt b/Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt
> > > > > > > > new file mode 100644
> > > > > > > > index 0000000..b9a7830
> > > > > > > > --- /dev/null
> > > > > > > > +++ b/Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt
> > > > > > > > @@ -0,0 +1,41 @@
> > > > > > > > +* Virtual Interrupt Demultiplexer
> > > > > > > > +
> > > > > > > > +This virtual demultiplexer simply forward all incoming interrupts to its
> > > > > > > > +enabled/unmasked children.
> > > > > > > > +It is only intended to be used by hardware that do not provide a proper way
> > > > > > > > +to demultiplex a source interrupt, and thus have to wake all their children
> > > > > > > > +up so that they can possibly handle the interrupt (if needed).
> > > > > > > > +This can be seen as an alternative to shared interrupts when at least one
> > > > > > > > +of the interrupt children is a timer (and require the irq to stay enabled
> > > > > > > > +on suspend) while others are not. This will prevent calling irq handlers of
> > > > > > > > +non timer devices while they are suspended.
> > > > > > >
> > > > > > > This sounds like a DT-workaround for a Linux implementation problem, and
> > > > > > > I don't think this the right way to solve your problem.
> > > > > >
> > > > > > I understand your concern, but why are you answering while I asked for
> > > > > > DT maintainers reviews for several days (if not several weeks).
> > > > > >
> > > > > > >
> > > > > > > Why does this have to be in DT at all? Why can we not fix the core to
> > > > > > > handle these details?
> > > > > >
> > > > > > We already discussed that with Rob and Thomas, and hiding such a
> > > > > > demuxer chip is not an easy task.
> > > > > > I'm open to any suggestion to do that, though I'd like you (I mean DT
> > > > > > guys) to provide a working implementation (or at least a viable concept)
> > > > > > that would silently demultiplex an irq.
> > > > > >
> > > > > > >
> > > > > > > I am very much not keen on this binding.
> > > > > >
> > > > > > Yes, but do you have anything else to propose.
> > > > > > We're experiencing this warning for 2 releases now, and this is time to
> > > > > > find a solution (even if it's not a perfect one).
> > > > >
> > > > > Thoughts on the patch below?
> > > >
> > > > That's pretty much what I proposed in my first attempt to solve this
> > > > problem [1] (except for a few things commented below).
> > > > Anyway, Thomas suggested to go for the "dumb/virt irq demultiplexer"
> > > > approach instead.
> > >
> > > There is one fundamental difference in that this patch does not require
> > > drivers to be updated (the new flag is only used internally). Which
> > > avoids having to patch every single driver that could possibly be used
> > > in combination with one wanting interrupts during suspend.
> >
> > Actually, that was one of the requirements expressed by Thomas (Thomas,
> > correct me if I'm wrong).
> > The point was to force shared irq users to explicitly specify that they
> > are mixing !IRQF_NO_SUSPEND and IRQF_NO_SUSPEND because they have no
> > other choice.
> >
> > With your patch, there's no way to inform users that they are
> > erroneously setting the IRQF_NO_SUSPEND flag on one of their shared
> > interrupt.
> >
> > >
> > > Any used which did not explicitly request with IRQF_NO_SUSPEND will not
> > > receive interrupts during suspend.
> > >
> > > [...]
> > >
> > > > > +static irqreturn_t __handle_irq_event_percpu(unsigned int irq, struct irqaction *action)
> > > > > +{
> > > > > + /*
> > > > > + * During suspend we must not call potentially unsafe irq handlers.
> > > > > + * See suspend_suspendable_actions.
> > > > > + */
> > > > > + if (unlikely(action->flags & IRQF_NO_ACTION))
> > > > > + return IRQ_NONE;
> > > >
> > > > Thomas was trying to avoid any new conditional code in the interrupt
> > > > handling path, that's why I added a suspended_action list in my
> > > > proposal.
> > > > Even if your 'unlikely' statement make things better I'm pretty sure it
> > > > adds some latency.
> > >
> > > I can see that we don't want to add more code here to keep things
> > > clean/pure, but I find it hard to believe that a single bit test and
> > > branch (for data that should be hot in the cache) are going to add
> > > measurable latency to a path that does pointer chasing to get to the
> > > irqaction in the first place. I could be wrong though, and I'm happy to
> > > benchmark.
> >
> > Again, I don't have enough experience to say this is (or isn't)
> > impacting irq handling latency, I'm just reporting what Thomas told me.
> >
> > >
> > > It would be possible to go for your list shuffling approach here while
> > > still keeping the flag internal and all the logic hidden away in
> > > kernel/irq/pm.c. I wasn't sure how actions could be manipulated during
> > > suspend, which made me wary of moving them to a separate list.
> >
> > Moving them to a temporary list on suspend and restoring them on
> > resume should not be a problem.
> > The only drawback I see is that actions might be reordered after the
> > first resume (anyway, relying on shared irq action order is dangerous
> > IMHO).
>
> We considered doing that too and saw some drawbacks (in addition to the
> reordering of actions you've mentioned). It added just too much complexity
> to the IRQ suspend-resume code.
>
> I, personally, would be fine with adding an IRQ flag to silence the
> warning mentioned by Alexandre. Something like IRQD_TIMER_SHARED that would
> be set automatically if someone requested IRQF_TIMER | IRQF_SHARED.
Yep, but that won't prevent irq handler from being called (even when
they are suspended), and IIRC, that was one of Thomas' concerns.
This shouldn't be a problem for the at91 platform though (actually, this
is the current behavior).
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
next prev parent reply other threads:[~2015-02-11 14:45 UTC|newest]
Thread overview: 165+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-29 10:33 [PATCH v4 0/5] ARM: at91: fix irq_pm_install_action WARNING Boris Brezillon
2015-01-29 10:33 ` Boris Brezillon
2015-01-29 10:33 ` Boris Brezillon
2015-01-29 10:33 ` [PATCH v4 1/5] genirq: Authorize chained handlers to remain disabled when initialized Boris Brezillon
2015-01-29 10:33 ` Boris Brezillon
2015-01-29 10:33 ` Boris Brezillon
2015-01-29 10:33 ` [PATCH v4 2/5] irqchip: add virtual demultiplexer implementation Boris Brezillon
2015-01-29 10:33 ` Boris Brezillon
2015-02-10 15:00 ` Peter Zijlstra
2015-02-10 15:00 ` Peter Zijlstra
2015-02-10 15:20 ` Boris Brezillon
2015-02-10 15:20 ` Boris Brezillon
2015-02-10 15:43 ` [PATCH] genirq: fix virtual irq demuxer related comments Boris Brezillon
2015-02-10 15:43 ` Boris Brezillon
2015-02-10 16:14 ` Peter Zijlstra
2015-02-10 16:14 ` Peter Zijlstra
2015-02-10 16:14 ` Peter Zijlstra
2015-02-20 16:12 ` Mark Rutland
2015-02-20 16:12 ` Mark Rutland
2015-02-20 16:17 ` Peter Zijlstra
2015-02-20 16:17 ` Peter Zijlstra
2015-02-10 15:48 ` [PATCH v4 2/5] irqchip: add virtual demultiplexer implementation Mark Rutland
2015-02-10 15:48 ` Mark Rutland
2015-02-10 15:48 ` Mark Rutland
2015-01-29 10:33 ` [PATCH v4 3/5] irqchip: Add DT binding doc for the virtual irq demuxer chip Boris Brezillon
2015-01-29 10:33 ` Boris Brezillon
2015-02-10 15:36 ` Mark Rutland
2015-02-10 15:36 ` Mark Rutland
2015-02-10 15:52 ` Boris Brezillon
2015-02-10 15:52 ` Boris Brezillon
2015-02-10 16:06 ` Boris Brezillon
2015-02-10 16:06 ` Boris Brezillon
2015-02-10 16:16 ` Mark Rutland
2015-02-10 16:16 ` Mark Rutland
2015-02-10 16:20 ` Boris Brezillon
2015-02-10 16:20 ` Boris Brezillon
2015-02-10 20:48 ` Mark Rutland
2015-02-10 20:48 ` Mark Rutland
2015-02-11 8:53 ` Boris Brezillon
2015-02-11 8:53 ` Boris Brezillon
2015-02-11 11:11 ` Mark Rutland
2015-02-11 11:11 ` Mark Rutland
2015-02-11 11:11 ` Mark Rutland
2015-02-11 12:24 ` Boris Brezillon
2015-02-11 12:24 ` Boris Brezillon
2015-02-11 12:24 ` Boris Brezillon
2015-02-11 12:36 ` Mark Rutland
2015-02-11 12:36 ` Mark Rutland
2015-02-11 13:38 ` Alexandre Belloni
2015-02-11 13:38 ` Alexandre Belloni
2015-02-11 13:38 ` Alexandre Belloni
2015-02-11 13:48 ` Mark Rutland
2015-02-11 13:48 ` Mark Rutland
2015-02-11 13:48 ` Mark Rutland
2015-02-11 14:55 ` Rafael J. Wysocki
2015-02-11 14:55 ` Rafael J. Wysocki
2015-02-11 14:55 ` Rafael J. Wysocki
2015-02-11 14:43 ` Mark Rutland
2015-02-11 14:43 ` Mark Rutland
2015-02-11 15:17 ` Rafael J. Wysocki
2015-02-11 15:17 ` Rafael J. Wysocki
2015-02-11 15:03 ` Boris Brezillon
2015-02-11 15:03 ` Boris Brezillon
2015-02-11 15:03 ` Boris Brezillon
2015-02-11 15:39 ` Rafael J. Wysocki
2015-02-11 15:39 ` Rafael J. Wysocki
2015-02-11 15:23 ` Mark Rutland
2015-02-11 15:23 ` Mark Rutland
2015-02-11 15:12 ` Mark Rutland
2015-02-11 15:12 ` Mark Rutland
2015-02-11 15:51 ` Rafael J. Wysocki
2015-02-11 15:51 ` Rafael J. Wysocki
2015-02-11 15:57 ` Mark Rutland
2015-02-11 15:57 ` Mark Rutland
2015-02-11 16:15 ` Boris Brezillon
2015-02-11 16:15 ` Boris Brezillon
2015-02-11 16:32 ` Mark Rutland
2015-02-11 16:32 ` Mark Rutland
2015-02-11 16:32 ` Mark Rutland
2015-02-11 16:38 ` Boris Brezillon
2015-02-11 16:38 ` Boris Brezillon
2015-02-11 17:17 ` Mark Rutland
2015-02-11 17:17 ` Mark Rutland
2015-02-20 14:22 ` Mark Rutland
2015-02-20 14:22 ` Mark Rutland
2015-02-20 14:22 ` Mark Rutland
2015-02-20 14:53 ` Boris Brezillon
2015-02-20 14:53 ` Boris Brezillon
2015-02-20 15:16 ` Mark Rutland
2015-02-20 15:16 ` Mark Rutland
2015-02-20 15:16 ` Mark Rutland
2015-02-23 17:00 ` Boris Brezillon
2015-02-23 17:00 ` Boris Brezillon
2015-02-23 18:14 ` Mark Rutland
2015-02-23 18:14 ` Mark Rutland
2015-02-23 18:14 ` Mark Rutland
2015-02-23 20:16 ` Boris Brezillon
2015-02-23 20:16 ` Boris Brezillon
2015-02-11 16:42 ` Rafael J. Wysocki
2015-02-11 16:42 ` Rafael J. Wysocki
2015-02-11 16:28 ` Boris Brezillon
2015-02-11 16:28 ` Boris Brezillon
2015-02-11 17:13 ` Mark Rutland
2015-02-11 17:13 ` Mark Rutland
2015-02-11 17:13 ` Mark Rutland
2015-02-11 17:29 ` Boris Brezillon
2015-02-11 17:29 ` Boris Brezillon
2015-02-12 10:52 ` Mark Rutland
2015-02-12 10:52 ` Mark Rutland
2015-02-12 11:09 ` Boris Brezillon
2015-02-12 11:09 ` Boris Brezillon
2015-02-12 11:23 ` Mark Rutland
2015-02-12 11:23 ` Mark Rutland
2015-02-16 9:49 ` Peter Zijlstra
2015-02-16 9:49 ` Peter Zijlstra
2015-02-16 9:49 ` Peter Zijlstra
2015-02-16 9:28 ` Peter Zijlstra
2015-02-16 9:28 ` Peter Zijlstra
2015-02-16 12:23 ` Mark Rutland
2015-02-16 12:23 ` Mark Rutland
2015-02-16 12:23 ` Mark Rutland
2015-02-19 1:16 ` Rafael J. Wysocki
2015-02-19 1:16 ` Rafael J. Wysocki
2015-02-19 11:23 ` Mark Rutland
2015-02-19 11:23 ` Mark Rutland
2015-02-19 11:23 ` Mark Rutland
2015-02-19 22:35 ` Rafael J. Wysocki
2015-02-19 22:35 ` Rafael J. Wysocki
2015-02-20 10:31 ` Mark Rutland
2015-02-20 10:31 ` Mark Rutland
2015-02-24 1:02 ` Rafael J. Wysocki
2015-02-24 1:02 ` Rafael J. Wysocki
2015-02-24 1:02 ` Rafael J. Wysocki
2015-02-24 8:42 ` Boris Brezillon
2015-02-24 8:42 ` Boris Brezillon
2015-02-11 14:45 ` Boris Brezillon [this message]
2015-02-11 14:45 ` Boris Brezillon
2015-02-11 14:45 ` Boris Brezillon
2015-02-11 14:39 ` Rafael J. Wysocki
2015-02-11 14:39 ` Rafael J. Wysocki
2015-02-11 9:11 ` Peter Zijlstra
2015-02-11 9:11 ` Peter Zijlstra
2015-02-11 9:11 ` Peter Zijlstra
2015-02-11 11:15 ` Mark Rutland
2015-02-11 11:15 ` Mark Rutland
2015-02-11 14:31 ` Rafael J. Wysocki
2015-02-11 14:31 ` Rafael J. Wysocki
2015-02-11 14:14 ` Mark Rutland
2015-02-11 14:14 ` Mark Rutland
2015-02-11 14:14 ` Mark Rutland
2015-02-11 15:07 ` Rafael J. Wysocki
2015-02-11 15:07 ` Rafael J. Wysocki
2015-02-11 15:03 ` Mark Rutland
2015-02-11 15:03 ` Mark Rutland
2015-02-11 15:03 ` Mark Rutland
2015-02-11 14:34 ` Rafael J. Wysocki
2015-02-11 14:34 ` Rafael J. Wysocki
2015-02-11 14:34 ` Rafael J. Wysocki
2015-01-29 10:33 ` [PATCH v4 4/5] ARM: at91/dt: select VIRT_IRQ_DEMUX for all at91 SoCs Boris Brezillon
2015-01-29 10:33 ` Boris Brezillon
2015-01-29 10:33 ` [PATCH v4 5/5] ARM: at91/dt: define a virtual irq demultiplexer chip connected on irq1 Boris Brezillon
2015-01-29 10:33 ` Boris Brezillon
2015-01-29 10:33 ` Boris Brezillon
2015-02-09 15:47 ` [PATCH v4 0/5] ARM: at91: fix irq_pm_install_action WARNING Boris Brezillon
2015-02-09 15:47 ` Boris Brezillon
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=20150211154530.24abb00e@bbrezillon \
--to=boris.brezillon@free-electrons.com \
--cc=linux-arm-kernel@lists.infradead.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 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.