Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 53788
b: refs/heads/master
c: 5a90cf2
h: refs/heads/master
v: v3
  • Loading branch information
john stultz authored and Andi Kleen committed May 2, 2007
1 parent ad64765 commit 21e865c
Show file tree
Hide file tree
Showing 10 changed files with 16 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2714221985ce6388ec2fa78d7d52e2a5bef78eec
refs/heads/master: 5a90cf205c922707ffed2d8f87cefd942e96b0ba
2 changes: 1 addition & 1 deletion trunk/arch/i386/kernel/cpu/cyrix.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ static void __cpuinit init_cyrix(struct cpuinfo_x86 *c)
*/
if (vendor == PCI_VENDOR_ID_CYRIX &&
(device == PCI_DEVICE_ID_CYRIX_5510 || device == PCI_DEVICE_ID_CYRIX_5520))
mark_tsc_unstable();
mark_tsc_unstable("cyrix 5510/5520 detected");
}
#endif
c->x86_cache_size=16; /* Yep 16K integrated cache thats it */
Expand Down
5 changes: 3 additions & 2 deletions trunk/arch/i386/kernel/tsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val, void *data)
* TSC based sched_clock turns
* to junk w/ cpufreq
*/
mark_tsc_unstable();
mark_tsc_unstable("cpufreq changes");
}
}
}
Expand Down Expand Up @@ -281,11 +281,12 @@ static struct clocksource clocksource_tsc = {
CLOCK_SOURCE_MUST_VERIFY,
};

void mark_tsc_unstable(void)
void mark_tsc_unstable(char *reason)
{
if (!tsc_unstable) {
tsc_unstable = 1;
tsc_enabled = 0;
printk("Marking TSC unstable due to: %s.\n", reason);
/* Can be called before registration */
if (clocksource_tsc.mult)
clocksource_change_rating(&clocksource_tsc, 0);
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/x86_64/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ void __init time_init(void)
cpu_khz = tsc_calibrate_cpu_khz();

if (unsynchronized_tsc())
mark_tsc_unstable();
mark_tsc_unstable("TSCs unsynchronized");

if (cpu_has(&boot_cpu_data, X86_FEATURE_RDTSCP))
vgetcpu_mode = VGETCPU_RDTSCP;
Expand Down
5 changes: 3 additions & 2 deletions trunk/arch/x86_64/kernel/tsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,

tsc_khz = cpufreq_scale(tsc_khz_ref, ref_freq, freq->new);
if (!(freq->flags & CPUFREQ_CONST_LOOPS))
mark_tsc_unstable();
mark_tsc_unstable("cpufreq changes");
}

set_cyc2ns_scale(tsc_khz_ref);
Expand Down Expand Up @@ -199,10 +199,11 @@ static struct clocksource clocksource_tsc = {
.vread = vread_tsc,
};

void mark_tsc_unstable(void)
void mark_tsc_unstable(char *reason)
{
if (!tsc_unstable) {
tsc_unstable = 1;
printk("Marking TSC unstable due to %s\n", reason);
/* Change only the rating, when not registered */
if (clocksource_tsc.mult)
clocksource_change_rating(&clocksource_tsc, 0);
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/x86_64/kernel/tsc_sync.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ void __cpuinit check_tsc_sync_source(int cpu)
printk("\n");
printk(KERN_WARNING "Measured %Ld cycles TSC warp between CPUs,"
" turning off TSC clock.\n", max_warp);
mark_tsc_unstable();
mark_tsc_unstable("check_tsc_sync_source failed");
nr_warps = 0;
max_warp = 0;
last_tsc = 0;
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/acpi/processor_idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ static void acpi_processor_idle(void)

#ifdef CONFIG_GENERIC_TIME
/* TSC halts in C2, so notify users */
mark_tsc_unstable();
mark_tsc_unstable("possible TSC halt in C2");
#endif
/* Re-enable interrupts */
local_irq_enable();
Expand Down Expand Up @@ -517,7 +517,7 @@ static void acpi_processor_idle(void)

#ifdef CONFIG_GENERIC_TIME
/* TSC halts in C3, so notify users */
mark_tsc_unstable();
mark_tsc_unstable("TSC halts in C3");
#endif
/* Re-enable interrupts */
local_irq_enable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/include/asm-i386/mach-summit/mach_mpparse.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ static inline int mps_oem_check(struct mp_config_table *mpc, char *oem,
(!strncmp(productid, "VIGIL SMP", 9)
|| !strncmp(productid, "EXA", 3)
|| !strncmp(productid, "RUTHLESS SMP", 12))){
mark_tsc_unstable();
mark_tsc_unstable("Summit based system");
use_cyclone = 1; /*enable cyclone-timer*/
setup_summit();
return 1;
Expand All @@ -44,7 +44,7 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id)
if (!strncmp(oem_id, "IBM", 3) &&
(!strncmp(oem_table_id, "SERVIGIL", 8)
|| !strncmp(oem_table_id, "EXA", 3))){
mark_tsc_unstable();
mark_tsc_unstable("Summit based system");
use_cyclone = 1; /*enable cyclone-timer*/
setup_summit();
return 1;
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/asm-i386/tsc.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ static __always_inline cycles_t get_cycles_sync(void)
}

extern void tsc_init(void);
extern void mark_tsc_unstable(void);
extern void mark_tsc_unstable(char *reason);
extern int unsynchronized_tsc(void);
extern void init_tsc_clocksource(void);

Expand Down
2 changes: 1 addition & 1 deletion trunk/include/asm-x86_64/timex.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@ extern int read_current_timer(unsigned long *timer_value);
#define NS_SCALE 10 /* 2^10, carefully chosen */
#define US_SCALE 32 /* 2^32, arbitralrily chosen */

extern void mark_tsc_unstable(void);
extern void mark_tsc_unstable(char *msg);
extern void set_cyc2ns_scale(unsigned long khz);
#endif

0 comments on commit 21e865c

Please sign in to comment.