On 09/09/2021 17:34, Kevin Stefanov wrote: > The spec requires 64-byte alignment, not 16. > > Signed-off-by: Kevin Stefanov <kevin.stefa...@citrix.com> > --- > CC: Jan Beulich <jbeul...@suse.com> > CC: Andrew Cooper <andrew.coop...@citrix.com> > > Note: This does not fix the FACS alignment inside guests yet. See next > patch.
The history here is complex. c/s 938cee9d41d3 in 2006 deleted a comment saying // FACS: should be 64-bit alignment // so it is put at the start of buffer // as the buffer is 64 bit alignment Clearly it means byte rather than bit, but the change also introduced logic to the effect of buf += ROUNDUP(sizeof(facs), 16). This (incorrect) alignment survived several morphs of the logic and was moved from hvmloader into libacpi by c/s 73b72736e6ca. The current code is clearly wrong, but happens to work correctly in hvmloader because FACS is the first table written and it starts on a page boundary. The logic does not work correctly when libxl passes a buffer which doesn't start on a page boundary. As a consequence, I'm not sure what to suggest as a Fixes tag here, except "the logic has been wrong for 15 years - patch everything". ~Andrew