Re: The O(1) scheduler breaks UML

Ingo Molnar (mingo@elte.hu)
Mon, 14 Jan 2002 10:55:37 +0100 (CET)


On Sun, 13 Jan 2002, Davide Libenzi wrote:

> > 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);

this change is incredibly broken on SMP - eg. what protects 'prev' from
being executed on another CPU prematurely. It's even broken on UP:
interrupt context that changes current->need_resched needs to be aware of
nonatomic context switches. See my previous mail.

> and there's no need for barrier() and rq reload in this way.

we can remove the barrier(), but for a different reason: the asm volatile
definition of the switch_to macro is a compilation barrier in itself
already. I've removed the barrier() from my tree, the change will be in
the -H8 patch. The rq = this_rq() reload is still necessery.

Ingo

-
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/