History

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).

Uros Bizjak committed 4 years ago

Commit 8491d1b1 parent c2df0a61 file · +2 −2Browse files

Showing the changes to kernel (1 of 1 file). Show all

Unified · Split

kernel/sched/clock.c+2−2
@@ -287,7 +287,7 @@ again: · 286 unmodified lines
287 clock = wrap_max(clock, min_clock);287 clock = wrap_max(clock, min_clock);
288 clock = wrap_min(clock, max_clock);288 clock = wrap_min(clock, max_clock);
289 289
290 if (cmpxchg64(&scd->clock, old_clock, clock) != old_clock)290 if (!try_cmpxchg64(&scd->clock, &old_clock, clock))
291 goto again;291 goto again;
292 292
293 return clock;293 return clock;
@@ -349,7 +349,7 @@ again: · 55 unmodified lines
349 val = remote_clock;349 val = remote_clock;
350 }350 }
351 351
352 if (cmpxchg64(ptr, old_val, val) != old_val)352 if (!try_cmpxchg64(ptr, &old_val, val))
353 goto again;353 goto again;
354 354
355 return val;355 return val;