On Fri Jul 4, 2025 at 1:23 AM CEST, Tamir Duberstein wrote: > On Thu, Jul 3, 2025 at 6:41 PM Tamir Duberstein <tamird@xxxxxxxxx> wrote: >> On Thu, Jul 3, 2025 at 4:36 PM Benno Lossin <lossin@xxxxxxxxxx> wrote: >> > >> > I don't understand, can't you just do: >> > >> > * add `rust/kernel/fmt.rs`, >> > * add `rust/macros/fmt.rs`, >> > * change all occurrences of `core::fmt` to `kernel::fmt` and >> > `format_args!` to `fmt!`. >> >> Yes, such a split could be done - I will do so in the next spin >> >> >> > The last one could be split by subsystem, no? Some subsystems might >> > interact and thus need simultaneous splitting, but there should be some >> > independent ones. >> >> Yes, it probably can. As you say, some subsystems might interact - the >> claimed benefit of doing this subsystem-by-subsystem split is that it >> avoids conflicts with ongoing work that will conflict with a large >> patch, but this is also the downside; if ongoing work changes the set >> of interactions between subsystems then a maintainer may find >> themselves unable to emit the log message they want (because one >> subsystem is using kernel::fmt while another is still on core::fmt). > > I gave this a try. I ran into the problem that `format_args!` (and, > after this patch, `fmt!`) is at the center of `print_macro!`, which > itself underpins various other formatting macros. This means we'd have > to bifurcate the formatting infrastructure to support an incremental > migration. That's quite a bit of code, and likely quite a mess in the > resulting git history -- and that's setting aside the toil required to > figure out the correct combinations of subsystems that must migrate > together. So here is what we can do without duplicating the logic, though it requires multiple cycles: 1. We merge the two `fmt.rs` files & each subsystem merges an implementation of `kernel::fmt::Display` for their types, but keeps the `core::fmt::Display` impl around. 2. After all subsystems have merged the previous step, we change the implementations of `print_macro!` to use `fmt!` instead of `format_args!`. 3. We remove all occurrences of `core::fmt` (& replace them with `kernel::fmt`), removing the `core::fmt::Display` impls. --- Cheers, Benno