diff options
| author | Rosen Penev <rosenp@gmail.com> | 2026-10-04 14:50:42 -0700 |
|---|---|---|
| committer | Herbert Xu <herbert@gondor.apana.org.au> | 2026-10-08 18:48:07 +1100 |
| commit | 666d66df25253070cb297cb920b0bcfcfe5eb871 (patch) | |
| tree | 6249eb758bb0f2cd3be5d804e0c1d020fcb27e8c /include/uapi/linux | |
| parent | 2f90facc7b94934653eb7ebfadcc25d503b89196 (diff) | |
| download | linux-next-666d66df25253070cb297cb920b0bcfcfe5eb871.tar.gz linux-next-666d66df25253070cb297cb920b0bcfcfe5eb871.zip | |
crypto: talitos - init tasklets before requesting IRQs
The talitos interrupt handlers schedule priv->done_task[] via
tasklet_schedule(). Since the second IRQ support, probe has requested
the IRQs before calling tasklet_init(), so an interrupt already pending
when a line is requested, e.g. engine state left by the bootloader or
a kexec'd kernel, would schedule a tasklet with a NULL callback.
Look up the IRQ numbers and map the registers up front, so that
-EPROBE_DEFER returns before anything is allocated and the done_task[]
selection and reset_device() can see the secondary IRQ. Only request
the IRQs once the channel fifos are allocated and init_device() has
reset the engine. This matches remove(), which frees the IRQs before
killing the tasklets.
remove() frees every IRQ number that is > 0, so make sure that only
requested lines are set when it runs from the probe error path: clear
both numbers when probe fails before the request, and clear any line
talitos_probe_irq() did not request. Previously a failed primary
request in the two-IRQ case freed the never-requested secondary line.
Fixes: c3e337f88a5b ("crypto: talitos - support for channel remap and 2nd IRQ")
Assisted-by: LLM
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'include/uapi/linux')
0 files changed, 0 insertions, 0 deletions
