From nobody Tue Dec 30 14:48:40 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9BF6DC4332F for ; Tue, 14 Nov 2023 17:00:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233473AbjKNRA5 (ORCPT ); Tue, 14 Nov 2023 12:00:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36036 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229607AbjKNRAy (ORCPT ); Tue, 14 Nov 2023 12:00:54 -0500 Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com [IPv6:2a00:1450:4864:20::232]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 206B911D; Tue, 14 Nov 2023 09:00:51 -0800 (PST) Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-2c79d8b67f3so64643591fa.0; Tue, 14 Nov 2023 09:00:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699981249; x=1700586049; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=aQal8qUMEmhK7Dkdqvrsuy8gJSftsXg0qDExwqH+0QI=; b=dzLiiK1kOBV1tbNT+t7ndRYhKTf/rz5Y5rabfXCLPrMpO5XNGEeuOj8NYFnxlPMA9x uyuHE3u2vTZz3M37CYtzRSBJMOljQzx2OLN5a+uvLkGabbo540Av7b+ReaGqO97yHICa QFBq/At/u9j5prQe8Cm0z+UNljLE+ysDWdYf3d5OYSgmryh2XnWxkLlZRVvIrCAczEPJ JNeu64XZfjMKEM4bR6aTzsXOPIkX87W8HofEVjz1du/3lz9swS0z/+oBvlrARQS1HpLb Fp9m5TOm9RHxyJCEwD06CNrp4bikqPbHdhsKHrpO9tZt8eDo08gOMGBzhaBp1BhLsyVN SEXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699981249; x=1700586049; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=aQal8qUMEmhK7Dkdqvrsuy8gJSftsXg0qDExwqH+0QI=; b=hS4Rc9YJEKLm8fcqneem7dXVNlhAcMMzxezDsW1i76++Dp5xQvfaDBiQgOo3OslS43 EE3TPZDMuztV0Qy/dJ5oZPUREZRcHf/c+6nb6k9ssiUtpi0roLBMaM8/i/kh47ao5GmA hl5n4aKgbg1bzL3OD8njn3PD8rP7Z2LOd3yPdpftZNgdJf1qMs8aQUvgfVDrG2/xsvHg 3toA2IB9CDisgrX5Kwirr4lLEGJA8nhI6qS8J1mqa+C+j3aP6uyjN1EwUzj23BK6mkpo J1gg4awUUiSoMqmo1tihA6/IhrXnEzqVzaRW8wKakw9UmyuNWGgTrgpQBW7MUOykiwvl YmNw== X-Gm-Message-State: AOJu0Yz4+9MKvl64UZgXbO2LFqdpN0dYBcTBc9/T9mkimpPLamB0QNnn N1iNwzNwIEWvNa2SqZFx5xyJWqaVbR9rEFuB X-Google-Smtp-Source: AGHT+IE43F05uSclNDiqjUQ8LYaXrlPhIM2NjgZ7lD7gFNTvFeAy5QF9GarxjRKA5/arhUEpos+Eqw== X-Received: by 2002:a05:651c:2204:b0:2c5:52d:c9ff with SMTP id y4-20020a05651c220400b002c5052dc9ffmr2432095ljq.10.1699981248844; Tue, 14 Nov 2023 09:00:48 -0800 (PST) Received: from localhost.localdomain ([46.248.82.114]) by smtp.gmail.com with ESMTPSA id k40-20020a05600c1ca800b0040a5e69482esm2465315wms.11.2023.11.14.09.00.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 09:00:48 -0800 (PST) From: Uros Bizjak To: linux-hyperv@vger.kernel.org, x86@kernel.org, linux-kernel@vger.kernel.org Cc: Uros Bizjak , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" Subject: [PATCH] x86/hyperv: Use atomic_try_cmpxchg() to micro-optimize hv_nmi_unknown() Date: Tue, 14 Nov 2023 17:59:28 +0100 Message-ID: <20231114170038.381634-1-ubizjak@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Use atomic_try_cmpxchg() instead of atomic_cmpxchg(*ptr, old, new) =3D=3D o= ld in hv_nmi_unknown(). On x86 the CMPXCHG instruction returns success in the ZF flag, so this change saves a compare after CMPXCHG. The generated asm code improves from: 3e: 65 8b 15 00 00 00 00 mov %gs:0x0(%rip),%edx 45: b8 ff ff ff ff mov $0xffffffff,%eax 4a: f0 0f b1 15 00 00 00 lock cmpxchg %edx,0x0(%rip) 51: 00 52: 83 f8 ff cmp $0xffffffff,%eax 55: 0f 95 c0 setne %al to: 3e: 65 8b 15 00 00 00 00 mov %gs:0x0(%rip),%edx 45: b8 ff ff ff ff mov $0xffffffff,%eax 4a: f0 0f b1 15 00 00 00 lock cmpxchg %edx,0x0(%rip) 51: 00 52: 0f 95 c0 setne %al No functional change intended. Cc: "K. Y. Srinivasan" Cc: Haiyang Zhang Cc: Wei Liu Cc: Dexuan Cui Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Borislav Petkov Cc: Dave Hansen Cc: "H. Peter Anvin" Signed-off-by: Uros Bizjak Reviewed-by: Michael Kelley --- arch/x86/kernel/cpu/mshyperv.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index e6bba12c759c..01fa06dd06b6 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -262,11 +262,14 @@ static uint32_t __init ms_hyperv_platform(void) static int hv_nmi_unknown(unsigned int val, struct pt_regs *regs) { static atomic_t nmi_cpu =3D ATOMIC_INIT(-1); + unsigned int old_cpu, this_cpu; =20 if (!unknown_nmi_panic) return NMI_DONE; =20 - if (atomic_cmpxchg(&nmi_cpu, -1, raw_smp_processor_id()) !=3D -1) + old_cpu =3D -1; + this_cpu =3D raw_smp_processor_id(); + if (!atomic_try_cmpxchg(&nmi_cpu, &old_cpu, this_cpu)) return NMI_HANDLED; =20 return NMI_DONE; --=20 2.41.0