Skip to content

Commit

Permalink
[PATCH] x86_64: Only do the clustered systems have unsynchronized TSC…
Browse files Browse the repository at this point in the history
… assumption on IBM systems

Big Unisys systems have multiple clusters too, but they have an
synchronized TSC.

I'm using the SMBIOS to check for vendor == IBM.

Cc: Chris McDermott <lcm@us.ibm.com>
Cc: "Protasevich, Natalie" <Natalie.Protasevich@unisys.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 Feb 26, 2006
1 parent 5342fba commit 13a229a
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 4 deletions.
3 changes: 0 additions & 3 deletions arch/i386/kernel/acpi/boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,6 @@ extern void __init clustered_apic_check(void);
extern int gsi_irq_sharing(int gsi);
#include <asm/proto.h>

static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return 0; }


#else /* X86 */

#ifdef CONFIG_X86_LOCAL_APIC
Expand Down
9 changes: 8 additions & 1 deletion arch/x86_64/kernel/apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -962,12 +962,14 @@ void smp_apic_timer_interrupt(struct pt_regs *regs)
irq_exit();
}

int __initdata unsync_tsc_on_multicluster;

/*
* oem_force_hpet_timer -- force HPET mode for some boxes.
*
* Thus far, the major user of this is IBM's Summit2 series:
*
* Clustered boxes may have unsynced TSC problems if they are
* Some clustered boxes may have unsynced TSC problems if they are
* multi-chassis. Use available data to take a good guess.
* If in doubt, go HPET.
*/
Expand All @@ -977,6 +979,11 @@ __cpuinit int oem_force_hpet_timer(void)
unsigned id;
DECLARE_BITMAP(clustermap, NUM_APIC_CLUSTERS);

/* Only do this check on IBM machines - big Unisys systems
use multiple clusters too, but have synchronized TSC */
if (!unsync_tsc_on_multicluster)
return 0;

bitmap_zero(clustermap, NUM_APIC_CLUSTERS);

for (i = 0; i < NR_CPUS; i++) {
Expand Down
14 changes: 14 additions & 0 deletions include/asm-x86_64/acpi.h
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,20 @@ extern u8 x86_acpiid_to_apicid[];

extern int acpi_skip_timer_override;

extern int unsync_tsc_on_multicluster;

static inline int acpi_madt_oem_check(char *oem, char *productid)
{
/* Copied from i386. Probably has too many entries. */
if (!strncmp(oem, "IBM ENSW", 8) &&
(!strncmp(productid, "VIGIL SMP", 9)
|| !strncmp(productid, "EXA", 3)
|| !strncmp(productid, "RUTHLESS SMP", 12))) {
unsync_tsc_on_multicluster = 1;
}
return 0;
}

#endif /*__KERNEL__*/

#endif /*_ASM_ACPI_H*/

0 comments on commit 13a229a

Please sign in to comment.