Kernel output interleaved on boot
Lev Serebryakov
lev at FreeBSD.org
Mon Apr 8 08:07:10 UTC 2013
Hello, Jeremy.
You wrote 8 апреля 2013 г., 8:52:37:
JC> And yes, I am aware of how GSoC works, but this really should have
JC> become a GSoC project by now, otherwise the Foundation should have
JC> funded someone to fix this. It makes kernel debugging basically
JC> worthless.
Ok, here is several noob questions about low-level kernel
implementation:
(1) Do we have some very low-level thread-local variables, which
could be used here?
(2) Do cpu-local variables helps here? Is here guarantee, that
printf() could not be preempted (I afraid, answer is no)?
(3) What is lowest level, which could call printf()? i.e., could
printf() allocate, say, one page of mapped kernel memory (I hope,
answer is yes)? Init UMA zone and allocate block in UMA zone (I
think, answer is no)?
What I want to say, that lock-less (and block-less) multiple-writers
ring buffer is "possible" data structure, as far as I know (we use
lock-less and block-less data structures a lot at work for
massive-parallel programming, but not at such low level, of course),
but I need to understand, what printf() could and what couldn't do. I
understand, that it could not use any lock, as it is called from
anywhere, but should be it limited to stack and/or static data
structures?
And, by the way, is here generic mechanism in kernel (loader?),
which automatically (on load) allocate per-CPU static structures?
And why output is garbaged, if printf() uses _stack_ based buffer,
at first place?! Stack is thread-local by definition!
--
// Black Lion AKA Lev Serebryakov <lev at FreeBSD.org>
More information about the freebsd-current
mailing list