[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20071207023241.15274ef6.akpm@linux-foundation.org>
Date: Fri, 7 Dec 2007 02:32:41 -0800
From: Andrew Morton <akpm@...ux-foundation.org>
To: Ingo Molnar <mingo@...e.hu>
Cc: Stefano Brivio <stefano.brivio@...imi.it>,
Robert Love <rml@...h9.net>, linux-kernel@...r.kernel.org,
Dave Jones <davej@...hat.com>,
"Rafael J. Wysocki" <rjw@...k.pl>, Michael Buesch <mb@...sch.de>,
Thomas Gleixner <tglx@...utronix.de>,
Len Brown <lenb@...nel.org>
Subject: Re: [PATCH] scheduler: fix x86 regression in native_sched_clock
On Fri, 7 Dec 2007 09:45:59 +0100 Ingo Molnar <mingo@...e.hu> wrote:
>
> * Stefano Brivio <stefano.brivio@...imi.it> wrote:
>
> > This patch fixes a regression introduced by:
> >
> > commit bb29ab26863c022743143f27956cc0ca362f258c
> > Author: Ingo Molnar <mingo@...e.hu>
> > Date: Mon Jul 9 18:51:59 2007 +0200
> >
> > This caused the jiffies counter to leap back and forth on cpufreq
> > changes on my x86 box. I'd say that we can't always assume that TSC
> > does "small errors" only, when marked unstable. On cpufreq changes
> > these errors can be huge.
>
> ah, printk_clock() still uses sched_clock(), not jiffies. So it's not
> the jiffies counter that goes back and forth, it's sched_clock() - so
> this is a printk timestamps anomaly, not related to jiffies. I thought
> we have fixed this bug in the printk code already: sched_clock() is a
> 'raw' interface that should not be used directly - the proper interface
> is cpu_clock(cpu). Does the patch below help?
>
> Ingo
>
> ----------------------->
> Subject: sched: fix CONFIG_PRINT_TIME's reliance on sched_clock()
> From: Ingo Molnar <mingo@...e.hu>
>
> Stefano Brivio reported weird printk timestamp behavior during
> CPU frequency changes:
>
> http://bugzilla.kernel.org/show_bug.cgi?id=9475
>
> fix CONFIG_PRINT_TIME's reliance on sched_clock() and use cpu_clock()
> instead.
>
> Reported-and-bisected-by: Stefano Brivio <stefano.brivio@...imi.it>
> Signed-off-by: Ingo Molnar <mingo@...e.hu>
> ---
> kernel/printk.c | 2 +-
> kernel/sched.c | 7 ++++++-
> 2 files changed, 7 insertions(+), 2 deletions(-)
>
> Index: linux/kernel/printk.c
> ===================================================================
> --- linux.orig/kernel/printk.c
> +++ linux/kernel/printk.c
> @@ -680,7 +680,7 @@ asmlinkage int vprintk(const char *fmt,
> loglev_char = default_message_loglevel
> + '0';
> }
> - t = printk_clock();
> + t = cpu_clock(printk_cpu);
> nanosec_rem = do_div(t, 1000000000);
> tlen = sprintf(tbuf,
> "<%c>[%5lu.%06lu] ",
A bit risky - it's quite an expansion of code which no longer can call printk.
You might want to take that WARN_ON out of __update_rq_clock() ;)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists