Skip to content

Commit

Permalink
[PATCH] x86_64: Don't try to synchronize the TSC over CPUs on Intel C…
Browse files Browse the repository at this point in the history
…PUs at boot.

They already do this in hardware and the Linux algorithm
actually adds errors.

Cc: mingo@elte.hu
Cc: rohit.seth@intel.com

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Andi Kleen authored and Linus Torvalds committed Jan 12, 2006
1 parent 3c02175 commit 737c5c3
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 3 deletions.
8 changes: 7 additions & 1 deletion arch/x86_64/kernel/smpboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,13 @@ static __cpuinit void sync_tsc(unsigned int master)

static void __cpuinit tsc_sync_wait(void)
{
if (notscsync || !cpu_has_tsc)
/*
* When the CPU has synchronized TSCs assume the BIOS
* or the hardware already synced. Otherwise we could
* mess up a possible perfect synchronization with a
* not-quite-perfect algorithm.
*/
if (notscsync || !cpu_has_tsc || !unsynchronized_tsc())
return;
sync_tsc(0);
}
Expand Down
4 changes: 2 additions & 2 deletions arch/x86_64/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -953,7 +953,7 @@ void __init time_init(void)
* Make an educated guess if the TSC is trustworthy and synchronized
* over all CPUs.
*/
static __init int unsynchronized_tsc(void)
__init int unsynchronized_tsc(void)
{
#ifdef CONFIG_SMP
if (oem_force_hpet_timer())
Expand All @@ -964,7 +964,7 @@ static __init int unsynchronized_tsc(void)
return 0;
#endif
/* Assume multi socket systems are not synchronized */
return num_online_cpus() > 1;
return num_present_cpus() > 1;
}

/*
Expand Down
2 changes: 2 additions & 0 deletions include/asm-x86_64/proto.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ extern void check_efer(void);

extern int unhandled_signal(struct task_struct *tsk, int sig);

extern int unsynchronized_tsc(void);

extern void select_idle_routine(const struct cpuinfo_x86 *c);

extern void gart_parse_options(char *);
Expand Down

0 comments on commit 737c5c3

Please sign in to comment.