aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/klist.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/klist.h')
-rw-r--r--include/linux/klist.h40
1 files changed, 25 insertions, 15 deletions
diff --git a/include/linux/klist.h b/include/linux/klist.h
index 74071254c9d3..06c338ef7f1b 100644
--- a/include/linux/klist.h
+++ b/include/linux/klist.h
@@ -25,37 +25,47 @@ struct klist {
25 void (*put)(struct klist_node *); 25 void (*put)(struct klist_node *);
26}; 26};
27 27
28#define KLIST_INIT(_name, _get, _put) \
29 { .k_lock = __SPIN_LOCK_UNLOCKED(_name.k_lock), \
30 .k_list = LIST_HEAD_INIT(_name.k_list), \
31 .get = _get, \
32 .put = _put, }
28 33
29extern void klist_init(struct klist * k, void (*get)(struct klist_node *), 34#define DEFINE_KLIST(_name, _get, _put) \
35 struct klist _name = KLIST_INIT(_name, _get, _put)
36
37extern void klist_init(struct klist *k, void (*get)(struct klist_node *),
30 void (*put)(struct klist_node *)); 38 void (*put)(struct klist_node *));
31 39
32struct klist_node { 40struct klist_node {
33 struct klist * n_klist; 41 struct klist *n_klist;
34 struct list_head n_node; 42 struct list_head n_node;
35 struct kref n_ref; 43 struct kref n_ref;
36 struct completion n_removed; 44 struct completion n_removed;
37}; 45};
38 46
39extern void klist_add_tail(struct klist_node * n, struct klist * k); 47extern void klist_add_tail(struct klist_node *n, struct klist *k);
40extern void klist_add_head(struct klist_node * n, struct klist * k); 48extern void klist_add_head(struct klist_node *n, struct klist *k);
49extern void klist_add_after(struct klist_node *n, struct klist_node *pos);
50extern void klist_add_before(struct klist_node *n, struct klist_node *pos);
41 51
42extern void klist_del(struct klist_node * n); 52extern void klist_del(struct klist_node *n);
43extern void klist_remove(struct klist_node * n); 53extern void klist_remove(struct klist_node *n);
44 54
45extern int klist_node_attached(struct klist_node * n); 55extern int klist_node_attached(struct klist_node *n);
46 56
47 57
48struct klist_iter { 58struct klist_iter {
49 struct klist * i_klist; 59 struct klist *i_klist;
50 struct list_head * i_head; 60 struct list_head *i_head;
51 struct klist_node * i_cur; 61 struct klist_node *i_cur;
52}; 62};
53 63
54 64
55extern void klist_iter_init(struct klist * k, struct klist_iter * i); 65extern void klist_iter_init(struct klist *k, struct klist_iter *i);
56extern void klist_iter_init_node(struct klist * k, struct klist_iter * i, 66extern void klist_iter_init_node(struct klist *k, struct klist_iter *i,
57 struct klist_node * n); 67 struct klist_node *n);
58extern void klist_iter_exit(struct klist_iter * i); 68extern void klist_iter_exit(struct klist_iter *i);
59extern struct klist_node * klist_next(struct klist_iter * i); 69extern struct klist_node *klist_next(struct klist_iter *i);
60 70
61#endif 71#endif