mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: john stultz <johnstul@us.ibm.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: marcelo <marcelo@conectiva.com.br>,
	lkml <linux-kernel@vger.kernel.org>,
	Leah Cunningham <leahc@us.ibm.com>,
	wilhelm.nuesser@sap.com, paramjit@us.ibm.com, msw@redhat.com
Subject: Re: [PATCH] tsc-disable_B7
Date: 05 Aug 2002 17:04:16 -0700	[thread overview]
Message-ID: <1028592257.1073.81.camel@cog> (raw)
In-Reply-To: <20020806002112.A32243@infradead.org>

[-- Attachment #1: Type: text/plain, Size: 2365 bytes --]

On Mon, 2002-08-05 at 16:21, Christoph Hellwig wrote:

> -Multiquad support for NUMA systems
> +Multi-node support for NUMA systems
> 
> What's the difference between CONFIG_X86_NUMA and CONFIG_MULTIQUAD?
> 
> If CONFIG_X86_NUMA is for numaq boxens please use CONFIG_X86_NUMAQ as
> in pat's patch.

Well, at the moment CONFIG_MULTIQUAD ~= numaq specific stuff + generic
x86 numa stuff, so James and Martin are starting to break out the
generic stuff out of MULTIQUAD and put the NUMAQ specific stuff under
X86_NUMAQ.

We're trying to all move to something close to:

   bool 'Multi-node NUMA system support' CONFIG_X86_NUMA
   if [ "$CONFIG_X86_NUMA" = "y" ]; then
      #Platform Choices
      bool 'Multiquad (IBM/Sequent) NUMAQ support' CONFIG_X86_NUMAQ
      if [ "$CONFIG_X86_NUMAQ" = "y" ]; then
         define_bool CONFIG_MULTIQUAD y
         define_bool CONFIG_X86_TSC_DISABLE y
      fi
      bool 'IBM x440 Summit support' CONFIG_X86_SUMMIT_NUMA
      if [ "$CONFIG_X86_SUMMIT_NUMA" = "y" ]; then
         define_bool CONFIG_X86_TSC_DISABLE y
      fi
      # Common NUMA Features
      if [ "$CONFIG_X86_NUMAQ" = "y" -o "$CONFIG_X86_SUMMIT_NUMA" = "y" ]; then
         bool 'Numa Memory Allocation Support' CONFIG_NUMA
         if [ "$CONFIG_NUMA" = "y" ]; then
            define_bool CONFIG_DISCONTIGMEM y
            define_bool CONFIG_HAVE_ARCH_BOOTMEM_NODE y
         fi
         #[XXX - future] 
         #bool 'NUMA API support' CONFIG_WHATEVER
         #bool 'Enable NUMA Scheduler' CONFIG_WHATEVER
      fi
   fi

>  else
> -   bool 'Multiquad NUMA system' CONFIG_MULTIQUAD
> +	bool 'Multi-node NUMA system support' CONFIG_X86_NUMA
> +	if [ "$CONFIG_X86_NUMA" = "y" ]; then
> +		bool 'Multiquad (IBM/Sequent) NUMAQ support' CONFIG_MULTIQUAD
> +	fi
>  fi
> 
> config.in files have three-space indents.

ah, thanks. fixed and attached.

  
> +			if(!bad_tsc){
> +				use_tsc = 1;
> +				x86_udelay_tsc = 1;
> +				#ifndef do_gettimeoffset
> +				do_gettimeoffset = do_fast_gettimeoffset;
> +				#endif
> +			}
> 
> you want to read Documentation/CodingStyle, don't you?

Always a good read :) Although outside the #ifndef inside a function
(which I'm really just moving, not adding to the code), I'm not sure I
see the violation in the above (although enlightenment is welcome, in
whatever form it might take :). 

thanks for the feedback
-john


[-- Attachment #2: linux-2.4.19_tsc-disable_B8.patch --]
[-- Type: text/x-patch, Size: 6459 bytes --]

diff -Nru a/Documentation/Configure.help b/Documentation/Configure.help
--- a/Documentation/Configure.help	Mon Aug  5 16:58:32 2002
+++ b/Documentation/Configure.help	Mon Aug  5 16:58:33 2002
@@ -233,7 +233,21 @@
   network and embedded applications.  For more information see the
   Axis Communication site, <http://developer.axis.com/>.
 
-Multiquad support for NUMA systems
+Multi-node support for NUMA systems
+CONFIG_X86_NUMA
+  This option is used for getting Linux to run on a NUMA multi-node box. 
+  Because multi-node systems suffer from unsynced TSCs, as well as TSC 
+  drift, which can cause gettimeofday to return non-monotonic values, 
+  this option will turn off the CONFIG_X86_TSC optimization. This 
+  allows you to then specify "bad-tsc" as a boot option to force all nodes 
+  to use the PIT for gettimeofday. 
+  
+  Note: This does not disable access to the unsynced TSCs from userspace, 
+  thus applications using the rdtsc instruction for timing may have 
+  issues. To disable userspace access, instead of "bad-tsc" use the 
+  "notsc" boot option.
+  
+Multiquad support for NUMAQ systems
 CONFIG_MULTIQUAD
   This option is used for getting Linux to run on a (IBM/Sequent) NUMA 
   multiquad box. This changes the way that processors are bootstrapped,
diff -Nru a/arch/i386/config.in b/arch/i386/config.in
--- a/arch/i386/config.in	Mon Aug  5 16:58:32 2002
+++ b/arch/i386/config.in	Mon Aug  5 16:58:32 2002
@@ -80,20 +80,20 @@
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_USE_STRING_486 y
    define_bool CONFIG_X86_ALIGNMENT_16 y
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_PPRO_FENCE y
 fi
 if [ "$CONFIG_M586MMX" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_USE_STRING_486 y
    define_bool CONFIG_X86_ALIGNMENT_16 y
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_PPRO_FENCE y
 fi
 if [ "$CONFIG_M686" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_PGE y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
@@ -101,14 +101,14 @@
 fi
 if [ "$CONFIG_MPENTIUMIII" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_PGE y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
 fi
 if [ "$CONFIG_MPENTIUM4" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 7
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_PGE y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
@@ -116,12 +116,12 @@
 if [ "$CONFIG_MK6" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_ALIGNMENT_16 y
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
 fi
 if [ "$CONFIG_MK7" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 6
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_3DNOW y
    define_bool CONFIG_X86_PGE y
@@ -134,14 +134,14 @@
 fi
 if [ "$CONFIG_MCYRIXIII" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_ALIGNMENT_16 y
    define_bool CONFIG_X86_USE_3DNOW y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
 fi
 if [ "$CONFIG_MCRUSOE" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
 fi
 if [ "$CONFIG_MWINCHIPC6" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
@@ -152,14 +152,14 @@
 if [ "$CONFIG_MWINCHIP2" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_ALIGNMENT_16 y
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
    define_bool CONFIG_X86_OOSTORE y
 fi
 if [ "$CONFIG_MWINCHIP3D" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_ALIGNMENT_16 y
-   define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
    define_bool CONFIG_X86_OOSTORE y
 fi
@@ -198,8 +198,16 @@
       define_bool CONFIG_X86_IO_APIC y
    fi
 else
-   bool 'Multiquad NUMA system' CONFIG_MULTIQUAD
+   bool 'Multi-node NUMA system support' CONFIG_X86_NUMA
+   if [ "$CONFIG_X86_NUMA" = "y" ]; then
+      bool 'Multiquad (IBM/Sequent) NUMAQ support' CONFIG_MULTIQUAD
+   fi
 fi
+
+if [ "$CONFIG_X86_NUMA" != "y" -a "$CONFIG_X86_HAS_TSC" = "y" ]; then
+   define_bool CONFIG_X86_TSC y
+fi
+
 
 if [ "$CONFIG_SMP" = "y" -a "$CONFIG_X86_CMPXCHG" = "y" ]; then
    define_bool CONFIG_HAVE_DEC_LOCK y
diff -Nru a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c
--- a/arch/i386/kernel/time.c	Mon Aug  5 16:58:32 2002
+++ b/arch/i386/kernel/time.c	Mon Aug  5 16:58:32 2002
@@ -569,6 +569,15 @@
 #define CALIBRATE_LATCH	(5 * LATCH)
 #define CALIBRATE_TIME	(5 * 1000020/HZ)
 
+static int  bad_tsc __initdata = 0;
+static int __init bad_tsc_setup(char *str)
+{
+	bad_tsc = 1;
+	return 1;
+}
+__setup("bad-tsc", bad_tsc_setup);
+
+
 static unsigned long __init calibrate_tsc(void)
 {
        /* Set the Gate high, disable speaker */
@@ -672,16 +681,17 @@
 		unsigned long tsc_quotient = calibrate_tsc();
 		if (tsc_quotient) {
 			fast_gettimeoffset_quotient = tsc_quotient;
-			use_tsc = 1;
 			/*
 			 *	We could be more selective here I suspect
 			 *	and just enable this for the next intel chips ?
 			 */
-			x86_udelay_tsc = 1;
-#ifndef do_gettimeoffset
-			do_gettimeoffset = do_fast_gettimeoffset;
-#endif
-
+			if(!bad_tsc){
+				use_tsc = 1;
+				x86_udelay_tsc = 1;
+				#ifndef do_gettimeoffset
+				do_gettimeoffset = do_fast_gettimeoffset;
+				#endif
+			}
 			/* report CPU clock rate in Hz.
 			 * The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) =
 			 * clock/second. Our precision is about 100 ppm.

  reply	other threads:[~2002-08-06  0:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-08-05 22:58 john stultz
2002-08-05 23:21 ` Christoph Hellwig
2002-08-06  0:04   ` john stultz [this message]
2002-08-06  3:04     ` Martin J. Bligh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1028592257.1073.81.camel@cog \
    --to=johnstul@us.ibm.com \
    --cc=hch@infradead.org \
    --cc=leahc@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcelo@conectiva.com.br \
    --cc=msw@redhat.com \
    --cc=paramjit@us.ibm.com \
    --cc=wilhelm.nuesser@sap.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®