On Mon, Nov 17, 2025 at 09:47:47AM +0100, Paolo Bonzini wrote: > Date: Mon, 17 Nov 2025 09:47:47 +0100 > From: Paolo Bonzini <[email protected]> > Subject: [PATCH 0/5] rust/hpet: complete moving state out of HPETTimer > X-Mailer: git-send-email 2.51.1 > > This state continues the cleanups of the HPET state, moving fields out of > BqlCells and into HPETRegisters and HPETTimerRegisters. It also restores > the old migration format and shows an interesting trick: HPETTimer is now > a very simple object that handles the "unsafe" backreference from the > timer to the HPETState, but it also implements ToMigrationStateShared > and is stored in the HPETState as Migratable<[HPETTimer; N]>. I find > it pretty cool that the composition works naturally. > > The less beautiful part is that I had to modify Timer::init_full for > this to compile. It's probably time to work on the final design for > initialization, because this is becoming very ad hoc and the differences > between timer, MemoryRegion and Clock initialization have no real > justification.
<Just some rough thoughts/understanding> Yes, Timer requires Pin<> and it seems MemoryRegion also should requires it because of callback... MemoryRegion requires MaybeUninitField, but it would be not necessary for HPET, since HPETTimer has already initialized its other field before calling init_full(). But as a general interface, MaybeUninitField could be also useful for Timer, as we can't require how device initialize its field. Clock's ParentInit<> is also different. We don't need to require Timer::init_full must be called in init(). MemoryRegion may also don't need it And some C device even calls memory_region_init_io() in realize(). Regards, Zhao
