On Mon, Aug 17, 2020 at 09:24:03PM -0700, Sean Christopherson wrote: > Rework __vdso_sgx_enter_enclave() to use a struct to hold the input and > output params. In the new struct, add an opaque "user_data" that can be > used to pass context across the vDSO, and an explicit "exit_reason" to > avoid overloading the return value. > > Moving the params into a struct will also make it less painful to use > dedicated exit reasons, and to support exiting on interrupts in future > patches. > > Cc: Nathaniel McCallum <npmccallum@xxxxxxxxxx> > Signed-off-by: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> > --- > arch/x86/entry/vdso/vsgx_enter_enclave.S | 72 ++++++++++++------- > arch/x86/include/uapi/asm/sgx.h | 90 ++++++++++++++++-------- > 2 files changed, 107 insertions(+), 55 deletions(-) > > diff --git a/arch/x86/entry/vdso/vsgx_enter_enclave.S b/arch/x86/entry/vdso/vsgx_enter_enclave.S > index 2d88acd408d4e..aaae6d6e28ac3 100644 > --- a/arch/x86/entry/vdso/vsgx_enter_enclave.S > +++ b/arch/x86/entry/vdso/vsgx_enter_enclave.S > @@ -7,9 +7,21 @@ > > #include "extable.h" > > -#define EX_LEAF 0*8 > -#define EX_TRAPNR 0*8+4 > -#define EX_ERROR_CODE 0*8+6 > +/* Offset of 'struct sgx_enter_enclave' relative to %rbp. */ > +#define RUN_OFFSET 2*8 Some better name please. > + > +/* Offsets into 'struct sgx_enter_enclave'. */ > +#define TCS_OFFEST 0*8 > +#define FLAGS_OFFSET 1*8 > +#define EXIT_LEAF_OFFSET 2*8 > +#define EXIT_REASON_OFFSET 2*8 + 4 > +#define USER_HANDLER_OFFSET 3*8 > +/* #define USER_DATA_OFFSET 4*8 */ > +#define EXCEPTION_OFFSET 5*8 These non-prefixed constants make the code really stressing to read given the complexity of it. Please, just write them like SGX_ENTER_ENCLAVE_TCS and so forth. /Jarkko