Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 140e53f2 authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

rcutorture: Add cond_resched() to forward-progress free-up loop



The rcu_torture_fwd_prog_cbfree() function frees callbacks used during
rcutorture's call_rcu() forward-progress test, but does so in a tight
loop.  This could cause problems given a very long list of callbacks to be
freed, and actual testing produces lists with as many as 25M callbacks.
This commit therefore adds a cond_resched() to this loop.  While in
the area, this commit also rearranges the lock releases to look a bit
more sane.

Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.ibm.com>
parent dd064c35
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1674,16 +1674,18 @@ static unsigned long rcu_torture_fwd_prog_cbfree(void)
	for (;;) {
		spin_lock_irqsave(&rcu_fwd_lock, flags);
		rfcp = rcu_fwd_cb_head;
		if (!rfcp)
		if (!rfcp) {
			spin_unlock_irqrestore(&rcu_fwd_lock, flags);
			break;
		}
		rcu_fwd_cb_head = rfcp->rfc_next;
		if (!rcu_fwd_cb_head)
			rcu_fwd_cb_tail = &rcu_fwd_cb_head;
		spin_unlock_irqrestore(&rcu_fwd_lock, flags);
		kfree(rfcp);
		freed++;
		cond_resched();
	}
	spin_unlock_irqrestore(&rcu_fwd_lock, flags);
	return freed;
}