All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: Antonio Borneo <antonio.borneo@foss.st.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Maxime Coquelin <mcoquelin.stm32@gmail.com>,
	Alexandre Torgue <alexandre.torgue@foss.st.com>,
	<linux-kernel@vger.kernel.org>,
	<linux-stm32@st-md-mailman.stormreply.com>,
	<linux-arm-kernel@lists.infradead.org>,
	Pascal Paillet <p.paillet@foss.st.com>,
	Ludovic Barre <ludovic.barre@foss.st.com>,
	"Loic\ Pallardy" <loic.pallardy@foss.st.com>
Subject: Re: [PATCH 4/7] irqchip/stm32-exti: forward irq_request_resources to parent
Date: Thu, 12 May 2022 11:04:41 +0100	[thread overview]
Message-ID: <871qwz6p8m.wl-maz@kernel.org> (raw)
In-Reply-To: <87d059e62a54e2216acdf4ca3a6a81b8d771af42.camel@foss.st.com>

On Wed, 11 May 2022 15:55:03 +0100,
Antonio Borneo <antonio.borneo@foss.st.com> wrote:
> 
> On Tue, 2022-05-10 at 19:44 +0100, Marc Zyngier wrote:
> > On Tue, 10 May 2022 17:41:20 +0100,
> > Antonio Borneo <antonio.borneo@foss.st.com> wrote:
> > > 
> > > From: Pascal Paillet <p.paillet@foss.st.com>
> > > 
> > > Enhance stm32-exti driver to forward request_resources and
> > > release_resources_parent operations to parent.
> > > Do not use irq_request_resources_parent because it returns
> > > an error when the parent does not implement irq_request_resources.
> > > 
> > > Signed-off-by: Pascal Paillet <p.paillet@foss.st.com>
> > > Signed-off-by: Antonio Borneo <antonio.borneo@foss.st.com>
> > > ---
> > >  drivers/irqchip/irq-stm32-exti.c | 14 ++++++++++++++
> > >  1 file changed, 14 insertions(+)
> > > 
> > > diff --git a/drivers/irqchip/irq-stm32-exti.c
> > > b/drivers/irqchip/irq-stm32-exti.c
> > > index c8003f4f0457..3f6d524a87fe 100644
> > > --- a/drivers/irqchip/irq-stm32-exti.c
> > > +++ b/drivers/irqchip/irq-stm32-exti.c
> > > @@ -550,6 +550,16 @@ static void stm32_exti_h_unmask(struct
> > > irq_data *d)
> > >                 irq_chip_unmask_parent(d);
> > >  }
> > >  
> > > +static int stm32_exti_h_request_resources(struct irq_data *data)
> > > +{
> > > +       data = data->parent_data;
> > > +
> > > +       if (data->chip->irq_request_resources)
> > > +               return data->chip->irq_request_resources(data);
> > > +
> > > +       return 0;
> > > +}
> > 
> > Why do you need to reinvent the whole thing? Why isn't it just:
> > 
> > static int stm32_exti_h_request_resources(struct irq_data *data)
> > {
> >         irq_chip_request_resources_parent(data);
> >         return 0;
> > }
> > 
> > And this really deserves a comment. I also wonder whether we should
> > change this behaviour to always return 0.
> 
> Marc,
> the stm32-exti sits in the middle of an irq hierarchy, exactly as the
> "Interrupt remapping controller" in the section "Hierarchy IRQ domain"
> in Documentation/core-api/irq/irq-domain.rst

Yes, I'm painfully aware of this.

> 
> When the "IOAPIC controller" runs a request_*_irq(), it causes calling
> irq_request_resources() of its parent, if the parent implements it.
> There is no automatic propagation in the hierarchy, so it's up to each
> irq_chip in the hierarchy to propagate this call to its parent.
> Using irq_chip_request_resources_parent() fits this use case.
> 
> At the end of the chain, the "Local APIC controller" is not obliged to
> implement the 'optional' irq_request_resources(). And here starts the
> pain:
> irq_chip_request_resources_parent() returns -ENOSYS if the parent does
> not implement the optional irq_request_resources().
> So we need to filter-out the error for unimplemented function, e.g.:
> 
> static int stm32_exti_h_request_resources(struct irq_data *data)
> {
> 	int ret;
> 	ret = irq_chip_request_resources_parent(data);
> 	/* not an error if parent does not implement it */
> 	return (ret == -ENOSYS) ? 0 : ret;
> }
> 
> but then we cannot discriminate if -ENOSYS comes from missing optional
> irq_request_resources() in parent, or from an error inside parent's
> irq_request_resources(). That's why this patch reimplements the wheel.

But you don't need to know the difference either. The only case you
would get this error is if some level doesn't implement it. If there
is an error number clash, this needs to be fixed.

> Shuldn't irq_chip_request_resources_parent() return 0 when the parent
> doesn't implements the optional method, as it's already the case inside
> kernel/irq/manage.c:1390 static int irq_request_resources(struct
> irq_desc *desc)
> ?

This is what I suggested above.

	M.

-- 
Without deviation from the norm, progress is not possible.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-05-12 10:06 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-10 16:41 [PATCH 1/7] irqchip/stm32-exti: set_affinity return IRQ_SET_MASK_OK_DONE if no parent Antonio Borneo
2022-05-10 16:41 ` Antonio Borneo
2022-05-10 16:41 ` [PATCH 2/7] irqchip/stm32-exti: manage IMR at each mask/unmask for direct event Antonio Borneo
2022-05-10 16:41   ` Antonio Borneo
2022-05-11  8:04   ` Marc Zyngier
2022-05-11  8:04     ` Marc Zyngier
2022-05-10 16:41 ` [PATCH 3/7] irqchip/stm32-exti: remove EMR register access for stm32mp15 Antonio Borneo
2022-05-10 16:41   ` Antonio Borneo
2022-05-10 18:38   ` Marc Zyngier
2022-05-10 18:38     ` Marc Zyngier
2022-05-10 16:41 ` [PATCH 4/7] irqchip/stm32-exti: forward irq_request_resources to parent Antonio Borneo
2022-05-10 16:41   ` Antonio Borneo
2022-05-10 18:44   ` Marc Zyngier
2022-05-10 18:44     ` Marc Zyngier
2022-05-11 14:55     ` Antonio Borneo
2022-05-11 14:55       ` Antonio Borneo
2022-05-12 10:04       ` Marc Zyngier [this message]
2022-05-10 16:41 ` [PATCH 5/7] irqchip/stm32-exti: prevent illegal read due to unbounded DT value Antonio Borneo
2022-05-10 16:41   ` Antonio Borneo
2022-05-10 16:41 ` [PATCH 6/7] irqchip/stm32-exti: read event trigger type from event_trg register Antonio Borneo
2022-05-10 16:41   ` Antonio Borneo
2022-05-10 16:41 ` [PATCH 7/7] irqchip/stm32-exti: simplify irq description table Antonio Borneo
2022-05-10 16:41   ` Antonio Borneo
2022-05-10 18:34 ` [PATCH 1/7] irqchip/stm32-exti: set_affinity return IRQ_SET_MASK_OK_DONE if no parent Marc Zyngier
2022-05-10 18:34   ` Marc Zyngier
2022-05-11  6:39   ` Antonio Borneo
2022-05-11  6:39     ` Antonio Borneo
2022-05-11  8:09     ` Marc Zyngier
2022-05-11  8:09       ` Marc Zyngier
2022-06-06 16:27 ` [PATCH v2 0/6] irqchip/stm32-exti: Fixes and simplifications Antonio Borneo
2022-06-06 16:27   ` Antonio Borneo
2022-07-04 12:56   ` Antonio Borneo
2022-07-04 12:56     ` Antonio Borneo
2022-06-06 16:27 ` [PATCH v2 1/6] irqchip/stm32-exti: Fix irq_set_affinity return value Antonio Borneo
2022-06-06 16:27   ` Antonio Borneo
2022-07-07  8:15   ` [irqchip: irq/irqchip-next] " irqchip-bot for Ludovic Barre
2022-06-06 16:27 ` [PATCH v2 2/6] irqchip/stm32-exti: Fix irq_mask/irq_unmask for direct events Antonio Borneo
2022-06-06 16:27   ` Antonio Borneo
2022-07-07  8:15   ` [irqchip: irq/irqchip-next] " irqchip-bot for Loic Pallardy
2022-06-06 16:27 ` [PATCH v2 3/6] irqchip/stm32-exti: Prevent illegal read due to unbounded DT value Antonio Borneo
2022-06-06 16:27   ` Antonio Borneo
2022-07-07  8:15   ` [irqchip: irq/irqchip-next] " irqchip-bot for Antonio Borneo
2022-06-06 16:27 ` [PATCH v2 4/6] irqchip/stm32-exti: Tag emr register as undefined for stm32mp15 Antonio Borneo
2022-06-06 16:27   ` Antonio Borneo
2022-07-07  8:15   ` [irqchip: irq/irqchip-next] " irqchip-bot for Alexandre Torgue
2022-06-06 16:27 ` [PATCH v2 5/6] irqchip/stm32-exti: Read event trigger type from event_trg register Antonio Borneo
2022-06-06 16:27   ` Antonio Borneo
2022-07-07  8:15   ` [irqchip: irq/irqchip-next] " irqchip-bot for Antonio Borneo
2022-06-06 16:27 ` [PATCH v2 6/6] irqchip/stm32-exti: Simplify irq description table Antonio Borneo
2022-06-06 16:27   ` Antonio Borneo
2022-07-07  8:15   ` [irqchip: irq/irqchip-next] " irqchip-bot for Antonio Borneo

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=871qwz6p8m.wl-maz@kernel.org \
    --to=maz@kernel.org \
    --cc=alexandre.torgue@foss.st.com \
    --cc=antonio.borneo@foss.st.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-stm32@st-md-mailman.stormreply.com \
    --cc=loic.pallardy@foss.st.com \
    --cc=ludovic.barre@foss.st.com \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=p.paillet@foss.st.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.