Re: [PATCH 01/25] xor: assert that xor_blocks is not called from interrupt context

Peter Zijlstra
2026-02-27T14:25:44Z

On Thu, Feb 26, 2026 at 07:10:13AM -0800, Christoph Hellwig wrote:
> Most of the optimized xor_blocks versions require FPU/vector registers,
> which generally are not supported in interrupt context.
>
> Both callers already are in user context, so enforce this at the highest
> level.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> crypto/xor.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/crypto/xor.c b/crypto/xor.c
> index f39621a57bb3..864f3604e867 100644
> --- a/crypto/xor.c
> +++ b/crypto/xor.c
> @@ -28,6 +28,8 @@ xor_blocks(unsigned int src_count, unsigned int bytes, void *dest, void **srcs)
> {
> unsigned long *p1, *p2, *p3, *p4;
>
> + WARN_ON_ONCE(in_interrupt());

Your changelog makes it sound like you want:

WARN_ON_ONCE(!in_task());

But perhaps something like so:

lockdep_assert_preempt_enabled();

Would do? That ensures we are in preemptible context, which is much the
same. That also ensures the cost of this assertion is only paid on debug
kernels.

> p1 = (unsigned long *) srcs[0];
> if (src_count == 1) {
> active_template->do_2(bytes, dest, p1);
> --
> 2.47.3
>