qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH 3/9] rust: vmstate: add varray support to vmstate_of!


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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]