Changeset 235d31d in mainline for kernel/generic/src/adt/list.c


Ignore:
Timestamp:
2014-12-22T17:47:40Z (9 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8c7d5ad
Parents:
eae91e0 (diff), 759ea0d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge the CHT pre-integration branch

This branch contains:

  • the merge of lp:~adam-hraska+lp/helenos/rcu, which brings:
  • a new preemptible kernel RCU variant called A-RCU,
  • a preemptible variant of Podzimek's non-preemptible kernel RCU and
  • a new variant of usersace RCU,
  • a new concurrent hash table (CHT) implementation based on RCU,
  • a deployment of CHT in kernel futex handling,
  • a deployment of the userspace RCU in the implementation of upgradable futexes,

all described in Adam Hraska's master thesis named Read-Copy-Update
for HelenOS, defended in 2013 at MFF UK; furthemore, the branch
fixes two synchronization bugs in condvars and waitq, respectively:

  • revid:adam.hraska+hos@gmail.com-20121116144921-3to9u1tn1sg07rg7
  • revid:adam.hraska+hos@gmail.com-20121116173623-km7gwtqixwudpe66
  • build fixes required to pass make check
  • overhaul of ia64 and sparc64 trap handling, to allow exc_dispatch() to be used now when the kernel is more picky about CPU state accounting
  • an important fix of the sparc64/sun4v preemptible trap handler
  • various other fixes of issues discovered on non-x86 architectures
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/adt/list.c

    reae91e0 r235d31d  
    6868}
    6969
    70 /** Concatenate two lists
    71  *
    72  * Concatenate lists @a list1 and @a list2, producing a single
    73  * list @a list1 containing items from both (in @a list1, @a list2
    74  * order) and empty list @a list2.
    75  *
    76  * @param list1         First list and concatenated output
    77  * @param list2         Second list and empty output.
    78  *
     70/** Moves items of one list into another after the specified item.
     71 *
     72 * Inserts all items of @a list after item at @a pos in another list.
     73 * Both lists may be empty.
     74 *
     75 * @param list Source list to move after pos. Empty afterwards.
     76 * @param pos Source items will be placed after this item.
    7977 */
    80 void list_concat(list_t *list1, list_t *list2)
     78void list_splice(list_t *list, link_t *pos)
    8179{
    82         if (list_empty(list2))
     80        if (list_empty(list))
    8381                return;
    84 
    85         list2->head.next->prev = list1->head.prev;
    86         list2->head.prev->next = &list1->head;
    87         list1->head.prev->next = list2->head.next;
    88         list1->head.prev = list2->head.prev;
    89         list_initialize(list2);
     82       
     83        /* Attach list to destination. */
     84        list->head.next->prev = pos;
     85        list->head.prev->next = pos->next;
     86       
     87        /* Link destination list to the added list. */
     88        pos->next->prev = list->head.prev;
     89        pos->next = list->head.next;
     90       
     91        list_initialize(list);
    9092}
    9193
Note: See TracChangeset for help on using the changeset viewer.