Re: [PATCH v3 1/2] rust: sizes: add DeviceSize trait for device address space constants

From: Alice Ryhl

Date: Wed Apr 01 2026 - 06:03:04 EST


On Tue, Mar 31, 2026 at 03:43:18PM -0700, John Hubbard wrote:
> The SZ_* constants are usize, matching the CPU pointer width. But
> device address spaces have their own widths (32-bit MMIO windows,
> 64-bit GPU framebuffers, etc.), so drivers end up casting these
> constants with SZ_1M as u64 or helper functions. This adds
> boilerplate with no safety benefit.
>
> Add a DeviceSize trait with associated SZ_* constants, implemented
> for u32, u64, and usize. With the trait in scope, callers write
> u64::SZ_1M or u32::SZ_4K to get the constant in their device's
> native width. All SZ_* values fit in a u32, so every implementation
> is lossless. Each impl has a const assert to catch any future
> constant that would overflow.
>
> A define_sizes! macro generates everything from a single internal
> list of names. The macro takes the target types as arguments, so
> adding a new target type requires changing only the call site.
>
> Suggested-by: Danilo Krummrich <dakr@xxxxxxxxxx>
> Link: https://lore.kernel.org/all/DGB9G697GSWO.3VBFGU5MKFPMR@xxxxxxxxxx/
> Link: https://lore.kernel.org/all/DGHI8WRKBQS9.38910L6FIIZTE@xxxxxxxxxx/
> Signed-off-by: John Hubbard <jhubbard@xxxxxxxxxx>

The name `DeviceSize` seems overly specific to the use-case you had. It
also makes it sound like something you would implement *for* the device
type rather than for the integer type. Why not name it something more
generic such as SizeConstants?

Alice