From: Marc Zyngier <maz@kernel.org>
To: Valentin Schneider <valentin.schneider@arm.com>
Cc: linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
Bjorn Helgaas <bhelgaas@google.com>,
Gregory Clement <gregory.clement@bootlin.com>,
Jason Cooper <jason@lakedaemon.net>,
Laurentiu Tudor <laurentiu.tudor@nxp.com>,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH 5/9] fsl-msi: Provide default retrigger callback
Date: Wed, 26 Aug 2020 17:37:30 +0100 [thread overview]
Message-ID: <70107b944534c6a0eeff83e43b05865e@kernel.org> (raw)
In-Reply-To: <jhj7dtlejxc.mognet@arm.com>
Hi Valentin,
On 2020-08-26 12:16, Valentin Schneider wrote:
> Hi Marc,
>
> Many thanks for picking this up!
> Below's the only comment I have, the rest LGTM.
>
> On 24/08/20 11:23, Marc Zyngier wrote:
>> Signed-off-by: Marc Zyngier <maz@kernel.org>
>> ---
>> drivers/bus/fsl-mc/fsl-mc-msi.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/bus/fsl-mc/fsl-mc-msi.c
>> b/drivers/bus/fsl-mc/fsl-mc-msi.c
>> index 8edadf05cbb7..5306ba7dea3e 100644
>> --- a/drivers/bus/fsl-mc/fsl-mc-msi.c
>> +++ b/drivers/bus/fsl-mc/fsl-mc-msi.c
>> @@ -144,6 +144,8 @@ static void fsl_mc_msi_update_chip_ops(struct
>> msi_domain_info *info)
>> */
>> if (!chip->irq_write_msi_msg)
>> chip->irq_write_msi_msg = fsl_mc_msi_write_msg;
>> + if (!chip->irq_retrigger)
>> + chip->irq_retrigger = irq_chip_retrigger_hierarchy;
>
> AFAICT the closest generic hook we could use here is
>
> msi_create_irq_domain() -> msi_domain_update_chip_ops()
>
> which happens just below the fsl-specific ops update.
>
>
> However, placing a default .irq_retrigger callback in there would
> affect any
> and all MSI domain. IOW that would cover PCI and platform MSIs (covered
> by
> separate patches in this series), but also some x86 ("dmar" & "hpet")
> and
> TI thingies.
>
> I can't tell right now how bad of an idea it is, but I figured I'd
> throw
> this out there.
The problem with this approach is that it requires the resend path to be
cooperative and actually check for more than the top-level irq_data.
Otherwise you'd never actually trigger the HW resend if it is below
the top level.
But I like the idea though. Something like this should do the trick, and
is admittedly a bug fix:
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c
index c48ce19a257f..d11c729f9679 100644
--- a/kernel/irq/resend.c
+++ b/kernel/irq/resend.c
@@ -86,6 +86,18 @@ static int irq_sw_resend(struct irq_desc *desc)
}
#endif
+static int try_retrigger(struct irq_desc *desc)
+{
+#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
+ return irq_chip_retrigger_hierarchy(&desc->irq_data);
+#else
+ if (desc->irq_data.chip->irq_retrigger)
+ return desc->irq_data.chip->irq_retrigger(&desc->irq_data);
+
+ return 0;
+#endif
+}
+
/*
* IRQ resend
*
@@ -113,8 +125,7 @@ int check_irq_resend(struct irq_desc *desc, bool
inject)
desc->istate &= ~IRQS_PENDING;
- if (!desc->irq_data.chip->irq_retrigger ||
- !desc->irq_data.chip->irq_retrigger(&desc->irq_data))
+ if (!try_retrigger(desc))
err = irq_sw_resend(desc);
/* If the retrigger was successfull, mark it with the REPLAY bit */
In general, introducing a irq_chip_retrigger_hierarchy() call
shouldn't be problematic as long as we don't overwrite an existing
callback.
I'll have a look at respining the series with that in mind.
Thanks,
M.
--
Jazz is not dead. It just smells funny...
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Valentin Schneider <valentin.schneider@arm.com>
Cc: Jason Cooper <jason@lakedaemon.net>,
linux-pci@vger.kernel.org,
Gregory Clement <gregory.clement@bootlin.com>,
linux-kernel@vger.kernel.org, Bjorn Helgaas <bhelgaas@google.com>,
Thomas Gleixner <tglx@linutronix.de>,
linux-arm-kernel@lists.infradead.org,
Laurentiu Tudor <laurentiu.tudor@nxp.com>
Subject: Re: [PATCH 5/9] fsl-msi: Provide default retrigger callback
Date: Wed, 26 Aug 2020 17:37:30 +0100 [thread overview]
Message-ID: <70107b944534c6a0eeff83e43b05865e@kernel.org> (raw)
In-Reply-To: <jhj7dtlejxc.mognet@arm.com>
Hi Valentin,
On 2020-08-26 12:16, Valentin Schneider wrote:
> Hi Marc,
>
> Many thanks for picking this up!
> Below's the only comment I have, the rest LGTM.
>
> On 24/08/20 11:23, Marc Zyngier wrote:
>> Signed-off-by: Marc Zyngier <maz@kernel.org>
>> ---
>> drivers/bus/fsl-mc/fsl-mc-msi.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/bus/fsl-mc/fsl-mc-msi.c
>> b/drivers/bus/fsl-mc/fsl-mc-msi.c
>> index 8edadf05cbb7..5306ba7dea3e 100644
>> --- a/drivers/bus/fsl-mc/fsl-mc-msi.c
>> +++ b/drivers/bus/fsl-mc/fsl-mc-msi.c
>> @@ -144,6 +144,8 @@ static void fsl_mc_msi_update_chip_ops(struct
>> msi_domain_info *info)
>> */
>> if (!chip->irq_write_msi_msg)
>> chip->irq_write_msi_msg = fsl_mc_msi_write_msg;
>> + if (!chip->irq_retrigger)
>> + chip->irq_retrigger = irq_chip_retrigger_hierarchy;
>
> AFAICT the closest generic hook we could use here is
>
> msi_create_irq_domain() -> msi_domain_update_chip_ops()
>
> which happens just below the fsl-specific ops update.
>
>
> However, placing a default .irq_retrigger callback in there would
> affect any
> and all MSI domain. IOW that would cover PCI and platform MSIs (covered
> by
> separate patches in this series), but also some x86 ("dmar" & "hpet")
> and
> TI thingies.
>
> I can't tell right now how bad of an idea it is, but I figured I'd
> throw
> this out there.
The problem with this approach is that it requires the resend path to be
cooperative and actually check for more than the top-level irq_data.
Otherwise you'd never actually trigger the HW resend if it is below
the top level.
But I like the idea though. Something like this should do the trick, and
is admittedly a bug fix:
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c
index c48ce19a257f..d11c729f9679 100644
--- a/kernel/irq/resend.c
+++ b/kernel/irq/resend.c
@@ -86,6 +86,18 @@ static int irq_sw_resend(struct irq_desc *desc)
}
#endif
+static int try_retrigger(struct irq_desc *desc)
+{
+#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
+ return irq_chip_retrigger_hierarchy(&desc->irq_data);
+#else
+ if (desc->irq_data.chip->irq_retrigger)
+ return desc->irq_data.chip->irq_retrigger(&desc->irq_data);
+
+ return 0;
+#endif
+}
+
/*
* IRQ resend
*
@@ -113,8 +125,7 @@ int check_irq_resend(struct irq_desc *desc, bool
inject)
desc->istate &= ~IRQS_PENDING;
- if (!desc->irq_data.chip->irq_retrigger ||
- !desc->irq_data.chip->irq_retrigger(&desc->irq_data))
+ if (!try_retrigger(desc))
err = irq_sw_resend(desc);
/* If the retrigger was successfull, mark it with the REPLAY bit */
In general, introducing a irq_chip_retrigger_hierarchy() call
shouldn't be problematic as long as we don't overwrite an existing
callback.
I'll have a look at respining the series with that in mind.
Thanks,
M.
--
Jazz is not dead. It just smells funny...
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-08-26 16:37 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-24 10:23 [PATCH 0/9] irqchip/gic: generalize use of HW-based retriggering Marc Zyngier
2020-08-24 10:23 ` Marc Zyngier
2020-08-24 10:23 ` [PATCH 1/9] irqchip/gic-v2, v3: Implement irq_chip->irq_retrigger() Marc Zyngier
2020-08-24 10:23 ` Marc Zyngier
2020-08-24 10:23 ` [PATCH 2/9] irqchip/git-v3-its: Implement irq_retrigger callback for device-triggered LPIs Marc Zyngier
2020-08-24 10:23 ` Marc Zyngier
2020-08-24 10:23 ` [PATCH 3/9] PCI/MSI: Provide default retrigger callback Marc Zyngier
2020-08-24 10:23 ` Marc Zyngier
2020-08-25 19:44 ` Bjorn Helgaas
2020-08-25 19:44 ` Bjorn Helgaas
2020-08-24 10:23 ` [PATCH 4/9] platform-msi: " Marc Zyngier
2020-08-24 10:23 ` Marc Zyngier
2020-08-24 10:23 ` [PATCH 5/9] fsl-msi: " Marc Zyngier
2020-08-24 10:23 ` Marc Zyngier
2020-08-26 11:16 ` Valentin Schneider
2020-08-26 11:16 ` Valentin Schneider
2020-08-26 16:37 ` Marc Zyngier [this message]
2020-08-26 16:37 ` Marc Zyngier
2020-08-26 17:52 ` Marc Zyngier
2020-08-26 17:52 ` Marc Zyngier
2020-08-24 10:23 ` [PATCH 6/9] irqchip/mbigen: Use hierarchy retrigger helper Marc Zyngier
2020-08-24 10:23 ` Marc Zyngier
2020-08-24 10:23 ` [PATCH 7/9] irqchip/mvebu-icu: " Marc Zyngier
2020-08-24 10:23 ` Marc Zyngier
2020-08-24 10:23 ` [PATCH 8/9] irqchip/mvebu-sei: " Marc Zyngier
2020-08-24 10:23 ` Marc Zyngier
2020-08-24 10:23 ` [PATCH 9/9] irqchip/gic-v2, v3: Prevent SW resends entirely Marc Zyngier
2020-08-24 10:23 ` Marc Zyngier
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=70107b944534c6a0eeff83e43b05865e@kernel.org \
--to=maz@kernel.org \
--cc=bhelgaas@google.com \
--cc=gregory.clement@bootlin.com \
--cc=jason@lakedaemon.net \
--cc=laurentiu.tudor@nxp.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=valentin.schneider@arm.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.