> -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). > 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). Otherwise, Reviewed-by: Zhao Liu <zhao1....@intel.com>