Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at fcbe6e9709f90fd83cfa614a4e0efe83174018ea 84 lines 1.9 kB view raw
1#ifndef __V850_SEMAPHORE_H__ 2#define __V850_SEMAPHORE_H__ 3 4#include <linux/linkage.h> 5#include <linux/spinlock.h> 6#include <linux/wait.h> 7#include <linux/rwsem.h> 8 9#include <asm/atomic.h> 10 11struct semaphore { 12 atomic_t count; 13 int sleepers; 14 wait_queue_head_t wait; 15}; 16 17#define __SEMAPHORE_INITIALIZER(name,count) \ 18 { ATOMIC_INIT (count), 0, \ 19 __WAIT_QUEUE_HEAD_INITIALIZER ((name).wait) } 20 21#define __DECLARE_SEMAPHORE_GENERIC(name,count) \ 22 struct semaphore name = __SEMAPHORE_INITIALIZER (name,count) 23 24#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC (name,1) 25 26static inline void sema_init (struct semaphore *sem, int val) 27{ 28 *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val); 29} 30 31static inline void init_MUTEX (struct semaphore *sem) 32{ 33 sema_init (sem, 1); 34} 35 36static inline void init_MUTEX_LOCKED (struct semaphore *sem) 37{ 38 sema_init (sem, 0); 39} 40 41/* 42 * special register calling convention 43 */ 44asmlinkage void __down_failed (void); 45asmlinkage int __down_interruptible_failed (void); 46asmlinkage int __down_trylock_failed (void); 47asmlinkage void __up_wakeup (void); 48 49extern void __down (struct semaphore * sem); 50extern int __down_interruptible (struct semaphore * sem); 51extern int __down_trylock (struct semaphore * sem); 52extern void __up (struct semaphore * sem); 53 54static inline void down (struct semaphore * sem) 55{ 56 might_sleep(); 57 if (atomic_dec_return (&sem->count) < 0) 58 __down (sem); 59} 60 61static inline int down_interruptible (struct semaphore * sem) 62{ 63 int ret = 0; 64 might_sleep(); 65 if (atomic_dec_return (&sem->count) < 0) 66 ret = __down_interruptible (sem); 67 return ret; 68} 69 70static inline int down_trylock (struct semaphore *sem) 71{ 72 int ret = 0; 73 if (atomic_dec_return (&sem->count) < 0) 74 ret = __down_trylock (sem); 75 return ret; 76} 77 78static inline void up (struct semaphore * sem) 79{ 80 if (atomic_inc_return (&sem->count) <= 0) 81 __up (sem); 82} 83 84#endif /* __V850_SEMAPHORE_H__ */