diff -Nru a/arch/i386/config.in b/arch/i386/config.in --- a/arch/i386/config.in Thu Jun 13 20:01:09 2002 +++ b/arch/i386/config.in Thu Jun 13 20:01:09 2002 @@ -198,7 +198,17 @@ define_bool CONFIG_X86_IO_APIC y fi else - bool 'Multiquad NUMA system' CONFIG_MULTIQUAD + bool 'Multiquad NUMA support' CONFIG_X86_NUMA + if [ "$CONFIG_X86_NUMA" = "y" ]; then + choice 'NUMA Hardware Selection' \ + "NUMAQ CONFIG_X86_NUMAQ \ + x440 CONFIG_X86_X440" NUMAQ + if [ "$CONFIG_X86_NUMAQ" = "y" ]; then + define_bool CONFIG_MULTIQUAD y + fi + # Multiquad NUMA boxes can't keep their TSCs in sync + define_bool CONFIG_TSC_DISABLE y + fi fi if [ "$CONFIG_SMP" = "y" -a "$CONFIG_X86_CMPXCHG" = "y" ]; then diff -Nru a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c --- a/arch/i386/kernel/setup.c Thu Jun 13 20:01:09 2002 +++ b/arch/i386/kernel/setup.c Thu Jun 13 20:01:09 2002 @@ -1127,8 +1127,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) { @@ -2733,7 +2737,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 @@ -2978,7 +2982,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? ****/ diff -Nru a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c --- a/arch/i386/kernel/time.c Thu Jun 13 20:01:09 2002 +++ b/arch/i386/kernel/time.c Thu Jun 13 20:01:09 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 diff -Nru a/include/asm-i386/bugs.h b/include/asm-i386/bugs.h --- a/include/asm-i386/bugs.h Thu Jun 13 20:01:09 2002 +++ b/include/asm-i386/bugs.h Thu Jun 13 20:01:09 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 diff -Nru a/include/asm-i386/timex.h b/include/asm-i386/timex.h --- a/include/asm-i386/timex.h Thu Jun 13 20:01:09 2002 +++ b/include/asm-i386/timex.h Thu Jun 13 20:01:09 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; diff -Nru a/include/net/pkt_sched.h b/include/net/pkt_sched.h --- a/include/net/pkt_sched.h Thu Jun 13 20:01:09 2002 +++ b/include/net/pkt_sched.h Thu Jun 13 20:01:09 2002 @@ -12,7 +12,7 @@ #include #include -#ifdef CONFIG_X86_TSC +#if defined(CONFIG_X86_TSC)&&!defined(CONFIG_TSC_DISABLE) #include #endif @@ -253,7 +253,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; \ diff -Nru a/include/net/profile.h b/include/net/profile.h --- a/include/net/profile.h Thu Jun 13 20:01:09 2002 +++ b/include/net/profile.h Thu Jun 13 20:01:09 2002 @@ -9,7 +9,7 @@ #include #include -#ifdef CONFIG_X86_TSC +#if defined(CONFIG_X86_TSC) && !defined(CONFIG_TSC_DISABLE) #include #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) {