]> git.ipfire.org Git - thirdparty/qemu.git/commit
rust: qdev: add clock creation
authorPaolo Bonzini <pbonzini@redhat.com>
Fri, 17 Jan 2025 10:21:26 +0000 (11:21 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 13 Feb 2025 11:19:33 +0000 (12:19 +0100)
commit201ef001dd40fdb11c83f3e47604219c374590ec
tree8c636c5744556fa86ee672dc24ae46377a4c3160
parent66bcc554d27f693f89bf04df24d474463a90a894
rust: qdev: add clock creation

Add a Rust version of qdev_init_clock_in, which can be used in
instance_init.  There are a couple differences with the C
version:

- in Rust the object keeps its own reference to the clock (in addition to
  the one embedded in the NamedClockList), and the reference is dropped
  automatically by instance_finalize(); this is encoded in the signature
  of DeviceClassMethods::init_clock_in, which makes the lifetime of the
  clock independent of that of the object it holds.  This goes unnoticed
  in the C version and is due to the existence of aliases.

- also, anything that happens during instance_init uses the pinned_init
  framework to operate on a partially initialized object, and is done
  through class methods (i.e. through DeviceClassMethods rather than
  DeviceMethods) because the device does not exist yet.  Therefore, Rust
  code *must* create clocks from instance_init, which is stricter than C.

Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
rust/hw/char/pl011/src/device.rs
rust/qemu-api/src/prelude.rs
rust/qemu-api/src/qdev.rs
rust/qemu-api/src/vmstate.rs