Re: [PATCH] cryptoapi: Fix sleeping

From: Andrew Morton
Date: Wed Aug 13 2003 - 20:05:42 EST


Jeff Garzik <jgarzik@xxxxxxxxx> wrote:
>
> Matt Mackall wrote:
> > We need in_atomic() so that we can call from regions where preempt is
> > disabled, for instance when using per_cpu crypto tfms.
> >
> > diff -urN -X dontdiff orig/crypto/internal.h work/crypto/internal.h
> > --- orig/crypto/internal.h 2003-07-13 22:29:11.000000000 -0500
> > +++ work/crypto/internal.h 2003-08-12 14:38:54.000000000 -0500
> > @@ -37,7 +37,7 @@
> >
> > static inline void crypto_yield(struct crypto_tfm *tfm)
> > {
> > - if (!in_softirq())
> > + if (!in_atomic())
> > cond_resched();
>
>
> Do you really want to schedule inside preempt_disable() ?
>

in_atomic() returns false inside spin_lock() on non-preemptive kernels.

Either this code needs to be removed altogether or it should be changed to

BUG_ON(in_atomic());
cond_resched();

and the callers should be fixed up.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/