spinlock_t sentry;
int count;
wait_queue_head_t wait;
-#if WAITQUEUE_DEBUG
- long __magic;
-#endif
};
-#if WAITQUEUE_DEBUG
-# define __SEM_DEBUG_INIT(name) \
- , (long)&(name).__magic
-#else
-# define __SEM_DEBUG_INIT(name)
-#endif
-
-#define __SEMAPHORE_INITIALIZER(name,count) \
-{ SPIN_LOCK_UNLOCKED, count, __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
- __SEM_DEBUG_INIT(name) }
+#define __SEMAPHORE_INITIALIZER(name, n) \
+{ \
+ .sentry = SPIN_LOCK_UNLOCKED, \
+ .count = n, \
+ .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
+}
#define __MUTEX_INITIALIZER(name) \
__SEMAPHORE_INITIALIZER(name,1)
extern __inline__ void down(struct semaphore * sem)
{
-#if WAITQUEUE_DEBUG
- CHECK_MAGIC(sem->__magic);
-#endif
might_sleep();
spin_lock_irq(&sem->sentry);
if (sem->count > 0) {
extern __inline__ int down_interruptible(struct semaphore * sem)
{
int ret = 0;
-#if WAITQUEUE_DEBUG
- CHECK_MAGIC(sem->__magic);
-#endif
might_sleep();
spin_lock_irq(&sem->sentry);
if (sem->count > 0) {
extern __inline__ int down_trylock(struct semaphore * sem)
{
int flags, count;
-#if WAITQUEUE_DEBUG
- CHECK_MAGIC(sem->__magic);
-#endif
spin_lock_irqsave(&sem->sentry, flags);
count = sem->count - 1;
extern __inline__ void up(struct semaphore * sem)
{
int flags;
-#if WAITQUEUE_DEBUG
- CHECK_MAGIC(sem->__magic);
-#endif
spin_lock_irqsave(&sem->sentry, flags);
if (sem->count < 0) {
__up(sem);