lkml.org 
[lkml]   [2021]   [Jul]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 3/6] x86/tdx: Add SetupEventNotifyInterrupt TDX hypercall support
    Date
    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@intel.com>
    Reviewed-by: Andi Kleen <ak@linux.intel.com>
    Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    ---
    arch/x86/kernel/tdx.c | 25 +++++++++++++++++++++++++
    1 file changed, 25 insertions(+)

    diff --git a/arch/x86/kernel/tdx.c b/arch/x86/kernel/tdx.c
    index eb3a90051604..fcb0ed70ea19 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
    @@ -202,6 +203,30 @@ 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 == TDCALL_INVALID_OPERAND)
    + return -EINVAL;
    +
    + return 0;
    +}
    +
    static void tdg_get_info(void)
    {
    u64 ret;
    --
    2.25.1
    \
     
     \ /
      Last update: 2021-07-07 22:46    [W:2.312 / U:0.544 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site