Messages in this thread | | | Date | Sun, 13 Jan 2002 18:55:35 -0800 (PST) | From | Davide Libenzi <> | Subject | Re: The O(1) scheduler breaks UML |
| |
On Sun, 13 Jan 2002, Jeff Dike wrote:
> The new scheduler holds IRQs off across the call to context_switch. UML's > _switch_to expects them to be enabled when it is called, and things go > badly wrong when they are not. > > Because UML has a host process for each UML thread, SIGIO needs to be > forwarded from one process to the next during a context switch. A SIGIO > arriving during the window between the disabling of IRQs and forwarding of > IRQs to the next process will be trapped on the process going out of > context. This happens fairly regularly and causes hangs because some process > is waiting for disk IO which never arrives because the process that was notified > of the completion is switched out. > > So, is it possible to enable IRQs across the call to _switch_to?
Yes, this should work :
if (likely(prev != next)) { rq->nr_switches++; rq->curr = next; next->cpu = prev->cpu; spin_unlock_irq(&rq->lock); context_switch(prev, next); } else spin_unlock_irq(&rq->lock);
and there's no need for barrier() and rq reload in this way.
- Davide
- 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/
| |