rcu: Make force_quiescent_state() start grace period if needed

Grace periods cannot be started while force_quiescent_state() is
active.  This is OK in that the affected CPUs will try again
later, but it does induce needless grace-period delays.  This
patch causes rcu_start_gp() to record a failed attempt to start
a grace period. When force_quiescent_state() prepares to return,
it then starts the grace period if there was such a failed
attempt.

Signed-off-by: Paul E. McKenney <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
LKML-Reference: <12626465501854-git-send-email->
Signed-off-by: Ingo Molnar <[email protected]>
This commit is contained in:
Paul E. McKenney 2010-01-04 15:09:09 -08:00 • committed by Ingo Molnar
commit 46a1e34eda
2 changed files with 13 additions and 0 deletions

View file

@ -278,6 +278,11 @@ struct rcu_state {
/* Force QS state. */
u8 fqs_active; /* force_quiescent_state() */
/* is running. */
u8 fqs_need_gp; /* A CPU was prevented from */
/* starting a new grace */
/* period because */
/* force_quiescent_state() */
/* was running. */
long gpnum; /* Current gp number. */
long completed; /* # of last completed gp. */