Re: Patch: linux-2.5.8-pre1/kernel/exit.c change caused BUG() at

Linus Torvalds (torvalds@transmeta.com)
Thu, 4 Apr 2002 14:42:42 -0800 (PST)


On Thu, 4 Apr 2002, Andrew Morton wrote:
> Another approach would be:
>
> preempt_schedule()
> {
> current->state2 = current->state;
> current->state = TASK_RUNNING;
> schedule();
> current->state = current->state2;
> }

Yes, but please no.

My current tree says

asmlinkage void preempt_schedule(void)
{
if (unlikely(preempt_get_count()))
return;
if (current->state != TASK_RUNNING)
return;
schedule();
}

and if people start getting latency problems due to loops with state !=
TASK_RUNNING, then I suspect we might just make "set_current_state()"
check that case explicitly and do a conditional reschedule (ie make it the
same as if we released a lock). That would be a hell of a lot cleaner, in
my opinion.

Linus

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