Bruce Momjian wrote:
> Prompted by confusion over Itanium/Opterion, I have written a patch to
> improve the way we define spinlocks for platforms and cpu's.  It
> basically decouples the OS from the CPU spinlock code.  In almost all
> cases, the spinlock code cares only about the compiler and CPU, not the
> OS.
> 
> The patch:
> 
>       o defines HAS_TEST_AND_SET inside each spinlock routine, not in
>         platform-specific files
>       o moves slock_t defines into the spinlock routines
>       o remove NEED_{CPU}_TAS_ASM define because it is no longer needed
>       o reports a compile error if spinlocks are not defined
>       o adds a configure option --without-spinlocks to allow
>         non-spinlock compiles

OK, this applied patch implements the last two items.  The earlier items
will have to wait for 7.5.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: configure
===================================================================
RCS file: /cvsroot/pgsql-server/configure,v
retrieving revision 1.295
diff -c -c -r1.295 configure
*** configure   7 Sep 2003 16:49:41 -0000       1.295
--- configure   12 Sep 2003 16:05:13 -0000
***************
*** 869,874 ****
--- 869,875 ----
    --with-rendezvous       build with Rendezvous support
    --with-openssl[=DIR]    build with OpenSSL support [/usr/local/ssl]
    --without-readline      do not use Readline
+   --without-spinlocks     do not use Spinlocks
    --without-zlib          do not use Zlib
    --with-gnu-ld           assume the C compiler uses GNU ld default=no
  
***************
*** 3494,3499 ****
--- 3495,3530 ----
  
  
  #
+ # Spinlocks
+ #
+ 
+ 
+ 
+ # Check whether --with-spinlocks or --without-spinlocks was given.
+ if test "${with_spinlocks+set}" = set; then
+   withval="$with_spinlocks"
+ 
+   case $withval in
+     yes)
+       :
+       ;;
+     no)
+       :
+       ;;
+     *)
+       { { echo "$as_me:$LINENO: error: no argument expected for --with-spinlocks 
option" >&5
+ echo "$as_me: error: no argument expected for --with-spinlocks option" >&2;}
+    { (exit 1); exit 1; }; }
+       ;;
+   esac
+ 
+ else
+   with_spinlocks=yes
+ 
+ fi;
+ 
+ 
+ #
  # Zlib
  #
  
***************
*** 3523,3529 ****
  fi;
  
  
- 
  #
  # Elf
  #
--- 3554,3559 ----
***************
*** 6060,6065 ****
--- 6090,6108 ----
     { (exit 1); exit 1; }; }
  fi
  
+ fi
+ 
+ if test "$with_spinlocks" = yes; then
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_SPINLOCKS 1
+ _ACEOF
+ 
+ else
+   { echo "$as_me:$LINENO: WARNING:
+ *** Not using spinlocks will cause poor performance." >&5
+ echo "$as_me: WARNING:
+ *** Not using spinlocks will cause poor performance." >&2;}
  fi
  
  if test "$with_krb4" = yes ; then
Index: configure.in
===================================================================
RCS file: /cvsroot/pgsql-server/configure.in,v
retrieving revision 1.286
diff -c -c -r1.286 configure.in
*** configure.in        7 Sep 2003 16:38:05 -0000       1.286
--- configure.in        12 Sep 2003 16:05:15 -0000
***************
*** 522,533 ****
                [  --without-readline      do not use Readline])
  
  #
  # Zlib
  #
  PGAC_ARG_BOOL(with, zlib, yes,
                [  --without-zlib          do not use Zlib])
  
- 
  #
  # Elf
  #
--- 522,538 ----
                [  --without-readline      do not use Readline])
  
  #
+ # Spinlocks
+ #
+ PGAC_ARG_BOOL(with, spinlocks, yes,
+               [  --without-spinlocks     do not use Spinlocks])
+ 
+ #
  # Zlib
  #
  PGAC_ARG_BOOL(with, zlib, yes,
                [  --without-zlib          do not use Zlib])
  
  #
  # Elf
  #
***************
*** 676,681 ****
--- 681,693 ----
  If you have zlib already installed, see config.log for details on the
  failure.  It is possible the compiler isn't looking in the proper directory.
  Use --without-zlib to disable zlib support.])])
+ fi
+ 
+ if test "$with_spinlocks" = yes; then
+   AC_DEFINE(HAVE_SPINLOCKS, 1, [Define to 1 if you have spinlocks.])
+ else
+   AC_MSG_WARN([
+ *** Not using spinlocks will cause poor performance.])
  fi
  
  if test "$with_krb4" = yes ; then
Index: doc/src/sgml/installation.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/installation.sgml,v
retrieving revision 1.141
diff -c -c -r1.141 installation.sgml
*** doc/src/sgml/installation.sgml      11 Sep 2003 21:42:20 -0000      1.141
--- doc/src/sgml/installation.sgml      12 Sep 2003 16:05:17 -0000
***************
*** 900,905 ****
--- 900,917 ----
        </varlistentry>
  
        <varlistentry>
+        <term><option>--without-spinlocks</option></term>
+        <listitem>
+         <para>
+          Allows source builds to succeed without CPU spinlock support.
+          Lack of spinlock support will produce poor performance.
+          This option is to be used only by platforms without
+          spinlock support.
+         </para>
+        </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
         <term><option>--enable-thread-safety</option></term>
         <listitem>
          <para>
Index: src/include/pg_config.h.in
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/pg_config.h.in,v
retrieving revision 1.62
diff -c -c -r1.62 pg_config.h.in
*** src/include/pg_config.h.in  7 Sep 2003 03:43:56 -0000       1.62
--- src/include/pg_config.h.in  12 Sep 2003 16:05:19 -0000
***************
*** 357,362 ****
--- 357,365 ----
  /* Define to 1 if you have the `snprintf' function. */
  #undef HAVE_SNPRINTF
  
+ /* Define to 1 if you have spinlocks. */
+ #undef HAVE_SPINLOCKS
+ 
  /* Define to 1 if you have the `srandom' function. */
  #undef HAVE_SRANDOM
  
Index: src/include/storage/s_lock.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/storage/s_lock.h,v
retrieving revision 1.112
diff -c -c -r1.112 s_lock.h
*** src/include/storage/s_lock.h        4 Aug 2003 02:40:15 -0000       1.112
--- src/include/storage/s_lock.h        12 Sep 2003 16:05:20 -0000
***************
*** 537,543 ****
  
  
  
! #else                                                 /* !HAS_TEST_AND_SET */
  
  /*
   * Fake spinlock implementation using semaphores --- slow and prone
--- 537,547 ----
  
  
  
! #else  /* HAS_TEST_AND_SET */
! 
! #ifdef HAVE_SPINLOCKS
! #error This platform does not support native spinlocks.  To continue the compile, 
rerun configure using --without-spinlocks.  However, performance will be poor.  Please 
report this to [EMAIL PROTECTED]
! #endif
  
  /*
   * Fake spinlock implementation using semaphores --- slow and prone
---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to