lkml.org 
[lkml]   [2021]   [Feb]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [RFC v1 09/26] x86/tdx: Handle CPUID via #VE
    From
    Date
    On 2/7/21 6:13 AM, Kirill A. Shutemov wrote:
    >>> + /* Allow to pass R10, R11, R12, R13, R14 and R15 down to the VMM */
    >>> + rcx = BIT(10) | BIT(11) | BIT(12) | BIT(13) | BIT(14) | BIT(15);
    >>> +
    >>> + asm volatile(TDCALL
    >>> + : "=a"(ret), "=r"(r10), "=r"(r11), "=r"(r12), "=r"(r13),
    >>> + "=r"(r14), "=r"(r15)
    >>> + : "a"(TDVMCALL), "r"(rcx), "r"(r10), "r"(r11), "r"(r12),
    >>> + "r"(r13)
    >>> + : );
    >> Some "+" constraints would make this simpler. But I think you should
    >> factor the TDCALL helper out into its own function.
    > Factor out TDCALL into a helper is tricky: different TDCALLs have
    > different list of registers passed to VMM.

    Couldn't you just have one big helper that takes *all* the registers
    that get used in any TDVMCALL and sets all the rcx bits? The users
    could just pass 0's for the things they don't use.

    Then you've got the ugly inline asm in one place. It also makes it
    harder to screw up the 'rcx' mask and end up passing registers you
    didn't want into a malicious VMM.

    \
     
     \ /
      Last update: 2021-02-07 17:03    [W:4.464 / U:0.372 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site