Fix for netbsd locking, from Henry B. Hotz.
authorBruce Momjian
Thu, 30 Oct 1997 05:24:19 +0000 (05:24 +0000)
committerBruce Momjian
Thu, 30 Oct 1997 05:24:19 +0000 (05:24 +0000)
src/include/port/BSD44_derived.h
src/include/storage/s_lock.h

index 867246f3b86bd6dd2f9c425003dc92b45d4df683..12787118aea2448e7a3dc80b050935d612f810ea 100644 (file)
@@ -1,15 +1,25 @@
 #define USE_POSIX_TIME
+
 #if defined(i386)
 #define NEED_I386_TAS_ASM
+#define HAS_TEST_AND_SET
 #endif
+
 #if defined(sparc)
 #define NEED_SPARC_TAS_ASM
+#define HAS_TEST_AND_SET
 #endif
+
 #if defined(ns32k)
 #define NEED_NS32k_TAS_ASM
+#define HAS_TEST_AND_SET
 #endif
+
+#if defined(__m68k__)
 #define HAS_TEST_AND_SET
+#endif
+
 #if defined(__mips__)
-/* #   undef HAS_TEST_AND_SET */
+/* #    undef HAS_TEST_AND_SET */
 #endif
 typedef unsigned char slock_t;
index 761ae6b11cd248846fe4bf9fccbde0d87fc7858c..1722d33b938149ed043fb2c518de6d00289f5a33 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.10 1997/10/03 15:27:18 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.11 1997/10/30 05:24:19 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
  *             ;
  *     }
  *
+ *     In addition to modifying this file you will need to modify
+ *     the appropriate ...src/include/port/...h file to define
+ *     HAS_TEST_AND_SET for the appropriate circumstances.
+ *
  *     If this is not done, POSTGRES will default to using System V
  *     semaphores (and take a large performance hit -- around 40% of
  *     its time on a DS5000/240 is spent in semop(3)...).
@@ -228,6 +232,31 @@ tas_dummy()
 
 #endif                         /* sun3 */
 
+/*
+ * M68000 ports under NetBSD.
+ *
+ * This version should also work on a sun3, but I can't test it.
+ * Conversely the sun3 version should work under NetBSD/m68k, but
+ * it doesn't.
+ */
+#if defined(__NetBSD__) && defined(__m68k__)
+
+static void S_LOCK(char *lock)
+{
+   asm("
+           movel   a6@(8),a0
+   LOOP:
+           tas     a0@
+           bmi     LOOP
+   ");
+}
+
+#define S_UNLOCK(lock)     (*(lock) = 0)
+
+#define S_INIT_LOCK(lock)  S_UNLOCK(lock)
+
+#endif /* M68000 && NetBSD */
+
 /*
  * sparc machines
  */