One could do:
static inline void spin_unlock(spinlock_t *lock)
{
__asm__ __volatile__(
spin_unlock_string
);
if (--current->lock_depth == 0 &&
current->need_resched &&
current->state == TASK_RUNNING)
schedule();
}
But I have generally avoided "global" solutions like this, in favour
of nailing the _specific_ code which is causing the problem. Which
is a lot more work, but more useful.
The scheduling points in bread() and submit_bh() in the mini-ll patch
go against this (masochistic) philosophy.
> > > Future work would be to look into long-held locks and see what we can
> > > do.
> >
> > One thing we could do is download Andrew Morton's patch ;)
>
> That is certainly one option, and Andrew's patch is very good.
> Nonetheless, I think we need a more general framework that tackles the
> problem itself. Preemptible kernel does this, yields results now, and
> allows for greater return later on.
We need something which makes 2.4.x not suck.
-
-
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/