]> git.proxmox.com Git - mirror_spl-debian.git/blame - include/sys/rwlock.h
Prep for for 0.3.0 tag, this is the tag which was used for all
[mirror_spl-debian.git] / include / sys / rwlock.h
CommitLineData
09b414e8 1#ifndef _SPL_RWLOCK_H
e8b31e84 2#define _SPL_RWLOCK_H
f1ca4da6 3
f1b59d26 4#include <linux/module.h>
f1ca4da6 5#include <linux/slab.h>
6#include <linux/rwsem.h>
7#include <asm/current.h>
f4b37741 8#include <sys/types.h>
e8b31e84 9#include <sys/kmem.h>
f1ca4da6 10
e8b31e84 11#ifdef __cplusplus
f1ca4da6 12extern "C" {
13#endif
14
15typedef enum {
16 RW_DRIVER = 2, /* driver (DDI) rwlock */
17 RW_DEFAULT = 4 /* kernel default rwlock */
18} krw_type_t;
19
20typedef enum {
21 RW_WRITER,
22 RW_READER
23} krw_t;
24
f1ca4da6 25
26#define RW_MAGIC 0x3423645a
27#define RW_POISON 0xa6
28
29typedef struct {
e8b31e84 30 int32_t rw_magic;
31 int32_t rw_name_size;
f1ca4da6 32 char *rw_name;
33 struct rw_semaphore rw_sem;
f1b59d26 34 struct task_struct *rw_owner; /* holder of the write lock */
f1ca4da6 35} krwlock_t;
36
e8b31e84 37extern void __rw_init(krwlock_t *rwlp, char *name, krw_type_t type, void *arg);
38extern void __rw_destroy(krwlock_t *rwlp);
39extern int __rw_tryenter(krwlock_t *rwlp, krw_t rw);
40extern void __rw_enter(krwlock_t *rwlp, krw_t rw);
41extern void __rw_exit(krwlock_t *rwlp);
42extern void __rw_downgrade(krwlock_t *rwlp);
43extern int __rw_tryupgrade(krwlock_t *rwlp);
44extern kthread_t *__rw_owner(krwlock_t *rwlp);
ed61a7d0 45extern int __rw_read_held(krwlock_t *rwlp);
46extern int __rw_write_held(krwlock_t *rwlp);
47extern int __rw_lock_held(krwlock_t *rwlp);
48
e8b31e84 49#define rw_init(rwlp, name, type, arg) \
50({ \
51 if ((name) == NULL) \
52 __rw_init(rwlp, #rwlp, type, arg); \
53 else \
54 __rw_init(rwlp, name, type, arg); \
55})
56#define rw_destroy(rwlp) __rw_destroy(rwlp)
57#define rw_tryenter(rwlp, rw) __rw_tryenter(rwlp, rw)
58#define rw_enter(rwlp, rw) __rw_enter(rwlp, rw)
59#define rw_exit(rwlp) __rw_exit(rwlp)
60#define rw_downgrade(rwlp) __rw_downgrade(rwlp)
61#define rw_tryupgrade(rwlp) __rw_tryupgrade(rwlp)
62#define rw_owner(rwlp) __rw_owner(rwlp)
63#define RW_READ_HELD(rwlp) __rw_read_held(rwlp)
64#define RW_WRITE_HELD(rwlp) __rw_write_held(rwlp)
65#define RW_LOCK_HELD(rwlp) __rw_lock_held(rwlp)
66
67#ifdef __cplusplus
f1ca4da6 68}
69#endif
70
e8b31e84 71#endif /* _SPL_RWLOCK_H */