Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp3986990ioo; Wed, 25 May 2022 12:11:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzTzKv7r75A8U7uoZucVkQ+/x+dMpcE15TXyruI+kTolxTdadg5sf4387hG1bYgY1XcE/9P X-Received: by 2002:a62:ed0e:0:b0:4fa:11ed:2ad1 with SMTP id u14-20020a62ed0e000000b004fa11ed2ad1mr35374510pfh.34.1653505873029; Wed, 25 May 2022 12:11:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653505873; cv=none; d=google.com; s=arc-20160816; b=MyDSQ6+4TOs81kPpnULfke0hZFeKSkUJKUkWrUkaYbi8nY4CO2QwSHtpd99to1g5bq tezB6e8X2AKyoM4BAw09b+MtVyYiRnQogzKuJR5KH6R/85JTOtebaXvuzcP7LK8xWnei 9xadKACVODChP+XQoHHyitshPilIOiruUA+TqWz3o/521P2mEhiB4EPYbY1AIJBoQKCy KwPTVakx1iVnJINEOUKNCWuIULetlomrIfY0irPxqTUzTbbcnfXIdw+kdsR6dLj4+oPV QwEjtiuo4RsL7fQZSxzDyaODPh0ZBXNyFQhRTZgFoP/Y54i7woykFhck9fqL3cqiV8q8 5g8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=WGRkHo13klUcDKk1KqH40m6REBnbbm7RxrmwOgaIy6M=; b=Z2iw1h+3k8upBcYXeKHron3n6YehzzrpuugVmxTKNg3dQ6LeBj1RsWDh/zX6p/ZtTu tGButkIDN60itXfLtkl8UdkdTG8t7/wthNjBUIjuB7/h0imYqEvZCkhNrMhV8d+IeHqw eGj3R4AvWwdv8biJQiHuUJW2jUU5IKWpkMRHwgxieHm9BbTO5SPlNpCmLBwoZbkcRRVM 2PgDzIeTjmGcq6nNfjMzvb0AUJBRY+2dloaUiMfsYfMc8ncudK9T6+i570E/4KSG3qTd QmNm3lUNywWyM6XRhRrChdRKBOYB/UEWeey9ZhE5sYsXMS1+h4BPvmq44RWtkz7Qzc2d azrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=LtBLbMi9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q6-20020a656a86000000b003993a5ee24bsi22614161pgu.693.2022.05.25.12.10.56; Wed, 25 May 2022 12:11:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=LtBLbMi9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243347AbiEYOkg (ORCPT + 99 others); Wed, 25 May 2022 10:40:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47178 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231761AbiEYOke (ORCPT ); Wed, 25 May 2022 10:40:34 -0400 Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2624C32EFF for ; Wed, 25 May 2022 07:40:31 -0700 (PDT) Received: by mail-ed1-x530.google.com with SMTP id t26so2217417edt.0 for ; Wed, 25 May 2022 07:40:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WGRkHo13klUcDKk1KqH40m6REBnbbm7RxrmwOgaIy6M=; b=LtBLbMi9JKvOZMUSCfZdrY+fZA6DYkhA2b98GUXIMdkIVbHThmh2Rnl8mdD1oGUAg2 QqbLF/L+mw7FeVB2giyVlbrmzhCOSz6Fki/OwVfZ3TjO6OH2/NYPJeWrRceBg8WwA5BO YmKzPhfJIk8Ez8vbhAEPO5TD6+SUdjej8MxCZ2hSyLsJGCuVX9a3ztvDk49kC1YJQ9Dq /HMe+7mTxxLE4CS8DFEzeSHBXnVQgKYnBmUatmUosY/8sk9g59NXGwwrk0WE/obMuo2j 1EhY48pkOTV661H+B821KMC0RpaIrdN0YqSJQbf1WfRG2nbDeVrlxWbawLH3XNkO0PF9 1Njw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WGRkHo13klUcDKk1KqH40m6REBnbbm7RxrmwOgaIy6M=; b=abJiTiF9xOdWe3N14cGzhl7pkgvAM5i9sSQERRJ0bqoJaB/zT9Q28HB3al/+p2WNwY Lma7DA1YLuwjGcO+gfvHH6+qk5ToI8fZzZh8+9xItpJ+bTzY0EOVsED4FSluU4+L7cuA fMDREUt3rhMIbMMTkc6ygIUKkjZSq1tnhCTsutiG4jt4stQP8LFUuLjZWUKXmr7GF6BH X9vaNshsrQ6P0UfptUGv5mg75wHrX/R7CILN8JXrqayqyQpabfoeaF3DeEFImvV1R8A0 h0ZExWhvHbD6J35hvJleDuYb6ddwCWpD/nQRQDEj/9ERmMP1sD3qCbzCRLBV8TGSJdl9 OzFA== X-Gm-Message-State: AOAM531G2T3cGMzo3nVl2bXGXmNZMxdBCCCFXIcVHSJKkKqfZBEc63G+ qRtdjxFRChGOhXKhLvqAo4s= X-Received: by 2002:a05:6402:520e:b0:42b:360b:78e1 with SMTP id s14-20020a056402520e00b0042b360b78e1mr25258520edd.186.1653489629653; Wed, 25 May 2022 07:40:29 -0700 (PDT) Received: from localhost.localdomain (93-103-18-160.static.t-2.net. [93.103.18.160]) by smtp.gmail.com with ESMTPSA id 4-20020a170906224400b006f3ef214da7sm8288262ejr.13.2022.05.25.07.40.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 May 2022 07:40:29 -0700 (PDT) From: Uros Bizjak To: x86@kernel.org, linux-kernel@vger.kernel.org Cc: Uros Bizjak , Linus Torvalds , Peter Zijlstra , Thomas Gleixner , Waiman.Long@hp.com, paulmck@linux.vnet.ibm.com Subject: [PATCH 1/2] locking/lockref: Use try_cmpxchg64 in CMPXCHG_LOOP macro Date: Wed, 25 May 2022 16:40:12 +0200 Message-Id: <20220525144013.6481-2-ubizjak@gmail.com> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20220525144013.6481-1-ubizjak@gmail.com> References: <20220525144013.6481-1-ubizjak@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Use try_cmpxchg64 instead of cmpxchg64 in CMPXCHG_LOOP macro. x86 CMPXCHG instruction returns success in ZF flag, so this change saves a compare after cmpxchg (and related move instruction in front of cmpxchg). The main loop of lockref_get improves from: 13: 48 89 c1 mov %rax,%rcx 16: 48 c1 f9 20 sar $0x20,%rcx 1a: 83 c1 01 add $0x1,%ecx 1d: 48 89 ce mov %rcx,%rsi 20: 89 c1 mov %eax,%ecx 22: 48 89 d0 mov %rdx,%rax 25: 48 c1 e6 20 shl $0x20,%rsi 29: 48 09 f1 or %rsi,%rcx 2c: f0 48 0f b1 4d 00 lock cmpxchg %rcx,0x0(%rbp) 32: 48 39 d0 cmp %rdx,%rax 35: 75 17 jne 4e to: 13: 48 89 ca mov %rcx,%rdx 16: 48 c1 fa 20 sar $0x20,%rdx 1a: 83 c2 01 add $0x1,%edx 1d: 48 89 d6 mov %rdx,%rsi 20: 89 ca mov %ecx,%edx 22: 48 c1 e6 20 shl $0x20,%rsi 26: 48 09 f2 or %rsi,%rdx 29: f0 48 0f b1 55 00 lock cmpxchg %rdx,0x0(%rbp) 2f: 75 02 jne 33 Signed-off-by: Uros Bizjak Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: Waiman.Long@hp.com Cc: paulmck@linux.vnet.ibm.com --- lib/lockref.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/lockref.c b/lib/lockref.c index 5b34bbd3eba8..c6f0b183b937 100644 --- a/lib/lockref.c +++ b/lib/lockref.c @@ -14,12 +14,11 @@ BUILD_BUG_ON(sizeof(old) != 8); \ old.lock_count = READ_ONCE(lockref->lock_count); \ while (likely(arch_spin_value_unlocked(old.lock.rlock.raw_lock))) { \ - struct lockref new = old, prev = old; \ + struct lockref new = old; \ CODE \ - old.lock_count = cmpxchg64_relaxed(&lockref->lock_count, \ - old.lock_count, \ - new.lock_count); \ - if (likely(old.lock_count == prev.lock_count)) { \ + if (likely(try_cmpxchg64_relaxed(&lockref->lock_count, \ + &old.lock_count, \ + new.lock_count))) { \ SUCCESS; \ } \ if (!--retry) \ -- 2.35.3