From: Uros Bizjak Date: Fri, 19 Jul 2024 10:38:52 +0000 (+0200) Subject: kexec: use atomic_try_cmpxchg_acquire() in kexec_trylock() X-Git-Tag: v6.12-rc1~114^2~98 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=acf02be3c72f12c31f916d3465c4c716b4729538;p=thirdparty%2Fkernel%2Flinux.git kexec: use atomic_try_cmpxchg_acquire() in kexec_trylock() Use atomic_try_cmpxchg_acquire(*ptr, &old, new) instead of atomic_cmpxchg_acquire(*ptr, old, new) == old in kexec_trylock(). x86 CMPXCHG instruction returns success in ZF flag, so this change saves a compare after cmpxchg. Link: https://lkml.kernel.org/r/20240719103937.53742-1-ubizjak@gmail.com Signed-off-by: Uros Bizjak Acked-by: Baoquan He Cc: Eric Biederman Signed-off-by: Andrew Morton --- diff --git a/kernel/kexec_internal.h b/kernel/kexec_internal.h index 2595defe8c0d9..d35d9792402d1 100644 --- a/kernel/kexec_internal.h +++ b/kernel/kexec_internal.h @@ -23,7 +23,8 @@ int kimage_is_destination_range(struct kimage *image, extern atomic_t __kexec_lock; static inline bool kexec_trylock(void) { - return atomic_cmpxchg_acquire(&__kexec_lock, 0, 1) == 0; + int old = 0; + return atomic_try_cmpxchg_acquire(&__kexec_lock, &old, 1); } static inline void kexec_unlock(void) {