--- initial
+++ final
@@ -1,79 +1,79 @@
 static int __noreturn rcu_gp_kthread(void *arg) {
   bool first_gp_fqs;
   int gf;
   unsigned long j;
   int ret;
   struct rcu_state *rsp = arg;
   struct rcu_node *rnp = rcu_get_root(rsp);
   rcu_bind_gp_kthread();
   for (;;) {
     /* Handle grace-period start. */
     for (;;) {
       trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gpnum), TPS("reqwait"));
       rsp->gp_state = RCU_GP_WAIT_GPS;
-      swait_event_idle(rsp->gp_wq, READ_ONCE(rsp->gp_flags) & RCU_GP_FLAG_INIT);
+      swait_event_idle_exclusive(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;
       cond_resched_tasks_rcu_qs();
       WRITE_ONCE(rsp->gp_activity, jiffies);
       WARN_ON(signal_pending(current));
       trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gpnum), TPS("reqwaitsig"));
     }
     /* Handle quiescent-state forcing. */
     first_gp_fqs = true;
     j = jiffies_till_first_fqs;
     if (j > HZ) {
       j = HZ;
       jiffies_till_first_fqs = HZ;
     }
     ret = 0;
     for (;;) {
       if (!ret) {
         rsp->jiffies_force_qs = jiffies + j;
         WRITE_ONCE(rsp->jiffies_kick_kthreads, jiffies + 3 * j);
       }
       trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gpnum), TPS("fqswait"));
       rsp->gp_state = RCU_GP_WAIT_FQS;
-      ret = swait_event_idle_timeout(rsp->gp_wq, rcu_gp_fqs_check_wake(rsp, &gf), j);
+      ret = swait_event_idle_timeout_exclusive(rsp->gp_wq, rcu_gp_fqs_check_wake(rsp, &gf), j);
       rsp->gp_state = RCU_GP_DOING_FQS;
       /* Locking provides needed memory barriers. */
       /* If grace period done, leave loop. */
       if (!READ_ONCE(rnp->qsmask) && !rcu_preempt_blocked_readers_cgp(rnp)) break;
       /* If time for quiescent-state forcing, do it. */
       if (ULONG_CMP_GE(jiffies, rsp->jiffies_force_qs) || (gf & RCU_GP_FLAG_FQS)) {
         trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gpnum), TPS("fqsstart"));
         rcu_gp_fqs(rsp, first_gp_fqs);
         first_gp_fqs = false;
         trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gpnum), TPS("fqsend"));
         cond_resched_tasks_rcu_qs();
         WRITE_ONCE(rsp->gp_activity, jiffies);
         ret = 0; /* Force full wait till next FQS. */
         j = jiffies_till_next_fqs;
         if (j > HZ) {
           j = HZ;
           jiffies_till_next_fqs = HZ;
         } else if (j < 1) {
           j = 1;
           jiffies_till_next_fqs = 1;
         }
       } else {
         /* Deal with stray signal. */
         cond_resched_tasks_rcu_qs();
         WRITE_ONCE(rsp->gp_activity, jiffies);
         WARN_ON(signal_pending(current));
         trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gpnum), TPS("fqswaitsig"));
         ret = 1; /* Keep old FQS timing. */
         j = jiffies;
         if (time_after(jiffies, rsp->jiffies_force_qs))
           j = 1;
         else
           j = rsp->jiffies_force_qs - j;
       }
     }
     /* Handle grace-period end. */
     rsp->gp_state = RCU_GP_CLEANUP;
     rcu_gp_cleanup(rsp);
     rsp->gp_state = RCU_GP_CLEANED;
   }
 }<sep>@@
expression e1,e2;
@@
-                       swait_event_idle
+                       swait_event_idle_exclusive
				(e1,e2)

@@
expression e1,e2,e3;
@@
-                       swait_event_idle_timeout
+                       swait_event_idle_timeout_exclusive
				(e1,e2,e3)