Messages in this thread Patch in this message | | | From | Uros Bizjak <> | Subject | [PATCH] rcu: use try_cmpxchg in check_cpu_stall | Date | Tue, 28 Feb 2023 16:51:21 +0100 |
| |
Use try_cmpxchg instead of cmpxchg (*ptr, old, new) == old in check_cpu_stall. x86 CMPXCHG instruction returns success in ZF flag, so this change saves a compare after cmpxchg (and related move instruction in front of cmpxchg).
No functional change intended.
Cc: "Paul E. McKenney" <paulmck@kernel.org> Cc: Frederic Weisbecker <frederic@kernel.org> Cc: Neeraj Upadhyay <quic_neeraju@quicinc.com> Cc: Josh Triplett <josh@joshtriplett.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Lai Jiangshan <jiangshanlai@gmail.com> Cc: Joel Fernandes <joel@joelfernandes.org> Signed-off-by: Uros Bizjak <ubizjak@gmail.com> --- kernel/rcu/tree_stall.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h index b10b8349bb2a..d81c88e66b42 100644 --- a/kernel/rcu/tree_stall.h +++ b/kernel/rcu/tree_stall.h @@ -760,7 +760,7 @@ static void check_cpu_stall(struct rcu_data *rdp) jn = jiffies + ULONG_MAX / 2; if (rcu_gp_in_progress() && (READ_ONCE(rnp->qsmask) & rdp->grpmask) && - cmpxchg(&rcu_state.jiffies_stall, js, jn) == js) { + try_cmpxchg(&rcu_state.jiffies_stall, &js, jn)) { /* * If a virtual machine is stopped by the host it can look to @@ -778,7 +778,7 @@ static void check_cpu_stall(struct rcu_data *rdp) } else if (rcu_gp_in_progress() && ULONG_CMP_GE(j, js + RCU_STALL_RAT_DELAY) && - cmpxchg(&rcu_state.jiffies_stall, js, jn) == js) { + try_cmpxchg(&rcu_state.jiffies_stall, &js, jn)) { /* * If a virtual machine is stopped by the host it can look to -- 2.39.2
| |