Basically a resend of the previous version, plus fixes to build with the MSRV (1.78).
The first patch makes two additions: - Bring an equivalent of the nightly upstream `Alignment` type [2] with an identical public interface, - Add a new `Alignable` extension trait that provides a way to align values up or down according to an `Alignment`, and implement it on unsigned integer types. The second patch makes use of these in the Nova driver. [3] is recommended as a dependency, a small cleanup preventing an unwrap upon applying this series. [1] https://github.com/rust-lang/libs-team/issues/631 [2] https://doc.rust-lang.org/std/ptr/struct.Alignment.html [3] https://lore.kernel.org/rust-for-linux/20250808-falcondma_256b-v1-1-15f911d89...@nvidia.com/ Signed-off-by: Alexandre Courbot <acour...@nvidia.com> --- Changes in v4: - Add the `generic_nonzero` feature (stabilized in Rust 1.79) to fix build with Rust 1.78. - Import `core::mem::align_of` for older Rust versions (as the patch adding it to the prelude is not attainable from nova-next yet). - Link to v3: https://lore.kernel.org/r/20250812-num-v3-0-569d6fe18...@nvidia.com Changes in v3: - Move `align_down` and `align_up` into their own `Alignable` trait. (thanks Miguel!) - Fix `Alignment::mask` implementation to match upstream's. - Add missing `SAFETY:` comments. - Improve grammar on a few hard-to-parse comments. - Link to v2: https://lore.kernel.org/r/20250804-num-v2-0-a96b9ca6e...@nvidia.com Changes in v2: - Remove `last_checked_bit` (use Rust's `checked_ilog2` instead). - Port Rust nightly `Alignment` type and extend it with `align_down` and `align_up` methods. - Link to v1: https://lore.kernel.org/r/20250620-num-v1-0-7ec3d3fb0...@nvidia.com Changes since split from the nova-core series: - Rename `fls` to `last_set_bit`, - Generate per-type doctests, - Add invariants section to `PowerOfTwo`. - Do not use reference to `self` in `PowerOfTwo` methods since it implements `Copy`, - Use #[derive] where possible instead of implementing traits manually, - Remove `Deref` and `Borrow` implementations. --- Alexandre Courbot (2): rust: add `Alignment` type gpu: nova-core: use Alignment for alignment-related operations Documentation/gpu/nova/core/todo.rst | 1 - drivers/gpu/nova-core/fb.rs | 6 +- drivers/gpu/nova-core/vbios.rs | 4 +- rust/kernel/lib.rs | 2 + rust/kernel/ptr.rs | 219 +++++++++++++++++++++++++++++++++++ 5 files changed, 226 insertions(+), 6 deletions(-) --- base-commit: 062b3e4a1f880f104a8d4b90b767788786aa7b78 change-id: 20250620-num-9420281c02c7 prerequisite-message-id: <20250808-falcondma_256b-v1-1-15f911d89...@nvidia.com> prerequisite-patch-id: 2439f5f9b560ee4867716f0018b5326dcd72cda3 Best regards, -- Alexandre Courbot <acour...@nvidia.com>