Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e800879d authored by Christoph Lameter's avatar Christoph Lameter Committed by Tejun Heo
Browse files

this_cpu: Use this_cpu operations in RCU



RCU does not do dynamic allocations but it increments per cpu variables
a lot. These instructions results in a move to a register and then back
to memory. This patch will make it use the inc/dec instructions on x86
that do not need a register.

Acked-by: default avatarTejun Heo <tj@kernel.org>
Acked-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarChristoph Lameter <cl@linux-foundation.org>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 4dac3e98
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -731,13 +731,13 @@ static void rcu_torture_timer(unsigned long unused)
		/* Should not happen, but... */
		pipe_count = RCU_TORTURE_PIPE_LEN;
	}
	++__get_cpu_var(rcu_torture_count)[pipe_count];
	__this_cpu_inc(per_cpu_var(rcu_torture_count)[pipe_count]);
	completed = cur_ops->completed() - completed;
	if (completed > RCU_TORTURE_PIPE_LEN) {
		/* Should not happen, but... */
		completed = RCU_TORTURE_PIPE_LEN;
	}
	++__get_cpu_var(rcu_torture_batch)[completed];
	__this_cpu_inc(per_cpu_var(rcu_torture_batch)[completed]);
	preempt_enable();
	cur_ops->readunlock(idx);
}
@@ -786,13 +786,13 @@ rcu_torture_reader(void *arg)
			/* Should not happen, but... */
			pipe_count = RCU_TORTURE_PIPE_LEN;
		}
		++__get_cpu_var(rcu_torture_count)[pipe_count];
		__this_cpu_inc(per_cpu_var(rcu_torture_count)[pipe_count]);
		completed = cur_ops->completed() - completed;
		if (completed > RCU_TORTURE_PIPE_LEN) {
			/* Should not happen, but... */
			completed = RCU_TORTURE_PIPE_LEN;
		}
		++__get_cpu_var(rcu_torture_batch)[completed];
		__this_cpu_inc(per_cpu_var(rcu_torture_batch)[completed]);
		preempt_enable();
		cur_ops->readunlock(idx);
		schedule();