Page MenuHomeFreeBSD

bhyve: Appease warning about a potentially unaligned pointer.
ClosedPublic

Authored by jhb on Nov 23 2022, 11:16 PM.
Tags
None
Referenced Files
F81664592: D37490.diff
Fri, Apr 19, 4:08 PM
Unknown Object (File)
Fri, Apr 12, 7:24 PM
Unknown Object (File)
Fri, Apr 12, 2:15 PM
Unknown Object (File)
Tue, Apr 9, 11:32 AM
Unknown Object (File)
Fri, Mar 29, 9:53 AM
Unknown Object (File)
Feb 15 2024, 9:42 AM
Unknown Object (File)
Feb 15 2024, 9:42 AM
Unknown Object (File)
Feb 15 2024, 9:00 AM
Subscribers

Details

Summary

When initializing the device model for a PCI pass through device that
uses MSI-X, bhyve reads the MSI-X capability from the real device to
save a copy in the emulated PCI config space. It also saves a copy in
a local struct msixcap on the stack. Since struct msixcap is packed,
GCC complains that casting a pointer to the struct to a uint32_t
pointer may result in an unaligned pointer.

This path is not performance critical, so to appease the compiler,
simply change the pointer to a char * and use memcpy to copy the 4
bytes read in each iteration of the loop.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

jhb requested review of this revision.Nov 23 2022, 11:16 PM

I realize the person from illumos might have had a different fix for this, but I think this might be the cleanest of the options. I tried adding an __Alignas(4) on the local variable and that didn't appease GCC's warning here.

This revision is now accepted and ready to land.Nov 24 2022, 6:38 AM