> > * The use of from(): > > > > let clk = bindings::qdev_init_clock_in(...) > > Owned::from(&*clk) > > In this case the C side wants to manage the reference that > qdev_init_clock_in() returns; it is dropped in > qdev_finalize_clocklist(). So Rust code needs to increase the > refcount.
Pls forgive me for one more question about qdev_init_clock_in() on the C side. :-) qdev_init_clock_in() didn't unref `clk` after object_property_add_child(), so it is intentional, to make the ref count of `clk` be 2: * 1 count is held by clocklist until qdev_finalize_clocklist(). * another 1 is held by its parent via QOM Child<>. Am I understanding it correctly? > > Then the comment "the clock is heap allocated and does not have > > a reference" sounds like a conflict. I'm sure I'm missing something. :-( > > Changed: > > // SAFETY: the clock is heap allocated, but qdev_init_clock_in() > // does not gift the reference to its caller; so use Owned::from to > // add one. the callback is disabled automatically when the clock > // is unparented, which happens before the device is finalized. LGTM. Thank you very much for your patience. I think I understand ref count now. Regards, Zhao