Re: [PATCHv4 03/30] x86/tdx: Provide common base for SEAMCALL and TDCALL C wrappers

Dave Hansen
2022-02-25T16:12:39Z

> Bit 63 also has to be set as it represents error (0 is success with
> possible warning).
>
> Bit 62 indicates if the error is recoverable. (0 is recoverable)
>
> Bits 61:48 are reserved and must be 0. For this reason -1UL is not right.
>
> Bits 47:40 are class.
>
> Bits below that are up to grub.
>
> See Table 17.6 of TDX module 1.0 spec.
>
> So we can use
>
> #define TDX_SW_CLASS(code) ((code) | GENMASK_ULL(40, 47))
> #define TDX_ERROR(code) ((code) | (1UL << 63))
> #define TDX_SEAMCALL_VMFAILINVALID TDX_ERROR(TDX_SW_CLASS(0xFFFF0000ULL))
>
> But it looks silly to me. It brings more confusion than solves.

Passing 'code' is kinda silly now that I look at it. But, this:

#define TDX_ERROR (1UL << 63)
#define TDX_SW_ERROR (TDX_ERROR | GENMASK_ULL(40, 47))
#define TDX_SEAMCALL_VMFAILINVALID (TDX_SW_ERROR | 0xFFFF0000ULL)

Actually gives you a chance in hell of connecting this code back to the
spec.