Commit fcc878e4 authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

rcu: Remove now-unused ->b.exp_need_qs field from the rcu_special union



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: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
parent 27c744e3
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -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 {
+4 −9
Original line number Diff line number Diff line
@@ -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);