[PATCH 1/1] Ubuntu: Sauce: Disable function tracing after hitting __schedule_bug

Chase Douglas chase.douglas at canonical.com
Fri Mar 12 15:23:45 UTC 2010


On Fri, Mar 12, 2010 at 10:09 AM, Tim Gardner <tim.gardner at canonical.com> wrote:
> On 03/12/2010 07:23 AM, Chase Douglas wrote:
>>
>> If we hit __schedule_bug, then something bad has happened, and it would
>> be helpful to get an accurate function trace to see what's going wrong.
>> The debugfs function tracer works great for this task, but it spits out
>> a ton of information both before and after the real bug occurs. This
>> change stops the tracing when we enter __schedule_bug, so the tracing
>> report is smaller and leaves the developer with the needed information
>> right at the end of the trace.
>>
>> This should not cause a regression or any negative effects unless
>> someone truly wanted to trace through a __schedule_bug call. In that
>> case, they can recompile their own kernel without this call. The vast
>> majority of tracings that hit __schedule_bug would be enhanced by this
>> change.
>>
>> To see how tracing with this change can be used for "scheduling while
>> atomic" bugs, see http://bugs.launchpad.net/bugs/534549.
>>
>> Signed-off-by: Chase Douglas<chase.douglas at canonical.com>
>> ---
>>  kernel/sched.c |    2 ++
>>  1 files changed, 2 insertions(+), 0 deletions(-)
>>
>> diff --git a/kernel/sched.c b/kernel/sched.c
>> index 4d01095..0d2ba50 100644
>> --- a/kernel/sched.c
>> +++ b/kernel/sched.c
>> @@ -5341,6 +5341,8 @@ static noinline void __schedule_bug(struct
>> task_struct *prev)
>>  {
>>        struct pt_regs *regs = get_irq_regs();
>>
>> +       tracing_off();
>> +
>>        printk(KERN_ERR "BUG: scheduling while atomic: %s/%d/0x%08x\n",
>>                prev->comm, prev->pid, preempt_count());
>>
>
> Seems reasonable enough. tracing_off() is dead simple, so ought not cause a
> regression. Have you discussed this with upstream as to why this isn't the
> default behavior?

I haven't, but I'll send a note out to linux-kernel. I'm guessing the
reason is that tracing can be used for many different reasons, and
they don't want stray tracing_off calls to kill legitimate tracing in
a vanilla kernel. In our case, using tracing_off in __schedule_bug
will help us solve scheduling while atomic bugs faster, and we aren't
terribly interested in academic uses of tracing in our official
kernels.




More information about the kernel-team mailing list