lkml.org 
[lkml]   [2007]   [Oct]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [RFC/PATCH 3/5] rt: plist_head_splice
    From
    Date
    On Tue, 2007-10-23 at 11:10 -0400, Steven Rostedt wrote:
    > --
    > 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).
    >

    > > + list_add_tail(&src_iter_first->plist.node_list,
    > > + &dst_iter->plist.node_list);

    Uhm, yeah, that was supposed the be prio_list indeed.

    Thanks!

    > > + } 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);
    > > +}
    > >
    > > --
    > >
    > >
    > >
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2007-10-23 18:29    [W:0.023 / U:91.052 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site