From patchwork Fri Oct 27 11:44:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rong Tao X-Patchwork-Id: 158914 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp537232vqb; Fri, 27 Oct 2023 04:44:44 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEbOOhwpuZ4bChXsohACp8d+5fMRTOE4z8um86hevfzpuP2/CLyoBjW5AvrC/qWP3sOpHiz X-Received: by 2002:a81:ed07:0:b0:5a7:ba09:e58b with SMTP id k7-20020a81ed07000000b005a7ba09e58bmr2455446ywm.14.1698407084607; Fri, 27 Oct 2023 04:44:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698407084; cv=none; d=google.com; s=arc-20160816; b=XYgUXHJ2zr2T2XUd1sNTaNkZNgdFmRdH6mqZK4VHcsKbMI5xTBqw0vWnaQWbzYtSbR 1witV68KH/yAeLgagP4UzwhfLQoITJIHBz4dUDv7cEHrTuDHOePoqhpMmSLQDr94YsOf ub/dDEx0Fov88gUnyIvxBosn//ZJklhHdnQ4D58U+0XU4LpPS/EfYPQxkHMuftiXDADS odPhcFBbSyZs9JdftZKWL1xTLoOJI0BqBIxdV7PjRc+Op7Ia+qsZ5hw72th1W1SnM9GV h5PN/9NdbiQCA2Q5jJeTWSdOT7HKeOgbVa3+WiMKHV74fUZJabPbp0wwQLMBw4+3kQnr P+Ig== 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:date :subject:cc:to:from:message-id:dkim-signature; bh=yukBmy9p11tx0AucygHU2OcvxtseIS2votlBhSgyhq8=; fh=XlFeGqcOS0x9c8Gxyx+5XH9IYxjBqf/F7S2+MMKzcNQ=; b=b2/jwenmsALgjQVCaer8c5psUAIFxbNHVX0SJKtCcqXMJs+VcOkOzT4oX2s4V5vvnM GEpd+PFxBOSaXFxXy9n1oZ9vbTenHVIesayswtxZaq9VirIRydGNfvzkRhhNEgeWt9Ld 6iiTHYskfTcYG0xftGVHBcufKV0t8492vnsLjwHKDQyiai139kJjErpqAxqy+g5Qw6fT xfpz9OVC5ASYBkbcbHlrs1iCdCFGSngINJhcNrs3rFf+6eTTigHx/Cs/MkzUblg/VBb5 j1jKyPx4eNLwthXEayN//bE5spPDhtiK1xu8UGRPUG0iIt8OcwCOtmD4iofXvrOnp9/P j04Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@foxmail.com header.s=s201512 header.b=El6MylZs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id o198-20020a0dcccf000000b005a7f9634341si2158151ywd.151.2023.10.27.04.44.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 04:44:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@foxmail.com header.s=s201512 header.b=El6MylZs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 541F08252C7B; Fri, 27 Oct 2023 04:44:41 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231519AbjJ0Lob (ORCPT + 25 others); Fri, 27 Oct 2023 07:44:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53484 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231302AbjJ0Loa (ORCPT ); Fri, 27 Oct 2023 07:44:30 -0400 Received: from out203-205-221-245.mail.qq.com (out203-205-221-245.mail.qq.com [203.205.221.245]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0DC54AC for ; Fri, 27 Oct 2023 04:44:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1698407064; bh=yukBmy9p11tx0AucygHU2OcvxtseIS2votlBhSgyhq8=; h=From:To:Cc:Subject:Date; b=El6MylZsa+dz4TLl1uAlBJGFPMQO+P2HwHTIPHuF8z363j6JqhKpLUpMmZqEAJfzJ uIcfRNSnN9BHQlJMLSHzsX22u0oI9gQNOsGXvNZa2tp9oETvxb8M2gvXZZzgwasy60 J86xvjPDPXmgYKOX+9taOSQaxoNqHUVMlVYQmTDA= Received: from RT-NUC.. ([39.156.73.12]) by newxmesmtplogicsvrszc5-0.qq.com (NewEsmtp) with SMTP id B158D689; Fri, 27 Oct 2023 19:44:21 +0800 X-QQ-mid: xmsmtpt1698407061t7e7mbwhe Message-ID: X-QQ-XMAILINFO: NMGzQWUSIfvTE831ChY3WYp2gelANgt1hI89QIxhwQKjZvz2qRg8w5+AULfJWH TbZLaL78DhCf5cIHrCIPJAEnIUMLzzhYI9JfG6U8qlCWlpM6ytiLHYLt1vkiGRHdsebN9u3K3J17 Jmoyfp7Knvte11KFxX60kjAcsBuCmQYZ2X1r2GQGmY3wdcZs/GlAR13ob7U5/lq4hy/TCdAnut1w Tu1ldm2R2QPA1h10dL87y41UkOjHy0eitPsg7AOXeMlCsaC741+aWkgRIXqIX6mcz7XpoS8QLv2j IX6XGdikVIdVx6KnEbXDbFAA/obsgaKpfUXSiTQDTJy7TP6Y3wgCuoHCSj6XF2oc0ZDRnzidubSq Ixhdl+G3RKeA1wlXOCh0W/1XlYZXfbvxm7vXXubeLaD9XpT2tL6x4J6OgNWsqFH13s4QU5QlC9zw PhnLWTIRIbIpu6y/qNa0W2hjJgMPQV03nHd3rBNovnEOqwoCxVGf+bmAbpSdOCGY469mqBmIA8Fy PomfCFj/ocJ0FYUdJveLgRpA5QgGHRWfA+0ZKrCCOgOEQchQYppOJlFiNRVjbIS2uF80KUnnRYjE b15nqP93aEzF0sv5pK3CASGukEMm/kELDlS6xFHZjc4Gm58ETxJSx5Sm2DeFx18byFiu2ZSrU9Sd DQYl38WbF/xXUZ7gcWGz45Oyk7mQDtAYvexRyMkqF++RSlTaY7HQT/BOvALUBxEcRFkwCXigA1H4 ULfDIxFEcRDfx6T0/XmA0qNtHVDhN9a6b0kV7jLSF3jyoe3Tr142XeE5PeaQlZPzLG/rZ9HevP+h EwPRO/CWjmcJnvaicRpRF7c0AXkhMf2YAQA7SvcZuSHy8oR/YVOD4W3lQonbSttEqZCFldltnK6i 1SfIjNSMmCuvP0ftINngNkbP59k9Fha4Y9P5H/duDYvjvcB2D58narkWgf2zIHK8TsF1YLE3ttfE q0ugfrMM/CCVrui7d1V+3gDIqt80WXf1VAEcobeXzVtBQzUezvt7U+B9aCK+5VNu9QYRq0sWYWuw Hqa50Pkw== X-QQ-XMRINFO: MPJ6Tf5t3I/ycC2BItcBVIA= From: Rong Tao To: mark.rutland@arm.com, elver@google.com, linux-kernel@vger.kernel.org, peterz@infradead.org Cc: rongtao@cestc.cn, rtoax@foxmail.com, tglx@linutronix.de Subject: [PATCH v4] stop_machine: pass curstate to ack_state() Date: Fri, 27 Oct 2023 19:44:20 +0800 X-OQ-MSGID: <20231027114420.53491-1-rtoax@foxmail.com> X-Mailer: git-send-email 2.42.0 MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Fri, 27 Oct 2023 04:44:41 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780908907383662689 X-GMAIL-MSGID: 1780908907383662689 From: Rong Tao The multi_cpu_stop() state machine uses multi_stop_data::state to hold the current state, and this is read and written atomically except in ack_state(), which performs a non-atomic read. As ack_state() only performs this non-atomic read when there is a single writer, this is benign, but it makes reasoning about the state machine a little harder. Remove the non-atomic read and pass the (atomically read) curstate in instead. This makes it clear that we do not expect any racy writes, and avoids a redundant load. Acked-by: Mark Rutland Signed-off-by: Rong Tao --- v4: This patch, modify comment words according to [0]. [0] https://lore.kernel.org/lkml/ZTegiFbGQUAp1l0p@FVFF77S0Q05N/ v3: Only pass curstate to ack_state(), it's one of patchset([1/2]) https://lore.kernel.org/lkml/tencent_49AFDBA31F885906234219591097D42ABE08@qq.com/ v2: Pass curstate to ack_state() and apply smp_store_release() https://lore.kernel.org/lkml/tencent_4CD220721A6C0B39670D5D52AAE4BD2A8F0A@qq.com/ v1: Just add READ_ONCE() https://lore.kernel.org/lkml/tencent_705C16DF25978ACAEBD1E83E228881901006@qq.com/ --- kernel/stop_machine.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c index cedb17ba158a..268c2e581698 100644 --- a/kernel/stop_machine.c +++ b/kernel/stop_machine.c @@ -188,10 +188,11 @@ static void set_state(struct multi_stop_data *msdata, } /* Last one to ack a state moves to the next state. */ -static void ack_state(struct multi_stop_data *msdata) +static void ack_state(struct multi_stop_data *msdata, + enum multi_stop_state curstate) { if (atomic_dec_and_test(&msdata->thread_ack)) - set_state(msdata, msdata->state + 1); + set_state(msdata, curstate + 1); } notrace void __weak stop_machine_yield(const struct cpumask *cpumask) @@ -242,7 +243,7 @@ static int multi_cpu_stop(void *data) default: break; } - ack_state(msdata); + ack_state(msdata, curstate); } else if (curstate > MULTI_STOP_PREPARE) { /* * At this stage all other CPUs we depend on must spin