home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / pppd / spinlock.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-06-29  |  1.5 KB  |  60 lines

  1. #ifndef __SPINLOCK_H__
  2. #define __SPINLOCK_H__
  3.  
  4. #ifdef HAVE_CONFIG_H
  5. #include <config.h>
  6. #endif
  7.  
  8. #include "tdb.h"
  9.  
  10. #ifdef USE_SPINLOCKS
  11.  
  12. #define RWLOCK_BIAS 0x1000UL
  13.  
  14. /* OS SPECIFIC */
  15. #define MAX_BUSY_LOOPS 1000
  16. #undef USE_SCHED_YIELD
  17.  
  18. /* ARCH SPECIFIC */
  19. /* We should make sure these are padded to a cache line */
  20. #if defined(SPARC_SPINLOCKS)
  21. typedef volatile char spinlock_t;
  22. #elif defined(POWERPC_SPINLOCKS)
  23. typedef volatile unsigned long spinlock_t;
  24. #elif defined(INTEL_SPINLOCKS)
  25. typedef volatile int spinlock_t;
  26. #elif defined(MIPS_SPINLOCKS)
  27. typedef volatile unsigned long spinlock_t;
  28. #else
  29. #error Need to implement spinlock code in spinlock.h
  30. #endif
  31.  
  32. typedef struct {
  33.     spinlock_t lock;
  34.     volatile int count;
  35. } tdb_rwlock_t;
  36.  
  37. int tdb_spinlock(TDB_CONTEXT *tdb, int list, int rw_type);
  38. int tdb_spinunlock(TDB_CONTEXT *tdb, int list, int rw_type);
  39. int tdb_create_rwlocks(int fd, unsigned int hash_size);
  40. int tdb_clear_spinlocks(TDB_CONTEXT *tdb);
  41.  
  42. #define TDB_SPINLOCK_SIZE(hash_size) (((hash_size) + 1) * sizeof(tdb_rwlock_t))
  43.  
  44. #else /* !USE_SPINLOCKS */
  45. #if 0
  46. #define tdb_create_rwlocks(fd, hash_size) 0
  47. #define tdb_spinlock(tdb, list, rw_type) (-1)
  48. #define tdb_spinunlock(tdb, list, rw_type) (-1)
  49. #else
  50. int tdb_spinlock(TDB_CONTEXT *tdb, int list, int rw_type);
  51. int tdb_spinunlock(TDB_CONTEXT *tdb, int list, int rw_type);
  52. int tdb_create_rwlocks(int fd, unsigned int hash_size);
  53. #endif
  54. int tdb_clear_spinlocks(TDB_CONTEXT *tdb);
  55. #define TDB_SPINLOCK_SIZE(hash_size) 0
  56.  
  57. #endif
  58.  
  59. #endif
  60.