On Thu, 20 Mar 2025 at 15:25, Zhao Liu <zhao1....@intel.com> wrote: > > > -use std::{ffi::CStr, ptr::addr_of_mut}; > > +use std::{ffi::CStr, mem, ptr::addr_of_mut}; > > maybe mem::size_of (since there're 2 use cases :-))? > > > > > use qemu_api::{ > > + bindings, > > chardev::{CharBackend, Chardev, Event}, > > + static_assert, > > This one looks like it breaks the alphabetical ordering (this nit can be > checked and fixed by "cargo +nightly fmt" under rust directory, which is > like checkpatch.pl).
Yep; I put it here because I started with Paolo's v1 patch which called the macro "const_assert", and then when v2 changed the macro name I forgot to move it later in the use {}. > > impl_vmstate_forward, > > irq::{IRQState, InterruptSource}, > > memory::{hwaddr, MemoryRegion, MemoryRegionOps, > > MemoryRegionOpsBuilder}, > > @@ -124,6 +126,12 @@ pub struct PL011State { > > pub migrate_clock: bool, > > } > > > > +// Some C users of this device embed its state struct into their own > > +// structs, so the size of the Rust version must not be any larger > > +// than the size of the C one. If this assert triggers you need to > > +// expand the padding_for_rust[] array in the C PL011State struct. > > +static_assert!(mem::size_of::<PL011State>() <= > > mem::size_of::<bindings::PL011State>()); > > + > > maybe use qemu_api::bindings::PL011State directly? Because bindings > contains native C structures/functions and their use should not be > encouraged, I think it's better to 'hide' bindings (not list it at the > beginning of the file). Yeah, I wasn't sure what our preferred style approach is here regarding what we "use" and what we just directly reference (and the same in the other direction for mem::size_of vs size_of). Is there a "normal" pattern to follow here ? Speaking of size_of, I noticed that Rust provides both core::mem::size_of and std::mem::size_of, and in rust/ at the moment we have uses of both. What's the difference? thanks -- PMM