On Wed, Oct 21, 2020 at 03:08:09PM -0400, Joel Fernandes (Google) wrote:
>  bool rcu_segcblist_accelerate(struct rcu_segcblist *rsclp, unsigned long seq)
>  {
> -     int i;
> +     int i, j;
>  
>       WARN_ON_ONCE(!rcu_segcblist_is_enabled(rsclp));
>       if (rcu_segcblist_restempty(rsclp, RCU_DONE_TAIL))
> @@ -487,6 +508,10 @@ bool rcu_segcblist_accelerate(struct rcu_segcblist 
> *rsclp, unsigned long seq)
>       if (rcu_segcblist_restempty(rsclp, i) || ++i >= RCU_NEXT_TAIL)
>               return false;
>  
> +     /* Accounting: everything below i is about to get merged into i. */
> +     for (j = i + 1; j <= RCU_NEXT_TAIL; j++)
> +             rcu_segcblist_move_seglen(rsclp, j, i);
> +

Can you perhaps reuse the below loop to move the seglen?

Thanks.

>       /*
>        * Merge all later callbacks, including newly arrived callbacks,
>        * into the segment located by the for-loop above.  Assign "seq"

Reply via email to