j = jiffies;
        gpa = READ_ONCE(rsp->gp_activity);
        if (j - gpa > 2 * HZ)
-               pr_err("%s kthread starved for %ld jiffies! g%lu c%lu f%#x\n",
+               pr_err("%s kthread starved for %ld jiffies! g%lu c%lu f%#x s%d ->state=%#lx\n",
                       rsp->name, j - gpa,
-                      rsp->gpnum, rsp->completed, rsp->gp_flags);
+                      rsp->gpnum, rsp->completed,
+                      rsp->gp_flags, rsp->gp_state,
+                      rsp->gp_kthread ? rsp->gp_kthread->state : 0);
 }
 
 /*
                        wait_event_interruptible(rsp->gp_wq,
                                                 READ_ONCE(rsp->gp_flags) &
                                                 RCU_GP_FLAG_INIT);
+                       rsp->gp_state = RCU_GP_DONE_GPS;
                        /* Locking provides needed memory barrier. */
                        if (rcu_gp_init(rsp))
                                break;
                                        (!READ_ONCE(rnp->qsmask) &&
                                         !rcu_preempt_blocked_readers_cgp(rnp)),
                                        j);
+                       rsp->gp_state = RCU_GP_DONE_FQS;
                        /* Locking provides needed memory barriers. */
                        /* If grace period done, leave loop. */
                        if (!READ_ONCE(rnp->qsmask) &&
                }
 
                /* Handle grace-period end. */
+               rsp->gp_state = RCU_GP_CLEANUP;
                rcu_gp_cleanup(rsp);
+               rsp->gp_state = RCU_GP_CLEANED;
        }
 }
 
 
 /* Values for rcu_state structure's gp_flags field. */
 #define RCU_GP_WAIT_INIT 0     /* Initial state. */
 #define RCU_GP_WAIT_GPS  1     /* Wait for grace-period start. */
-#define RCU_GP_WAIT_FQS  2     /* Wait for force-quiescent-state time. */
+#define RCU_GP_DONE_GPS  2     /* Wait done for grace-period start. */
+#define RCU_GP_WAIT_FQS  3     /* Wait for force-quiescent-state time. */
+#define RCU_GP_DONE_FQS  4     /* Wait done for force-quiescent-state time. */
+#define RCU_GP_CLEANUP   5     /* Grace-period cleanup started. */
+#define RCU_GP_CLEANED   6     /* Grace-period cleanup complete. */
 
 extern struct list_head rcu_struct_flavors;