Re: calling schedule() from interupt context

From: Robert Love (rml@tech9.net)
Date: Fri Nov 22 2002 - 04:14:06 EST


On Fri, 2002-11-22 at 03:54, dan carpenter wrote:

(Next time trim your CC list: none of those poor guys needed this
email..)

> In drivers/net/tokenring/3c359.c xl_interrupt() calls schedule().
> The path from xl_interupt to schedule is:
> xl_rx ==> netif_rx ==>
> kfree_skb ==> __kfree_skb ==>
> secpath_put ==> __secpath_destroy ==>
> xfrm_state_put ==> __xfrm_state_destroy ==> xfrm_put_type ==>
> module_put ==> put_cpu ==> preempt_schedule ==> schedule

Are you actually seeing this code path or is this just what your script
is showing you?

preempt_schedule() will not call schedule() if the preempt_count is
non-zero. Inside an interrupt handler, it is always at least one. So
nothing will drop it to zero, and we will never preempt.

> The third thing I was wondering is: xl_interupt is holding a
> spin_lock(&xl_priv->xl_lock). I know that you're not supposed to call shedule()
> while holding a spin lock, but is it ok to call preempt_schedule()?

Same as above. preempt_schedule() only calls schedule when
preempt_count is zero. It is not if you hold a lock, and it is not
inside an interrupt handler.

        Robert Love

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



This archive was generated by hypermail 2b29 : Sat Nov 23 2002 - 22:00:39 EST