lkml.org 
[lkml]   [2007]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] scheduler: fix x86 regression in native_sched_clock
    On Fri, 7 Dec 2007 09:45:59 +0100 Ingo Molnar <mingo@elte.hu> wrote:

    >
    > * Stefano Brivio <stefano.brivio@polimi.it> wrote:
    >
    > > This patch fixes a regression introduced by:
    > >
    > > commit bb29ab26863c022743143f27956cc0ca362f258c
    > > Author: Ingo Molnar <mingo@elte.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@elte.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@polimi.it>
    > Signed-off-by: Ingo Molnar <mingo@elte.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() ;)



    \
     
     \ /
      Last update: 2007-12-07 11:37    [W:0.025 / U:0.600 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site