Files
xen/tools/vnet/vnetd/spinlock.h
T
2006-02-09 16:12:11 +01:00

48 lines
1.2 KiB
C

#ifndef _VNET_SPINLOCK_H_
#define _VNET_SPINLOCK_H_
typedef struct atomic_t {
unsigned val;
} atomic_t;
int atomic_read(const atomic_t *v);
int atomic_dec_and_test(atomic_t *v);
void atomic_inc(atomic_t *v);
void atomic_set(atomic_t *v, int x);
typedef struct spinlock_t {
unsigned val;
} spinlock_t;
#define SPIN_LOCK_UNLOCKED ((struct spinlock_t){})
void spin_lock_init(spinlock_t *lock);
unsigned long _spin_lock_irqsave(spinlock_t *lock);
#define spin_lock_irqsave(lock, flags) flags = _spin_lock_irqsave(lock)
void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags);
typedef struct rwlock_t{
unsigned val;
} rwlock_t;
#define RW_LOCK_UNLOCKED ((struct rwlock_t){})
unsigned long _read_lock_irqsave(rwlock_t *lock);
#define read_lock_irqsave(lock, flags) flags = _read_lock_irqsave(lock)
void read_unlock_irqrestore(rwlock_t *lock, unsigned long flags);
unsigned long _write_lock_irqsave(rwlock_t *lock);
#define write_lock_irqsave(lock, flags) flags = _write_lock_irqsave(lock)
void write_unlock_irqrestore(rwlock_t *lock, unsigned long flags);
struct semaphore {
int count;
};
void init_MUTEX(struct semaphore *sem);
void down(struct semaphore *sem);
void up(struct semaphore *sem);
#endif /* ! _VNET_SPINLOCK_H_ */