Commit 8491d1bd authored by Uros Bizjak's avatar Uros Bizjak Committed by Peter Zijlstra
Browse files

sched/clock: Use try_cmpxchg64 in sched_clock_{local,remote}



Use try_cmpxchg64 instead of cmpxchg64 (*ptr, old, new) != old in
sched_clock_{local,remote}. x86 cmpxchg returns success in ZF flag,
so this change saves a compare after cmpxchg (and related move
instruction in front of cmpxchg).

Signed-off-by: default avatarUros Bizjak <ubizjak@gmail.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20220518184953.3446778-1-ubizjak@gmail.com
parent c2df0a6a
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -287,7 +287,7 @@ notrace static u64 sched_clock_local(struct sched_clock_data *scd)
	clock = wrap_max(clock, min_clock);
	clock = wrap_max(clock, min_clock);
	clock = wrap_min(clock, max_clock);
	clock = wrap_min(clock, max_clock);


	if (cmpxchg64(&scd->clock, old_clock, clock) != old_clock)
	if (!try_cmpxchg64(&scd->clock, &old_clock, clock))
		goto again;
		goto again;


	return clock;
	return clock;
@@ -349,7 +349,7 @@ notrace static u64 sched_clock_remote(struct sched_clock_data *scd)
		val = remote_clock;
		val = remote_clock;
	}
	}


	if (cmpxchg64(ptr, old_val, val) != old_val)
	if (!try_cmpxchg64(ptr, &old_val, val))
		goto again;
		goto again;


	return val;
	return val;