From 58ed1232f589789dda1710f7d3ab852ae783a975 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 30 Oct 1997 05:24:19 +0000 Subject: [PATCH] Fix for netbsd locking, from Henry B. Hotz. --- src/include/port/BSD44_derived.h | 12 +++++++++++- src/include/storage/s_lock.h | 31 ++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/include/port/BSD44_derived.h b/src/include/port/BSD44_derived.h index 867246f3b8..12787118ae 100644 --- a/src/include/port/BSD44_derived.h +++ b/src/include/port/BSD44_derived.h @@ -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; diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h index 761ae6b11c..1722d33b93 100644 --- a/src/include/storage/s_lock.h +++ b/src/include/storage/s_lock.h @@ -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 $ * *------------------------------------------------------------------------- */ @@ -24,6 +24,10 @@ * ; * } * + * 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 */ -- GitLab