SetupEventNotifyInterrupt TDX hypercall is used by guest TD to specify which interrupt vector to use as an event-notify vector to the VMM. Such registered vector is also used by Host VMM to notify about completion of GetQuote requests to the Guest TD. Add tdx_hcall_set_notify_intr() helper function to implement the SetupEventNotifyInterrupt hypercall. This will be used by the TD quote driver. Details about the SetupEventNotifyInterrupt TDVMCALL can be found in TDX Guest-Host Communication Interface (GHCI) Specification, sec 3.5 "TDG.VP.VMCALL<SetupEventNotifyInterrupt>". Reviewed-by: Tony Luck <tony.luck@xxxxxxxxx> Reviewed-by: Andi Kleen <ak@xxxxxxxxxxxxxxx> Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx> --- Change since v2: * Included TDVMCALL_SUCCESS case check in tdx_hcall_set_notify_intr(). arch/x86/kernel/tdx.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/arch/x86/kernel/tdx.c b/arch/x86/kernel/tdx.c index aa49c6809a0c..27e56ab0d4a2 100644 --- a/arch/x86/kernel/tdx.c +++ b/arch/x86/kernel/tdx.c @@ -29,6 +29,7 @@ /* TDX hypercall Leaf IDs */ #define TDVMCALL_MAP_GPA 0x10001 #define TDVMCALL_GET_QUOTE 0x10002 +#define TDVMCALL_SETUP_NOTIFY_INTR 0x10004 /* TDX Module call error codes */ #define TDX_PAGE_ALREADY_ACCEPTED 0x8000000000000001 @@ -208,6 +209,32 @@ int tdx_hcall_get_quote(u64 data) } EXPORT_SYMBOL_GPL(tdx_hcall_get_quote); +/* + * tdx_hcall_set_notify_intr() - Setup Event Notify Interrupt Vector. + * + * @vector : Vector address to be used for notification. + * + * return 0 on success or failure error number. + */ +int tdx_hcall_set_notify_intr(u8 vector) +{ + u64 ret; + + /* Minimum vector value allowed is 32 */ + if (vector < 32) + return -EINVAL; + + ret = _trace_tdx_hypercall(TDVMCALL_SETUP_NOTIFY_INTR, vector, 0, 0, 0, + NULL); + + if (ret == TDVMCALL_SUCCESS) + return 0; + else if (ret == TDCALL_INVALID_OPERAND) + return -EINVAL; + + return -EIO; +} + static void tdg_get_info(void) { u64 ret; -- 2.25.1