lkml.org 
[lkml]   [2007]   [Jun]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch-mm 16/23] x86_64: Use generic cmos update
    Use the generic cmos update function in kernel/time/ntp.c

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Chris Wright <chrisw@sous-sol.org>
    Cc: john stultz <johnstul@us.ibm.com>
    Cc: Andi Kleen <ak@suse.de>

    ---
    arch/x86_64/Kconfig | 4 ++++
    arch/x86_64/kernel/time.c | 25 +++++++++----------------
    2 files changed, 13 insertions(+), 16 deletions(-)

    Index: linux-2.6.22-rc4-mm/arch/x86_64/kernel/time.c
    ===================================================================
    --- linux-2.6.22-rc4-mm.orig/arch/x86_64/kernel/time.c 2007-06-10 10:44:39.000000000 +0200
    +++ linux-2.6.22-rc4-mm/arch/x86_64/kernel/time.c 2007-06-10 10:44:39.000000000 +0200
    @@ -82,8 +82,9 @@ EXPORT_SYMBOL(profile_pc);
    * sheet for details.
    */

    -static void set_rtc_mmss(unsigned long nowtime)
    +static int set_rtc_mmss(unsigned long nowtime)
    {
    + int retval = 0;
    int real_seconds, real_minutes, cmos_minutes;
    unsigned char control, freq_select;

    @@ -123,6 +124,7 @@ static void set_rtc_mmss(unsigned long n
    if (abs(real_minutes - cmos_minutes) >= 30) {
    printk(KERN_WARNING "time.c: can't update CMOS clock "
    "from %d to %d\n", cmos_minutes, real_minutes);
    + retval = -1;
    } else {
    BIN_TO_BCD(real_seconds);
    BIN_TO_BCD(real_minutes);
    @@ -142,12 +144,17 @@ static void set_rtc_mmss(unsigned long n
    CMOS_WRITE(freq_select, RTC_FREQ_SELECT);

    spin_unlock(&rtc_lock);
    +
    + return retval;
    }

    +int update_persistent_clock(struct timespec now)
    +{
    + return set_rtc_mmss(now.tv_sec);
    +}

    void main_timer_handler(void)
    {
    - static unsigned long rtc_update = 0;
    /*
    * Here we are in the timer irq handler. We have irqs locally disabled (so we
    * don't need spin_lock_irqsave()) but we don't know if the timer_bh is running
    @@ -175,20 +182,6 @@ void main_timer_handler(void)
    if (!using_apic_timer)
    smp_local_timer_interrupt();

    -/*
    - * If we have an externally synchronized Linux clock, then update CMOS clock
    - * accordingly every ~11 minutes. set_rtc_mmss() will be called in the jiffy
    - * closest to exactly 500 ms before the next second. If the update fails, we
    - * don't care, as it'll be updated on the next turn, and the problem (time way
    - * off) isn't likely to go away much sooner anyway.
    - */
    -
    - if (ntp_synced() && xtime.tv_sec > rtc_update &&
    - abs(xtime.tv_nsec - 500000000) <= tick_nsec / 2) {
    - set_rtc_mmss(xtime.tv_sec);
    - rtc_update = xtime.tv_sec + 660;
    - }
    -
    write_sequnlock(&xtime_lock);
    }

    Index: linux-2.6.22-rc4-mm/arch/x86_64/Kconfig
    ===================================================================
    --- linux-2.6.22-rc4-mm.orig/arch/x86_64/Kconfig 2007-06-10 10:44:36.000000000 +0200
    +++ linux-2.6.22-rc4-mm/arch/x86_64/Kconfig 2007-06-10 10:44:39.000000000 +0200
    @@ -32,6 +32,10 @@ config GENERIC_TIME_VSYSCALL
    bool
    default y

    +config GENERIC_CMOS_UPDATE
    + bool
    + default y
    +
    config ZONE_DMA32
    bool
    default y
    --

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-06-10 11:39    [W:0.023 / U:63.008 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site