Move slock_t defines into s_lock.h - Mailing list pgsql-patches

From Bruce Momjian
Subject Move slock_t defines into s_lock.h
Date
Msg-id 200312230331.hBN3V8R10625@candle.pha.pa.us
Whole thread Raw
List pgsql-patches
The attached applied patch moves slock_t defines into s_lock.h and moves
them out of the individual include/port files so they are centralized
and easier to maintain.  This patch was already reviewed during 7.4 beta
but was recreated to match current CVS.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/backend/port/dynloader/netbsd.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/port/dynloader/netbsd.c,v
retrieving revision 1.12
diff -c -c -r1.12 netbsd.c
*** src/backend/port/dynloader/netbsd.c    4 Aug 2003 02:40:02 -0000    1.12
--- src/backend/port/dynloader/netbsd.c    23 Dec 2003 03:28:43 -0000
***************
*** 1,4 ****
! /*-
   * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
   * Portions Copyright (c) 1990 The Regents of the University of California.
   * All rights reserved.
--- 1,4 ----
! /*
   * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
   * Portions Copyright (c) 1990 The Regents of the University of California.
   * All rights reserved.
Index: src/backend/port/dynloader/openbsd.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/port/dynloader/openbsd.c,v
retrieving revision 1.12
diff -c -c -r1.12 openbsd.c
*** src/backend/port/dynloader/openbsd.c    4 Aug 2003 02:40:02 -0000    1.12
--- src/backend/port/dynloader/openbsd.c    23 Dec 2003 03:28:43 -0000
***************
*** 1,4 ****
! /*-
   * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
   * Portions Copyright (c) 1990 The Regents of the University of California.
   * All rights reserved.
--- 1,4 ----
! /*
   * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
   * Portions Copyright (c) 1990 The Regents of the University of California.
   * All rights reserved.
Index: src/backend/storage/lmgr/s_lock.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/storage/lmgr/s_lock.c,v
retrieving revision 1.19
diff -c -c -r1.19 s_lock.c
*** src/backend/storage/lmgr/s_lock.c    23 Dec 2003 00:32:06 -0000    1.19
--- src/backend/storage/lmgr/s_lock.c    23 Dec 2003 03:28:43 -0000
***************
*** 17,23 ****

  #include <sys/time.h>
  #include <unistd.h>
-
  #include "storage/s_lock.h"


--- 17,22 ----
***************
*** 118,123 ****
--- 117,125 ----
   * Various TAS implementations that cannot live in s_lock.h as no inline
   * definition exists (yet).
   * In the future, get rid of tas.[cso] and fold it into this file.
+  *
+  * If you change something here, you have to modify s_lock.h because
+  * the definitions for these is split between this file and s_lock.h.
   */


Index: src/backend/storage/lmgr/spin.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/storage/lmgr/spin.c,v
retrieving revision 1.12
diff -c -c -r1.12 spin.c
*** src/backend/storage/lmgr/spin.c    29 Nov 2003 19:51:57 -0000    1.12
--- src/backend/storage/lmgr/spin.c    23 Dec 2003 03:28:43 -0000
***************
*** 25,30 ****
--- 25,31 ----
  #include "storage/lwlock.h"
  #include "storage/pg_sema.h"
  #include "storage/spin.h"
+ #include "storage/s_lock.h"


  #ifdef HAS_TEST_AND_SET
Index: src/include/port/aix.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/aix.h,v
retrieving revision 1.9
diff -c -c -r1.9 aix.h
*** src/include/port/aix.h    12 Nov 2002 00:39:08 -0000    1.9
--- src/include/port/aix.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,8 ****
  #define CLASS_CONFLICT
  #define DISABLE_XOPEN_NLS
- #define HAS_TEST_AND_SET
-
- typedef unsigned int slock_t;

  #include <sys/machine.h>        /* ENDIAN definitions for network
                                   * communication */
--- 1,5 ----
Index: src/include/port/beos.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/beos.h,v
retrieving revision 1.11
diff -c -c -r1.11 beos.h
*** src/include/port/beos.h    25 Oct 2001 05:50:09 -0000    1.11
--- src/include/port/beos.h    23 Dec 2003 03:28:46 -0000
***************
*** 2,11 ****
  #include <kernel/image.h>
  #include <sys/ioctl.h>

- #define HAS_TEST_AND_SET
-
- typedef unsigned char slock_t;
-
  #define AF_UNIX        10            /* no domain sockets on BeOS */

  /* Beos doesn't have all the required getrusage fields */
--- 2,7 ----
Index: src/include/port/bsdi.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/bsdi.h,v
retrieving revision 1.11
diff -c -c -r1.11 bsdi.h
*** src/include/port/bsdi.h    23 Dec 2003 00:32:06 -0000    1.11
--- src/include/port/bsdi.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,12 ****
- #if defined(__i386__) || defined(__x86_64__)
- typedef unsigned char slock_t;
- #endif
- #if defined(__ia64)
- typedef unsigned int slock_t;
- #endif
- #if defined(__sparc__)
- typedef unsigned char slock_t;
- #endif
-
- #define HAS_TEST_AND_SET
-
--- 0 ----
Index: src/include/port/cygwin.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/cygwin.h,v
retrieving revision 1.5
diff -c -c -r1.5 cygwin.h
*** src/include/port/cygwin.h    29 Nov 2003 19:52:08 -0000    1.5
--- src/include/port/cygwin.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,8 ****
  /* $PostgreSQL: pgsql-server/src/include/port/cygwin.h,v 1.5 2003/11/29 19:52:08 pgsql Exp $ */

- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
-
  #include <cygwin/version.h>

  /*
--- 1,5 ----
Index: src/include/port/darwin.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/darwin.h,v
retrieving revision 1.5
diff -c -c -r1.5 darwin.h
*** src/include/port/darwin.h    28 Oct 2001 06:26:08 -0000    1.5
--- src/include/port/darwin.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,13 ****
  #define __darwin__    1
-
- #if defined(__ppc__)
- #define HAS_TEST_AND_SET
- #endif
-
- #if defined(__ppc__)
- typedef unsigned int slock_t;
-
- #else
- typedef unsigned char slock_t;
-
- #endif
--- 1 ----
Index: src/include/port/freebsd.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/freebsd.h,v
retrieving revision 1.13
diff -c -c -r1.13 freebsd.h
*** src/include/port/freebsd.h    23 Dec 2003 00:32:06 -0000    1.13
--- src/include/port/freebsd.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,51 ****
- #if defined(__i386__) || defined(__x86_64__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__ia64)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
- #endif
-
- #if defined(__sparc__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__vax__)
- #define NEED_VAX_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__ns32k__)
- #define NEED_NS32K_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__m68k__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__arm__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__mips__)
- /* #    undef HAS_TEST_AND_SET */
- #endif
-
- #if defined(__alpha__)
- #define HAS_TEST_AND_SET
- typedef unsigned long slock_t;
- #endif
-
- #if defined(__powerpc__)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
-
- #endif
--- 0 ----
Index: src/include/port/hpux.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/hpux.h,v
retrieving revision 1.19
diff -c -c -r1.19 hpux.h
*** src/include/port/hpux.h    4 Aug 2003 00:43:32 -0000    1.19
--- src/include/port/hpux.h    23 Dec 2003 03:28:46 -0000
***************
*** 10,29 ****

  #if defined(__hppa)

- #define HAS_TEST_AND_SET
- typedef struct
- {
-     int            sema[4];
- } slock_t;
-
  #ifndef            BYTE_ORDER
  #define            BYTE_ORDER        BIG_ENDIAN
  #endif

  #elif defined(__ia64)
-
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;

  #ifndef            BYTE_ORDER
  #define            BYTE_ORDER        LITTLE_ENDIAN
--- 10,20 ----
Index: src/include/port/irix5.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/irix5.h,v
retrieving revision 1.8
diff -c -c -r1.8 irix5.h
*** src/include/port/irix5.h    12 Nov 2002 00:39:08 -0000    1.8
--- src/include/port/irix5.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,3 ****
- #define HAS_TEST_AND_SET
-
- typedef unsigned long slock_t;
--- 0 ----
Index: src/include/port/linux.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/linux.h,v
retrieving revision 1.38
diff -c -c -r1.38 linux.h
*** src/include/port/linux.h    26 Oct 2003 01:41:10 -0000    1.38
--- src/include/port/linux.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,51 ****
- #if defined(__i386__) || defined(__x86_64__)
- typedef unsigned char slock_t;
-
- #define HAS_TEST_AND_SET
-
- #elif defined(__sparc__)
- typedef unsigned char slock_t;
-
- #define HAS_TEST_AND_SET
-
- #elif defined(__powerpc64__)
- typedef unsigned long slock_t;
-
- #define HAS_TEST_AND_SET
-
- #elif defined(__powerpc__)
- typedef unsigned int slock_t;
-
- #define HAS_TEST_AND_SET
-
- #elif defined(__alpha__)
- typedef long int slock_t;
-
- #define HAS_TEST_AND_SET
-
- #elif defined(__mips__)
- typedef unsigned int slock_t;
-
- #define HAS_TEST_AND_SET
-
- #elif defined(__arm__)
- typedef unsigned char slock_t;
-
- #define HAS_TEST_AND_SET
-
- #elif defined(__ia64__)
- typedef unsigned int slock_t;
-
- #define HAS_TEST_AND_SET
-
- #elif defined(__s390__) || defined(__s390x__)
- typedef unsigned int slock_t;
-
- #define HAS_TEST_AND_SET
-
- #elif defined(__mc68000__)
- typedef unsigned char slock_t;
-
- #define HAS_TEST_AND_SET
-
- #endif
--- 0 ----
Index: src/include/port/netbsd.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/netbsd.h,v
retrieving revision 1.12
diff -c -c -r1.12 netbsd.h
*** src/include/port/netbsd.h    23 Dec 2003 00:32:06 -0000    1.12
--- src/include/port/netbsd.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,51 ****
- #if defined(__i386__) || defined(__x86_64__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__ia64)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
- #endif
-
- #if defined(__sparc__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__vax__)
- #define NEED_VAX_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__ns32k__)
- #define NEED_NS32K_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__m68k__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__arm__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__mips__)
- /* #    undef HAS_TEST_AND_SET */
- #endif
-
- #if defined(__alpha__)
- #define HAS_TEST_AND_SET
- typedef unsigned long slock_t;
- #endif
-
- #if defined(__powerpc__)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
-
- #endif
--- 0 ----
Index: src/include/port/nextstep.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/nextstep.h,v
retrieving revision 1.6
diff -c -c -r1.6 nextstep.h
*** src/include/port/nextstep.h    28 Oct 2000 23:53:00 -0000    1.6
--- src/include/port/nextstep.h    23 Dec 2003 03:28:46 -0000
***************
*** 15,18 ****
  #endif

  #define NO_WAITPID
- typedef struct mutex slock_t;
--- 15,17 ----
Index: src/include/port/openbsd.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/openbsd.h,v
retrieving revision 1.11
diff -c -c -r1.11 openbsd.h
*** src/include/port/openbsd.h    23 Dec 2003 00:32:06 -0000    1.11
--- src/include/port/openbsd.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,51 ****
- #if defined(__i386__) || defined(__x86_64__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__ia64)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
- #endif
-
- #if defined(__sparc__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__vax__)
- #define NEED_VAX_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__ns32k__)
- #define NEED_NS32K_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__m68k__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__arm__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
-
- #if defined(__mips__)
- /* #    undef HAS_TEST_AND_SET */
- #endif
-
- #if defined(__alpha__)
- #define HAS_TEST_AND_SET
- typedef unsigned long slock_t;
- #endif
-
- #if defined(__powerpc__)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
-
- #endif
--- 0 ----
Index: src/include/port/osf.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/osf.h,v
retrieving revision 1.7
diff -c -c -r1.7 osf.h
*** src/include/port/osf.h    28 Oct 2001 06:26:08 -0000    1.7
--- src/include/port/osf.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,7 ****
  #define NOFIXADE
  #define DISABLE_XOPEN_NLS
- #define HAS_TEST_AND_SET
-  /* #include <sys/mman.h> */    /* for msemaphore */
- /*typedef msemaphore slock_t;*/
- #include <alpha/builtins.h>
- typedef volatile long slock_t;
--- 1,2 ----
Index: src/include/port/qnx4.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/qnx4.h,v
retrieving revision 1.8
diff -c -c -r1.8 qnx4.h
*** src/include/port/qnx4.h    9 May 2003 16:59:43 -0000    1.8
--- src/include/port/qnx4.h    23 Dec 2003 03:28:46 -0000
***************
*** 5,12 ****
  #include <unix.h>
  #include <sys/select.h>            /* for select */

- #define HAS_TEST_AND_SET
-
  #undef HAVE_GETRUSAGE

  #define strncasecmp strnicmp
--- 5,10 ----
***************
*** 21,28 ****
  #endif   /* NAN */

  typedef u_short ushort;
-
- typedef unsigned char slock_t;

  extern int    isnan(double dsrc);

--- 19,24 ----
Index: src/include/port/sco.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/sco.h,v
retrieving revision 1.15
diff -c -c -r1.15 sco.h
*** src/include/port/sco.h    23 Dec 2003 00:32:06 -0000    1.15
--- src/include/port/sco.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,16 ****
  /* see src/backend/libpq/pqcomm.c */
  #define SCO_ACCEPT_BUG

- #define HAS_TEST_AND_SET
-
  #define USE_UNIVEL_CC
-
- #if defined(__ia64)
- typedef unsigned int slock_t;
- #else
- typedef unsigned char slock_t;
- #endif
-

  #ifndef            BIG_ENDIAN
  #define            BIG_ENDIAN        4321
--- 1,7 ----
Index: src/include/port/solaris.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/solaris.h,v
retrieving revision 1.9
diff -c -c -r1.9 solaris.h
*** src/include/port/solaris.h    29 Nov 2003 19:52:08 -0000    1.9
--- src/include/port/solaris.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,8 ****
  /* $PostgreSQL: pgsql-server/src/include/port/solaris.h,v 1.9 2003/11/29 19:52:08 pgsql Exp $ */

- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
-
  /*
   * Sort this out for all operating systems some time.  The __xxx
   * symbols are defined on both GCC and Solaris CC, although GCC
--- 1,5 ----
Index: src/include/port/sunos4.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/sunos4.h,v
retrieving revision 1.7
diff -c -c -r1.7 sunos4.h
*** src/include/port/sunos4.h    28 Oct 2001 06:26:08 -0000    1.7
--- src/include/port/sunos4.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,6 ****
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
-
  /* sprintf() returns char *, not int, on SunOS 4.1.x */
  #define SPRINTF_CHAR

--- 1,3 ----
Index: src/include/port/svr4.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/svr4.h,v
retrieving revision 1.11
diff -c -c -r1.11 svr4.h
*** src/include/port/svr4.h    28 Oct 2001 06:26:08 -0000    1.11
--- src/include/port/svr4.h    23 Dec 2003 03:28:46 -0000
***************
*** 3,13 ****
  #define            BYTE_ORDER        BIG_ENDIAN
  #endif
  #endif
-
- #ifdef sinix
- #define HAS_TEST_AND_SET
-
- #include "abi_mutex.h"
- typedef abilock_t slock_t;
-
- #endif
--- 3,5 ----
Index: src/include/port/univel.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/univel.h,v
retrieving revision 1.19
diff -c -c -r1.19 univel.h
*** src/include/port/univel.h    23 Dec 2003 00:32:06 -0000    1.19
--- src/include/port/univel.h    23 Dec 2003 03:28:46 -0000
***************
*** 6,18 ****
   ***************************************/
  #define USE_UNIVEL_CC

- #if defined(__ia64)
- typedef unsigned int slock_t;
- #else
- typedef unsigned char slock_t;
- #endif
-
-
  #ifndef            BIG_ENDIAN
  #define            BIG_ENDIAN        4321
  #endif
--- 6,11 ----
Index: src/include/port/unixware.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/unixware.h,v
retrieving revision 1.13
diff -c -c -r1.13 unixware.h
*** src/include/port/unixware.h    23 Dec 2003 00:32:06 -0000    1.13
--- src/include/port/unixware.h    23 Dec 2003 03:28:46 -0000
***************
*** 9,21 ****
   ***************************************/
  #define USE_UNIVEL_CC

- #if defined(__ia64)
- typedef unsigned int slock_t;
- #else
- typedef unsigned char slock_t;
- #endif
-
-
  #ifndef            BIG_ENDIAN
  #define            BIG_ENDIAN        4321
  #endif
--- 9,14 ----
Index: src/include/storage/s_lock.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/storage/s_lock.h,v
retrieving revision 1.119
diff -c -c -r1.119 s_lock.h
*** src/include/storage/s_lock.h    23 Dec 2003 00:32:06 -0000    1.119
--- src/include/storage/s_lock.h    23 Dec 2003 03:28:46 -0000
***************
*** 73,84 ****
  #include "storage/pg_sema.h"


- #if defined(HAS_TEST_AND_SET)
-
-
  #if defined(__GNUC__) || defined(__ICC)
  /*************************************************************************
   * All the gcc inlines
   */

  /*
--- 73,83 ----
  #include "storage/pg_sema.h"


  #if defined(__GNUC__) || defined(__ICC)
  /*************************************************************************
   * All the gcc inlines
+  * Gcc consistently defines the CPU as __cpu__.
+  * Other compilers use __cpu or __cpu__ so we test for both in those cases.
   */

  /*
***************
*** 95,100 ****
--- 94,102 ----


  #if defined(__i386__) || defined(__x86_64__) /* AMD Opteron */
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
+
  #define TAS(lock) tas(lock)

  static __inline__ int
***************
*** 114,120 ****


  /* Intel Itanium */
! #if defined(__ia64__) || defined(__ia64)
  #define TAS(lock) tas(lock)

  static __inline__ int
--- 116,125 ----


  /* Intel Itanium */
! #if defined(__ia64__) || defined(__ia64)  /* __ia64 is used by ICC the compiler? */
! typedef unsigned int slock_t;
! #define HAS_TEST_AND_SET
!
  #define TAS(lock) tas(lock)

  static __inline__ int
***************
*** 135,140 ****
--- 140,148 ----


  #if defined(__arm__) || defined(__arm)
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
+
  #define TAS(lock) tas(lock)

  static __inline__ int
***************
*** 153,161 ****


  #if defined(__s390__) && !defined(__s390x__)
! /*
!  * S/390 Linux
!  */
  #define TAS(lock)       tas(lock)

  static __inline__ int
--- 161,170 ----


  #if defined(__s390__) && !defined(__s390x__)
! typedef unsigned int slock_t;
! #define HAS_TEST_AND_SET
!
! /* S/390 Linux */
  #define TAS(lock)       tas(lock)

  static __inline__ int
***************
*** 179,187 ****
  #endif     /* __s390__ */

  #if defined(__s390x__)
! /*
!  * S/390x Linux (64-bit zSeries)
!  */
  #define TAS(lock)       tas(lock)

  static __inline__ int
--- 188,196 ----
  #endif     /* __s390__ */

  #if defined(__s390x__)
! typedef unsigned int slock_t;
! #define HAS_TEST_AND_SET
! /* S/390x Linux (64-bit zSeries) */
  #define TAS(lock)       tas(lock)

  static __inline__ int
***************
*** 206,211 ****
--- 215,222 ----


  #if defined(__sparc__)
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
  #define TAS(lock) tas(lock)

  static __inline__ int
***************
*** 223,228 ****
--- 234,247 ----
  #endif     /* __sparc__ */

  #if defined(__ppc__) || defined(__powerpc__) || defined(__powerpc64__)
+ /* Is this correct? */
+ #ifndef defined(__powerpc64__)
+ typedef unsigned int slock_t;
+ #else
+ typedef unsigned long slock_t;
+ #endif
+ #define HAS_TEST_AND_SET
+
  #define TAS(lock) tas(lock)
  /*
   * NOTE: per the Enhanced PowerPC Architecture manual, v1.0 dated 7-May-2002,
***************
*** 255,264 ****
--- 274,295 ----
      return _res;
  }

+ /*
+  * PowerPC S_UNLOCK is almost standard but requires a "sync" instruction.
+  */
+ #define S_UNLOCK(lock)    \
+ do \
+ {\
+     __asm__ __volatile__ ("    sync \n"); \
+     *((volatile slock_t *) (lock)) = 0; \
+ } while (0)
+
  #endif /* powerpc */


  #if defined(__mc68000__) && defined(__linux__)
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
  #define TAS(lock) tas(lock)

  static __inline__ int
***************
*** 280,304 ****
  #endif     /* defined(__mc68000__) && defined(__linux__) */


! #if defined(__ppc__) || defined(__powerpc__) || defined(__powerpc64__)
! /*
!  * PowerPC S_UNLOCK is almost standard but requires a "sync" instruction.
!  */
! #define S_UNLOCK(lock)    \
! do \
! {\
!     __asm__ __volatile__ ("    sync \n"); \
!     *((volatile slock_t *) (lock)) = 0; \
! } while (0)
!
! #endif /* powerpc */
!
!
! #if defined(NEED_VAX_TAS_ASM)
  /*
   * VAXen -- even multiprocessor ones
   * (thanks to Tom Ivar Helbekkmo)
   */
  #define TAS(lock) tas(lock)

  static __inline__ int
--- 311,323 ----
  #endif     /* defined(__mc68000__) && defined(__linux__) */


! #if defined(__vax__)
  /*
   * VAXen -- even multiprocessor ones
   * (thanks to Tom Ivar Helbekkmo)
   */
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
  #define TAS(lock) tas(lock)

  static __inline__ int
***************
*** 317,326 ****
      return _res;
  }

! #endif     /* NEED_VAX_TAS_ASM */


! #if defined(NEED_NS32K_TAS_ASM)
  #define TAS(lock) tas(lock)

  static __inline__ int
--- 336,347 ----
      return _res;
  }

! #endif     /* __vax__ */


! #if defined(__ns32k__)
! typedef unsigned char slock_t;
! #define HAS_TEST_AND_SET
  #define TAS(lock) tas(lock)

  static __inline__ int
***************
*** 335,388 ****
      return _res;
  }

! #endif     /* NEED_NS32K_TAS_ASM */
!
!
!
! #else                            /* !__GNUC__ */
!
! /***************************************************************************
!  * All non-gcc inlines
!  */
!
! #if defined(USE_UNIVEL_CC)
! #define TAS(lock)    tas(lock)
!
! asm int
! tas(volatile slock_t *s_lock)
! {
! /* UNIVEL wants %mem in column 1, so we don't pg_indent this file */
! %mem s_lock
!     pushl %ebx
!     movl s_lock, %ebx
!     movl $255, %eax
!     lock
!     xchgb %al, (%ebx)
!     popl %ebx
! }
!
! #endif     /* defined(USE_UNIVEL_CC) */
!
! #endif     /* defined(__GNUC__) */
!
!
!
! /*************************************************************************
!  * These are the platforms that have only one compiler, or do not use inline
!  * assembler (and hence have common code for gcc and non-gcc compilers,
!  * if both are available).
!  */


  #if defined(__alpha) || defined(__alpha__)
-
  /*
   * Correct multi-processor locking methods are explained in section 5.5.3
   * of the Alpha AXP Architecture Handbook, which at this writing can be
   * found at ftp://ftp.netbsd.org/pub/NetBSD/misc/dec-docs/index.html.
   * For gcc we implement the handbook's code directly with inline assembler.
   */
! #if defined(__GNUC__)

  #define TAS(lock)  tas(lock)
  #define S_UNLOCK(lock)    \
--- 356,373 ----
      return _res;
  }

! #endif     /* __ns32k__ */


  #if defined(__alpha) || defined(__alpha__)
  /*
   * Correct multi-processor locking methods are explained in section 5.5.3
   * of the Alpha AXP Architecture Handbook, which at this writing can be
   * found at ftp://ftp.netbsd.org/pub/NetBSD/misc/dec-docs/index.html.
   * For gcc we implement the handbook's code directly with inline assembler.
   */
! typedef unsigned long slock_t;
! #define HAS_TEST_AND_SET

  #define TAS(lock)  tas(lock)
  #define S_UNLOCK(lock)    \
***************
*** 416,423 ****
      return (int) _res;
  }

! #else                            /* !defined(__GNUC__) */

  /*
   * The Tru64 compiler doesn't support gcc-style inline asm, but it does
   * have some builtin functions that accomplish much the same results.
--- 401,469 ----
      return (int) _res;
  }

! #endif /* __alpha || __alpha__ */
!
!
! /* These live in s_lock.c, but only for gcc */
!
! #if defined(__m68k__)
! typedef unsigned char slock_t;
! #define HAS_TEST_AND_SET
! #endif
!
! #ifdef sinix    /* This symbol is not protected with __, for SvR4 port */
! #include "abi_mutex.h"
! typedef abilock_t slock_t;
! #define HAS_TEST_AND_SET
! #endif
!
!
! /* These are in s_lock.c */
!
! #if defined(__m68k__)
! typedef unsigned char slock_t;
! #define HAS_TEST_AND_SET
! #endif
!
! #if defined(__mips__) && !defined(__sgi)
! typedef unsigned char slock_t;
! #define HAS_TEST_AND_SET
! #endif
!
! #endif    /* __GNUC__ */
!
!
!
! /***************************************************************************
!  * Uses non-gcc inline assembly:
!  */
!
! #if !defined(HAS_TEST_AND_SET)
!
! #if defined(USE_UNIVEL_CC)
! typedef unsigned char slock_t;
! #define HAS_TEST_AND_SET
! #define TAS(lock)    tas(lock)
!
! asm int
! tas(volatile slock_t *s_lock)
! {
! /* UNIVEL wants %mem in column 1, so we don't pg_indent this file */
! %mem s_lock
!     pushl %ebx
!     movl s_lock, %ebx
!     movl $255, %eax
!     lock
!     xchgb %al, (%ebx)
!     popl %ebx
! }
!
! #endif     /* defined(USE_UNIVEL_CC) */
!

+ #if defined(__alpha) || defined(__alpha__)
+ typedef volatile long slock_t;
+ #define HAS_TEST_AND_SET
  /*
   * The Tru64 compiler doesn't support gcc-style inline asm, but it does
   * have some builtin functions that accomplish much the same results.
***************
*** 428,444 ****
   */

  #include <alpha/builtins.h>
-
  #define S_INIT_LOCK(lock)  (*(lock) = 0)
  #define TAS(lock)           (__LOCK_LONG_RETRY((lock), 1) == 0)
  #define S_UNLOCK(lock)       __UNLOCK_LONG(lock)

- #endif     /* defined(__GNUC__) */
-
  #endif     /* __alpha || __alpha__ */


  #if defined(__hppa)
  /*
   * HP's PA-RISC
   *
--- 474,492 ----
   */

  #include <alpha/builtins.h>
  #define S_INIT_LOCK(lock)  (*(lock) = 0)
  #define TAS(lock)           (__LOCK_LONG_RETRY((lock), 1) == 0)
  #define S_UNLOCK(lock)       __UNLOCK_LONG(lock)

  #endif     /* __alpha || __alpha__ */


  #if defined(__hppa)
+ typedef struct
+ {
+     int            sema[4];
+ } slock_t;
+ #define HAS_TEST_AND_SET
  /*
   * HP's PA-RISC
   *
***************
*** 462,468 ****
--- 510,519 ----

  #endif     /* __hppa */

+
  #if defined(__QNX__) && defined(__WATCOMC__)
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
  /*
   * QNX 4 using WATCOM C
   */
***************
*** 490,495 ****
--- 541,548 ----
   * assembly from his NECEWS SVR4 port, but we probably ought to retain this
   * for the R3000 chips out there.
   */
+ typedef unsigned long slock_t;
+ #define HAS_TEST_AND_SET
  #include "mutex.h"
  #define TAS(lock)    (test_and_set(lock,1))
  #define S_UNLOCK(lock)    (test_then_and(lock,0))
***************
*** 497,502 ****
--- 550,556 ----
  #define S_LOCK_FREE(lock)    (test_then_add(lock,0) == 0)
  #endif     /* __sgi */

+
  #if defined(sinix)
  /*
   * SINIX / Reliant UNIX
***************
*** 504,509 ****
--- 558,564 ----
   * member. (Basically same as SGI)
   *
   */
+ #define HAS_TEST_AND_SET
  #define TAS(lock)    (!acquire_lock(lock))
  #define S_UNLOCK(lock)    release_lock(lock)
  #define S_INIT_LOCK(lock)    init_lock(lock)
***************
*** 517,532 ****
   *
   * Note that slock_t on POWER/POWER2/PowerPC is int instead of char
   */
  #define TAS(lock)            _check_lock(lock, 0, 1)
  #define S_UNLOCK(lock)        _clear_lock(lock, 0)
  #endif     /* _AIX */


  #if defined (nextstep)
! /*
!  * NEXTSTEP (mach)
!  * slock_t is defined as a struct mutex.
!  */

  #define S_LOCK(lock)    mutex_lock(lock)
  #define S_UNLOCK(lock)    mutex_unlock(lock)
--- 572,586 ----
   *
   * Note that slock_t on POWER/POWER2/PowerPC is int instead of char
   */
+ #define HAS_TEST_AND_SET
  #define TAS(lock)            _check_lock(lock, 0, 1)
  #define S_UNLOCK(lock)        _clear_lock(lock, 0)
  #endif     /* _AIX */


  #if defined (nextstep)
! typedef struct mutex slock_t;
! #define HAS_TEST_AND_SET

  #define S_LOCK(lock)    mutex_lock(lock)
  #define S_UNLOCK(lock)    mutex_unlock(lock)
***************
*** 535,547 ****
  #define S_LOCK_FREE(alock)    ((alock)->lock == 0)
  #endif     /* nextstep */



- #else     /* HAS_TEST_AND_SET */

  #ifdef HAVE_SPINLOCKS
  #error PostgreSQL does not have native spinlock support on this platform.  To continue the compilation, rerun
configureusing --disable-spinlocks.  However, performance will be poor.  Please report this to
pgsql-bugs@postgresql.org.
! #endif

  /*
   * Fake spinlock implementation using semaphores --- slow and prone
--- 589,616 ----
  #define S_LOCK_FREE(alock)    ((alock)->lock == 0)
  #endif     /* nextstep */

+ /* These are in s_lock.c */

+ #if defined(sun3)
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
+ #endif
+
+ #if defined(__sparc__) || defined(__sparc)
+ #define HAS_TEST_AND_SET
+ typedef unsigned char slock_t;
+ #endif
+
+
+ #endif    /* !defined(HAS_TEST_AND_SET */


+
+ #ifndef HAS_TEST_AND_SET
  #ifdef HAVE_SPINLOCKS
  #error PostgreSQL does not have native spinlock support on this platform.  To continue the compilation, rerun
configureusing --disable-spinlocks.  However, performance will be poor.  Please report this to
pgsql-bugs@postgresql.org.
!
! #else

  /*
   * Fake spinlock implementation using semaphores --- slow and prone
***************
*** 560,566 ****
  #define S_INIT_LOCK(lock)    s_init_lock_sema(lock)
  #define TAS(lock)    tas_sema(lock)

! #endif     /* HAS_TEST_AND_SET */



--- 629,636 ----
  #define S_INIT_LOCK(lock)    s_init_lock_sema(lock)
  #define TAS(lock)    tas_sema(lock)

! #endif    /* HAVE_SPINLOCKS */
! #endif    /* HAS_TEST_AND_SET */




pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Alpha test
Next
From: Tom Lane
Date:
Subject: Re: Alpha test