On Fri, Oct 6, 2023 at 4:29 PM Andrew Cooper <[email protected]> wrote: > > From: Michal Orzel <[email protected]> > > The x86 hypercall ABI really used to have 6-argument hypercalls. V4V, the > downstream predecessor to Argo did take 6th args. > > However, the 6th arg being %ebp in the 32bit ABI makes it unusable in > practice, because that's the frame pointer in builds with frame pointers > enabled. Therefore Argo was altered to being a 5-arg hypercall when it was > upstreamed. > > c/s 2f531c122e95 ("x86: limit number of hypercall parameters to 5") removed > the ability for hypercalls to take 6 arguments. > > Update the documentation to match reality. > > Signed-off-by: Michal Orzel <[email protected]> > Signed-off-by: Andrew Cooper <[email protected]> > --- > CC: George Dunlap <[email protected]> > CC: Jan Beulich <[email protected]> > CC: Stefano Stabellini <[email protected]> > CC: Wei Liu <[email protected]> > CC: Julien Grall <[email protected]> > CC: Michal Orzel <[email protected]> > CC: Henry Wang <[email protected]> > > v2: > * Extend with the historical context of how 6-arg hypercalls have come and > gone. > --- > docs/guest-guide/x86/hypercall-abi.rst | 15 +++++++++++---- > xen/include/public/arch-x86/xen-x86_32.h | 2 +- > xen/include/public/arch-x86/xen-x86_64.h | 2 +- > 3 files changed, 13 insertions(+), 6 deletions(-) > > diff --git a/docs/guest-guide/x86/hypercall-abi.rst > b/docs/guest-guide/x86/hypercall-abi.rst > index 42a820386b68..c7a11a76712f 100644 > --- a/docs/guest-guide/x86/hypercall-abi.rst > +++ b/docs/guest-guide/x86/hypercall-abi.rst
> @@ -119,6 +119,13 @@ means. > .. [#kern] For HVM guests, ``HVMOP_guest_request_vm_event`` may be configured > to be usable from userspace, but this behaviour is not default. > > +.. [#params] Xen's ABI used to declare support for 6 hypercall arguments, > + using ``r9`` and ``ebp``. However, such an ABI clobbers the frame pointer > + in the 32bit code and does interact nicely with guest-side debugging. The I think you want s/does/does not/. With that, Reviewed-by: Jason Andryuk <[email protected]> > + predecessor to ``HYPERCALL_argo_op`` was a 6-argument hypercall, but the Also, I think it would be worth just naming v4v with "...predecessor to ``HYPERCALL_argo_op``, v4v, was...", so a future reader doesn't have to investigate to find out what the predecessor was. Regards, Jason > + ABI was intentionally altered when Argo was upstreamed (Xen 4.13) to be > the > + 5-argument hypercall it now is. > + > .. [#mode] While it is possible to use compatibility mode segments in a 64bit > kernel, hypercalls issues from such a mode will be interpreted with the > 32bit ABI. Such a setup is not expected in production scenarios.
