Messages in this thread | | | From | Parag Warudkar <> | Subject | Re: Is wake_up safe on 2.4? | Date | Sun, 29 May 2005 11:15:54 -0400 |
| |
On Sunday 29 May 2005 10:28, manoj.sharma@wipro.com wrote: > Is it safe to use wake_up() in 2.4 inside an interrupt handler or in a > spin lock region? > > wake_up() uses reshedule_idle() to find an idle cpu for the woken up > task. If it doesn't find any, it checks the current running tasks on all > CPUs and uses goodness value to pick up the best cpu to schedule the > woken up task. Isn't possible to preempt the current task where > reschedule_idle() is running? > > There are plenty of instances in the kernel (2.4) where wake_up() is > being used inside interrupt handler or after taking spin locks. If it > can preempt the task calling wake_up(), how safe is it to use then?
Looking at the code - On SMP, the woken up task will be always scheduled on a CPU other than the one executing the caller, in which case caller of wake_up() is not pre-empted. On UP, it just sets need_resched (different than calling schedule() ) in which case the caller of wake_up() will be rescheduled only when appropriate, when it is safe to preempt it. - 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/
| |