| 345bef46 | 04-Mar-2025 | Paolo Bonzini <pbonzini@redhat.com> | rust: qom: change instance_init to take a ParentInit<>
 This removes undefined behavior associated to writing to uninitialized
 fields, and makes it possible to remove "unsafe" from the instance_init
 
 rust: qom: change instance_init to take a ParentInit<>
 This removes undefined behavior associated to writing to uninitialized
 fields, and makes it possible to remove "unsafe" from the instance_init
 implementation.
 
 However, the init function itself is still unsafe, because it must promise
 (as a sort as MaybeUninit::assume_init) that all fields have been
 initialized.
 
 Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
 show more ...  | 
| 869b0afa | 26-May-2025 | Zhao Liu <zhao1.liu@intel.com> | rust/hpet: Drop BqlCell wrapper for num_timers
 Now that the num_timers field is initialized as a property, someone may
 change its default value using qdev_prop_set_uint8(), but the value is
 fixed af
 rust/hpet: Drop BqlCell wrapper for num_timers
 Now that the num_timers field is initialized as a property, someone may
 change its default value using qdev_prop_set_uint8(), but the value is
 fixed after the Rust code sees it first.  Since there is no need to modify
 it after realize(), it is not to be necessary to have a BqlCell wrapper.
 
 Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
 Link: https://lore.kernel.org/r/20250520152750.2542612-4-zhao1.liu@intel.com
 [Remove .into() as well. - Paolo]
 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
 show more ...  | 
| 4d2fec89 | 23-May-2025 | Paolo Bonzini <pbonzini@redhat.com> | rust/hpet: return errors from realize if properties are incorrect
 Match the code in hpet.c; this also allows removing the
 BqlCell from the num_timers field.
 
 Reviewed-by: Zhao Liu <zhao1.liu@intel.c
 rust/hpet: return errors from realize if properties are incorrect
 Match the code in hpet.c; this also allows removing the
 BqlCell from the num_timers field.
 
 Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
 show more ...  | 
| b3bf86b8 | 26-May-2025 | Paolo Bonzini <pbonzini@redhat.com> | rust/hpet: change type of num_timers to usize
 Remove the need to convert after every read of the BqlCell.  Because the
 vmstate uses a u8 as the size of the VARRAY, this requires switching
 the VARRAY
 rust/hpet: change type of num_timers to usize
 Remove the need to convert after every read of the BqlCell.  Because the
 vmstate uses a u8 as the size of the VARRAY, this requires switching
 the VARRAY to use num_timers_save; which in turn requires ensuring that
 the num_timers_save is always there.  For simplicity do this by
 removing support for version 1, which QEMU has not been producing for
 ~15 years.
 
 Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
 show more ...  | 
| ad3ab01b | 14-Apr-2025 | Zhao Liu <zhao1.liu@intel.com> | rust/hpet: Fix a clippy error
 Carge clippy complained about:
 
 error: casts from `u8` to `u32` can be expressed infallibly using `From`
 
 So use `From` to convert `u8` to `u32`.
 
 Signed-off-by: Zhao L
 rust/hpet: Fix a clippy error
 Carge clippy complained about:
 
 error: casts from `u8` to `u32` can be expressed infallibly using `From`
 
 So use `From` to convert `u8` to `u32`.
 
 Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
 Link: https://lore.kernel.org/r/20250414144943.1112885-10-zhao1.liu@intel.com
 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
 show more ...  | 
| 64e1256b | 14-Apr-2025 | Zhao Liu <zhao1.liu@intel.com> | rust/hpet: convert HPETTimer index to u8 type
 The C version of HPET uses the uint8_t type for timer index ("tn"), and
 usize type in Rust version will break migration between the C and Rust
 versions.
 rust/hpet: convert HPETTimer index to u8 type
 The C version of HPET uses the uint8_t type for timer index ("tn"), and
 usize type in Rust version will break migration between the C and Rust
 versions.
 
 So convert HPETTimer index' type to u8 (consistent with the C version of
 HPET) to make it friendly for vmstate support.
 
 Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
 Link: https://lore.kernel.org/r/20250414144943.1112885-8-zhao1.liu@intel.com
 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
 show more ...  | 
| a32b2396 | 14-Feb-2025 | Paolo Bonzini <pbonzini@redhat.com> | rust: timer: wrap QEMUTimer with Opaque<> and express pinning requirements
 Timers must be pinned in memory, because modify() stores a pointer to them
 in the TimerList.  To express this requirement,
 rust: timer: wrap QEMUTimer with Opaque<> and express pinning requirements
 Timers must be pinned in memory, because modify() stores a pointer to them
 in the TimerList.  To express this requirement, change init_full() to take
 a pinned reference.  Because the only way to obtain a Timer is through
 Timer::new(), which is unsafe, modify() can assume that the timer it got
 was later initialized; and because the initialization takes a Pin<&mut
 Timer> modify() can assume that the timer is pinned.  In the future the
 pinning requirement will be expressed through the pin_init crate instead.
 
 Note that Timer is a bit different from other users of Opaque, in that
 it is created in Rust code rather than C code.  This is why it has to
 use the unsafe constructors provided by Opaque; and in fact Timer::new()
 is also unsafe, because it leaves it to the caller to invoke init_full()
 before modify().  Without a call to init_full(), modify() will cause a
 NULL pointer dereference.
 
 An alternative could be to combine new() + init_full() by returning a
 pinned box; however, using a reference makes it easier to express
 the requirement that the opaque outlives the timer.
 
 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
 show more ...  |