lkml.org 
[lkml]   [2007]   [Oct]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC/PATCH 3/5] rt: plist_head_splice

    --
    On Tue, 23 Oct 2007, Peter Zijlstra wrote:
    > +
    > +void plist_head_splice(struct plist_head *src, struct plist_head *dst)
    > +{
    > + struct plist_node *src_iter_first, *src_iter_last, *dst_iter;
    > + struct plist_node *tail = container_of(dst, struct plist_node, plist);
    > +
    > + dst_iter = next_prio(tail);
    > +
    > + while (!plist_head_empty(src) && dst_iter != tail) {
    > + src_iter_first = plist_first(src);
    > +
    > + src_iter_last = next_prio(src_iter_first);
    > + src_iter_last = prev_node(src_iter_last);
    > +
    > + WARN_ON(src_iter_first->prio != src_iter_last->prio);
    > + WARN_ON(list_empty(&src_iter_first->plist.prio_list));
    > +
    > + while (src_iter_first->prio > dst_iter->prio) {
    > + dst_iter = next_prio(dst_iter);
    > + if (dst_iter == tail)
    > + goto tail;
    > + }
    > +
    > + list_del_init(&src_iter_first->plist.prio_list);
    > +
    > + if (src_iter_first->prio < dst_iter->prio) {

    I may be confused here, but shouldn't we be linking the
    src_iter_first->prio_list somewhere here? Doesn't all different prios need
    to be in its separate prio_list? Otherwise two splices in a row can cause
    the above WARN_ON (prio != prio).

    -- Steve


    > + list_add_tail(&src_iter_first->plist.node_list,
    > + &dst_iter->plist.node_list);
    > + } else if (src_iter_first->prio == dst_iter->prio) {
    > + dst_iter = next_prio(dst_iter);
    > + } else BUG();
    > +
    > + list_splice2_tail(&src_iter_first->plist.node_list,
    > + &src_iter_last->plist.node_list,
    > + &dst_iter->plist.node_list);
    > + }
    > +
    > +tail:
    > + list_splice_tail_init(&src->prio_list, &dst->prio_list);
    > + list_splice_tail_init(&src->node_list, &dst->node_list);
    > +}
    >
    > --
    >
    >
    >
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-10-23 17:13    [W:0.022 / U:90.732 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site