On Oct 19, 2009, at 1:23 AM, Matthias Scheler wrote:
On Mon, Oct 19, 2009 at 09:05:43AM +0100, Matthias Scheler wrote:
Ok, I think I found the problem:
1.) pool_cache_invalidate() calls xc_broadcast() with ci = NULL.
2.) xc_broadcast() calls xc_lowpri() with ci = NULL.
3.) xc_lowpri() iterates over all CPUs but doesn't fine any
running CPU and therefore doesn't schedule any cross calls.
4.) The KASSERT() at the end of loop in xc_lowpri() triggers
because "xc_tailp" and "xc_headp" are both zero.
The following patch avoids the problem:
Here is a slightly better patch:
I like this patch, and considered this approach myself before Jean-Yves checked
in the other one to subr_pool.c.
It has the nice effect of not requiring every consumer of cross-calls to be
aware of the bootstrap issue.