]> xenbits.xensource.com Git - people/aperard/linux.git/commitdiff
rcu: Remove now-unused ->b.exp_need_qs field from the rcu_special union
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 28 Jun 2018 14:39:59 +0000 (07:39 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 30 Aug 2018 23:02:36 +0000 (16:02 -0700)
The ->b.exp_need_qs field is now set only to false, so this commit
removes it.  The job this field used to do is now done by the rcu_data
structure's ->deferred_qs field, which is a consequence of a better
split between task-based (the rcu_node structure's ->exp_tasks field) and
CPU-based (the aforementioned rcu_data structure's ->deferred_qs field)
tracking of quiescent states for RCU-preempt expedited grace periods.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
include/linux/sched.h
kernel/rcu/tree_plugin.h

index 977cb57d7bc9e7183e6ca628e4f75d236ddf3951..004ca21f7e80f43a348c109b52349339c4f0bcfd 100644 (file)
@@ -571,12 +571,8 @@ union rcu_special {
        struct {
                u8                      blocked;
                u8                      need_qs;
-               u8                      exp_need_qs;
-
-               /* Otherwise the compiler can store garbage here: */
-               u8                      pad;
        } b; /* Bits. */
-       u32 s; /* Set of bits. */
+       u16 s; /* Set of bits. */
 };
 
 enum perf_event_task_context {
index 24c209676d2099e8c796b3bb294e2d544b5d3033..527a52792dce67165b65e9e0f499d38b38a50434 100644 (file)
@@ -284,13 +284,10 @@ static void rcu_preempt_ctxt_queue(struct rcu_node *rnp, struct rcu_data *rdp)
         * no need to check for a subsequent expedited GP.  (Though we are
         * still in a quiescent state in any case.)
         */
-       if (blkd_state & RCU_EXP_BLKD &&
-           t->rcu_read_unlock_special.b.exp_need_qs) {
-               t->rcu_read_unlock_special.b.exp_need_qs = false;
+       if (blkd_state & RCU_EXP_BLKD && rdp->deferred_qs)
                rcu_report_exp_rdp(rdp->rsp, rdp, true);
-       } else {
-               WARN_ON_ONCE(t->rcu_read_unlock_special.b.exp_need_qs);
-       }
+       else
+               WARN_ON_ONCE(rdp->deferred_qs);
 }
 
 /*
@@ -509,9 +506,7 @@ rcu_preempt_deferred_qs_irqrestore(struct task_struct *t, unsigned long flags)
         * tasks are handled when removing the task from the
         * blocked-tasks list below.
         */
-       if (special.b.exp_need_qs || rdp->deferred_qs) {
-               t->rcu_read_unlock_special.b.exp_need_qs = false;
-               rdp->deferred_qs = false;
+       if (rdp->deferred_qs) {
                rcu_report_exp_rdp(rcu_state_p, rdp, true);
                if (!t->rcu_read_unlock_special.s) {
                        local_irq_restore(flags);