Commit 73b08d2a authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Linus Torvalds

[PATCH] clocksource: replace is_continuous by a flag field

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

[mingo@elte.hu: convert vmitime.c to the new clocksource flag]
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Cc: john stultz <johnstul@us.ibm.com>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 95492e46
...@@ -26,7 +26,7 @@ static struct clocksource clocksource_hpet = { ...@@ -26,7 +26,7 @@ static struct clocksource clocksource_hpet = {
.mask = HPET_MASK, .mask = HPET_MASK,
.mult = 0, /* set below */ .mult = 0, /* set below */
.shift = HPET_SHIFT, .shift = HPET_SHIFT,
.is_continuous = 1, .flags = CLOCK_SOURCE_IS_CONTINUOUS,
}; };
static int __init init_hpet_clocksource(void) static int __init init_hpet_clocksource(void)
......
...@@ -314,7 +314,8 @@ static struct clocksource clocksource_tsc = { ...@@ -314,7 +314,8 @@ static struct clocksource clocksource_tsc = {
.mult = 0, /* to be set */ .mult = 0, /* to be set */
.shift = 22, .shift = 22,
.update_callback = tsc_update_callback, .update_callback = tsc_update_callback,
.is_continuous = 1, .flags = CLOCK_SOURCE_IS_CONTINUOUS |
CLOCK_SOURCE_MUST_VERIFY,
}; };
static int tsc_update_callback(void) static int tsc_update_callback(void)
...@@ -434,8 +435,10 @@ static int __init init_tsc_clocksource(void) ...@@ -434,8 +435,10 @@ static int __init init_tsc_clocksource(void)
clocksource_tsc.mult = clocksource_khz2mult(current_tsc_khz, clocksource_tsc.mult = clocksource_khz2mult(current_tsc_khz,
clocksource_tsc.shift); clocksource_tsc.shift);
/* lower the rating if we already know its unstable: */ /* lower the rating if we already know its unstable: */
if (check_tsc_unstable()) if (check_tsc_unstable()) {
clocksource_tsc.rating = 0; clocksource_tsc.rating = 0;
clocksource_tsc.flags &= ~CLOCK_SOURCE_IS_CONTINUOUS;
}
init_timer(&verify_tsc_freq_timer); init_timer(&verify_tsc_freq_timer);
verify_tsc_freq_timer.function = verify_tsc_freq; verify_tsc_freq_timer.function = verify_tsc_freq;
......
...@@ -115,7 +115,7 @@ static struct clocksource clocksource_vmi = { ...@@ -115,7 +115,7 @@ static struct clocksource clocksource_vmi = {
.mask = CLOCKSOURCE_MASK(64), .mask = CLOCKSOURCE_MASK(64),
.mult = 0, /* to be set */ .mult = 0, /* to be set */
.shift = 22, .shift = 22,
.is_continuous = 1, .flags = CLOCK_SOURCE_IS_CONTINUOUS,
}; };
......
...@@ -72,7 +72,8 @@ static struct clocksource clocksource_acpi_pm = { ...@@ -72,7 +72,8 @@ static struct clocksource clocksource_acpi_pm = {
.mask = (cycle_t)ACPI_PM_MASK, .mask = (cycle_t)ACPI_PM_MASK,
.mult = 0, /*to be caluclated*/ .mult = 0, /*to be caluclated*/
.shift = 22, .shift = 22,
.is_continuous = 1, .flags = CLOCK_SOURCE_IS_CONTINUOUS,
}; };
......
...@@ -31,7 +31,7 @@ static struct clocksource clocksource_cyclone = { ...@@ -31,7 +31,7 @@ static struct clocksource clocksource_cyclone = {
.mask = CYCLONE_TIMER_MASK, .mask = CYCLONE_TIMER_MASK,
.mult = 10, .mult = 10,
.shift = 0, .shift = 0,
.is_continuous = 1, .flags = CLOCK_SOURCE_IS_CONTINUOUS,
}; };
static int __init init_cyclone_clocksource(void) static int __init init_cyclone_clocksource(void)
......
...@@ -57,7 +57,7 @@ static struct clocksource cs_hrt = { ...@@ -57,7 +57,7 @@ static struct clocksource cs_hrt = {
.rating = 250, .rating = 250,
.read = read_hrt, .read = read_hrt,
.mask = CLOCKSOURCE_MASK(32), .mask = CLOCKSOURCE_MASK(32),
.is_continuous = 1, .flags = CLOCK_SOURCE_IS_CONTINUOUS,
/* mult, shift are set based on mhz27 flag */ /* mult, shift are set based on mhz27 flag */
}; };
......
...@@ -45,7 +45,7 @@ typedef u64 cycle_t; ...@@ -45,7 +45,7 @@ typedef u64 cycle_t;
* @mult: cycle to nanosecond multiplier * @mult: cycle to nanosecond multiplier
* @shift: cycle to nanosecond divisor (power of two) * @shift: cycle to nanosecond divisor (power of two)
* @update_callback: called when safe to alter clocksource values * @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. * @cycle_interval: Used internally by timekeeping core, please ignore.
* @xtime_interval: Used internally by timekeeping core, please ignore. * @xtime_interval: Used internally by timekeeping core, please ignore.
*/ */
...@@ -58,7 +58,7 @@ struct clocksource { ...@@ -58,7 +58,7 @@ struct clocksource {
u32 mult; u32 mult;
u32 shift; u32 shift;
int (*update_callback)(void); int (*update_callback)(void);
int is_continuous; unsigned long flags;
/* timekeeping specific data, ignore */ /* timekeeping specific data, ignore */
cycle_t cycle_last, cycle_interval; cycle_t cycle_last, cycle_interval;
...@@ -66,6 +66,12 @@ struct clocksource { ...@@ -66,6 +66,12 @@ struct clocksource {
s64 error; s64 error;
}; };
/*
* Clock source flags bits::
*/
#define CLOCK_SOURCE_IS_CONTINUOUS 0x01
#define CLOCK_SOURCE_MUST_VERIFY 0x02
/* simplify initialization of mask field */ /* simplify initialization of mask field */
#define CLOCKSOURCE_MASK(bits) (cycle_t)(bits<64 ? ((1ULL<<bits)-1) : -1) #define CLOCKSOURCE_MASK(bits) (cycle_t)(bits<64 ? ((1ULL<<bits)-1) : -1)
......
...@@ -62,7 +62,6 @@ struct clocksource clocksource_jiffies = { ...@@ -62,7 +62,6 @@ struct clocksource clocksource_jiffies = {
.mask = 0xffffffff, /*32bits*/ .mask = 0xffffffff, /*32bits*/
.mult = NSEC_PER_JIFFY << JIFFIES_SHIFT, /* details above */ .mult = NSEC_PER_JIFFY << JIFFIES_SHIFT, /* details above */
.shift = JIFFIES_SHIFT, .shift = JIFFIES_SHIFT,
.is_continuous = 0, /* tick based, not free running */
}; };
static int __init init_jiffies_clocksource(void) static int __init init_jiffies_clocksource(void)
......
...@@ -871,7 +871,7 @@ int timekeeping_is_continuous(void) ...@@ -871,7 +871,7 @@ int timekeeping_is_continuous(void)
do { do {
seq = read_seqbegin(&xtime_lock); seq = read_seqbegin(&xtime_lock);
ret = clock->is_continuous; ret = clock->flags & CLOCK_SOURCE_IS_CONTINUOUS;
} while (read_seqretry(&xtime_lock, seq)); } while (read_seqretry(&xtime_lock, seq));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment