mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-05 20:07:58 +07:00
[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: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Cc: john stultz <johnstul@us.ibm.com> Cc: Roman Zippel <zippel@linux-m68k.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
95492e4646
commit
73b08d2aa4
arch/i386/kernel
drivers/clocksource
include/linux
kernel
@ -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 = {
|
|||||||
.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)
|
|||||||
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 = {
|
|||||||
.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 = {
|
|||||||
.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 = {
|
|||||||
.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 = {
|
|||||||
.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;
|
|||||||
* @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 {
|
|||||||
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 {
|
|||||||
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 = {
|
|||||||
.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)
|
|||||||
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));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user