Changeset feeac0d in mainline for kernel/generic
- Timestamp:
- 2013-09-10T16:32:35Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4982d87
- Parents:
- e8d6ce2
- Location:
- kernel/generic
- Files:
-
- 19 edited
-
include/adt/list.h (modified) (4 diffs)
-
src/adt/btree.c (modified) (1 diff)
-
src/adt/hash_table.c (modified) (2 diffs)
-
src/adt/list.c (modified) (1 diff)
-
src/console/cmd.c (modified) (3 diffs)
-
src/console/console.c (modified) (2 diffs)
-
src/console/kconsole.c (modified) (2 diffs)
-
src/ipc/ipc.c (modified) (1 diff)
-
src/ipc/ipcrsc.c (modified) (1 diff)
-
src/lib/ra.c (modified) (2 diffs)
-
src/mm/as.c (modified) (9 diffs)
-
src/mm/backend_anon.c (modified) (1 diff)
-
src/mm/slab.c (modified) (2 diffs)
-
src/proc/scheduler.c (modified) (1 diff)
-
src/proc/task.c (modified) (2 diffs)
-
src/synch/futex.c (modified) (1 diff)
-
src/sysinfo/stats.c (modified) (2 diffs)
-
src/udebug/udebug.c (modified) (1 diff)
-
src/udebug/udebug_ops.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/adt/list.h
re8d6ce2 rfeeac0d 67 67 ((type *) (((void *)(link)) - list_link_to_void(&(((type *) NULL)->member)))) 68 68 69 #define list_foreach(list, iterator) \ 70 for (link_t *iterator = (list).head.next; \ 71 iterator != &(list).head; iterator = iterator->next) 69 #define list_foreach(list, member, itype, iterator) \ 70 for (itype *iterator = NULL; iterator == NULL; iterator =(itype *)1) \ 71 for (link_t *_link = (list).head.next; \ 72 iterator = list_get_instance(_link, itype, member), \ 73 _link != &(list).head; _link = _link->next) 72 74 73 75 #define assert_link_not_used(link) \ … … 184 186 * @return Head item of the list. 185 187 * @return NULL if the list is empty. 186 *187 188 */ 188 189 static inline link_t *list_first(const list_t *list) … … 197 198 * @return Head item of the list. 198 199 * @return NULL if the list is empty. 199 *200 200 */ 201 201 static inline link_t *list_last(list_t *list) 202 202 { 203 203 return ((list->head.prev == &list->head) ? NULL : list->head.prev); 204 } 205 206 /** Get next item in list. 207 * 208 * @param link Current item link 209 * @param list List containing @a link 210 * 211 * @return Next item or NULL if @a link is the last item. 212 */ 213 static inline link_t *list_next(link_t *link, const list_t *list) 214 { 215 return (link->next == &list->head) ? NULL : link->next; 216 } 217 218 /** Get previous item in list. 219 * 220 * @param link Current item link 221 * @param list List containing @a link 222 * 223 * @return Previous item or NULL if @a link is the first item. 224 */ 225 static inline link_t *list_prev(link_t *link, const list_t *list) 226 { 227 return (link->prev == &list->head) ? NULL : link->prev; 204 228 } 205 229 … … 270 294 { 271 295 unsigned int cnt = 0; 272 273 list_foreach(*list, link) { 296 link_t *link; 297 298 link = list_first(list); 299 while (link != NULL) { 274 300 if (cnt == n) 275 301 return link; 276 302 277 303 cnt++; 304 link = list_next(link, list); 278 305 } 279 306 -
kernel/generic/src/adt/btree.c
re8d6ce2 rfeeac0d 1031 1031 1032 1032 printf("Printing list of leaves:\n"); 1033 list_foreach(t->leaf_list, cur) { 1034 btree_node_t *node; 1035 1036 node = list_get_instance(cur, btree_node_t, leaf_link); 1037 1033 list_foreach(t->leaf_list, leaf_link, btree_node_t, node) { 1038 1034 ASSERT(node); 1039 1035 -
kernel/generic/src/adt/hash_table.c
re8d6ce2 rfeeac0d 117 117 ASSERT(chain < h->entries); 118 118 119 list_foreach(h->entry[chain], cur) { 119 link_t *cur = list_first(&h->entry[chain]); 120 while (cur != NULL) { 120 121 if (h->op->compare(key, h->max_keys, cur)) { 121 122 /* … … 124 125 return cur; 125 126 } 127 cur = list_next(cur, &h->entry[chain]); 126 128 } 127 129 -
kernel/generic/src/adt/list.c
re8d6ce2 rfeeac0d 101 101 unsigned int count = 0; 102 102 103 list_foreach(*list, link) { 103 link_t *link = list_first(list); 104 while (link != NULL) { 104 105 count++; 106 link = list_next(link, list); 105 107 } 106 108 -
kernel/generic/src/console/cmd.c
re8d6ce2 rfeeac0d 656 656 657 657 size_t len = 0; 658 list_foreach(cmd_list, cur) { 659 cmd_info_t *hlp; 660 hlp = list_get_instance(cur, cmd_info_t, link); 661 658 list_foreach(cmd_list, link, cmd_info_t, hlp) { 662 659 spinlock_lock(&hlp->lock); 663 660 if (str_length(hlp->name) > len) … … 672 669 } 673 670 674 list_foreach(cmd_list, cur) { 675 cmd_info_t *hlp; 676 hlp = list_get_instance(cur, cmd_info_t, link); 677 671 list_foreach(cmd_list, link, cmd_info_t, hlp) { 678 672 spinlock_lock(&hlp->lock); 679 673 printf("%-*s %s\n", _len, hlp->name, hlp->description); … … 912 906 spinlock_lock(&cmd_lock); 913 907 914 list_foreach(cmd_list, cur) { 915 cmd_info_t *hlp; 916 917 hlp = list_get_instance(cur, cmd_info_t, link); 908 list_foreach(cmd_list, link, cmd_info_t, hlp) { 918 909 spinlock_lock(&hlp->lock); 919 910 -
kernel/generic/src/console/console.c
re8d6ce2 rfeeac0d 125 125 static void stdout_write(outdev_t *dev, wchar_t ch) 126 126 { 127 list_foreach(dev->list, cur) { 128 outdev_t *sink = list_get_instance(cur, outdev_t, link); 127 list_foreach(dev->list, link, outdev_t, sink) { 129 128 if ((sink) && (sink->op->write)) 130 129 sink->op->write(sink, ch); … … 134 133 static void stdout_redraw(outdev_t *dev) 135 134 { 136 list_foreach(dev->list, cur) { 137 outdev_t *sink = list_get_instance(cur, outdev_t, link); 135 list_foreach(dev->list, link, outdev_t, sink) { 138 136 if ((sink) && (sink->op->redraw)) 139 137 sink->op->redraw(sink); -
kernel/generic/src/console/kconsole.c
re8d6ce2 rfeeac0d 118 118 * Make sure the command is not already listed. 119 119 */ 120 list_foreach(cmd_list, cur) { 121 cmd_info_t *hlp = list_get_instance(cur, cmd_info_t, link); 122 120 list_foreach(cmd_list, link, cmd_info_t, hlp) { 123 121 if (hlp == cmd) { 124 122 /* The command is already there. */ … … 612 610 cmd_info_t *cmd = NULL; 613 611 614 list_foreach(cmd_list, cur) { 615 cmd_info_t *hlp = list_get_instance(cur, cmd_info_t, link); 612 list_foreach(cmd_list, link, cmd_info_t, hlp) { 616 613 spinlock_lock(&hlp->lock); 617 614 -
kernel/generic/src/ipc/ipc.c
re8d6ce2 rfeeac0d 774 774 static void ipc_print_call_list(list_t *list) 775 775 { 776 list_foreach(*list, cur) { 777 call_t *call = list_get_instance(cur, call_t, ab_link); 778 776 list_foreach(*list, ab_link, call_t, call) { 779 777 #ifdef __32_BITS__ 780 778 printf("%10p ", call); -
kernel/generic/src/ipc/ipcrsc.c
re8d6ce2 rfeeac0d 151 151 irq_spinlock_lock(&TASK->answerbox.lock, true); 152 152 153 list_foreach(TASK->answerbox.dispatched_calls, lst) { 154 call_t *call = list_get_instance(lst, call_t, ab_link); 153 list_foreach(TASK->answerbox.dispatched_calls, ab_link, call_t, call) { 155 154 if ((sysarg_t) call == callid) { 156 155 result = call; -
kernel/generic/src/lib/ra.c
re8d6ce2 rfeeac0d 391 391 392 392 irq_spinlock_lock(&arena->lock, true); 393 list_foreach(arena->spans, cur) { 394 ra_span_t *span = list_get_instance(cur, ra_span_t, span_link); 395 393 list_foreach(arena->spans, span_link, ra_span_t, span) { 396 394 base = ra_span_alloc(span, size, alignment); 397 395 if (base) … … 407 405 { 408 406 irq_spinlock_lock(&arena->lock, true); 409 list_foreach(arena->spans, cur) { 410 ra_span_t *span = list_get_instance(cur, ra_span_t, span_link); 411 407 list_foreach(arena->spans, span_link, ra_span_t, span) { 412 408 if (iswithin(span->base, span->size, base, size)) { 413 409 ra_span_free(span, base, size); -
kernel/generic/src/mm/as.c
re8d6ce2 rfeeac0d 488 488 489 489 /* Eventually check the addresses behind each area */ 490 list_foreach(as->as_area_btree.leaf_list, cur) { 491 btree_node_t *node = 492 list_get_instance(cur, btree_node_t, leaf_link); 490 list_foreach(as->as_area_btree.leaf_list, leaf_link, btree_node_t, node) { 493 491 494 492 for (btree_key_t i = 0; i < node->keys; i++) { … … 904 902 * reference from all frames found there. 905 903 */ 906 list_foreach(sh_info->pagemap.leaf_list, cur) { 907 btree_node_t *node 908 = list_get_instance(cur, btree_node_t, leaf_link); 904 list_foreach(sh_info->pagemap.leaf_list, leaf_link, 905 btree_node_t, node) { 909 906 btree_key_t i; 910 907 … … 956 953 * Visit only the pages mapped by used_space B+tree. 957 954 */ 958 list_foreach(area->used_space.leaf_list, cur) {959 btree_node_t *node;955 list_foreach(area->used_space.leaf_list, leaf_link, btree_node_t, 956 node) { 960 957 btree_key_t i; 961 958 962 node = list_get_instance(cur, btree_node_t, leaf_link);963 959 for (i = 0; i < node->keys; i++) { 964 960 uintptr_t ptr = node->key[i]; … … 1238 1234 size_t used_pages = 0; 1239 1235 1240 list_foreach(area->used_space.leaf_list, cur) { 1241 btree_node_t *node 1242 = list_get_instance(cur, btree_node_t, leaf_link); 1236 list_foreach(area->used_space.leaf_list, leaf_link, btree_node_t, 1237 node) { 1243 1238 btree_key_t i; 1244 1239 … … 1264 1259 size_t frame_idx = 0; 1265 1260 1266 list_foreach(area->used_space.leaf_list, cur) { 1267 btree_node_t *node = list_get_instance(cur, btree_node_t, 1268 leaf_link); 1261 list_foreach(area->used_space.leaf_list, leaf_link, btree_node_t, 1262 node) { 1269 1263 btree_key_t i; 1270 1264 … … 1316 1310 frame_idx = 0; 1317 1311 1318 list_foreach(area->used_space.leaf_list, cur) { 1319 btree_node_t *node 1320 = list_get_instance(cur, btree_node_t, leaf_link); 1312 list_foreach(area->used_space.leaf_list, leaf_link, btree_node_t, 1313 node) { 1321 1314 btree_key_t i; 1322 1315 … … 2182 2175 size_t area_cnt = 0; 2183 2176 2184 list_foreach(as->as_area_btree.leaf_list, cur) { 2185 btree_node_t *node = 2186 list_get_instance(cur, btree_node_t, leaf_link); 2177 list_foreach(as->as_area_btree.leaf_list, leaf_link, btree_node_t, 2178 node) { 2187 2179 area_cnt += node->keys; 2188 2180 } … … 2195 2187 size_t area_idx = 0; 2196 2188 2197 list_foreach(as->as_area_btree.leaf_list, cur) { 2198 btree_node_t *node = 2199 list_get_instance(cur, btree_node_t, leaf_link); 2189 list_foreach(as->as_area_btree.leaf_list, leaf_link, btree_node_t, 2190 node) { 2200 2191 btree_key_t i; 2201 2192 … … 2231 2222 2232 2223 /* Print out info about address space areas */ 2233 list_foreach(as->as_area_btree.leaf_list, cur) { 2234 btree_node_t *node 2235 = list_get_instance(cur, btree_node_t, leaf_link); 2224 list_foreach(as->as_area_btree.leaf_list, leaf_link, btree_node_t, 2225 node) { 2236 2226 btree_key_t i; 2237 2227 -
kernel/generic/src/mm/backend_anon.c
re8d6ce2 rfeeac0d 118 118 */ 119 119 mutex_lock(&area->sh_info->lock); 120 list_foreach(area->used_space.leaf_list, cur) {121 btree_node_t *node;120 list_foreach(area->used_space.leaf_list, leaf_link, btree_node_t, 121 node) { 122 122 unsigned int i; 123 123 124 node = list_get_instance(cur, btree_node_t, leaf_link);125 124 for (i = 0; i < node->keys; i++) { 126 125 uintptr_t base = node->key[i]; -
kernel/generic/src/mm/slab.c
re8d6ce2 rfeeac0d 810 810 811 811 size_t frames = 0; 812 list_foreach(slab_cache_list, cur) { 813 slab_cache_t *cache = list_get_instance(cur, slab_cache_t, link); 812 list_foreach(slab_cache_list, link, slab_cache_t, cache) { 814 813 frames += _slab_reclaim(cache, flags); 815 814 } … … 936 935 irq_spinlock_lock(&slab_cache_lock, false); 937 936 938 list_foreach(slab_cache_list, cur) { 939 slab_cache_t *slab = list_get_instance(cur, slab_cache_t, link); 937 list_foreach(slab_cache_list, link, slab_cache_t, slab) { 940 938 if ((slab->flags & SLAB_CACHE_MAGDEFERRED) != 941 939 SLAB_CACHE_MAGDEFERRED) -
kernel/generic/src/proc/scheduler.c
re8d6ce2 rfeeac0d 739 739 740 740 printf("\trq[%u]: ", i); 741 list_foreach(cpus[cpu].rq[i].rq, cur) { 742 thread_t *thread = list_get_instance(cur, 743 thread_t, rq_link); 741 list_foreach(cpus[cpu].rq[i].rq, rq_link, thread_t, 742 thread) { 744 743 printf("%" PRIu64 "(%s) ", thread->tid, 745 744 thread_states[thread->state]); -
kernel/generic/src/proc/task.c
re8d6ce2 rfeeac0d 452 452 453 453 /* Current values of threads */ 454 list_foreach(task->threads, cur) { 455 thread_t *thread = list_get_instance(cur, thread_t, th_link); 456 454 list_foreach(task->threads, th_link, thread_t, thread) { 457 455 irq_spinlock_lock(&thread->lock, false); 458 456 … … 484 482 */ 485 483 486 list_foreach(task->threads, cur) { 487 thread_t *thread = list_get_instance(cur, thread_t, th_link); 484 list_foreach(task->threads, th_link, thread_t, thread) { 488 485 bool sleeping = false; 489 486 -
kernel/generic/src/synch/futex.c
re8d6ce2 rfeeac0d 274 274 mutex_lock(&TASK->futexes_lock); 275 275 276 list_foreach(TASK->futexes.leaf_list, cur) { 277 btree_node_t *node; 276 list_foreach(TASK->futexes.leaf_list, leaf_link, btree_node_t, node) { 278 277 unsigned int i; 279 278 280 node = list_get_instance(cur, btree_node_t, leaf_link);281 279 for (i = 0; i < node->keys; i++) { 282 280 futex_t *ftx; -
kernel/generic/src/sysinfo/stats.c
re8d6ce2 rfeeac0d 175 175 176 176 /* Walk the B+ tree and count pages */ 177 list_foreach(as->as_area_btree.leaf_list, cur) { 178 btree_node_t *node = 179 list_get_instance(cur, btree_node_t, leaf_link); 180 177 list_foreach(as->as_area_btree.leaf_list, leaf_link, btree_node_t, 178 node) { 181 179 unsigned int i; 182 180 for (i = 0; i < node->keys; i++) { … … 218 216 219 217 /* Walk the B+ tree and count pages */ 220 list_foreach(as->as_area_btree.leaf_list, cur) { 221 btree_node_t *node = 222 list_get_instance(cur, btree_node_t, leaf_link); 223 218 list_foreach(as->as_area_btree.leaf_list, leaf_link, btree_node_t, node) { 224 219 unsigned int i; 225 220 for (i = 0; i < node->keys; i++) { -
kernel/generic/src/udebug/udebug.c
re8d6ce2 rfeeac0d 406 406 407 407 /* Finish debugging of all userspace threads */ 408 list_foreach(task->threads, cur) { 409 thread_t *thread = list_get_instance(cur, thread_t, th_link); 410 408 list_foreach(task->threads, th_link, thread_t, thread) { 411 409 mutex_lock(&thread->udebug.lock); 412 410 -
kernel/generic/src/udebug/udebug_ops.c
re8d6ce2 rfeeac0d 196 196 /* Set udebug.active on all of the task's userspace threads. */ 197 197 198 list_foreach(TASK->threads, cur) { 199 thread_t *thread = list_get_instance(cur, thread_t, th_link); 200 198 list_foreach(TASK->threads, th_link, thread_t, thread) { 201 199 mutex_lock(&thread->udebug.lock); 202 200 if (thread->uspace) { … … 389 387 390 388 /* FIXME: make sure the thread isn't past debug shutdown... */ 391 list_foreach(TASK->threads, cur) { 392 thread_t *thread = list_get_instance(cur, thread_t, th_link); 393 389 list_foreach(TASK->threads, th_link, thread_t, thread) { 394 390 irq_spinlock_lock(&thread->lock, false); 395 391 bool uspace = thread->uspace;
Note:
See TracChangeset
for help on using the changeset viewer.
