From patchwork Mon Mar 17 15:30:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamir Duberstein X-Patchwork-Id: 14019284 Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com [209.85.219.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 081A82459DB; Mon, 17 Mar 2025 15:30:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742225420; cv=none; b=FlSPvyZji2lfjRj962dX69w+TX1W2HxA+fiWV3itEldgw9LwF2qN0xshlXFKcm0P5i17nHpZ610k0o7zKnb4Gh31Mv9OXU7Crw7W0nEOzaVqTUhvZfMr9nO9tSS8H5e9N3aTjpJOdEElE9BDtA90bbVNsGi5qaLm9s1a3sh7tzY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742225420; c=relaxed/simple; bh=1rkakKUwb36yHAuv3YCt5lG31RMltr4Nsg5Cun6at7k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Dt71GJf53Q6mIWfhJ3YF7JJ6/AkQ09HTf49xMF148OX4x7DY/z0qicIHAE24RfjcPKlHdFO1t2uvqNPa1DQ4eYQVeY1LrtMFYoKSMNJv2Ml05u9NOYwd2046fHRRm+HsIGRkoK1WqTzTKjH5lsBzYJGGYCMu9NMP7AmGOvnATJY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Bp/aNoCi; arc=none smtp.client-ip=209.85.219.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Bp/aNoCi" Received: by mail-qv1-f43.google.com with SMTP id 6a1803df08f44-6e8f6970326so40459546d6.0; Mon, 17 Mar 2025 08:30:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742225417; x=1742830217; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=GhDi7jicB3Gv5oqI3TBvIGb8fiLoyX3gf2bLY34vPcA=; b=Bp/aNoCiZhrCxMhPN1mY6Ur7v87SYSL15uILvt12bfGkxvdymI2jJRwsTkv4xA3ogs xR711+++vA3L6CsIqkK3LhEVuyjuX3J/g2V7jwKLsoxmwmHA8XN5f4nOWkqwKywnlm1N Qnbyb+kR8TRydOzFlvCMkeUrUV5KpX+AJ3HJhs6YEtJvLd00yXpcMr2eicbpS6tAq9bj geFeCGk1gET5CXIKDI6d2QNlDobiGhos4cKkNVT7EdXxVx5DfVSMk5I8tb/vbhUksnbQ lmfVsPTJq/LQcKRU3yOuAbBhijnv7mkOdWKNWjkYtbrhdY/jEG80D637MLgXCvoioFmP YYfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742225417; x=1742830217; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GhDi7jicB3Gv5oqI3TBvIGb8fiLoyX3gf2bLY34vPcA=; b=XoOMwoQ7ldLWkxN1Sok3JbFJVeL577MXjR4gSdO1p1Tfs/92ut3LKhtmZahTgv3dj9 I3xu8w3IXa+piJMTeBzhYxa5A3YYO50WvqBQ0LE0w9jeoux8WKvKFimTPSXhBNmAUy59 gY0EVQ8bEcAq28nZWRoPjtf80y0M09/02bWTuQ1hKURz+tZ23O7Kz7sCcUTPqqVbQNc1 MfTVLKI+O4yCYnGHfFY8+CpXBcxk5XuHFSuA6tqD2S1qxg7sUsadk5bw03tpxCw1eXX8 bNPV83dc/dM1ysA53C8Yk5VMRP9+Sd0HyklWPME+e88pf9Dal0frUD+MsTBFN26U8ZeI jBYg== X-Forwarded-Encrypted: i=1; AJvYcCW870YBF9keU9lPnz/Lgm82qr40RenBvCxaPIXQvEsT793SjUhPx0FxPY9sqqEnWW40RbEYN2lf@vger.kernel.org, AJvYcCX4HiQ5vsw25rF4tefPkhEt9VZ2eP1BT+6j382G0SSllGnFdvWh5ofXZcX+E4lcBFbeNg00zq5tAsFT@vger.kernel.org, AJvYcCXJ8HBuQuf+3XjYwuRsXzq0pvp8yAI0hCjEkylFACAikJNheJLrA6XpJvCX2t2Cdj39whnBrahMgjZNw9+t@vger.kernel.org, AJvYcCXiTsTFvH3rBdjyKnO/osebT8ElDDCBV2Fqkbo4Zfpxn5tZf2PMu8pOZG+Hz7xla0PRGdsAzq1LL3IP@vger.kernel.org, AJvYcCXwVEckleyqbIJKkTpMlAn2JM08z1FD4rBMFCI21t+N/JC7jsFORQa4RkTlI4S0IG7FYTTVdqQGU4U3ehlshqjq@vger.kernel.org X-Gm-Message-State: AOJu0Yx5HwCsfC7LlfWg8Eiyca+OTrzHBk9E9eahAUAlt6vVPxcZni5t wDVzN3/FWOB00ZQ9Ba0MBaOWcbeffBsaJg+v6kfmoOZei6L5a9u5 X-Gm-Gg: ASbGncuvPOVXR4KMZMY0YvihZktwfudwiCzLcU5YN1mZpOMkL9XsrFaRrnn6u1LZQgY Oo6XUKNH9gtGhE9VSBw0Vhhx5K/hC4jJVVEZkn9sw+XVVMdmOUydyVSPjWx/ojazNYa/Fw9Mag9 X1sgDgZQMRb7hOWf3DU2eP/KIM7JULfiFG1/soH97HYcl0TjgZqMsdXk6cnNzNkaUTIbdtSalz+ hmxC+KoJBFCHs4JuWS/EFM5WvFHOEIWm/7SHCYUc4EJAunIE8bGK4+mzxHS9Lv3LZAlkjJX17P4 Y4luC8pKjdlOdlktymt2Ai84sqedVVziD8UQhl21PyBil8cP8z+TGceMtvcbyGeu4Aua28D63Hb a6YFPLA== X-Google-Smtp-Source: AGHT+IF6QKQ27zO/djSgLkh3SLlbu4CCHZ6bVaY3V5bdQy4+E/A82ztgFL3TtEYWb5+dRwVxvOIv5Q== X-Received: by 2002:a05:6214:c47:b0:6e6:5f08:e77d with SMTP id 6a1803df08f44-6eaeaa64726mr197312436d6.19.1742225416788; Mon, 17 Mar 2025 08:30:16 -0700 (PDT) Received: from 1.0.0.127.in-addr.arpa ([2600:4041:5be7:7c00:6895:24c6:e898:e320]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6eade34c51fsm55736766d6.109.2025.03.17.08.30.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 08:30:16 -0700 (PDT) From: Tamir Duberstein Date: Mon, 17 Mar 2025 11:30:03 -0400 Subject: [PATCH v9 1/4] rust: move `CStr`'s `Display` to helper struct Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250317-cstr-core-v9-1-51d6cc522f62@gmail.com> References: <20250317-cstr-core-v9-0-51d6cc522f62@gmail.com> In-Reply-To: <20250317-cstr-core-v9-0-51d6cc522f62@gmail.com> To: Michal Rostecki , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Brendan Higgins , David Gow , Rae Moar , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Greg Kroah-Hartman , "Rafael J. Wysocki" , Luis Chamberlain , Russ Weight , FUJITA Tomonori , Rob Herring , Saravana Kannan , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Nathan Chancellor , Nick Desaulniers , Bill Wendling , Justin Stitt , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bjorn Helgaas , Arnd Bergmann Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, dri-devel@lists.freedesktop.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, llvm@lists.linux.dev, linux-pci@vger.kernel.org, Tamir Duberstein X-Mailer: b4 0.15-dev Remove `impl Display for CStr` in preparation for replacing `CStr` with `core::ffi::CStr` which doesn't impl `Display`. Add `CStr::display` returning a helper struct to replace the lost functionality; this matches the APIs exposed by `std::ffi::OSstr` and `std::path::Path` for printing non-Unicode data. Signed-off-by: Tamir Duberstein --- rust/kernel/kunit.rs | 9 +++++--- rust/kernel/str.rs | 63 ++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs index 824da0e9738a..630b947c708c 100644 --- a/rust/kernel/kunit.rs +++ b/rust/kernel/kunit.rs @@ -56,6 +56,7 @@ macro_rules! kunit_assert { break 'out; } + static NAME: &'static $crate::str::CStr = $crate::c_str!($name); static FILE: &'static $crate::str::CStr = $crate::c_str!($file); static LINE: i32 = core::line!() as i32 - $diff; static CONDITION: &'static $crate::str::CStr = $crate::c_str!(stringify!($condition)); @@ -71,11 +72,13 @@ macro_rules! kunit_assert { // // This mimics KUnit's failed assertion format. $crate::kunit::err(format_args!( - " # {}: ASSERTION FAILED at {FILE}:{LINE}\n", - $name + " # {NAME}: ASSERTION FAILED at {FILE}:{LINE}\n", + NAME = NAME.display(), + FILE = FILE.display(), )); $crate::kunit::err(format_args!( - " Expected {CONDITION} to be true, but is false\n" + " Expected {CONDITION} to be true, but is false\n", + CONDITION = CONDITION.display(), )); $crate::kunit::err(format_args!( " Failure not reported to KUnit since this is a non-KUnit task\n" diff --git a/rust/kernel/str.rs b/rust/kernel/str.rs index 28e2201604d6..50eb4266047a 100644 --- a/rust/kernel/str.rs +++ b/rust/kernel/str.rs @@ -376,27 +376,66 @@ pub fn to_ascii_uppercase(&self) -> Result { Ok(s) } -} -impl fmt::Display for CStr { - /// Formats printable ASCII characters, escaping the rest. + /// Returns an object that implements [`Display`] for safely printing a [`CStr`] that may + /// contain non-Unicode data. If you would like an implementation which escapes the [`CStr`] + /// please use [`Debug`] instead. + /// + /// [`Display`]: fmt::Display + /// [`Debug`]: fmt::Debug + /// + /// # Examples /// /// ``` /// # use kernel::c_str; /// # use kernel::fmt; - /// # use kernel::str::CStr; /// # use kernel::str::CString; /// let penguin = c_str!(" From patchwork Mon Mar 17 15:30:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamir Duberstein X-Patchwork-Id: 14019285 Received: from mail-qv1-f45.google.com (mail-qv1-f45.google.com [209.85.219.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A277E24A055; Mon, 17 Mar 2025 15:30:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742225424; cv=none; b=bOQev19TJ7RRWVIAJgCDlQLwXyEah2q2CEUbv4c54vub9EZmuiUs/HRyilxqEKkCXW0IRrVtR+7LufJmZwWBPdI3HwOhtR7I7BQUbFvUu+G5xIJ8z7038MHtb4oR92JRnnQRaprnLDzsc3hug1WPLg/mJW2/eXeHDlhj/OZOTws= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742225424; c=relaxed/simple; bh=gUgKtPf+gp3toJxksOt2xYBdi517s6CrIkbQOge7Zg4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Cbt9eGOz/uHXvFsIHeNMdauWSGodKs3E4sNW5n+ebjEtjoVQvvbHIfYg5qc5/LL5tO0qBRmO0qAe54WMM5H5v9Noljc1rYWNB0M5z/mUIz1FqxQRyW1GGVewKUipBfND5J6OUikKsbvgrYm67bOlmi5wlGvlH+bLvA9DHbt15HA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GGPMFE/V; arc=none smtp.client-ip=209.85.219.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GGPMFE/V" Received: by mail-qv1-f45.google.com with SMTP id 6a1803df08f44-6e8f05acc13so51920996d6.2; Mon, 17 Mar 2025 08:30:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742225419; x=1742830219; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=X9k3CrvsBwVKLSsJegpaCIRHYQUzIcHt/dZ/Hy2my4Q=; b=GGPMFE/VksiW6vb4xvZIpVHM2FCZbrypzuOo2O8eN7eT8y8z+HgDzqPhZ+cOzSMIW/ TyrG8c8Rzl9skwZWSUZsxDwFa2r/A+y9WZ3aG9kqinqDkAgqQbu91a6B6nQq2FVqm3fn Mep/KaV/Qwd8pyCXAK0WWLFUywrjm5nZWZMm7MtdXpWByC+cq6zyUppnbijWe531YniF 2HM9omSLtZesDNntbmfTw7DsVMyOWQd2v9joQr3OhVKK+k8Mj3iLZ9AOip41pcuX2J3u WqRT98pzTj99hyYfJNpGaYZkOastFHJbSHmNsIthP4+6mKzDbKJt7WcBYtEBzhurA9cP 02yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742225419; x=1742830219; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=X9k3CrvsBwVKLSsJegpaCIRHYQUzIcHt/dZ/Hy2my4Q=; b=aeZNmNKsDq3+Ac4qEwmCZAQE9D19joY2j2fjeet29zjkBVvzwEE9UgRDwwNukimNy1 GoQBAsWAoi8HpvyhQM4caNU6ZYSKEg1/MmU9aZ8ghL4opBvd/oxNgszMp2CfgmfZIqwx LMgviKbTnEtujUu732zX+XlrTNoUslFtEQsnCw58IViC/knSm4KSze7GkI+NiDbxbxnp NLGDGPlqcpYwVMcvIBR0yyZ7+gzVxAyiYRyNRXyQCJgo4y2V0p2Z4F3nt2z0HqQNg9Hu UQWOGkgOcYp8xCJKR38YZJVZZ+PVJJoosXFezS+mrzKxe1wm/nM6VPPmJ/CYLwgdXFw+ Hwwg== X-Forwarded-Encrypted: i=1; AJvYcCVYOD2Bp/eGPcJ0UOLcwyLZasywK6UeDs93DSY6SAj8EO52uKG1mzoHL8JWBqZQgCxIaVWaxU17lK+B4uNcOvaV@vger.kernel.org, AJvYcCWRkax78Gal+jh6puazchjy5pt8m4FgVpvj5kqo5Vd+qDMRQjKj0pjdXoJuXc542Lvj4GfvEUIr5GQGCamB@vger.kernel.org, AJvYcCX9a47OAFPkOYK6yuSmqG7VfRYemaKqrp1P5T0QIk91r6pTgwvmhAKTJDU3/+txGw6hqDsTazQU@vger.kernel.org, AJvYcCXCHcTkm5q5EaWwxGP2DES3imWBwhkqs5XE6kio8ulxXXncj+kIuO5jdxomlHlOtjC5JFcUe6FfK+rw@vger.kernel.org, AJvYcCXzLk+6pOFQVroI/lro/WAz7r57AuM2+AqS16IhKhG1+QAmdsYiTGnXuhfc7amMe+9yjcdLYRJT1hjK@vger.kernel.org X-Gm-Message-State: AOJu0YzEUfwlsd2lMKwMjWPRrHbuSWxhaMnzfisSsCQFF916lxJG+lgI FU+bLTCMTBIC9FIIWANe7lWyDkQbEp5dI155RxG2PMWg8jdmKP+u X-Gm-Gg: ASbGncudtT13bry3GpgpLhFSyEzmlFssPtQEnm3pRF6jJNDWeJtGyEyUsPeHqWUchIy kBfLmZ3ivu2JQs1tAmFYaqd73fm+bkiXfx+HQT8GPhE9BPZFw7OPgbEeImU2FHdcBQ/JLxkjHCK +2Kg+afRbzkBvADROEska6GIXuFluKFAehNtJZghRnRhXFrMUWfGhhi8PEfJUKeFmuVcv/wOjLo pMXHqxwtvjTmTna6uhA1Q00KlvCiyEBxMYDQzc06TduOUwG+dMIMX1TrmlIGe4+pq+zQtnxEZ6U 6TAtfYEOo3/9WePi7sy+lDyJQc93kflJlzkZdTJzl1jXQZy0YqJEMcJDJ88krVbL1txyQ2YIqNB rYpcwFA== X-Google-Smtp-Source: AGHT+IEGZ0NWSlF63k4qzVGT7Fgq22uYO43K8byZGuJY4PGy+ha6FQf7Ei9E6N/mGH42x39QoW4qzg== X-Received: by 2002:a05:6214:194c:b0:6d8:846b:cd8d with SMTP id 6a1803df08f44-6eaeaa9afcbmr190487576d6.30.1742225419160; Mon, 17 Mar 2025 08:30:19 -0700 (PDT) Received: from 1.0.0.127.in-addr.arpa ([2600:4041:5be7:7c00:6895:24c6:e898:e320]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6eade34c51fsm55736766d6.109.2025.03.17.08.30.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 08:30:18 -0700 (PDT) From: Tamir Duberstein Date: Mon, 17 Mar 2025 11:30:04 -0400 Subject: [PATCH v9 2/4] rust: replace `CStr` with `core::ffi::CStr` Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250317-cstr-core-v9-2-51d6cc522f62@gmail.com> References: <20250317-cstr-core-v9-0-51d6cc522f62@gmail.com> In-Reply-To: <20250317-cstr-core-v9-0-51d6cc522f62@gmail.com> To: Michal Rostecki , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Brendan Higgins , David Gow , Rae Moar , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Greg Kroah-Hartman , "Rafael J. Wysocki" , Luis Chamberlain , Russ Weight , FUJITA Tomonori , Rob Herring , Saravana Kannan , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Nathan Chancellor , Nick Desaulniers , Bill Wendling , Justin Stitt , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bjorn Helgaas , Arnd Bergmann Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, dri-devel@lists.freedesktop.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, llvm@lists.linux.dev, linux-pci@vger.kernel.org, Tamir Duberstein X-Mailer: b4 0.15-dev `std::ffi::CStr` was moved to `core::ffi::CStr` in Rust 1.64. Replace `kernel::str::CStr` with `core::ffi::CStr` now that we can. C-String literals were added in Rust 1.77. Opportunistically replace instances of `kernel::c_str!` with C-String literals where other code changes were already necessary; the rest will be done in a later commit. Signed-off-by: Tamir Duberstein --- drivers/gpu/drm/drm_panic_qr.rs | 2 +- rust/kernel/device.rs | 4 +- rust/kernel/error.rs | 4 +- rust/kernel/firmware.rs | 8 +- rust/kernel/kunit.rs | 4 +- rust/kernel/miscdevice.rs | 2 +- rust/kernel/net/phy.rs | 2 +- rust/kernel/of.rs | 2 +- rust/kernel/prelude.rs | 5 +- rust/kernel/seq_file.rs | 4 +- rust/kernel/str.rs | 432 +++++++++++----------------------------- rust/kernel/sync/condvar.rs | 2 +- rust/kernel/sync/lock.rs | 2 +- rust/kernel/sync/lock/global.rs | 2 +- 14 files changed, 146 insertions(+), 329 deletions(-) diff --git a/drivers/gpu/drm/drm_panic_qr.rs b/drivers/gpu/drm/drm_panic_qr.rs index ecd87e8ffe05..fa55547a1535 100644 --- a/drivers/gpu/drm/drm_panic_qr.rs +++ b/drivers/gpu/drm/drm_panic_qr.rs @@ -960,7 +960,7 @@ fn draw_all(&mut self, data: impl Iterator) { // nul-terminated string. let url_cstr: &CStr = unsafe { CStr::from_char_ptr(url) }; let segments = &[ - &Segment::Binary(url_cstr.as_bytes()), + &Segment::Binary(url_cstr.to_bytes()), &Segment::Numeric(&data_slice[0..data_len]), ]; match EncodedMsg::new(segments, tmp_slice) { diff --git a/rust/kernel/device.rs b/rust/kernel/device.rs index db2d9658ba47..df4bfa5f51ea 100644 --- a/rust/kernel/device.rs +++ b/rust/kernel/device.rs @@ -12,7 +12,7 @@ use core::{fmt, ptr}; #[cfg(CONFIG_PRINTK)] -use crate::c_str; +use crate::str::CStrExt as _; /// A reference-counted device. /// @@ -176,7 +176,7 @@ unsafe fn printk(&self, klevel: &[u8], msg: fmt::Arguments<'_>) { bindings::_dev_printk( klevel as *const _ as *const crate::ffi::c_char, self.as_raw(), - c_str!("%pA").as_char_ptr(), + c"%pA".as_char_ptr(), &msg as *const _ as *const crate::ffi::c_void, ) }; diff --git a/rust/kernel/error.rs b/rust/kernel/error.rs index 376f6a6ae5e3..58157ec9403c 100644 --- a/rust/kernel/error.rs +++ b/rust/kernel/error.rs @@ -163,6 +163,8 @@ pub fn name(&self) -> Option<&'static CStr> { if ptr.is_null() { None } else { + use crate::str::CStrExt as _; + // SAFETY: The string returned by `errname` is static and `NUL`-terminated. Some(unsafe { CStr::from_char_ptr(ptr) }) } @@ -187,7 +189,7 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { Some(name) => f .debug_tuple( // SAFETY: These strings are ASCII-only. - unsafe { core::str::from_utf8_unchecked(name) }, + unsafe { core::str::from_utf8_unchecked(name.to_bytes()) }, ) .finish(), } diff --git a/rust/kernel/firmware.rs b/rust/kernel/firmware.rs index c5162fdc95ff..c18b75fc672e 100644 --- a/rust/kernel/firmware.rs +++ b/rust/kernel/firmware.rs @@ -4,7 +4,13 @@ //! //! C header: [`include/linux/firmware.h`](srctree/include/linux/firmware.h) -use crate::{bindings, device::Device, error::Error, error::Result, str::CStr}; +use crate::{ + bindings, + device::Device, + error::Error, + error::Result, + str::{CStr, CStrExt as _}, +}; use core::ptr::NonNull; /// # Invariants diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs index 630b947c708c..d858757aeace 100644 --- a/rust/kernel/kunit.rs +++ b/rust/kernel/kunit.rs @@ -101,12 +101,12 @@ unsafe impl Sync for Location {} unsafe impl Sync for UnaryAssert {} static LOCATION: Location = Location($crate::bindings::kunit_loc { - file: FILE.as_char_ptr(), + file: $crate::str::as_char_ptr_in_const_context(FILE), line: LINE, }); static ASSERTION: UnaryAssert = UnaryAssert($crate::bindings::kunit_unary_assert { assert: $crate::bindings::kunit_assert {}, - condition: CONDITION.as_char_ptr(), + condition: $crate::str::as_char_ptr_in_const_context(CONDITION), expected_true: true, }); diff --git a/rust/kernel/miscdevice.rs b/rust/kernel/miscdevice.rs index e14433b2ab9d..78c150270080 100644 --- a/rust/kernel/miscdevice.rs +++ b/rust/kernel/miscdevice.rs @@ -34,7 +34,7 @@ pub const fn into_raw(self) -> bindings::miscdevice { // SAFETY: All zeros is valid for this C type. let mut result: bindings::miscdevice = unsafe { MaybeUninit::zeroed().assume_init() }; result.minor = bindings::MISC_DYNAMIC_MINOR as _; - result.name = self.name.as_char_ptr(); + result.name = crate::str::as_char_ptr_in_const_context(self.name); result.fops = create_vtable::(); result } diff --git a/rust/kernel/net/phy.rs b/rust/kernel/net/phy.rs index a59469c785e3..652e060e47bd 100644 --- a/rust/kernel/net/phy.rs +++ b/rust/kernel/net/phy.rs @@ -504,7 +504,7 @@ unsafe impl Sync for DriverVTable {} pub const fn create_phy_driver() -> DriverVTable { // INVARIANT: All the fields of `struct phy_driver` are initialized properly. DriverVTable(Opaque::new(bindings::phy_driver { - name: T::NAME.as_char_ptr().cast_mut(), + name: crate::str::as_char_ptr_in_const_context(T::NAME).cast_mut(), flags: T::FLAGS, phy_id: T::PHY_DEVICE_ID.id, phy_id_mask: T::PHY_DEVICE_ID.mask_as_int(), diff --git a/rust/kernel/of.rs b/rust/kernel/of.rs index 04f2d8ef29cb..12ea65df46de 100644 --- a/rust/kernel/of.rs +++ b/rust/kernel/of.rs @@ -29,7 +29,7 @@ fn index(&self) -> usize { impl DeviceId { /// Create a new device id from an OF 'compatible' string. pub const fn new(compatible: &'static CStr) -> Self { - let src = compatible.as_bytes_with_nul(); + let src = compatible.to_bytes_with_nul(); // Replace with `bindings::of_device_id::default()` once stabilized for `const`. // SAFETY: FFI type is valid to be zero-initialized. let mut of: bindings::of_device_id = unsafe { core::mem::zeroed() }; diff --git a/rust/kernel/prelude.rs b/rust/kernel/prelude.rs index baa774a351ce..97a66d29f48b 100644 --- a/rust/kernel/prelude.rs +++ b/rust/kernel/prelude.rs @@ -36,7 +36,10 @@ pub use super::error::{code::*, Error, Result}; -pub use super::{str::CStr, ThisModule}; +pub use super::{ + str::{CStr, CStrExt as _}, + ThisModule, +}; pub use super::init::InPlaceInit; diff --git a/rust/kernel/seq_file.rs b/rust/kernel/seq_file.rs index 4c03881a9eba..2ee298e2a2b3 100644 --- a/rust/kernel/seq_file.rs +++ b/rust/kernel/seq_file.rs @@ -4,7 +4,7 @@ //! //! C header: [`include/linux/seq_file.h`](srctree/include/linux/seq_file.h) -use crate::{bindings, c_str, types::NotThreadSafe, types::Opaque}; +use crate::{bindings, str::CStrExt as _, types::NotThreadSafe, types::Opaque}; /// A utility for generating the contents of a seq file. #[repr(transparent)] @@ -35,7 +35,7 @@ pub fn call_printf(&self, args: core::fmt::Arguments<'_>) { unsafe { bindings::seq_printf( self.inner.get(), - c_str!("%pA").as_char_ptr(), + c"%pA".as_char_ptr(), &args as *const _ as *const crate::ffi::c_void, ); } diff --git a/rust/kernel/str.rs b/rust/kernel/str.rs index 50eb4266047a..53d1f2c26958 100644 --- a/rust/kernel/str.rs +++ b/rust/kernel/str.rs @@ -4,7 +4,7 @@ use crate::alloc::{flags::*, AllocError, KVec}; use core::fmt::{self, Write}; -use core::ops::{self, Deref, DerefMut, Index}; +use core::ops::{Deref, DerefMut}; use crate::error::{code::*, Error}; @@ -40,11 +40,11 @@ impl fmt::Display for BStr { /// # use kernel::{fmt, b_str, str::{BStr, CString}}; /// let ascii = b_str!("Hello, BStr!"); /// let s = CString::try_from_fmt(fmt!("{}", ascii))?; - /// assert_eq!(s.as_bytes(), "Hello, BStr!".as_bytes()); + /// assert_eq!(s.to_bytes(), "Hello, BStr!".as_bytes()); /// /// let non_ascii = b_str!(" From patchwork Mon Mar 17 15:30:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamir Duberstein X-Patchwork-Id: 14019286 Received: from mail-qk1-f175.google.com (mail-qk1-f175.google.com [209.85.222.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 090B724BBF2; Mon, 17 Mar 2025 15:30:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742225425; cv=none; b=aNwma7A+lPuqIv9CUG0jzslIs0WBqTXd266XbQlvbx76mq7UhOto5maNfN0mwn8WANqjs+PbQXQIOCy3qw5UNAC9b12mo1bOjJRcJ1xZAxH3s7UKcdL/c7gQFcy2KoUWe7tYh+9OR65CYEgA4nlR7gqNrTkgTUGFtvdem1gpHDE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742225425; c=relaxed/simple; bh=LwEg/qXS79xZ2DfCTlSj6DOddkHANYAxjhUxFUZt/HA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lbstKF5TTrx1TqNM5MWCjZ5yk+izCivQcPVO/6JK+xJRRJlG7Sxnc6lmfbcpBv41sfbALrGO4//d7W94Xa4J3KcL5QIQu8D3JEilwVa/aLX24MbjdCv9meUyBtDsjuXQCdQqGDElWEMooi+sPL383UJhl0YcebrV4Gk1eSQkKf4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nY06gWRp; arc=none smtp.client-ip=209.85.222.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nY06gWRp" Received: by mail-qk1-f175.google.com with SMTP id af79cd13be357-7c54f67db99so486678085a.1; Mon, 17 Mar 2025 08:30:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742225422; x=1742830222; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=z/+hgAgKrFtvgp9dnihutL5Y7eaYtGSxvU+aCTPahrk=; b=nY06gWRpa72IpoFB4TrFNS6nF7W6xPegMj9QdmJvv8jDN5dCf2I+iiEvAQFqTOHaFj JUrQoYEqPQbm/6lNdzA5qTWWkQUdl3p33LdD7iy8H8lJSCvFX/PtbFPm1GOhzRZC8P2U wsZgvTkF8Bdh2W5spYikBMGGu81fjwz7/Zijvg3nDhw8QuOKxCnsTaTkjfL/eVipAX41 Mb7/3T5psAhhThkFbagR34L6UPITqA2+i8dRv7+/sLuFBCRayC6L8FmBVjeO5UauEpv1 nbN/FJ/xF2ZLyNRYVEFfHvTv7qnv0AWz0U2onS6kbM3H8IlI2EMeMwX6yAsf//pfmvmZ s0BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742225422; x=1742830222; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=z/+hgAgKrFtvgp9dnihutL5Y7eaYtGSxvU+aCTPahrk=; b=CtG1Ivv0aFJ+PPQZkDwA78vosTJUshj+iYBDlUknskt9ucDExjO8+y/n8OLWnlP+1w d0Z6FIq8boNl0rhdW++2xzHcrD4N3b91fSMfzELIoX9QGI0qCOmKiiLUnweo27nNQWHS 5UFckPNrcE8lUW0a6F3kx42YseLFS09j0gNPqjI6M7jdQYY6ekbf63MyWE1elSECJMD7 bT202zUv87wStTWDdOwNYxMCzJHF8V09qslj9fDei2fiZGzuwvsQOGvyoh3WUrXhqG0G 0R7LyHvgywTUPX0dnMzCRrJ1meTMe+O1W3NfTLfIzsscr9500ECnUI7K5xu7uPdQ4ZW6 EP3w== X-Forwarded-Encrypted: i=1; AJvYcCUOtuk9k9QUoUMfjNRTOOQdjgFB8fZKcNXwIY706ObTbxUDeY8wejFxCTJT86VN2/ne8p4G1caGmbx5mLOCFUyG@vger.kernel.org, AJvYcCVUH73tKiOoI7VXFUccLZmnwUYrKQFmTQT3orXAaKkMGRd7Y+AEE4ncz1raSIm2VDiDckaFpVT7@vger.kernel.org, AJvYcCVn9dyzp5hUjXH2J4GPJHgAoJeipdmUk1+O0Lrks/2JGsDsfYdy0IcsYRLEYd/zA3dD9fa8d7fdmuztDlda@vger.kernel.org, AJvYcCWKe8hUv/o2Uprwuj1EdQG/LF7VxTJ4VX9nEMQf7jrPCj6wfR8FnPViNe/EayWWW+AOL54eKbBat5lW@vger.kernel.org, AJvYcCWNvwU+MUGKAvF2PNPAlxbOss7r0ISbnRhiKpoLq0xr9HIQnlS7aAhNTNw64+sIZKdraNaYsHiGD9Eo@vger.kernel.org X-Gm-Message-State: AOJu0Yx+tc86om8QLN/UkXidXZMryNPsXv1ZGN4MgZQlyHPrqgQdO7Tn 2EZ2F921wTy3euiY0tEwj5rc/9ZpVZ+9PhOs+iavGXFLSQPojWjw X-Gm-Gg: ASbGncuW+63RJGthBmHVqVwv1vpuYuEJUB49sSkS9S+s9A9gnXBehdl4eH3UaRtRbBl RgIKphG/FL4ctTS/0mgXAxLudIgtUPPxReywkVNcLcuHLcVlKQjmvGqM6kU80CyqQinBS5azV2H 6JJdGWrja4CA4mA6eZN5XSLdUh9iAmWLYnBHlmDzUwm+kMq5OcNdavbrJAvDx0ZnfJ8PUWDfSQS lxDio7nm2LA1Otixi9WKHFdooEKGGCiqZyntwCYQyWbkcHSyxJRl0eJrcDLXO2DAD3QWm92HsR4 GwRTk+wsRoUqboEzHm+9tM0rce7ARR1qtLGWD1oNMV4P3aghEpaitKUcxaDH84ddmUJ76uefpLI Zp7iR6+ztUWD+dHrM X-Google-Smtp-Source: AGHT+IHKCLJhzaRz6vWcZqN4ET6OKjd151Da0KrksecWD1rMm7euzj3nlV70nWQ8UJEgIz5m5PJZHw== X-Received: by 2002:a05:6214:319a:b0:6d9:ac3:e730 with SMTP id 6a1803df08f44-6eadded9779mr267368586d6.5.1742225421598; Mon, 17 Mar 2025 08:30:21 -0700 (PDT) Received: from 1.0.0.127.in-addr.arpa ([2600:4041:5be7:7c00:6895:24c6:e898:e320]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6eade34c51fsm55736766d6.109.2025.03.17.08.30.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 08:30:21 -0700 (PDT) From: Tamir Duberstein Date: Mon, 17 Mar 2025 11:30:05 -0400 Subject: [PATCH v9 3/4] rust: replace `kernel::c_str!` with C-Strings Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250317-cstr-core-v9-3-51d6cc522f62@gmail.com> References: <20250317-cstr-core-v9-0-51d6cc522f62@gmail.com> In-Reply-To: <20250317-cstr-core-v9-0-51d6cc522f62@gmail.com> To: Michal Rostecki , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Brendan Higgins , David Gow , Rae Moar , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Greg Kroah-Hartman , "Rafael J. Wysocki" , Luis Chamberlain , Russ Weight , FUJITA Tomonori , Rob Herring , Saravana Kannan , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Nathan Chancellor , Nick Desaulniers , Bill Wendling , Justin Stitt , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bjorn Helgaas , Arnd Bergmann Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, dri-devel@lists.freedesktop.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, llvm@lists.linux.dev, linux-pci@vger.kernel.org, Tamir Duberstein X-Mailer: b4 0.15-dev C-String literals were added in Rust 1.77. Replace instances of `kernel::c_str!` with C-String literals where possible and rename `kernel::c_str!` to `c_str_avoid_literals` to clarify its intended use. Closes: https://github.com/Rust-for-Linux/linux/issues/1075 Signed-off-by: Tamir Duberstein --- drivers/net/phy/ax88796b_rust.rs | 7 +++--- drivers/net/phy/qt2025.rs | 5 ++--- rust/kernel/devres.rs | 2 +- rust/kernel/firmware.rs | 4 ++-- rust/kernel/kunit.rs | 7 +++--- rust/kernel/net/phy.rs | 6 ++--- rust/kernel/platform.rs | 4 ++-- rust/kernel/str.rs | 43 ++++++++++++++++++++++-------------- rust/kernel/sync.rs | 4 ++-- rust/kernel/sync/lock/global.rs | 3 ++- rust/macros/module.rs | 2 +- samples/rust/rust_driver_faux.rs | 4 ++-- samples/rust/rust_driver_pci.rs | 4 ++-- samples/rust/rust_driver_platform.rs | 4 ++-- samples/rust/rust_misc_device.rs | 3 +-- 15 files changed, 55 insertions(+), 47 deletions(-) diff --git a/drivers/net/phy/ax88796b_rust.rs b/drivers/net/phy/ax88796b_rust.rs index bc73ebccc2aa..2d24628a4e58 100644 --- a/drivers/net/phy/ax88796b_rust.rs +++ b/drivers/net/phy/ax88796b_rust.rs @@ -5,7 +5,6 @@ //! //! C version of this driver: [`drivers/net/phy/ax88796b.c`](./ax88796b.c) use kernel::{ - c_str, net::phy::{self, reg::C22, DeviceId, Driver}, prelude::*, uapi, @@ -41,7 +40,7 @@ fn asix_soft_reset(dev: &mut phy::Device) -> Result { #[vtable] impl Driver for PhyAX88772A { const FLAGS: u32 = phy::flags::IS_INTERNAL; - const NAME: &'static CStr = c_str!("Asix Electronics AX88772A"); + const NAME: &'static CStr = c"Asix Electronics AX88772A"; const PHY_DEVICE_ID: DeviceId = DeviceId::new_with_exact_mask(0x003b1861); // AX88772A is not working properly with some old switches (NETGEAR EN 108TP): @@ -105,7 +104,7 @@ fn link_change_notify(dev: &mut phy::Device) { #[vtable] impl Driver for PhyAX88772C { const FLAGS: u32 = phy::flags::IS_INTERNAL; - const NAME: &'static CStr = c_str!("Asix Electronics AX88772C"); + const NAME: &'static CStr = c"Asix Electronics AX88772C"; const PHY_DEVICE_ID: DeviceId = DeviceId::new_with_exact_mask(0x003b1881); fn suspend(dev: &mut phy::Device) -> Result { @@ -125,7 +124,7 @@ fn soft_reset(dev: &mut phy::Device) -> Result { #[vtable] impl Driver for PhyAX88796B { - const NAME: &'static CStr = c_str!("Asix Electronics AX88796B"); + const NAME: &'static CStr = c"Asix Electronics AX88796B"; const PHY_DEVICE_ID: DeviceId = DeviceId::new_with_model_mask(0x003b1841); fn soft_reset(dev: &mut phy::Device) -> Result { diff --git a/drivers/net/phy/qt2025.rs b/drivers/net/phy/qt2025.rs index 520daeb42089..78f52efd13e3 100644 --- a/drivers/net/phy/qt2025.rs +++ b/drivers/net/phy/qt2025.rs @@ -9,7 +9,6 @@ //! //! The QT2025 PHY integrates an Intel 8051 micro-controller. -use kernel::c_str; use kernel::error::code; use kernel::firmware::Firmware; use kernel::net::phy::{ @@ -36,7 +35,7 @@ #[vtable] impl Driver for PhyQT2025 { - const NAME: &'static CStr = c_str!("QT2025 10Gpbs SFP+"); + const NAME: &'static CStr = c"QT2025 10Gpbs SFP+"; const PHY_DEVICE_ID: phy::DeviceId = phy::DeviceId::new_with_exact_mask(0x0043a400); fn probe(dev: &mut phy::Device) -> Result<()> { @@ -69,7 +68,7 @@ fn probe(dev: &mut phy::Device) -> Result<()> { // The micro-controller will start running from the boot ROM. dev.write(C45::new(Mmd::PCS, 0xe854), 0x00c0)?; - let fw = Firmware::request(c_str!("qt2025-2.0.3.3.fw"), dev.as_ref())?; + let fw = Firmware::request(c"qt2025-2.0.3.3.fw", dev.as_ref())?; if fw.data().len() > SZ_16K + SZ_8K { return Err(code::EFBIG); } diff --git a/rust/kernel/devres.rs b/rust/kernel/devres.rs index 942376f6f3af..68af33ca2f25 100644 --- a/rust/kernel/devres.rs +++ b/rust/kernel/devres.rs @@ -45,7 +45,7 @@ struct DevresInner { /// # Example /// /// ```no_run -/// # use kernel::{bindings, c_str, device::Device, devres::Devres, io::{Io, IoRaw}}; +/// # use kernel::{bindings, device::Device, devres::Devres, io::{Io, IoRaw}}; /// # use core::ops::Deref; /// /// // See also [`pci::Bar`] for a real example. diff --git a/rust/kernel/firmware.rs b/rust/kernel/firmware.rs index c18b75fc672e..70449571aea6 100644 --- a/rust/kernel/firmware.rs +++ b/rust/kernel/firmware.rs @@ -46,13 +46,13 @@ fn request_nowarn() -> Self { /// # Examples /// /// ```no_run -/// # use kernel::{c_str, device::Device, firmware::Firmware}; +/// # use kernel::{device::Device, firmware::Firmware}; /// /// # fn no_run() -> Result<(), Error> { /// # // SAFETY: *NOT* safe, just for the example to get an `ARef` instance /// # let dev = unsafe { Device::get_device(core::ptr::null_mut()) }; /// -/// let fw = Firmware::request(c_str!("path/to/firmware.bin"), &dev)?; +/// let fw = Firmware::request(c"path/to/firmware.bin", &dev)?; /// let blob = fw.data(); /// /// # Ok(()) diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs index d858757aeace..527794dcc439 100644 --- a/rust/kernel/kunit.rs +++ b/rust/kernel/kunit.rs @@ -56,10 +56,11 @@ macro_rules! kunit_assert { break 'out; } - static NAME: &'static $crate::str::CStr = $crate::c_str!($name); - static FILE: &'static $crate::str::CStr = $crate::c_str!($file); + static NAME: &'static $crate::str::CStr = $crate::c_str_avoid_literals!($name); + static FILE: &'static $crate::str::CStr = $crate::c_str_avoid_literals!($file); static LINE: i32 = core::line!() as i32 - $diff; - static CONDITION: &'static $crate::str::CStr = $crate::c_str!(stringify!($condition)); + static CONDITION: &'static $crate::str::CStr = + $crate::c_str_avoid_literals!(stringify!($condition)); // SAFETY: FFI call without safety requirements. let kunit_test = unsafe { $crate::bindings::kunit_get_current_test() }; diff --git a/rust/kernel/net/phy.rs b/rust/kernel/net/phy.rs index 652e060e47bd..8129419a3931 100644 --- a/rust/kernel/net/phy.rs +++ b/rust/kernel/net/phy.rs @@ -780,7 +780,6 @@ const fn as_int(&self) -> u32 { /// /// ``` /// # mod module_phy_driver_sample { -/// use kernel::c_str; /// use kernel::net::phy::{self, DeviceId}; /// use kernel::prelude::*; /// @@ -799,7 +798,7 @@ const fn as_int(&self) -> u32 { /// /// #[vtable] /// impl phy::Driver for PhySample { -/// const NAME: &'static CStr = c_str!("PhySample"); +/// const NAME: &'static CStr = c"PhySample"; /// const PHY_DEVICE_ID: phy::DeviceId = phy::DeviceId::new_with_exact_mask(0x00000001); /// } /// # } @@ -808,7 +807,6 @@ const fn as_int(&self) -> u32 { /// This expands to the following code: /// /// ```ignore -/// use kernel::c_str; /// use kernel::net::phy::{self, DeviceId}; /// use kernel::prelude::*; /// @@ -828,7 +826,7 @@ const fn as_int(&self) -> u32 { /// /// #[vtable] /// impl phy::Driver for PhySample { -/// const NAME: &'static CStr = c_str!("PhySample"); +/// const NAME: &'static CStr = c"PhySample"; /// const PHY_DEVICE_ID: phy::DeviceId = phy::DeviceId::new_with_exact_mask(0x00000001); /// } /// diff --git a/rust/kernel/platform.rs b/rust/kernel/platform.rs index 1297f5292ba9..474f8cb4587b 100644 --- a/rust/kernel/platform.rs +++ b/rust/kernel/platform.rs @@ -120,7 +120,7 @@ macro_rules! module_platform_driver { /// # Example /// ///``` -/// # use kernel::{bindings, c_str, of, platform}; +/// # use kernel::{bindings, of, platform}; /// /// struct MyDriver; /// @@ -129,7 +129,7 @@ macro_rules! module_platform_driver { /// MODULE_OF_TABLE, /// ::IdInfo, /// [ -/// (of::DeviceId::new(c_str!("test,device")), ()) +/// (of::DeviceId::new(c"test,device"), ()) /// ] /// ); /// diff --git a/rust/kernel/str.rs b/rust/kernel/str.rs index 53d1f2c26958..f1b35fa5823a 100644 --- a/rust/kernel/str.rs +++ b/rust/kernel/str.rs @@ -225,14 +225,13 @@ pub trait CStrExt { /// # Examples /// /// ``` - /// # use kernel::c_str; /// # use kernel::fmt; /// # use kernel::str::CString; - /// let penguin = c_str!(" From patchwork Mon Mar 17 15:30:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamir Duberstein X-Patchwork-Id: 14019287 Received: from mail-qv1-f53.google.com (mail-qv1-f53.google.com [209.85.219.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 589F124C062; Mon, 17 Mar 2025 15:30:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742225427; cv=none; b=QbTbB5phFaCjMJNvbDkiBiX5ibq97w4jxhcdyelvpqGjolgxKAEK6hZAwOtOgO3KWQCZakA7nUr2UwMuBZL4nr7A/504Tda1PWzs87F5kKT6loE4Yuo53l4kmzBgQRICvcJ6I07vJAQI968IxwayHXUOCZ94kQZREyiZ7qZndns= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742225427; c=relaxed/simple; bh=d7Rz7cuLovyGVvrtYrCOPM9t8j0m/GRderePkZNlcPI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iTm7GYSSOe2ms5tGz+6jqhPd5A6sLvuAW/09ZLkqvM0Im62ZKRb1wibSo5PpXHQQKQzYVVO9Ec+5lk41rcn1AWgJuRb0FGgSHqGwIYZjRLDONtqTk92T4Tb9mWpGCj0BJeQs0AhU47ZgaNzNKrC9iS1stC7r83xv102kgb1ijHk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hTHmZZ70; arc=none smtp.client-ip=209.85.219.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hTHmZZ70" Received: by mail-qv1-f53.google.com with SMTP id 6a1803df08f44-6e8fce04655so40028206d6.3; Mon, 17 Mar 2025 08:30:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742225424; x=1742830224; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=x9zxS6CUa0/BHcuQ/0Pp0DCveQxLHdMMTHZcqu2K/XY=; b=hTHmZZ70xMC+c3BaHxtx+Yi5Z85E7JPuUV5uEkVoAbW731mfRlfyDFPW9mJvpkcol8 1M9lGaFxrfkTg6qpfmX/j7oA/Nuq738YoFlbpJX+MuTKfd+Rslt5MeGnCFx3Jm26pugA zvK7a7J1mH/HSne///LjLLgHHu6VylM+lYsfk7P1nEmN0LS6ziejwNUjwtonbj5E909P EbIAkOBmII5azk//MawYV2+LcEx5p35R12uigPphewtHoabGCJ5XnOfnDNz9udEObYS6 3AHBjoD4smZ9infTiADsek+UgO3srNg8CjOAqCvGd+kkI2FgPOLkxcdDa04lG8FbAvcC 3U6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742225424; x=1742830224; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=x9zxS6CUa0/BHcuQ/0Pp0DCveQxLHdMMTHZcqu2K/XY=; b=Y7QEx89Y5VSLQIJh2z7WHBNs7iVQSJMlYBAf533h/wyyDt0yvyhAZnjZUCLjn9ktor NYAW3ZGJ5OhL9zqtGkuI4+beV/NRbx3oug2j/avEuX3oyr9Uhvi2dXvEZrZTaiKl6ZYN xtddyppo3u2iR9AFdpJJmy7pC4ivxzwcrEpeN5i4c9MzSD+kCr4WjF/U3pXo9+Yy1mtm BlNCLAp3znXkPP8I71l1AbQwtsfinoYuOoOmXl1DYCsCo0xgwkvWnUiA1XFMBSA4vDVp T+ew69JWjvb+uALNmCy69cbny9A7zg+h9aV3G3rX12bCsDJOS+5q85792gnPvgUGIOuH pzTA== X-Forwarded-Encrypted: i=1; AJvYcCUJoftS9uyo2JoOcOKo3znuurfokcHCapDdiOhPAav/AcYPVWkRT9BUI/HciRuOmAQD/qBhXLqq+MJA@vger.kernel.org, AJvYcCUN4zHgFW8S3042WPpX5Dqes3NwP+XYPnyGClDJzx8Wl0Dgh+Hlg3NTYqpiJjKv/1VhzfrqQzCMb7njbWKL@vger.kernel.org, AJvYcCVdcG4JR+lr8GWAr6gmhk60GRNrS+pEwRD1kttvCAZhEW+HShXUCi5JYxELkMmFALwYxLvoEhRp@vger.kernel.org, AJvYcCWhvu+sV1cG7s4vhdiEYg88+Fite+4csAjuPNaonZcFZ7RL7jt1vsuWB0ng0H0Hb9jALSgaWD74pqR5VFngICUB@vger.kernel.org, AJvYcCWx6ZFEMakYemZItf7/JxrQDjh4l3vX3VRdoaBLCnwx55aWdVbHUsuWBtHia7iip7eB+EJUYrLLQR1v@vger.kernel.org X-Gm-Message-State: AOJu0YyRJ2XuDWPsRHxi9lmRoWgWTGkhtB42Q586crXL74q0pkV6N8+f y/iypI1q/PTKqFVd+i4YOWLIZ3Nd2pK3APV859aNx8QHPhkclNtR X-Gm-Gg: ASbGncsEnmui05gXccUrI5hMK+J128UPHCoek9n8IieAtjUG/OpBBYtoGtfgH/4NW8j afrsrR/Tf2AOqR5tj2XBxcp3ZIF3DMiBLVke+/pbFvmYbliAqhmQDF+vu2+Xuyn04ol80N8KoKH xjz/jDwhJaS1+lbyu4rX++kg6iw2k6aOmjSYMQU/2LVOGkK/i0yHQBuxm7deGH7oBzOF9mEr/Pw 0vUvlE6XrSv9fuCoUbyGMyzEgSuG4uBzenMy/tx3VZTQo9MmZakTccVh66y3gPgz1Uk5CI50+kD Fy84Y+Ao3e3iu5ASbvdTF6ebNHor6szK+evW9rgUPIYq6MSsxXsAB5ulrl7P812Q7jYzE5i+b9e 7JhsO/g== X-Google-Smtp-Source: AGHT+IGKApfu++GDospg5BAghnZqA2Q3bluHqs4fOtKhT5CccsHZP+rcXPKZRpvMgiPxDwJYLIjXqw== X-Received: by 2002:ad4:5cc2:0:b0:6e8:fd03:abdc with SMTP id 6a1803df08f44-6eaeaa5dbe3mr249961486d6.18.1742225424080; Mon, 17 Mar 2025 08:30:24 -0700 (PDT) Received: from 1.0.0.127.in-addr.arpa ([2600:4041:5be7:7c00:6895:24c6:e898:e320]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6eade34c51fsm55736766d6.109.2025.03.17.08.30.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 08:30:23 -0700 (PDT) From: Tamir Duberstein Date: Mon, 17 Mar 2025 11:30:06 -0400 Subject: [PATCH v9 4/4] rust: remove core::ffi::CStr reexport Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250317-cstr-core-v9-4-51d6cc522f62@gmail.com> References: <20250317-cstr-core-v9-0-51d6cc522f62@gmail.com> In-Reply-To: <20250317-cstr-core-v9-0-51d6cc522f62@gmail.com> To: Michal Rostecki , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Brendan Higgins , David Gow , Rae Moar , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Greg Kroah-Hartman , "Rafael J. Wysocki" , Luis Chamberlain , Russ Weight , FUJITA Tomonori , Rob Herring , Saravana Kannan , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Nathan Chancellor , Nick Desaulniers , Bill Wendling , Justin Stitt , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bjorn Helgaas , Arnd Bergmann Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, dri-devel@lists.freedesktop.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, llvm@lists.linux.dev, linux-pci@vger.kernel.org, Tamir Duberstein X-Mailer: b4 0.15-dev Clean up references to `kernel::str::CStr`. Signed-off-by: Tamir Duberstein --- drivers/gpu/drm/drm_panic_qr.rs | 4 ++-- drivers/net/phy/ax88796b_rust.rs | 1 + drivers/net/phy/qt2025.rs | 1 + rust/kernel/device.rs | 3 +-- rust/kernel/driver.rs | 4 ++-- rust/kernel/error.rs | 6 ++---- rust/kernel/faux.rs | 5 ++++- rust/kernel/firmware.rs | 10 ++-------- rust/kernel/kunit.rs | 6 +++--- rust/kernel/lib.rs | 2 +- rust/kernel/miscdevice.rs | 3 +-- rust/kernel/net/phy.rs | 4 +++- rust/kernel/of.rs | 3 ++- rust/kernel/pci.rs | 3 +-- rust/kernel/platform.rs | 3 +-- rust/kernel/prelude.rs | 5 +---- rust/kernel/str.rs | 19 +++++++++---------- rust/kernel/sync/condvar.rs | 3 ++- rust/kernel/sync/lock.rs | 4 ++-- rust/kernel/sync/lock/global.rs | 5 +++-- rust/kernel/sync/poll.rs | 1 + rust/kernel/workqueue.rs | 1 + rust/macros/module.rs | 2 +- 23 files changed, 47 insertions(+), 51 deletions(-) diff --git a/drivers/gpu/drm/drm_panic_qr.rs b/drivers/gpu/drm/drm_panic_qr.rs index fa55547a1535..61f878347be7 100644 --- a/drivers/gpu/drm/drm_panic_qr.rs +++ b/drivers/gpu/drm/drm_panic_qr.rs @@ -26,8 +26,8 @@ //! * //! * -use core::cmp; -use kernel::{prelude::*, str::CStr}; +use core::{cmp, ffi::CStr}; +use kernel::prelude::*; #[derive(Debug, Clone, Copy, PartialEq, Eq, Ord, PartialOrd)] struct Version(usize); diff --git a/drivers/net/phy/ax88796b_rust.rs b/drivers/net/phy/ax88796b_rust.rs index 2d24628a4e58..68b8e30ae296 100644 --- a/drivers/net/phy/ax88796b_rust.rs +++ b/drivers/net/phy/ax88796b_rust.rs @@ -4,6 +4,7 @@ //! Rust Asix PHYs driver //! //! C version of this driver: [`drivers/net/phy/ax88796b.c`](./ax88796b.c) +use core::ffi::CStr; use kernel::{ net::phy::{self, reg::C22, DeviceId, Driver}, prelude::*, diff --git a/drivers/net/phy/qt2025.rs b/drivers/net/phy/qt2025.rs index 78f52efd13e3..07d026c1f9b5 100644 --- a/drivers/net/phy/qt2025.rs +++ b/drivers/net/phy/qt2025.rs @@ -9,6 +9,7 @@ //! //! The QT2025 PHY integrates an Intel 8051 micro-controller. +use core::ffi::CStr; use kernel::error::code; use kernel::firmware::Firmware; use kernel::net::phy::{ diff --git a/rust/kernel/device.rs b/rust/kernel/device.rs index df4bfa5f51ea..a1123206819b 100644 --- a/rust/kernel/device.rs +++ b/rust/kernel/device.rs @@ -6,10 +6,9 @@ use crate::{ bindings, - str::CStr, types::{ARef, Opaque}, }; -use core::{fmt, ptr}; +use core::{ffi::CStr, fmt, ptr}; #[cfg(CONFIG_PRINTK)] use crate::str::CStrExt as _; diff --git a/rust/kernel/driver.rs b/rust/kernel/driver.rs index ec9166cedfa7..9926664d9ba2 100644 --- a/rust/kernel/driver.rs +++ b/rust/kernel/driver.rs @@ -6,8 +6,8 @@ //! register using the [`Registration`] class. use crate::error::{Error, Result}; -use crate::{device, of, str::CStr, try_pin_init, types::Opaque, ThisModule}; -use core::pin::Pin; +use crate::{device, of, try_pin_init, types::Opaque, ThisModule}; +use core::{ffi::CStr, pin::Pin}; use pin_init::{pin_data, pinned_drop, PinInit}; /// The [`RegistrationOps`] trait serves as generic interface for subsystems (e.g., PCI, Platform, diff --git a/rust/kernel/error.rs b/rust/kernel/error.rs index 58157ec9403c..a2a6f74904d3 100644 --- a/rust/kernel/error.rs +++ b/rust/kernel/error.rs @@ -4,11 +4,9 @@ //! //! C header: [`include/uapi/asm-generic/errno-base.h`](srctree/include/uapi/asm-generic/errno-base.h) -use crate::{ - alloc::{layout::LayoutError, AllocError}, - str::CStr, -}; +use crate::alloc::{layout::LayoutError, AllocError}; +use core::ffi::CStr; use core::fmt; use core::num::NonZeroI32; use core::num::TryFromIntError; diff --git a/rust/kernel/faux.rs b/rust/kernel/faux.rs index 5acc0c02d451..d932186f75b1 100644 --- a/rust/kernel/faux.rs +++ b/rust/kernel/faux.rs @@ -7,7 +7,10 @@ //! C header: [`include/linux/device/faux.h`] use crate::{bindings, device, error::code::*, prelude::*}; -use core::ptr::{addr_of_mut, null, null_mut, NonNull}; +use core::{ + ffi::CStr, + ptr::{addr_of_mut, null, null_mut, NonNull}, +}; /// The registration of a faux device. /// diff --git a/rust/kernel/firmware.rs b/rust/kernel/firmware.rs index 70449571aea6..f400ef81f495 100644 --- a/rust/kernel/firmware.rs +++ b/rust/kernel/firmware.rs @@ -4,14 +4,8 @@ //! //! C header: [`include/linux/firmware.h`](srctree/include/linux/firmware.h) -use crate::{ - bindings, - device::Device, - error::Error, - error::Result, - str::{CStr, CStrExt as _}, -}; -use core::ptr::NonNull; +use crate::{bindings, device::Device, error::Error, error::Result, str::CStrExt as _}; +use core::{ffi::CStr, ptr::NonNull}; /// # Invariants /// diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs index 527794dcc439..f4e0e58877a0 100644 --- a/rust/kernel/kunit.rs +++ b/rust/kernel/kunit.rs @@ -56,10 +56,10 @@ macro_rules! kunit_assert { break 'out; } - static NAME: &'static $crate::str::CStr = $crate::c_str_avoid_literals!($name); - static FILE: &'static $crate::str::CStr = $crate::c_str_avoid_literals!($file); + static NAME: &'static core::ffi::CStr = $crate::c_str_avoid_literals!($name); + static FILE: &'static core::ffi::CStr = $crate::c_str_avoid_literals!($file); static LINE: i32 = core::line!() as i32 - $diff; - static CONDITION: &'static $crate::str::CStr = + static CONDITION: &'static core::ffi::CStr = $crate::c_str_avoid_literals!(stringify!($condition)); // SAFETY: FFI call without safety requirements. diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs index c92497c7c655..2360cba7354b 100644 --- a/rust/kernel/lib.rs +++ b/rust/kernel/lib.rs @@ -133,7 +133,7 @@ fn init(module: &'static ThisModule) -> impl pin_init::PinInit u32 { /// /// ``` /// # mod module_phy_driver_sample { +/// use core::ffi::CStr; /// use kernel::net::phy::{self, DeviceId}; /// use kernel::prelude::*; /// @@ -807,6 +808,7 @@ const fn as_int(&self) -> u32 { /// This expands to the following code: /// /// ```ignore +/// use core::ffi::CStr; /// use kernel::net::phy::{self, DeviceId}; /// use kernel::prelude::*; /// diff --git a/rust/kernel/of.rs b/rust/kernel/of.rs index 12ea65df46de..087ac8e05551 100644 --- a/rust/kernel/of.rs +++ b/rust/kernel/of.rs @@ -2,7 +2,8 @@ //! Device Tree / Open Firmware abstractions. -use crate::{bindings, device_id::RawDeviceId, prelude::*}; +use crate::{bindings, device_id::RawDeviceId}; +use core::ffi::CStr; /// IdTable type for OF drivers. pub type IdTable = &'static dyn kernel::device_id::IdTable; diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs index f7b2743828ae..1b4df605bd2b 100644 --- a/rust/kernel/pci.rs +++ b/rust/kernel/pci.rs @@ -13,11 +13,10 @@ error::{to_result, Result}, io::Io, io::IoRaw, - str::CStr, types::{ARef, ForeignOwnable, Opaque}, ThisModule, }; -use core::{ops::Deref, ptr::addr_of_mut}; +use core::{ffi::CStr, ops::Deref, ptr::addr_of_mut}; use kernel::prelude::*; /// An adapter for the registration of PCI drivers. diff --git a/rust/kernel/platform.rs b/rust/kernel/platform.rs index 474f8cb4587b..ca439581129a 100644 --- a/rust/kernel/platform.rs +++ b/rust/kernel/platform.rs @@ -9,12 +9,11 @@ error::{to_result, Result}, of, prelude::*, - str::CStr, types::{ARef, ForeignOwnable, Opaque}, ThisModule, }; -use core::ptr::addr_of_mut; +use core::{ffi::CStr, ptr::addr_of_mut}; /// An adapter for the registration of platform drivers. pub struct Adapter(T); diff --git a/rust/kernel/prelude.rs b/rust/kernel/prelude.rs index 97a66d29f48b..5b530a25d0ff 100644 --- a/rust/kernel/prelude.rs +++ b/rust/kernel/prelude.rs @@ -36,10 +36,7 @@ pub use super::error::{code::*, Error, Result}; -pub use super::{ - str::{CStr, CStrExt as _}, - ThisModule, -}; +pub use super::{str::CStrExt as _, ThisModule}; pub use super::init::InPlaceInit; diff --git a/rust/kernel/str.rs b/rust/kernel/str.rs index f1b35fa5823a..fa44856b4ade 100644 --- a/rust/kernel/str.rs +++ b/rust/kernel/str.rs @@ -3,6 +3,7 @@ //! String representations. use crate::alloc::{flags::*, AllocError, KVec}; +use core::ffi::CStr; use core::fmt::{self, Write}; use core::ops::{Deref, DerefMut}; @@ -129,8 +130,6 @@ macro_rules! b_str { }}; } -pub use core::ffi::CStr; - /// Returns a C pointer to the string. // It is a free function rather than a method on an extension trait because: // @@ -371,8 +370,8 @@ fn as_ref(&self) -> &BStr { /// # Examples /// /// ``` +/// # use core::ffi::CStr; /// # use kernel::c_str_avoid_literals; -/// # use kernel::str::CStr; /// const MY_CSTR: &CStr = c_str_avoid_literals!(concat!(file!(), ":", line!(), ": My CStr!")); /// ``` #[macro_export] @@ -382,13 +381,13 @@ macro_rules! c_str_avoid_literals { // too limiting to macro authors, so we rely on the name as a hint instead. ($str:expr) => {{ const S: &'static str = concat!($str, "\0"); - const C: &'static $crate::str::CStr = - match $crate::str::CStr::from_bytes_with_nul(S.as_bytes()) { - Ok(v) => v, - Err(core::ffi::FromBytesWithNulError { .. }) => { - panic!("string contains interior NUL") - } - }; + const C: &'static core::ffi::CStr = match core::ffi::CStr::from_bytes_with_nul(S.as_bytes()) + { + Ok(v) => v, + Err(core::ffi::FromBytesWithNulError { .. }) => { + panic!("string contains interior NUL") + } + }; C }}; } diff --git a/rust/kernel/sync/condvar.rs b/rust/kernel/sync/condvar.rs index b3e7889db44b..8da123f9fb12 100644 --- a/rust/kernel/sync/condvar.rs +++ b/rust/kernel/sync/condvar.rs @@ -8,11 +8,12 @@ use super::{lock::Backend, lock::Guard, LockClassKey}; use crate::{ ffi::{c_int, c_long}, - str::{CStr, CStrExt as _}, + str::CStrExt as _, task::{MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE, TASK_NORMAL, TASK_UNINTERRUPTIBLE}, time::Jiffies, types::Opaque, }; +use core::ffi::CStr; use core::marker::PhantomPinned; use core::ptr; use pin_init::{pin_data, pin_init, PinInit}; diff --git a/rust/kernel/sync/lock.rs b/rust/kernel/sync/lock.rs index 0b36d4a3d3cc..bf2b3465f390 100644 --- a/rust/kernel/sync/lock.rs +++ b/rust/kernel/sync/lock.rs @@ -7,10 +7,10 @@ use super::LockClassKey; use crate::{ - str::{CStr, CStrExt as _}, + str::CStrExt as _, types::{NotThreadSafe, Opaque, ScopeGuard}, }; -use core::{cell::UnsafeCell, marker::PhantomPinned}; +use core::{cell::UnsafeCell, ffi::CStr, marker::PhantomPinned}; use pin_init::{pin_data, pin_init, PinInit}; pub mod mutex; diff --git a/rust/kernel/sync/lock/global.rs b/rust/kernel/sync/lock/global.rs index 4a040c29faee..7d6d1abf9279 100644 --- a/rust/kernel/sync/lock/global.rs +++ b/rust/kernel/sync/lock/global.rs @@ -5,13 +5,14 @@ //! Support for defining statics containing locks. use crate::{ - str::{CStr, CStrExt as _}, + str::CStrExt as _, sync::lock::{Backend, Guard, Lock}, sync::{LockClassKey, LockedBy}, types::Opaque, }; use core::{ cell::UnsafeCell, + ffi::CStr, marker::{PhantomData, PhantomPinned}, }; @@ -266,7 +267,7 @@ macro_rules! global_lock { $pub enum $name {} impl $crate::sync::lock::GlobalLockBackend for $name { - const NAME: &'static $crate::str::CStr = + const NAME: &'static core::ffi::CStr = $crate::c_str_avoid_literals!(::core::stringify!($name)); type Item = $valuety; type Backend = $crate::global_lock_inner!(backend $kind); diff --git a/rust/kernel/sync/poll.rs b/rust/kernel/sync/poll.rs index e105477a3cb1..d23fd6998ecf 100644 --- a/rust/kernel/sync/poll.rs +++ b/rust/kernel/sync/poll.rs @@ -11,6 +11,7 @@ sync::{CondVar, LockClassKey}, types::Opaque, }; +use core::ffi::CStr; use core::ops::Deref; /// Creates a [`PollCondVar`] initialiser with the given name and a newly-created lock class. diff --git a/rust/kernel/workqueue.rs b/rust/kernel/workqueue.rs index 0cd100d2aefb..25723207c2be 100644 --- a/rust/kernel/workqueue.rs +++ b/rust/kernel/workqueue.rs @@ -135,6 +135,7 @@ use crate::alloc::{AllocError, Flags}; use crate::{prelude::*, sync::Arc, sync::LockClassKey, types::Opaque}; +use core::ffi::CStr; use core::marker::PhantomData; /// Creates a [`Work`] initialiser with the given name and a newly-created lock class. diff --git a/rust/macros/module.rs b/rust/macros/module.rs index 5467a0d539f7..d764fc35dfe5 100644 --- a/rust/macros/module.rs +++ b/rust/macros/module.rs @@ -237,7 +237,7 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream { }}; impl kernel::ModuleMetadata for {type_} {{ - const NAME: &'static kernel::str::CStr = c\"{name}\"; + const NAME: &'static core::ffi::CStr = c\"{name}\"; }} // Double nested modules, since then nobody can access the public items inside.