lkml.org 
[lkml]   [2024]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH v19 029/130] KVM: TDX: Add C wrapper functions for SEAMCALLs to the TDX module
    Date
    On Mon, 2024-02-26 at 00:25 -0800, isaku.yamahata@intel.com wrote:
    > +
    > +static inline u64 tdh_mem_sept_add(hpa_t tdr, gpa_t gpa, int level,
    > hpa_t page,
    > +                                  struct tdx_module_args *out)
    > +{
    > +       struct tdx_module_args in = {
    > +               .rcx = gpa | level,
    > +               .rdx = tdr,
    > +               .r8 = page,
    > +       };
    > +
    > +       clflush_cache_range(__va(page), PAGE_SIZE);
    > +       return tdx_seamcall(TDH_MEM_SEPT_ADD, &in, out);
    > +}

    The caller of this later in the series looks like this:

    err = tdh_mem_sept_add(kvm_tdx, gpa, tdx_level, hpa, &out);
    if (unlikely(err == TDX_ERROR_SEPT_BUSY))
    return -EAGAIN;
    if (unlikely(err == (TDX_EPT_ENTRY_STATE_INCORRECT |
    TDX_OPERAND_ID_RCX))) {
    union tdx_sept_entry entry = {
    .raw = out.rcx,
    };
    union tdx_sept_level_state level_state = {
    .raw = out.rdx,
    };

    /* someone updated the entry with same value. */
    if (level_state.level == tdx_level &&
    level_state.state == TDX_SEPT_PRESENT &&
    !entry.leaf && entry.pfn == (hpa >> PAGE_SHIFT))
    return -EAGAIN;
    }

    The helper abstracts setting the arguments into the proper registers
    fields passed in, but doesn't abstract pulling the result out from the
    register fields. Then the caller has to manually extract them in this
    verbose way. Why not have the helper do both?
    \
     
     \ /
      Last update: 2024-05-27 15:55    [W:3.929 / U:0.956 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site