From: Rosen Penev <rosenp@gmail.com>
To: linux-crypto@vger.kernel.org
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
"David S. Miller" <davem@davemloft.net>,
linux-kernel@vger.kernel.org (open list)
Subject: [PATCHv2] crypto: talitos: fix probe IRQ ordering
Date: Thu, 24 Sep 2026 16:51:19 -0700 [thread overview]
Message-ID: <20260924235119.141323-1-rosenp@gmail.com> (raw)
The talitos interrupt handlers schedule priv->done_task[] via
tasklet_schedule(). In probe(), talitos_probe_irq() ran before
tasklet_init(), so an interrupt arriving during that window (a shared
IRQ, or a completion pending from an earlier transmission) would
schedule an uninitialized tasklet.
Resolve the IRQ numbers before the tasklet_init() calls so the
done_task[] selection can see the secondary IRQ, and only request the
IRQs after the channel fifos are allocated and the device is
initialized. Every structure the handlers touch is then fully set up
before interrupts are enabled. This matches remove(), which frees the
IRQs before killing the tasklets.
Assisted-by: LLM
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
v2: reshuffle code to avoid NULL derefs
drivers/crypto/talitos.c | 33 +++++++++++++++++++++++----------
1 file changed, 23 insertions(+), 10 deletions(-)
diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index 41a87d7c30a0..b9dfa2b7ccbb 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -3346,28 +3346,36 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev,
return t_alg;
}
-static int talitos_probe_irq(struct platform_device *ofdev)
+static int talitos_get_irqs(struct platform_device *ofdev)
{
struct device *dev = &ofdev->dev;
struct talitos_private *priv = dev_get_drvdata(dev);
- int err;
- bool is_sec1 = has_ftr_sec1(priv);
priv->irq[0] = platform_get_irq(ofdev, 0);
if (priv->irq[0] < 0)
return priv->irq[0];
+ priv->irq[1] = platform_get_irq_optional(ofdev, 1);
+ if (priv->irq[1] == -EPROBE_DEFER)
+ return priv->irq[1];
+
+ return 0;
+}
+
+static int talitos_probe_irq(struct platform_device *ofdev)
+{
+ struct device *dev = &ofdev->dev;
+ struct talitos_private *priv = dev_get_drvdata(dev);
+ int err;
+ bool is_sec1 = has_ftr_sec1(priv);
+
if (is_sec1) {
err = request_irq(priv->irq[0], talitos1_interrupt_4ch, 0,
dev_driver_string(dev), priv);
goto primary_out;
}
- priv->irq[1] = platform_get_irq_optional(ofdev, 1);
- if (priv->irq[1] == -EPROBE_DEFER)
- return priv->irq[1];
-
- /* get the primary irq line */
+ /* single (or primary) irq line */
if (priv->irq[1] < 0) {
err = request_irq(priv->irq[0], talitos2_interrupt_4ch, 0,
dev_driver_string(dev), priv);
@@ -3379,7 +3387,7 @@ static int talitos_probe_irq(struct platform_device *ofdev)
if (err)
goto primary_out;
- /* get the secondary irq line */
+ /* secondary irq line */
err = request_irq(priv->irq[1], talitos2_interrupt_ch1_3, 0,
dev_driver_string(dev), priv);
if (err) {
@@ -3481,7 +3489,7 @@ static int talitos_probe(struct platform_device *ofdev)
stride = TALITOS2_CH_STRIDE;
}
- err = talitos_probe_irq(ofdev);
+ err = talitos_get_irqs(ofdev);
if (err)
goto err_out;
@@ -3540,6 +3548,11 @@ static int talitos_probe(struct platform_device *ofdev)
goto err_out;
}
+ /* enable interrupts once the channel fifos and tasklets are set up */
+ err = talitos_probe_irq(ofdev);
+ if (err)
+ goto err_out;
+
/* register the RNG, if available */
if (hw_supports(dev, DESC_HDR_SEL0_RNG)) {
err = talitos_register_rng(dev);
--
2.55.0
reply other threads:[~2026-09-24 23:51 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20260924235119.141323-1-rosenp@gmail.com \
--to=rosenp@gmail.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®