Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
afb09b5a
Commit
afb09b5a
authored
Dec 23, 2003
by
Tom Lane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use inlined TAS() on PA-RISC, if we are compiling with gcc.
Patch inspired by original submission from ViSolve.
parent
cd2ad9b9
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
50 additions
and
16 deletions
+50
-16
src/backend/storage/lmgr/s_lock.c
src/backend/storage/lmgr/s_lock.c
+11
-7
src/include/storage/s_lock.h
src/include/storage/s_lock.h
+31
-7
src/template/hpux
src/template/hpux
+8
-2
No files found.
src/backend/storage/lmgr/s_lock.c
View file @
afb09b5a
...
...
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/storage/lmgr/s_lock.c,v 1.2
1 2003/12/23 18:13:1
7 tgl Exp $
* $PostgreSQL: pgsql/src/backend/storage/lmgr/s_lock.c,v 1.2
2 2003/12/23 22:15:0
7 tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -124,8 +124,12 @@ s_lock(volatile slock_t *lock, const char *file, int line)
*/
#ifdef HAVE_SPINLOCKS
/* skip spinlocks if requested */
#if defined(__GNUC__)
/*************************************************************************
/*
* All the gcc flavors that are not inlined
*/
...
...
@@ -151,6 +155,7 @@ _success: \n\
}
#endif
/* __m68k__ */
#if defined(__mips__) && !defined(__sgi)
static
void
tas_dummy
()
...
...
@@ -178,13 +183,14 @@ fail: \n\
}
#endif
/* __mips__ && !__sgi */
#else
/* not __GNUC__ */
/***************************************************************************
/*
* All non gcc
*/
#if defined(sun3)
static
void
tas_dummy
()
/*
really
means
:
extern
int
tas
(
slock_t
...
...
@@ -210,7 +216,6 @@ tas_dummy() /* really means: extern int tas(slock_t
#endif
/* sun3 */
#if defined(__sparc__) || defined(__sparc)
/*
* sparc machines not using gcc
...
...
@@ -233,10 +238,9 @@ tas_dummy() /* really means: extern int tas(slock_t
#endif
/* __sparc || __sparc__ */
#endif
/* not __GNUC__ */
#endif
/* HAVE_SPINLOCKS */
...
...
src/include/storage/s_lock.h
View file @
afb09b5a
...
...
@@ -63,7 +63,7 @@
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.12
2 2003/12/23 18:13:1
7 tgl Exp $
* $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.12
3 2003/12/23 22:15:0
7 tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -497,9 +497,12 @@ typedef unsigned long slock_t;
/*
* HP's PA-RISC
*
* a "set" slock_t has a single word cleared (the one that is on a 16-byte
* boundary; we use a 16-byte struct to ensure there is one). a "clear"
* slock_t has all words set to non-zero. tas() is in tas.s
* See src/backend/port/hpux/tas.c.template for details about LDCWX. Because
* LDCWX requires a 16-byte-aligned address, we declare slock_t as a 16-byte
* struct. The active word in the struct is whichever has the aligned address;
* the other three words just sit at -1.
*
* When using gcc, we can inline the required assembly code.
*/
#define HAS_TEST_AND_SET
...
...
@@ -508,16 +511,37 @@ typedef struct
int
sema
[
4
];
}
slock_t
;
#define S_UNLOCK(lock) \
#define TAS_ACTIVE_WORD(lock) ((volatile int *) (((long) (lock) + 15) & ~15))
#if defined(__GNUC__)
static
__inline__
int
tas
(
volatile
slock_t
*
lock
)
{
volatile
int
*
lockword
=
TAS_ACTIVE_WORD
(
lock
);
register
int
lockval
;
__asm__
__volatile__
(
" ldcwx 0(0,%2),%0
\n
"
:
"=r"
(
lockval
),
"=m"
(
*
lockword
)
:
"r"
(
lockword
));
return
(
lockval
==
0
);
}
#endif
/* __GNUC__ */
#define S_UNLOCK(lock) (*TAS_ACTIVE_WORD(lock) = -1)
#define S_INIT_LOCK(lock) \
do { \
volatile slock_t *lock_ = (
volatile slock_t *) (
lock); \
volatile slock_t *lock_ = (lock); \
lock_->sema[0] = -1; \
lock_->sema[1] = -1; \
lock_->sema[2] = -1; \
lock_->sema[3] = -1; \
} while (0)
#define S_LOCK_FREE(lock) (
*(int *) (((long) (lock) + 15) & ~15
) != 0)
#define S_LOCK_FREE(lock) (
*TAS_ACTIVE_WORD(lock
) != 0)
#endif
/* __hppa */
...
...
src/template/hpux
View file @
afb09b5a
...
...
@@ -5,7 +5,13 @@ if test "$GCC" != yes ; then
CFLAGS="+O2"
fi
# Pick right test-and-set (TAS) code.
# Pick right test-and-set (TAS) code. We need out-of-line assembler
# when not using gcc.
case $host in
hppa*-*-hpux*) need_tas=yes; tas_file=hpux_hppa.s ;;
hppa*-*-hpux*)
if test "$GCC" != yes ; then
need_tas=yes
tas_file=hpux_hppa.s
fi
;;
esac
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment