Paul Goyette wrote:

> Any suggestions on how to ensure proper alignment?  There doesn't seem 
> to be any way to kmem_allocate() what alignment is needed...  :)  It 
> seems to currently always provide 64-bit (8-byte) alignment, but the man 
> page makes no guarantees.
> 
> I guess I could allocate an extra 8 bytes, and then manipulate the 
> returned address... But that just "feels wrong".  :)

I meant alignment within the structures.  Maybe "packing" might be
a better word.  This helps for example with mixed 32-bit and 64-bit
emulations.  If you look at your original struct sysctl_history_event:

        struct sysctl_history_event {
                struct timeval  she_tv;
                uint64_t        she_callnumber;
                uint64_t        she_values[4];

The timeval is a structure with a 64-bit int for seconds and and
a 32-bit int for microseconds.  With the following uint64_t some
architectures might pad out she_callnumber in the structure so that it's
on a 64-bit boundary while others will by happy with a 32-bit alignment
and not use any padding.

In short, just make sure everything in the struct packs nicely. :)

Cheers,
Simon.

Reply via email to