lkml.org 
[lkml]   [2024]   [Mar]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    SubjectRe: [PATCH 4/4] x86/tdx: Enable ENUM_TOPOLOGY
    From

    On 3/9/24 1:02 PM, Kirill A. Shutemov wrote:
    > TDX 1.0 generates a #VE when accessing topology-related CPUID leafs
    > (0xB and 0x1F) and the X2APIC_APICID MSR. The kernel returns all
    > zeros on CPUID #VEs. In practice, this means that the kernel can only
    > boot with a plain topology. Any complications will cause problems.

    Is this issue only for TDX 1.0? What about TDX > 1.0?

    >
    > The ENUM_TOPOLOGY feature allows the VMM to provide topology
    > information to the guest in a safe manner. Enabling the feature
    > eliminates topology-related #VEs: the TDX module virtualizes
    > accesses to the CPUID leafs and the MSR.
    >
    > Enable ENUM_TOPOLOGY if it is available.

    I cant find the ENUM_TOPOLOGY in ABI spec (https://cdrdv2.intel.com/v1/dl/getContent/795381).

    Can you point me to the correct document?

    >
    > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    > ---
    > arch/x86/coco/tdx/tdx.c | 20 ++++++++++++++++++++
    > arch/x86/include/asm/shared/tdx.h | 3 +++
    > 2 files changed, 23 insertions(+)
    >
    > diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c
    > index d9ea82f8772d..291e45db8d54 100644
    > --- a/arch/x86/coco/tdx/tdx.c
    > +++ b/arch/x86/coco/tdx/tdx.c
    > @@ -280,6 +280,26 @@ static void tdx_setup(u64 *cc_mask)
    > else
    > tdx_panic(msg);
    > }
    > +
    > + /*
    > + * TDX 1.0 generates a #VE when accessing topology-related CPUID leafs
    > + * (0xB and 0x1F) and the X2APIC_APICID MSR. The kernel returns all
    > + * zeros on CPUID #VEs. In practice, this means that the kernel can only
    > + * boot with a plain topology. Any complications will cause problems.
    > + *
    > + * The ENUM_TOPOLOGY feature allows the VMM to provide topology
    > + * information to the guest in a safe manner. Enabling the feature
    > + * eliminates topology-related #VEs: the TDX module virtualizes
    > + * accesses to the CPUID leafs and the MSR.
    > + *
    > + * Enable ENUM_TOPOLOGY if it is available.
    > + */

    Why are we overriding it in guest? Why can't this by done by TDX Module
    or QEMU during initialization?

    > + if ((features & TDX_FEATURES0_ENUM_TOPOLOGY) &&
    > + tdg_vm_rd(TDCS_TOPOLOGY_ENUM_CONFIGURED)) {
    > + tdg_vm_wr(TDCS_TD_CTLS,
    > + TD_CTLS_ENUM_TOPOLOGY,
    > + TD_CTLS_ENUM_TOPOLOGY);
    > + }
    > }
    >
    > /*
    > diff --git a/arch/x86/include/asm/shared/tdx.h b/arch/x86/include/asm/shared/tdx.h
    > index 29a61c72e4dd..2964c506b241 100644
    > --- a/arch/x86/include/asm/shared/tdx.h
    > +++ b/arch/x86/include/asm/shared/tdx.h
    > @@ -27,15 +27,18 @@
    > #define TDCS_CONFIG_FLAGS 0x1110000300000016
    > #define TDCS_TD_CTLS 0x1110000300000017
    > #define TDCS_NOTIFY_ENABLES 0x9100000000000010
    > +#define TDCS_TOPOLOGY_ENUM_CONFIGURED 0x9100000000000019
    >
    > /* TDCS_TDX_FEATURES0 bits */
    > #define TDX_FEATURES0_PENDING_EPT_VIOLATION_V2 BIT_ULL(16)
    > +#define TDX_FEATURES0_ENUM_TOPOLOGY BIT_ULL(20)
    >
    > /* TDCS_CONFIG_FLAGS bits */
    > #define TDCS_CONFIG_FLEXIBLE_PENDING_VE BIT_ULL(1)
    >
    > /* TDCS_TD_CTLS bits */
    > #define TD_CTLS_PENDING_VE_DISABLE BIT_ULL(0)
    > +#define TD_CTLS_ENUM_TOPOLOGY BIT_ULL(1)
    >
    > /* TDX hypercall Leaf IDs */
    > #define TDVMCALL_MAP_GPA 0x10001

    --
    Sathyanarayanan Kuppuswamy
    Linux Kernel Developer


    \
     
     \ /
      Last update: 2024-05-27 15:43    [W:4.256 / U:0.424 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site