diff options
author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2008-02-05 19:33:14 -0500 |
---|---|---|
committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2008-02-05 19:33:14 -0500 |
commit | 405d961616b5593cf780a1653c1fe4a386c305e3 (patch) | |
tree | 7d8bbc0da6fe72b4aa9b0388f5cc3c30dc0867a4 | |
parent | f0c2c2b2aa78e96941ded5ab03f85bf60e45d44b (diff) |
move sorted list functionality into litmus.h
-rw-r--r-- | include/linux/list.h | 30 | ||||
-rw-r--r-- | include/litmus/litmus.h | 28 |
2 files changed, 28 insertions, 30 deletions
diff --git a/include/linux/list.h b/include/linux/list.h index 319c5eda13..611059d633 100644 --- a/include/linux/list.h +++ b/include/linux/list.h | |||
@@ -898,36 +898,6 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, | |||
898 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ | 898 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
899 | pos = pos->next) | 899 | pos = pos->next) |
900 | 900 | ||
901 | |||
902 | typedef int (*list_cmp_t)(struct list_head*, struct list_head*); | ||
903 | |||
904 | static inline unsigned int list_insert(struct list_head* new, | ||
905 | struct list_head* head, | ||
906 | list_cmp_t order_before) | ||
907 | { | ||
908 | struct list_head *pos; | ||
909 | unsigned int passed = 0; | ||
910 | |||
911 | BUG_ON(!new); | ||
912 | |||
913 | /* find a spot where the new entry is less than the next */ | ||
914 | list_for_each(pos, head) { | ||
915 | if (unlikely(order_before(new, pos))) { | ||
916 | /* pos is not less than new, thus insert here */ | ||
917 | __list_add(new, pos->prev, pos); | ||
918 | goto out; | ||
919 | } | ||
920 | passed++; | ||
921 | } | ||
922 | /* if we get to this point either the list is empty or every entry | ||
923 | * queued element is less than new. | ||
924 | * Let's add new to the end. */ | ||
925 | list_add_tail(new, head); | ||
926 | out: | ||
927 | return passed; | ||
928 | } | ||
929 | |||
930 | |||
931 | #else | 901 | #else |
932 | #warning "don't include kernel headers in userspace" | 902 | #warning "don't include kernel headers in userspace" |
933 | #endif /* __KERNEL__ */ | 903 | #endif /* __KERNEL__ */ |
diff --git a/include/litmus/litmus.h b/include/litmus/litmus.h index 6373a37da3..de99addbce 100644 --- a/include/litmus/litmus.h +++ b/include/litmus/litmus.h | |||
@@ -77,6 +77,34 @@ static inline int in_list(struct list_head* list) | |||
77 | ); | 77 | ); |
78 | } | 78 | } |
79 | 79 | ||
80 | typedef int (*list_cmp_t)(struct list_head*, struct list_head*); | ||
81 | |||
82 | static inline unsigned int list_insert(struct list_head* new, | ||
83 | struct list_head* head, | ||
84 | list_cmp_t order_before) | ||
85 | { | ||
86 | struct list_head *pos; | ||
87 | unsigned int passed = 0; | ||
88 | |||
89 | BUG_ON(!new); | ||
90 | |||
91 | /* find a spot where the new entry is less than the next */ | ||
92 | list_for_each(pos, head) { | ||
93 | if (unlikely(order_before(new, pos))) { | ||
94 | /* pos is not less than new, thus insert here */ | ||
95 | __list_add(new, pos->prev, pos); | ||
96 | goto out; | ||
97 | } | ||
98 | passed++; | ||
99 | } | ||
100 | /* if we get to this point either the list is empty or every entry | ||
101 | * queued element is less than new. | ||
102 | * Let's add new to the end. */ | ||
103 | list_add_tail(new, head); | ||
104 | out: | ||
105 | return passed; | ||
106 | } | ||
107 | |||
80 | void list_qsort(struct list_head* list, list_cmp_t less_than); | 108 | void list_qsort(struct list_head* list, list_cmp_t less_than); |
81 | 109 | ||
82 | 110 | ||