lkml.org 
[lkml]   [2007]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 12/46] clocksource: replace is_continuous by a flag field
    From: Thomas Gleixner <tglx@linutronix.de>

    Using a flag filed allows to encode more than one information into
    a variable. Preparatory patch for the generic clocksource verification.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

    ---
    arch/i386/kernel/hpet.c | 2 +-
    arch/i386/kernel/tsc.c | 7 +++++--
    drivers/clocksource/acpi_pm.c | 3 ++-
    drivers/clocksource/cyclone.c | 2 +-
    drivers/clocksource/scx200_hrt.c | 2 +-
    include/linux/clocksource.h | 10 ++++++++--
    kernel/time/jiffies.c | 1 -
    kernel/timer.c | 2 +-
    8 files changed, 19 insertions(+), 10 deletions(-)

    Index: linux-2.6.20-rc4-mm1-bo/arch/i386/kernel/hpet.c
    ===================================================================
    --- linux-2.6.20-rc4-mm1-bo.orig/arch/i386/kernel/hpet.c
    +++ linux-2.6.20-rc4-mm1-bo/arch/i386/kernel/hpet.c
    @@ -26,7 +26,7 @@ static struct clocksource clocksource_hp
    .mask = HPET_MASK,
    .mult = 0, /* set below */
    .shift = HPET_SHIFT,
    - .is_continuous = 1,
    + .flags = CLOCK_SOURCE_IS_CONTINUOUS,
    };

    static int __init init_hpet_clocksource(void)
    Index: linux-2.6.20-rc4-mm1-bo/arch/i386/kernel/tsc.c
    ===================================================================
    --- linux-2.6.20-rc4-mm1-bo.orig/arch/i386/kernel/tsc.c
    +++ linux-2.6.20-rc4-mm1-bo/arch/i386/kernel/tsc.c
    @@ -314,7 +314,8 @@ static struct clocksource clocksource_ts
    .mult = 0, /* to be set */
    .shift = 22,
    .update_callback = tsc_update_callback,
    - .is_continuous = 1,
    + .flags = CLOCK_SOURCE_IS_CONTINUOUS |
    + CLOCK_SOURCE_MUST_VERIFY,
    };

    static int tsc_update_callback(void)
    @@ -435,8 +436,10 @@ static int __init init_tsc_clocksource(v
    clocksource_tsc.mult = clocksource_khz2mult(current_tsc_khz,
    clocksource_tsc.shift);
    /* lower the rating if we already know its unstable: */
    - if (check_tsc_unstable())
    + if (check_tsc_unstable()) {
    clocksource_tsc.rating = 0;
    + clocksource_tsc.flags &= ~CLOCK_SOURCE_IS_CONTINUOUS;
    + }

    init_timer(&verify_tsc_freq_timer);
    verify_tsc_freq_timer.function = verify_tsc_freq;
    Index: linux-2.6.20-rc4-mm1-bo/drivers/clocksource/acpi_pm.c
    ===================================================================
    --- linux-2.6.20-rc4-mm1-bo.orig/drivers/clocksource/acpi_pm.c
    +++ linux-2.6.20-rc4-mm1-bo/drivers/clocksource/acpi_pm.c
    @@ -72,7 +72,8 @@ static struct clocksource clocksource_ac
    .mask = (cycle_t)ACPI_PM_MASK,
    .mult = 0, /*to be caluclated*/
    .shift = 22,
    - .is_continuous = 1,
    + .flags = CLOCK_SOURCE_IS_CONTINUOUS,
    +
    };


    Index: linux-2.6.20-rc4-mm1-bo/drivers/clocksource/cyclone.c
    ===================================================================
    --- linux-2.6.20-rc4-mm1-bo.orig/drivers/clocksource/cyclone.c
    +++ linux-2.6.20-rc4-mm1-bo/drivers/clocksource/cyclone.c
    @@ -31,7 +31,7 @@ static struct clocksource clocksource_cy
    .mask = CYCLONE_TIMER_MASK,
    .mult = 10,
    .shift = 0,
    - .is_continuous = 1,
    + .flags = CLOCK_SOURCE_IS_CONTINUOUS,
    };

    static int __init init_cyclone_clocksource(void)
    Index: linux-2.6.20-rc4-mm1-bo/drivers/clocksource/scx200_hrt.c
    ===================================================================
    --- linux-2.6.20-rc4-mm1-bo.orig/drivers/clocksource/scx200_hrt.c
    +++ linux-2.6.20-rc4-mm1-bo/drivers/clocksource/scx200_hrt.c
    @@ -57,7 +57,7 @@ static struct clocksource cs_hrt = {
    .rating = 250,
    .read = read_hrt,
    .mask = CLOCKSOURCE_MASK(32),
    - .is_continuous = 1,
    + .flags = CLOCK_SOURCE_IS_CONTINUOUS,
    /* mult, shift are set based on mhz27 flag */
    };

    Index: linux-2.6.20-rc4-mm1-bo/include/linux/clocksource.h
    ===================================================================
    --- linux-2.6.20-rc4-mm1-bo.orig/include/linux/clocksource.h
    +++ linux-2.6.20-rc4-mm1-bo/include/linux/clocksource.h
    @@ -45,7 +45,7 @@ typedef u64 cycle_t;
    * @mult: cycle to nanosecond multiplier
    * @shift: cycle to nanosecond divisor (power of two)
    * @update_callback: called when safe to alter clocksource values
    - * @is_continuous: defines if clocksource is free-running.
    + * @flags: flags describing special properties
    * @cycle_interval: Used internally by timekeeping core, please ignore.
    * @xtime_interval: Used internally by timekeeping core, please ignore.
    */
    @@ -58,7 +58,7 @@ struct clocksource {
    u32 mult;
    u32 shift;
    int (*update_callback)(void);
    - int is_continuous;
    + unsigned long flags;

    /* timekeeping specific data, ignore */
    cycle_t cycle_last, cycle_interval;
    @@ -66,6 +66,12 @@ struct clocksource {
    s64 error;
    };

    +/*
    + * Clock source flags bits::
    + */
    +#define CLOCK_SOURCE_IS_CONTINUOUS 0x01
    +#define CLOCK_SOURCE_MUST_VERIFY 0x02
    +
    /* simplify initialization of mask field */
    #define CLOCKSOURCE_MASK(bits) (cycle_t)(bits<64 ? ((1ULL<<bits)-1) : -1)

    Index: linux-2.6.20-rc4-mm1-bo/kernel/time/jiffies.c
    ===================================================================
    --- linux-2.6.20-rc4-mm1-bo.orig/kernel/time/jiffies.c
    +++ linux-2.6.20-rc4-mm1-bo/kernel/time/jiffies.c
    @@ -62,7 +62,6 @@ struct clocksource clocksource_jiffies =
    .mask = 0xffffffff, /*32bits*/
    .mult = NSEC_PER_JIFFY << JIFFIES_SHIFT, /* details above */
    .shift = JIFFIES_SHIFT,
    - .is_continuous = 0, /* tick based, not free running */
    };

    static int __init init_jiffies_clocksource(void)
    Index: linux-2.6.20-rc4-mm1-bo/kernel/timer.c
    ===================================================================
    --- linux-2.6.20-rc4-mm1-bo.orig/kernel/timer.c
    +++ linux-2.6.20-rc4-mm1-bo/kernel/timer.c
    @@ -871,7 +871,7 @@ int timekeeping_is_continuous(void)
    do {
    seq = read_seqbegin(&xtime_lock);

    - ret = clock->is_continuous;
    + ret = clock->flags & CLOCK_SOURCE_IS_CONTINUOUS;

    } while (read_seqretry(&xtime_lock, seq));

    --

    -
    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-01-24 00:15    [W:3.702 / U:0.724 seconds]
    ©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site