diff options
author | Jeremy Allison <jra@samba.org> | 2000-12-06 00:05:15 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2000-12-06 00:05:15 +0000 |
commit | 7e4c4721b4fbfa71ce6712ec5b9f3e8e8a105147 (patch) | |
tree | 2df359e8d49573fd79674cbb8cd592ce896a93d0 /source3/tdb/spinlock.h | |
parent | 1cd8538b7abf0970082074d7a114bb9d013d00b2 (diff) | |
download | samba-7e4c4721b4fbfa71ce6712ec5b9f3e8e8a105147.tar.gz samba-7e4c4721b4fbfa71ce6712ec5b9f3e8e8a105147.tar.bz2 samba-7e4c4721b4fbfa71ce6712ec5b9f3e8e8a105147.zip |
Changed to sourceforge tdb code. This includes spinlocks (so we now have
a --with-spinlocks option to configure, this does mean the on-disk tdb
format has changed, so 2.2alphaX sites will need to re-create their
tdb's. The upside is no more tdb fragmentation and a +5% on netbench.
Swings and roundabouts....
Jeremy.
(This used to be commit 9dea7b7c257db487f8ced7dad3fce92fba03ea91)
Diffstat (limited to 'source3/tdb/spinlock.h')
-rw-r--r-- | source3/tdb/spinlock.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/source3/tdb/spinlock.h b/source3/tdb/spinlock.h new file mode 100644 index 0000000000..a0dd9cbca5 --- /dev/null +++ b/source3/tdb/spinlock.h @@ -0,0 +1,55 @@ +#ifndef __SPINLOCK_H__ +#define __SPINLOCK_H__ + +#if HAVE_CONFIG_H +#include <config.h> +#endif + +#include "tdb.h" + +#ifdef USE_SPINLOCKS + +#define RWLOCK_BIAS 0x1000UL + +/* OS SPECIFIC */ +#define MAX_BUSY_LOOPS 1000 +#undef USE_SCHED_YIELD + +/* ARCH SPECIFIC */ +/* We should make sure these are padded to a cache line */ +#if defined(SPARC_SPINLOCKS) +typedef volatile char spinlock_t; +#elif defined(POWERPC_SPINLOCKS) +typedef volatile unsigned long spinlock_t; +#elif defined(INTEL_SPINLOCKS) +typedef volatile int spinlock_t; +#elif defined(MIPS_SPINLOCKS) +typedef volatile unsigned long spinlock_t; +#else +#error Need to implement spinlock code in spinlock.h +#endif + +typedef struct { + spinlock_t lock; + volatile int count; +} rwlock_t; + +int tdb_spinlock(TDB_CONTEXT *tdb, int list, int rw_type); +int tdb_spinunlock(TDB_CONTEXT *tdb, int list, int rw_type); +int tdb_create_rwlocks(int fd, unsigned int hash_size); +int tdb_clear_spinlocks(TDB_CONTEXT *tdb); + +#else /* !USE_SPINLOCKS */ +#if 0 +#define tdb_create_rwlocks(fd, hash_size) 0 +#define tdb_spinlock(tdb, list, rw_type) (-1) +#define tdb_spinunlock(tdb, list, rw_type) (-1) +#else +int tdb_spinlock(TDB_CONTEXT *tdb, int list, int rw_type); +int tdb_spinunlock(TDB_CONTEXT *tdb, int list, int rw_type); +int tdb_create_rwlocks(int fd, unsigned int hash_size); +#endif +int tdb_clear_spinlocks(TDB_CONTEXT *tdb); +#endif + +#endif |