lkml.org 
[lkml]   [2007]   [Aug]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 19/25] [PATCH] time-related functions paravirt provisions
    Date
    This patch add provisions for time related functions so they
    can be later replaced by paravirt versions.

    it basically encloses {g,s}et_wallclock inside the
    already existent functions update_persistent_clock and
    read_persistent_clock, and defines {s,g}et_wallclock
    to the core of such functions.

    The timer interrupt setup also have to be replaced.
    The job is done by time_init_hook().

    Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    arch/x86_64/kernel/time.c | 37 +++++++++++++++++++++++++------------
    1 files changed, 25 insertions(+), 12 deletions(-)

    diff --git a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c
    index 6d48a4e..29fcd91 100644
    --- a/arch/x86_64/kernel/time.c
    +++ b/arch/x86_64/kernel/time.c
    @@ -42,6 +42,7 @@
    #include <asm/sections.h>
    #include <linux/hpet.h>
    #include <asm/apic.h>
    +#include <asm/time.h>
    #include <asm/hpet.h>
    #include <asm/mpspec.h>
    #include <asm/nmi.h>
    @@ -82,18 +83,12 @@ EXPORT_SYMBOL(profile_pc);
    * sheet for details.
    */

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

    -/*
    - * IRQs are disabled when we're called from the timer interrupt,
    - * no need for spin_lock_irqsave()
    - */
    -
    - spin_lock(&rtc_lock);

    /*
    * Tell the clock it's being set and stop it.
    @@ -143,14 +138,22 @@ static int set_rtc_mmss(unsigned long nowtime)
    CMOS_WRITE(control, RTC_CONTROL);
    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);
    + int retval;
    +
    +/*
    + * IRQs are disabled when we're called from the timer interrupt,
    + * no need for spin_lock_irqsave()
    + */
    + spin_lock(&rtc_lock);
    + retval = set_wallclock(now.tv_sec);
    + spin_unlock(&rtc_lock);
    +
    + return retval;
    }

    void main_timer_handler(void)
    @@ -195,7 +198,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
    return IRQ_HANDLED;
    }

    -unsigned long read_persistent_clock(void)
    +unsigned long do_get_cmos_time(void)
    {
    unsigned int year, mon, day, hour, min, sec;
    unsigned long flags;
    @@ -246,6 +249,11 @@ unsigned long read_persistent_clock(void)
    return mktime(year, mon, day, hour, min, sec);
    }

    +unsigned long read_persistent_clock(void)
    +{
    + return get_wallclock();
    +}
    +
    /* calibrate_cpu is used on systems with fixed rate TSCs to determine
    * processor frequency */
    #define TICK_COUNT 100000000
    @@ -365,6 +373,11 @@ static struct irqaction irq0 = {
    .name = "timer"
    };

    +inline void time_init_hook()
    +{
    + setup_irq(0, &irq0);
    +}
    +
    void __init time_init(void)
    {
    if (nohpet)
    @@ -403,7 +416,7 @@ void __init time_init(void)
    cpu_khz / 1000, cpu_khz % 1000);
    init_tsc_clocksource();

    - setup_irq(0, &irq0);
    + do_time_init();
    }

    /*
    --
    1.4.4.2
    -
    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-08-08 09:15    [W:0.028 / U:33.124 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site