|
From: | Paolo Bonzini |
Subject: | Re: [RFC PATCH 3/9] rust: vmstate: add varray support to vmstate_of! |
Date: | Wed, 15 Jan 2025 11:14:04 +0100 |
User-agent: | Mozilla Thunderbird |
On 1/8/25 04:28, Zhao Liu wrote:
+ #[must_use] + pub const fn with_varray_flag<T: VMState>(mut self, flag: VMStateFlags) -> VMStateField { + assert!((self.flags.0 & VMStateFlags::VMS_ARRAY.0) != 0);I understand you checked VMS_ARRAY here since [T; N] has this array flag. What if a Rust device just store a pointer to the array? If we allow this use, then it seems also possible to set varray flags...Then what about dropping this limitation?
Box can be added for that purpose: impl_vmstate_pointer!(Box<T> where T: VMState); Also I need to drop Option<NonNull<>> because of if (field->flags & VMS_POINTER) { first_elem = *(void **)first_elem; assert(first_elem || !n_elems || !size); } in migration/vmstate.c.
However, I also doube that pointer usage is bad; we should always use Vec.
Vec support is a bit tricky because the number of elements is not accessible from C. But unbounded arrays are rare in devices. We can think about it later.
Paolo
[Prev in Thread] | Current Thread | [Next in Thread] |