On Mon, Jun 22, 2020 at 01:30:31AM +0530, Neeraj Upadhyay wrote:
Hi Paul,
On 6/22/2020 1:20 AM, Paul E. McKenney wrote:
On Mon, Jun 22, 2020 at 12:07:27AM +0530, Neeraj Upadhyay wrote:
On callback overload, we want to force quiescent state immediately,
for the first and second fqs. Enforce the same, by including
RCU_GP_FLAG_OVLD flag, in fqsstart check.
Signed-off-by: Neeraj Upadhyay <neeraju@xxxxxxxxxxxxxx>
Good catch!
But what did you do to verify that this change does the right thing?
Thanx, Paul
I haven't done a runtime verification of this code path; I posted this,
based on review of this code.
My concern is that under overload, the FQS scans would happen continuously
rather than accelerating only the first such scan in a given grace period.
This would of course result in a CPU-bound grace-period kthread, which
users might not be all that happy with.
Or am I missing something subtle that prevents this?
But yes, it does look like the current mainline code fails to do the
first scan immediately, so again, good catch!
Thanx, Paul
Thanks
Neeraj
---
kernel/rcu/tree.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index d0988a1..6226bfb 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -1865,7 +1865,7 @@ static void rcu_gp_fqs_loop(void)
break;
/* If time for quiescent-state forcing, do it. */
if (!time_after(rcu_state.jiffies_force_qs, jiffies) ||
- (gf & RCU_GP_FLAG_FQS)) {
+ (gf & (RCU_GP_FLAG_FQS | RCU_GP_FLAG_OVLD))) {
trace_rcu_grace_period(rcu_state.name, rcu_state.gp_seq,
TPS("fqsstart"));
rcu_gp_fqs(first_gp_fqs);
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of
the Code Aurora Forum, hosted by The Linux Foundation