lkml.org 
[lkml]   [2020]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v9 2/7] rcu/segcblist: Add counters to segcblist datastructure
    On Fri, Nov 06, 2020 at 04:48:15PM -0800, Paul E. McKenney wrote:
    > On Fri, Nov 06, 2020 at 07:18:47PM -0500, Joel Fernandes wrote:
    > > On Fri, Nov 06, 2020 at 07:01:57PM -0500, Joel Fernandes wrote:
    > > > On Wed, Nov 04, 2020 at 09:01:33AM -0800, Paul E. McKenney wrote:
    > > >
    > > > > A casual reader might be forgiven for being confused by the combination
    > > > > of "Return" in the above comment and the "void" function type below.
    > > > > So shouldn't this comment be something like "Add the specified number
    > > > > of callbacks to the specified segment..."?
    > > >
    > > > You are right, sorry and will fix it.
    > > >
    > > > > > @@ -330,11 +342,16 @@ void rcu_segcblist_extract_pend_cbs(struct rcu_segcblist *rsclp,
    > > > > >
    > > > > > if (!rcu_segcblist_pend_cbs(rsclp))
    > > > > > return; /* Nothing to do. */
    > > > > > + rclp->len = rcu_segcblist_get_seglen(rsclp, RCU_WAIT_TAIL) +
    > > > > > + rcu_segcblist_get_seglen(rsclp, RCU_NEXT_READY_TAIL) +
    > > > > > + rcu_segcblist_get_seglen(rsclp, RCU_NEXT_TAIL);
    > > > >
    > > > > This should be a "for" loop. Yes, the number and names of the segments
    > > > > hasn't changed for a good long time, but nothing like code as above to
    > > > > inspire Murphy to more mischief. :-/
    > > > >
    > > > > Actually, why not put the summation in the existing "for" loop below?
    > > > > That would save a line of code in addition to providing less inspiration
    > > > > for Mr. Murphy.
    > > >
    > > > I can do that. Actually Frederic suggested the same thing but I was reluctant
    > > > as I felt it did not give much LOC benefit. Will revisit it.
    > >
    > > It reduces 1 line of code :) I changed it to the below, will update the patch:
    >
    > Thank you! And yes, I am much more concerned about the constraints on
    > Mr. Murphy than on the lines of code. ;-)

    And I have pulled in the updated commit, thank you all!

    Thanx, Paul

    > > ---8<-----------------------
    > >
    > > diff --git a/kernel/rcu/rcu_segcblist.c b/kernel/rcu/rcu_segcblist.c
    > > index 9b43d686b1f3..bff9b2253e50 100644
    > > --- a/kernel/rcu/rcu_segcblist.c
    > > +++ b/kernel/rcu/rcu_segcblist.c
    > > @@ -101,7 +101,7 @@ static void rcu_segcblist_set_seglen(struct rcu_segcblist *rsclp, int seg, long
    > > WRITE_ONCE(rsclp->seglen[seg], v);
    > > }
    > >
    > > -/* Return number of callbacks in a segment of the segmented callback list. */
    > > +/* Increase the numeric length of a segment by a specified amount. */
    > > static void rcu_segcblist_add_seglen(struct rcu_segcblist *rsclp, int seg, long v)
    > > {
    > > WRITE_ONCE(rsclp->seglen[seg], rsclp->seglen[seg] + v);
    > > @@ -406,13 +406,12 @@ void rcu_segcblist_extract_pend_cbs(struct rcu_segcblist *rsclp,
    > >
    > > if (!rcu_segcblist_pend_cbs(rsclp))
    > > return; /* Nothing to do. */
    > > - rclp->len = rcu_segcblist_get_seglen(rsclp, RCU_WAIT_TAIL) +
    > > - rcu_segcblist_get_seglen(rsclp, RCU_NEXT_READY_TAIL) +
    > > - rcu_segcblist_get_seglen(rsclp, RCU_NEXT_TAIL);
    > > + rclp->len = 0;
    > > *rclp->tail = *rsclp->tails[RCU_DONE_TAIL];
    > > rclp->tail = rsclp->tails[RCU_NEXT_TAIL];
    > > WRITE_ONCE(*rsclp->tails[RCU_DONE_TAIL], NULL);
    > > for (i = RCU_DONE_TAIL + 1; i < RCU_CBLIST_NSEGS; i++) {
    > > + rclp->len += rcu_segcblist_get_seglen(rsclp, i);
    > > WRITE_ONCE(rsclp->tails[i], rsclp->tails[RCU_DONE_TAIL]);
    > > rcu_segcblist_set_seglen(rsclp, i, 0);
    > > }

    \
     
     \ /
      Last update: 2020-11-10 02:41    [W:5.751 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site