Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13a229ab authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds
Browse files

[PATCH] x86_64: Only do the clustered systems have unsynchronized TSC 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: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 5342fba5
Loading
Loading
Loading
Loading
+0 −3
Original line number Original line Diff line number Diff line
@@ -44,9 +44,6 @@ extern void __init clustered_apic_check(void);
extern int gsi_irq_sharing(int gsi);
extern int gsi_irq_sharing(int gsi);
#include <asm/proto.h>
#include <asm/proto.h>


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


#else				/* X86 */
#else				/* X86 */


#ifdef	CONFIG_X86_LOCAL_APIC
#ifdef	CONFIG_X86_LOCAL_APIC
+8 −1
Original line number Original line Diff line number Diff line
@@ -962,12 +962,14 @@ void smp_apic_timer_interrupt(struct pt_regs *regs)
	irq_exit();
	irq_exit();
}
}


int __initdata unsync_tsc_on_multicluster;

/*
/*
 * oem_force_hpet_timer -- force HPET mode for some boxes.
 * oem_force_hpet_timer -- force HPET mode for some boxes.
 *
 *
 * Thus far, the major user of this is IBM's Summit2 series:
 * 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.
 * multi-chassis. Use available data to take a good guess.
 * If in doubt, go HPET.
 * If in doubt, go HPET.
 */
 */
@@ -977,6 +979,11 @@ __cpuinit int oem_force_hpet_timer(void)
	unsigned id;
	unsigned id;
	DECLARE_BITMAP(clustermap, NUM_APIC_CLUSTERS);
	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);
	bitmap_zero(clustermap, NUM_APIC_CLUSTERS);


	for (i = 0; i < NR_CPUS; i++) {
	for (i = 0; i < NR_CPUS; i++) {
+14 −0
Original line number Original line Diff line number Diff line
@@ -164,6 +164,20 @@ extern u8 x86_acpiid_to_apicid[];


extern int acpi_skip_timer_override;
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 /*__KERNEL__*/


#endif /*_ASM_ACPI_H*/
#endif /*_ASM_ACPI_H*/