Re: [RFC] [PATCH] Disable TSCs on CONFIG_MULTIQUAD

From: john stultz (johnstul@us.ibm.com)
Date: Thu May 30 2002 - 13:50:15 EST


> Add CONFIG_X86_TSC_NOT_SYNCHRONOUS or similar and then check
>
> #if defined(CONFIG_X86_TSC) && !defined(CONFIG_X86_NOT_SYNCHRONOUS))

Attached is the patch implemented as suggested above. It seems a bit
uglier, but perhaps I'm missing exactly what you meant.

thanks
-john

Index: linux24/arch/i386/config.in
diff -u linux24/arch/i386/config.in:1.1.1.3 linux24/arch/i386/config.in:1.1.1.3.14.4
--- linux24/arch/i386/config.in:1.1.1.3 Wed Feb 13 14:53:47 2002
+++ linux24/arch/i386/config.in Thu May 30 11:28:18 2002
@@ -198,6 +198,11 @@
    bool 'Multiquad NUMA system' CONFIG_MULTIQUAD
 fi
 
+# Multiquad NUMA boxes can't keep their TSCs in sync
+if [ "$CONFIG_MULTIQUAD" = "y" ]; then
+ define_bool CONFIG_TSC_DISABLE y
+fi
+
 if [ "$CONFIG_SMP" = "y" -a "$CONFIG_X86_CMPXCHG" = "y" ]; then
    define_bool CONFIG_HAVE_DEC_LOCK y
 fi
Index: linux24/arch/i386/kernel/setup.c
diff -u linux24/arch/i386/kernel/setup.c:1.1.1.3.14.1 linux24/arch/i386/kernel/setup.c:1.1.1.3.14.6
--- linux24/arch/i386/kernel/setup.c:1.1.1.3.14.1 Tue May 28 17:30:29 2002
+++ linux24/arch/i386/kernel/setup.c Thu May 30 11:28:18 2002
@@ -1053,8 +1053,12 @@
 __setup("cachesize=", cachesize_setup);
 
 
-#ifndef CONFIG_X86_TSC
+#if !defined(CONFIG_X86_TSC)||defined(CONFIG_TSC_DISABLE)
+#ifdef CONFIG_TSC_DISABLE
+static int tsc_disable __initdata = 1;
+#else /*CONFIG_TSC_DISABLE*/
 static int tsc_disable __initdata = 0;
+#endif /*CONFIG_TSC_DISABLE*/
 
 static int __init tsc_setup(char *str)
 {
@@ -2650,7 +2654,7 @@
          */
 
         /* TSC disabled? */
-#ifndef CONFIG_X86_TSC
+#if !defined(CONFIG_X86_TSC)||defined(CONFIG_TSC_DISABLE)
         if ( tsc_disable )
                 clear_bit(X86_FEATURE_TSC, &c->x86_capability);
 #endif
@@ -2888,7 +2892,7 @@
 
         if (cpu_has_vme || cpu_has_tsc || cpu_has_de)
                 clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
-#ifndef CONFIG_X86_TSC
+#if !defined(CONFIG_X86_TSC)||defined(CONFIG_TSC_DISABLE)
         if (tsc_disable && cpu_has_tsc) {
                 printk(KERN_NOTICE "Disabling TSC...\n");
                 /**** FIX-HPA: DOES THIS REALLY BELONG HERE? ****/
Index: linux24/arch/i386/kernel/time.c
diff -u linux24/arch/i386/kernel/time.c:1.1.1.2 linux24/arch/i386/kernel/time.c:1.1.1.2.14.2
--- linux24/arch/i386/kernel/time.c:1.1.1.2 Wed Feb 13 14:53:48 2002
+++ linux24/arch/i386/kernel/time.c Thu May 30 11:28:18 2002
@@ -118,7 +118,7 @@
 
 extern spinlock_t i8259A_lock;
 
-#ifndef CONFIG_X86_TSC
+#if !defined(CONFIG_X86_TSC)||defined(CONFIG_TSC_DISABLE)
 
 /* This function must be called with interrupts disabled
  * It was inspired by Steve McCanne's microtime-i386 for BSD. -- jrs
Index: linux24/include/asm-i386/bugs.h
diff -u linux24/include/asm-i386/bugs.h:1.1.1.1 linux24/include/asm-i386/bugs.h:1.1.1.1.40.2
--- linux24/include/asm-i386/bugs.h:1.1.1.1 Tue Dec 18 15:49:01 2001
+++ linux24/include/asm-i386/bugs.h Thu May 30 11:28:18 2002
@@ -173,7 +173,7 @@
 /*
  * If we configured ourselves for a TSC, we'd better have one!
  */
-#ifdef CONFIG_X86_TSC
+#if defined(CONFIG_X86_TSC)&&!defined(CONFIG_TSC_DISABLE)
         if (!cpu_has_tsc)
                 panic("Kernel compiled for Pentium+, requires TSC feature!");
 #endif
Index: linux24/include/asm-i386/timex.h
diff -u linux24/include/asm-i386/timex.h:1.1.1.2 linux24/include/asm-i386/timex.h:1.1.1.2.14.2
--- linux24/include/asm-i386/timex.h:1.1.1.2 Wed Feb 13 14:52:42 2002
+++ linux24/include/asm-i386/timex.h Thu May 30 11:28:18 2002
@@ -40,7 +40,7 @@
 
 static inline cycles_t get_cycles (void)
 {
-#ifndef CONFIG_X86_TSC
+#if !defined(CONFIG_X86_TSC) || defined(CONFIG_TSC_DISABLE)
         return 0;
 #else
         unsigned long long ret;
Index: linux24/include/net/pkt_sched.h
diff -u linux24/include/net/pkt_sched.h:1.1.1.1 linux24/include/net/pkt_sched.h:1.1.1.1.40.2
--- linux24/include/net/pkt_sched.h:1.1.1.1 Tue Dec 18 15:49:02 2001
+++ linux24/include/net/pkt_sched.h Thu May 30 11:28:18 2002
@@ -11,7 +11,7 @@
 #include <linux/pkt_sched.h>
 #include <net/pkt_cls.h>
 
-#ifdef CONFIG_X86_TSC
+#if defined(CONFIG_X86_TSC)&&!defined(CONFIG_TSC_DISABLE)
 #include <asm/msr.h>
 #endif
 
@@ -252,7 +252,7 @@
 
 #define PSCHED_US2JIFFIE(delay) (((delay)+psched_clock_per_hz-1)/psched_clock_per_hz)
 
-#ifdef CONFIG_X86_TSC
+#if defined(CONFIG_X86_TSC)&&!defined(CONFIG_TSC_DISABLE)
 
 #define PSCHED_GET_TIME(stamp) \
 ({ u64 __cur; \
Index: linux24/include/net/profile.h
diff -u linux24/include/net/profile.h:1.1.1.1 linux24/include/net/profile.h:1.1.1.1.40.2
--- linux24/include/net/profile.h:1.1.1.1 Tue Dec 18 15:49:02 2001
+++ linux24/include/net/profile.h Thu May 30 11:28:18 2002
@@ -9,7 +9,7 @@
 #include <linux/kernel.h>
 #include <asm/system.h>
 
-#ifdef CONFIG_X86_TSC
+#if defined(CONFIG_X86_TSC) && !defined(CONFIG_TSC_DISABLE)
 #include <asm/msr.h>
 #endif
 
@@ -29,7 +29,7 @@
 extern struct timeval net_profile_adjust;
 extern void net_profile_irq_adjust(struct timeval *entered, struct timeval* leaved);
 
-#ifdef CONFIG_X86_TSC
+#if defined(CONFIG_X86_TSC)&&!defined(CONFIG_TSC_DISABLE)
 
 static inline void net_profile_stamp(struct timeval *pstamp)
 {

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri May 31 2002 - 22:00:29 EST