From patchwork Thu Oct 20 15:35:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Uros Bizjak X-Patchwork-Id: 6264 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4242:0:0:0:0:0 with SMTP id s2csp185220wrr; Thu, 20 Oct 2022 08:51:54 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6DCix0gtPJo0JqnPP2tbRsvqlfcpuMEaSdIXzCf7BFQcncFyOmcK3SknP0O4C0cw4nm6TM X-Received: by 2002:a05:6402:371b:b0:460:ff7d:f511 with SMTP id ek27-20020a056402371b00b00460ff7df511mr2251576edb.148.1666281114044; Thu, 20 Oct 2022 08:51:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666281114; cv=none; d=google.com; s=arc-20160816; b=IIo9nwoHYYcDjhppOosXU/M3frok7X5B4TDse6b+00Xj1qnFBBv7J91T7oEIcW/hY6 CV1v4duoJ/evp81NGww/HPJJFkNHk5u/rxd/cYjnSoxSILs/aF9thcrXvD2UgYtWdZic Uz8cBxnkXlajjoMEu028KiAAhpD858dEpvllJW1LnQqMjlemkCYyHkyn/Ps1sFaNexWi Q8828qtjWzQg6HCPly1TBSShgh5EBS9qPSi+5nIA2OSVfTEx+SdxE+Q2mcVm9HAED5ND 8MI9BHCpL6r/DA5Ma3riuWs+v8SYBN91RwOv4RSU/E7KMztfbubR+aE1RoB1PtrwiMBX NbMg== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=Xz6rkNFT+N3+z5GHliBzDaeRK81yOrfk7eIGZzmG81Q=; b=AdSrDW/ZhG1evnl34Epuq610HwhtlhnxsO8S+Zfx2it+ZP+PeLyRvseyzrPzaDjlbP wqrenJGI0jINBDqbZNguWWWAc5j+05rQnnFWHuJbRZ6r4f5dBb7GhwGSCp8OxPEFV51O z5z+Ua1rYwe1UCenZPDlyAxCBK9uM4MDq7RfMLEqsgeq+svjrKo2rX4bfB1u8F/sxJHC UG4GBVeoveDbndEwPtYW/YlpwqhQqJcLo2p0tIvo8nIHYjcCgbwRzApY+txr7WMbopuv nmC8ElMZK9xrGhsnT1RBkPwcelO9QnhJ4ILjsDln63zxFJqPE+DdXXPFVCG1TEd/FjtO 58Ag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=LrPvFB8g; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e14-20020a056402190e00b0045b965cf1dasi19879438edz.175.2022.10.20.08.51.27; Thu, 20 Oct 2022 08:51:54 -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=LrPvFB8g; 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 S230143AbiJTPf6 (ORCPT + 99 others); Thu, 20 Oct 2022 11:35:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229717AbiJTPf5 (ORCPT ); Thu, 20 Oct 2022 11:35:57 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AE98A1805BF for ; Thu, 20 Oct 2022 08:35:53 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id bg9-20020a05600c3c8900b003bf249616b0so2493192wmb.3 for ; Thu, 20 Oct 2022 08:35:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Xz6rkNFT+N3+z5GHliBzDaeRK81yOrfk7eIGZzmG81Q=; b=LrPvFB8gDO64B7UiPcOEb4r4czILVjpCtcxZINcfAFDa3JVnVixw8m/oGT/SX21zP/ Gr0oby3J6kWKup8VmdmabJ/RmMiUTF41qbixfM8VEDJItjOUfbI+i4eL5pPeXKNAC14E dFkAG4sTNCeJGTXP9FerhSiUuerkXXeqxmrzw4EjmqkkUs0TqQd5EofrRaek32k73Lrv hovubnAzUZ9PQje3IfBFZK8uo/EOI95RVgx3leGIGBT81cFNKVXmL2Sc4MI9FZ2Jo2o3 E4+/DFmy8GAK+x+xJAmWJ9xFNcSRq7lHXKBFpaqNZHYOCvETpZaQ5vW86279Aqavyawn TvCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=Xz6rkNFT+N3+z5GHliBzDaeRK81yOrfk7eIGZzmG81Q=; b=HjTlqOl27t/sUXkJ9zTRd79JGMFY7fObKki/jhbBgB0kKN1vxOZ9ur/Z/104wOgPm+ w7JN186DP6ul6+u1Sm8cIcBezs5MQiYiMuNaLPyZqBMq6FKcOfM/Xc9lMBMuyznYhwlA dff3E0T8vmG0u0g/T34CuCyE+xyAXbU+H/ZmuWSDrnByaTulEWdVEPZimR+NamFRA/oF HqmCmHSspaQlrDXm/tNbv4H25TgK7r48wPZYOr7A6S9CJr+LeplmFW/CkSXQg2tN84Df jJC7J34lCpcbMzDmjdwKQOpXn6fOIOujijVyAgQVz6LUPhGD72SWPn7CRWlthPX2iCC0 4Xag== X-Gm-Message-State: ACrzQf1q2Aa6vjFOiHFvhuOrpi+oACZ94NE3TwgUqEvK5Ao8BdhY2DOO ottUlc5n1QM8hGNKas+oZr4= X-Received: by 2002:a05:600c:4f46:b0:3c6:fb4f:3e1b with SMTP id m6-20020a05600c4f4600b003c6fb4f3e1bmr9922108wmq.159.1666280151918; Thu, 20 Oct 2022 08:35:51 -0700 (PDT) Received: from localhost.localdomain ([46.248.82.114]) by smtp.gmail.com with ESMTPSA id u11-20020adff88b000000b0022e2eaa2bdcsm16486515wrp.98.2022.10.20.08.35.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 08:35:51 -0700 (PDT) From: Uros Bizjak To: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Uros Bizjak , Christoph Hellwig , Sagi Grimberg , Chaitanya Kulkarni Subject: [PATCH] nvmet: use try_cmpxchg in nvmet_update_sq_head Date: Thu, 20 Oct 2022 17:35:40 +0200 Message-Id: <20221020153540.8226-1-ubizjak@gmail.com> X-Mailer: git-send-email 2.37.3 MIME-Version: 1.0 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 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747222385419150470?= X-GMAIL-MSGID: =?utf-8?q?1747222385419150470?= Use try_cmpxchg instead of cmpxchg (*ptr, old, new) == old in nvmet_update_sq_head. x86 CMPXCHG instruction returns success in ZF flag, so this change saves a compare after cmpxchg (and related move instruction in front of cmpxchg). Also, try_cmpxchg implicitly assigns old *ptr value to "old" when cmpxchg fails. There is no need to re-read the value in the loop. Note that the value from *ptr should be read using READ_ONCE to prevent the compiler from merging, refetching or reordering the read. No functional change intended. Cc: Christoph Hellwig Cc: Sagi Grimberg Cc: Chaitanya Kulkarni Signed-off-by: Uros Bizjak Reviewed-by: Sagi Grimberg Reviewed-by: ChaItanya Kulkarni --- drivers/nvme/target/core.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c index 14677145bbba..a384a0927aed 100644 --- a/drivers/nvme/target/core.c +++ b/drivers/nvme/target/core.c @@ -695,11 +695,10 @@ static void nvmet_update_sq_head(struct nvmet_req *req) if (req->sq->size) { u32 old_sqhd, new_sqhd; + old_sqhd = READ_ONCE(req->sq->sqhd); do { - old_sqhd = req->sq->sqhd; new_sqhd = (old_sqhd + 1) % req->sq->size; - } while (cmpxchg(&req->sq->sqhd, old_sqhd, new_sqhd) != - old_sqhd); + } while (!try_cmpxchg(&req->sq->sqhd, &old_sqhd, new_sqhd)); } req->cqe->sq_head = cpu_to_le16(req->sq->sqhd & 0x0000FFFF); }