summaryrefslogtreecommitdiff
path: root/include/uapi/linux
diff options
context:
space:
mode:
authorRosen Penev <rosenp@gmail.com>2026-10-04 14:50:42 -0700
committerHerbert Xu <herbert@gondor.apana.org.au>2026-10-08 18:48:07 +1100
commit666d66df25253070cb297cb920b0bcfcfe5eb871 (patch)
tree6249eb758bb0f2cd3be5d804e0c1d020fcb27e8c /include/uapi/linux
parent2f90facc7b94934653eb7ebfadcc25d503b89196 (diff)
downloadlinux-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