From patchwork Wed Jun 12 22:30:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boqun Feng X-Patchwork-Id: 13695634 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D5AF9C27C53 for ; Wed, 12 Jun 2024 22:31:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=HaKXS0ZZbil+kikiY7Uq0U6QIK8rKqbj9kgNRJOfwg0=; b=0NKs+aJDLupubuRUCyZGHxYgqd AB2+l5/TL/lXIFzATxdTdPUU4X6V6Ejp5hN97S0JTu0sDJcfLubhidDx1WDjhu54QJWqq2zMp3CAH cCb60COaABwUXyFkAFgx8KXBExDMY7FAjWT7yCLPaxdHt/Sjehyj4cEcm5XsWm2UYIJsN3Z8887TS 9iQZLBgpbvxxH/LpH28AJAm9HP+nJDoNGWZ+s3qf19cPOZj+WeqamY7KHE8RVTXljGAznEUrbAKrs 6AGUpgFfwYI2H3lpJrlV3XBmK2zuXO4+25sIFT0I0Y+leSjSN7wGGYmGNLfWV3sCXnfsUpbvzeD19 L66yndzg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sHWUp-0000000ELHz-1DlR; Wed, 12 Jun 2024 22:31:11 +0000 Received: from mail-qv1-xf34.google.com ([2607:f8b0:4864:20::f34]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sHWUk-0000000ELFW-0P8a for linux-arm-kernel@lists.infradead.org; Wed, 12 Jun 2024 22:31:08 +0000 Received: by mail-qv1-xf34.google.com with SMTP id 6a1803df08f44-6b06bedc5d1so2137316d6.0 for ; Wed, 12 Jun 2024 15:31:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718231461; x=1718836261; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:feedback-id:from:to:cc:subject:date:message-id:reply-to; bh=HaKXS0ZZbil+kikiY7Uq0U6QIK8rKqbj9kgNRJOfwg0=; b=OJwzbq/ipGFOuzeyB2oydYrA1HPsiYoPt0LzeBXY7UC6sgrpVo2IV4jIQAV379C6Op gsWbMYXkHNS6j5Lue4LBs7TcrNEON+Mr0yx+Jqt2H5pi7lwjnC82IithtJNJnVw8VOTQ q5mfSnSQPZo1Bm0xbmL8wbxbDCEa/b4V17C570Z8akEKWRrkqfJeM/ZgjO/20YGCK2Al QGmsZ8n1uy0HYGj9OP511yH9ZZLGzUixqC6qW52+JDSjUCiDMaMihBeq9KyWaluBw5Ru NLworGND6Sv3FbeakwtCGmarLvRqkpPkdStp4QaLD9spXtRZLVUTtdE1/DvGuoJ8CJDC vXxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718231461; x=1718836261; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:feedback-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=HaKXS0ZZbil+kikiY7Uq0U6QIK8rKqbj9kgNRJOfwg0=; b=wZzU7218ZDMfj7YDYfVoEUesS+OdWk/53fmSzVYFyYlsw46Q2RY8qFk+WmLLkt+7Xj qOdvSPxvKMalOr0/rFqiT/J/3Ke7V/Zn7JlK16UYsrVLnw1kAa+a9iyQpKuzAfeuWReZ bPwaPLQvL75Lna8QFMMjfXrIk+DCi4BTg1r87MrDjqSp5l6xIkF/1g1jeGlviWPN0XSL QRGp4DVf7k1xXEbl6hLRIeBvwP/F1IpUOZXt7KmmwsrDInIkdUrpv3eoFhXSwoNKhs3l mI8mNGvgYigapEftLg6XKJ8G9VilMULWQkTOa+nWtIHPJB8QpjrlT1bwh1Ax50u11vbR Unzg== X-Forwarded-Encrypted: i=1; AJvYcCVV9K4qtqkzIjEtrncuPDbAtwq1LASFSA3cfAHJCjxp4FbTEQUjYclmeC1ECpzOLYJeb3acU3wiQqHC9NmOTKcXfUbGtkJQk00iAMr84pVo2B0OPnA= X-Gm-Message-State: AOJu0YwKFgb/2nag/jx/eme5ag16ei5Oo3796Q13e13M6otr4xaXJ35r 2Yux0jnDxZ/iP2CCfxFfzSOLsF2Z43bdttao00vtg3AeTA3JXUhD X-Google-Smtp-Source: AGHT+IE24GnzXvXHctahz7LCplx76fc3qiNipMvkxpU+kgWUnnS/78AStzuLW5X4k22oyxY3TY7sSg== X-Received: by 2002:a05:6214:3a81:b0:6b0:7a61:c69a with SMTP id 6a1803df08f44-6b1b5c07c5dmr41069396d6.53.1718231461421; Wed, 12 Jun 2024 15:31:01 -0700 (PDT) Received: from fauth1-smtp.messagingengine.com (fauth1-smtp.messagingengine.com. [103.168.172.200]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b2a5bf2321sm482416d6.6.2024.06.12.15.31.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 15:31:00 -0700 (PDT) Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfauth.nyi.internal (Postfix) with ESMTP id C53A11200068; Wed, 12 Jun 2024 18:30:59 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Wed, 12 Jun 2024 18:30:59 -0400 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrfeduhedgudduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvvefufffkofgggfestdekredtredttdenucfhrhhomhepuehoqhhunhcu hfgvnhhguceosghoqhhunhdrfhgvnhhgsehgmhgrihhlrdgtohhmqeenucggtffrrghtth gvrhhnpeejtdffueetfeetgfelvdetueeltefgieeiuedttdehuddtleeiheekfeeghfdv veenucffohhmrghinhepghhithhhuhgsrdgtohhmpdhkvghrnhgvlhdrohhrghenucevlh hushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpegsohhquhhnodhm vghsmhhtphgruhhthhhpvghrshhonhgrlhhithihqdeiledvgeehtdeigedqudejjeekhe ehhedvqdgsohhquhhnrdhfvghngheppehgmhgrihhlrdgtohhmsehfihigmhgvrdhnrghm vg X-ME-Proxy: Feedback-ID: iad51458e:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed, 12 Jun 2024 18:30:58 -0400 (EDT) From: Boqun Feng To: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, llvm@lists.linux.dev Cc: Miguel Ojeda , Alex Gaynor , Wedson Almeida Filho , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Alan Stern , Andrea Parri , Will Deacon , Peter Zijlstra , Nicholas Piggin , David Howells , Jade Alglave , Luc Maranget , "Paul E. McKenney" , Akira Yokosawa , Daniel Lustig , Joel Fernandes , Nathan Chancellor , Nick Desaulniers , kent.overstreet@gmail.com, Greg Kroah-Hartman , elver@google.com, Mark Rutland , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Catalin Marinas , torvalds@linux-foundation.org, linux-arm-kernel@lists.infradead.org, linux-fsdevel@vger.kernel.org, Trevor Gross , dakr@redhat.com Subject: [RFC 0/2] Initial LKMM atomics support in Rust Date: Wed, 12 Jun 2024 15:30:23 -0700 Message-ID: <20240612223025.1158537-1-boqun.feng@gmail.com> X-Mailer: git-send-email 2.45.2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240612_153106_184186_3C4ECB7D X-CRM114-Status: GOOD ( 23.41 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi, This is a follow-up of [1]. Thanks for all the inputs from that thread. I use Mark's outline atomic scripts, but make them specific for atomics in Rust. The reason is that I want to use Gary's work [2], and inline atomics if possible in Rust code. My local test can confirm it works: With RUST_LTO_HELPERS=n 224edc: 52800180 mov w0, #0xc // #12 224ee0: 94000000 bl 219640 With RUST_LTO_HELPERS=y 222fd4: 52800189 mov w9, #0xc // #12 222fd8: b8290108 ldadd w9, w8, [x8] Only AtomicI32 (atomic_t) and AtomicI64 (atomic64_t) are added, and for AtomicPtr (atomic pointers) I plan to implement with compile-time selection on either of these two. You can find a branch contains this series and Gray's patchset at: https://github.com/fbq/linux.git dev/rust/atomic-rfc For testing, I randomly picked up some function and inspected the generated code, plus Rust code can use the function document as tests, so I added two tests there. Ideally we should have something similar to lib/atomic64_test.c, but I want to get some feedback on the implementation part first, plus it's just using C functions, so as long as C code passes the tests, it should be fine (famous last words). ARM64 maintainers, I use the following to simulate cases where LSE is configured but not available from hardware: and my tests in a qemu emulated VM passed for both RUST_LTO_HELPERS=n and =y cases. Let me know what I can also do to test this. Notes for people who are working on Rust code and need atomics, my target of this set of APIs is 6.11 or 6.12 (will work hard on it, but no guarantee ;-)). If you are currently using Rust own atomics, it's OK, we can always clean up quickly after this merged. Regards, Boqun [1]: https://lore.kernel.org/rust-for-linux/20240322233838.868874-1-boqun.feng@gmail.com/ [2]: https://lore.kernel.org/rust-for-linux/20240529202817.3641974-1-gary@garyguo.net/ Boqun Feng (2): rust: Introduce atomic API helpers rust: sync: Add atomic support MAINTAINERS | 4 +- arch/arm64/kernel/cpufeature.c | 2 + rust/atomic_helpers.h | 1035 ++++++++++++++++ rust/helpers.c | 2 + rust/kernel/sync.rs | 1 + rust/kernel/sync/atomic.rs | 63 + rust/kernel/sync/atomic/impl.rs | 1375 +++++++++++++++++++++ scripts/atomic/gen-atomics.sh | 2 + scripts/atomic/gen-rust-atomic-helpers.sh | 64 + scripts/atomic/gen-rust-atomic.sh | 136 ++ 10 files changed, 2683 insertions(+), 1 deletion(-) create mode 100644 rust/atomic_helpers.h create mode 100644 rust/kernel/sync/atomic.rs create mode 100644 rust/kernel/sync/atomic/impl.rs create mode 100755 scripts/atomic/gen-rust-atomic-helpers.sh create mode 100755 scripts/atomic/gen-rust-atomic.sh diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 48e7029f1054..99e6e2b2867f 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -1601,6 +1601,8 @@ static bool has_cpuid_feature(const struct arm64_cpu_capabilities *entry, int scope) { u64 val = read_scoped_sysreg(entry, scope); + if (entry->capability == ARM64_HAS_LSE_ATOMICS) + return false; return feature_matches(val, entry); }