Messages in this thread | | | Date | Mon, 2 Feb 2009 21:00:42 -0800 | From | Andrew Morton <> | Subject | Re: [PATCH 2/3] trace: fix default boot up tracer |
| |
On Mon, 2 Feb 2009 23:33:52 -0500 (EST) Steven Rostedt <rostedt@goodmis.org> wrote:
> On Mon, 2 Feb 2009, Andrew Morton wrote: > > > > > > The lock_kernel addition was added when the BKL became a spinlock again. > > > The selftests needed to be able to sleep, and this caused issues. > > > > Sleeping inside lock_kernel() is quite OK. Confused. > > I did not explain that quite well. I need to focus on the emails > that I write, and not do it half concentrating on code that I'm > also writing :-/ > > The preempt tracer expects preemption enabled when the self test is > executed. Because the self test for preempt tracer is basically: > > start_trace(); > preempt_disable(); > udelay(x); > preempt_enable(); > stop_trace(); > > make sure we have a delay. > > This failed, because lock_kernel now disables preemption. So that > preempt_disable() never triggers the trace, and the test sees that nothing > was recorded. This causes a failure to be flagged, and we disable the > preempt tracer.
OK.
It might be a bit cleaner to run all the selftests later, after start_kernel() has done unlock_kernel(). That would make it even harder to support modular tracers in the future though.
Perhaps the preempt tracer could itself do
if (kernel_locked()) { kernel_was_locked = true; unlock_kernel(); } ...
| |