From nobody Mon Feb 9 02:13:19 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 8ADEF3BFE43 for ; Tue, 3 Feb 2026 15:46:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770133600; cv=none; b=bnDDp3v4Z4ZY/bIyVYYepjqBT2r0FW8YTIYk14NS7mPZu3ncwLPlRLX0vpX6/1MJSYBmIOVP9x1CYa+RQooS7PysHgALndHkeWfbpBFa/wjHfNSguM6sESrWkrw1PK2JHjwTu3I7nL0FyEWZ7iIcI4ydojVtfV/5E96t1pQklDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770133600; c=relaxed/simple; bh=toV72FONVd+c77Jdi9/X05RZt7qiox3e/hnCpHZii2E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=EMJhStlFeiXyu5ADzDIpzL34lWf2oCHwUwiCiqAWz20QYUAUph55aYk0n5ZFV82EQaVasOEwKxN6lZDObaG9SW5UkGo76g8qmkowHrbdicbbx3keMXZGwZQXCCAYgCKnkg8Ff0jVzpHTx69f6KHiqUxb4eveo1Ovx5k4qVU9cKM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--mmaurer.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ZbFNFk2g; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--mmaurer.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ZbFNFk2g" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b7ef896edcso14447382eec.0 for ; Tue, 03 Feb 2026 07:46:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1770133597; x=1770738397; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=h/wJPUnQVMCcHAFscBghK0MQ8yiIElHndU1rZLXdeks=; b=ZbFNFk2gSwMTms9IgyqABz1Tfmdd70Jk9hs6D8rXVhNnDQYCX4qhfqmhECBZTceWcR 4f1dESGCKHR3g2cDj9DE/x2reuG4HACMs/B0BeCtkvByHsOJzNmahqr8++Qy2/85I5rB 0G3MnhIW55WPfcfNhuZiTU6KhoKn64Ci3CeRNc8yVzovWg6kdb/gRgrGGp5RY+R28IPn eR0wgZ+vCgRkh6+T14q1HU16VnX7C+78Wao8XP4nNS7vfCtBF3cjZ8aVPc1XW5+AEklt 6nr1Q2aKhTyCyDrRa6UfJJ+9wZ7qDHGHogTjMhd9K8R+6l/jJh6oDh6TqkuE7W5qQgKz 6IEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770133597; x=1770738397; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=h/wJPUnQVMCcHAFscBghK0MQ8yiIElHndU1rZLXdeks=; b=Cwif1l8py9RVSjZ/c3jNeqiV/azfRGdz6z5nBSlrhnHO2Tz7LKf2JsP8XgmcRCf/HG Uey0f5E6KOnvuHH5RnauseQNliJviKa9nLPdBnxLRlFLjycuZxWnQvFe/+YuoAmf8RNS 1jOBT9mIvOCcKLrwIAdLsA7toSieiR46PODMMIWPpGlvvCSfnS+dTPm+Qb+lHDHqNADh fgjU2WXWCXLv0gWlH0Hw8vmCBOF/Ryy+D06ZcA5AGdnyH7B+1JJSw6TUskOIr+9c3JL5 9q3gRfX8oay8ym3rtTCJQNus+v3eDoqrhFZdtixtcNF3rVX0W6WUw8Eq9KjyiYrZpjPO 0Gyg== X-Forwarded-Encrypted: i=1; AJvYcCWmwOGbQSB/d4EyfKHAwlq0hnB8BIGQRKlHCbsZdJg9FFeY5AVPQD+eN6R8uRoVy88m6HkZONMlm5sG3WY=@vger.kernel.org X-Gm-Message-State: AOJu0YzeLu3lUx+uRY9HBbgxlbODm2hpnYg+jJm8JGArom2ZcPTWWv50 4ZBKkALIjtFcjll1EdTSxf470ozPGxcovQx0CsREBT+KopWJliFsMcL2Oj4sFW3k5ClA2RE3Kdb s7YCWqqYPNg== X-Received: from dybny37.prod.google.com ([2002:a05:7300:e825:b0:2ae:51e3:c162]) (user=mmaurer job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:7bc2:b0:2b7:20c6:36dc with SMTP id 5a478bee46e88-2b7c8960b21mr6824371eec.42.1770133597088; Tue, 03 Feb 2026 07:46:37 -0800 (PST) Date: Tue, 03 Feb 2026 15:46:30 +0000 In-Reply-To: <20260203-qcom-socinfo-v2-0-d6719db85637@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260203-qcom-socinfo-v2-0-d6719db85637@google.com> X-Developer-Key: i=mmaurer@google.com; a=ed25519; pk=2Ezhl7+fEjTOMVFpplDeak2AdQ8cjJieLRVJdNzrW+E= X-Developer-Signature: v=1; a=ed25519-sha256; t=1770133593; l=1885; i=mmaurer@google.com; s=20250429; h=from:subject:message-id; bh=toV72FONVd+c77Jdi9/X05RZt7qiox3e/hnCpHZii2E=; b=HmKT9Wjpe5u2hTdJ2Tcoag2Ev49Zm6fhsS7eX/dQiAxY/wxuUniXmJdhtGMd67QiHayfpx34L 0bkddcnyzhZATSmzQBb6PghYphGlfrft9E9n7goPvqOGq6riqINeZyj X-Mailer: b4 0.14.2 Message-ID: <20260203-qcom-socinfo-v2-1-d6719db85637@google.com> Subject: [PATCH v2 1/6] rust: Add sparse_array! helper macro From: Matthew Maurer To: Bjorn Andersson , Konrad Dybcio , Satya Durga Srinivasu Prabhala , Miguel Ojeda , Boqun Feng , Gary Guo , "=?utf-8?q?Bj=C3=B6rn_Roy_Baron?=" , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Greg Kroah-Hartman , "Rafael J. Wysocki" , David Airlie , Simona Vetter , Michal Wilczynski , Dave Ertman , Ira Weiny , Leon Romanovsky Cc: Trilok Soni , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, rust-for-linux@vger.kernel.org, driver-core@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-pwm@vger.kernel.org, Matthew Maurer Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable An idiom in C code is to have an array of nullable values which is partially initialized via `{ [0] =3D x, [7] =3D y}`. Because Rust expects everything to be fully initialized, it does not have this idiom by default. `sparse_array!` allows declaration of `[Option; _]` constants to allow Rust code to more easily mimic the safe version of this pattern. Signed-off-by: Matthew Maurer Co-developed-by: Gary Guo Signed-off-by: Gary Guo --- rust/kernel/slice.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/rust/kernel/slice.rs b/rust/kernel/slice.rs index ca2cde13506196d46c9169aa6e4ab2ac42af6f5b..826b6f77f0d07775bd22837cc17= 73b59ec96936c 100644 --- a/rust/kernel/slice.rs +++ b/rust/kernel/slice.rs @@ -47,3 +47,40 @@ fn as_flattened_mut(&mut self) -> &mut [T] { self.flatten_mut() } } + +/// Create a sparse array of `[Option; _]`. +/// +/// This is intended for use when C code would write `{ [0] =3D x, [7] =3D= y}` to perform partial +/// initialization of an array. +/// +/// # Example +/// ``` +/// use kernel::sparse_array; +/// const FOO: &[Option] =3D &sparse_array! { +/// 0: 10, +/// 7: 16, +/// }; +/// assert_eq!(FOO[0], Some(10)); +/// assert_eq!(FOO[1], None); +/// assert_eq!(FOO[7], Some(16)); +/// ``` +#[macro_export] +macro_rules! sparse_array { + ($( + $index:literal: $value:expr + ),* $(,)?) =3D> {{ + const SIZE: usize =3D { + let mut size =3D 0; + $(if $index >=3D size { + size =3D $index + 1; + })* + size + }; + + const { + let mut arr =3D [None; SIZE]; + $(arr[$index] =3D Some($value);)* + arr + } + }} +} --=20 2.53.0.rc2.204.g2597b5adb4-goog