Commit fadcb011 authored by Tom Lane's avatar Tom Lane

TAS code originally written for s390 (32-bit) does not work for s390x

(64-bit).  Fix it.  Per report from Permaine Cheung.
parent ed24f285
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: s_lock.h,v 1.102 2002/11/10 00:33:43 momjian Exp $ * $Id: s_lock.h,v 1.103 2002/11/22 01:13:16 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -150,7 +150,8 @@ tas(volatile slock_t *lock) ...@@ -150,7 +150,8 @@ tas(volatile slock_t *lock)
#endif /* __arm__ */ #endif /* __arm__ */
#if defined(__s390__) || defined(__s390x__)
#if defined(__s390__) && !defined(__s390x__)
/* /*
* S/390 Linux * S/390 Linux
*/ */
...@@ -176,6 +177,32 @@ tas(volatile slock_t *lock) ...@@ -176,6 +177,32 @@ tas(volatile slock_t *lock)
#endif /* __s390__ */ #endif /* __s390__ */
#if defined(__s390x__)
/*
* S/390x Linux (64-bit zSeries)
*/
#define TAS(lock) tas(lock)
static __inline__ int
tas(volatile slock_t *lock)
{
int _res;
__asm__ __volatile__(
" la 1,1 \n"
" lg 2,%2 \n"
" slr 0,0 \n"
" cs 0,1,0(2) \n"
" lr %1,0 \n"
: "=m"(lock), "=d"(_res)
: "m"(lock)
: "0", "1", "2");
return (_res);
}
#endif /* __s390x__ */
#if defined(__sparc__) #if defined(__sparc__)
#define TAS(lock) tas(lock) #define TAS(lock) tas(lock)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment