qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Xiaoyao Li <xiaoyao.li@intel.com>
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Francesco Lavra" <francescolavra.fl@gmail.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	qemu-devel@nongnu.org,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Rick Edgecombe" <rick.p.edgecombe@intel.com>,
	devel@lists.libvirt.org, "Jiri Denemark" <jdenemar@redhat.com>
Subject: Re: [PATCH v8 55/55] docs: Add TDX documentation
Date: Wed, 2 Apr 2025 11:50:26 +0100	[thread overview]
Message-ID: <Z-0WclTZ-e-sTjzO@redhat.com> (raw)
In-Reply-To: <20250401130205.2198253-56-xiaoyao.li@intel.com>

CC libvirt / Jiri, for confirmation about whether the CPUID restrictions
listed below will have any possible impact on libvirt CPUID handling...

On Tue, Apr 01, 2025 at 09:02:05AM -0400, Xiaoyao Li wrote:
> Add docs/system/i386/tdx.rst for TDX support, and add tdx in
> confidential-guest-support.rst
> 
> Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
> ---
> Changes in v6:
>  - Add more information of "Feature configuration"
>  - Mark TD Attestation as future work because KVM now drops the support
>    of it.
> 
> Changes in v5:
>  - Add TD attestation section and update the QEMU parameter;
> 
> Changes since v1:
>  - Add prerequisite of private gmem;
>  - update example command to launch TD;
> 
> Changes since RFC v4:
>  - add the restriction that kernel-irqchip must be split
> ---
>  docs/system/confidential-guest-support.rst |   1 +
>  docs/system/i386/tdx.rst                   | 156 +++++++++++++++++++++
>  docs/system/target-i386.rst                |   1 +
>  3 files changed, 158 insertions(+)
>  create mode 100644 docs/system/i386/tdx.rst


> +Feature Configuration
> +---------------------
> +
> +Unlike non-TDX VM, the CPU features (enumerated by CPU or MSR) of a TD are not
> +under full control of VMM. VMM can only configure part of features of a TD on
> +``KVM_TDX_INIT_VM`` command of VM scope ``MEMORY_ENCRYPT_OP`` ioctl.
> +
> +The configurable features have three types:
> +
> +- Attributes:
> +  - PKS (bit 30) controls whether Supervisor Protection Keys is exposed to TD,
> +  which determines related CPUID bit and CR4 bit;
> +  - PERFMON (bit 63) controls whether PMU is exposed to TD.
> +
> +- XSAVE related features (XFAM):
> +  XFAM is a 64b mask, which has the same format as XCR0 or IA32_XSS MSR. It
> +  determines the set of extended features available for use by the guest TD.
> +
> +- CPUID features:
> +  Only some bits of some CPUID leaves are directly configurable by VMM.
> +
> +What features can be configured is reported via TDX capabilities.
> +
> +TDX capabilities
> +~~~~~~~~~~~~~~~~
> +
> +The VM scope ``MEMORY_ENCRYPT_OP`` ioctl provides command ``KVM_TDX_CAPABILITIES``
> +to get the TDX capabilities from KVM. It returns a data structure of
> +``struct kvm_tdx_capabilities``, which tells the supported configuration of
> +attributes, XFAM and CPUIDs.
> +
> +TD attributes
> +~~~~~~~~~~~~~
> +
> +QEMU supports configuring raw 64-bit TD attributes directly via "attributes"
> +property of "tdx-guest" object. Note, it's users' responsibility to provide a
> +valid value because some bits may not supported by current QEMU or KVM yet.
> +
> +QEMU also supports the configuration of individual attribute bits that are
> +supported by it, via properties of "tdx-guest" object.
> +E.g., "sept-ve-disable" (bit 28).
> +
> +MSR based features
> +~~~~~~~~~~~~~~~~~~
> +
> +Current KVM doesn't support MSR based feature (e.g., MSR_IA32_ARCH_CAPABILITIES)
> +configuration for TDX, and it's a future work to enable it in QEMU when KVM adds
> +support of it.
> +
> +Feature check
> +~~~~~~~~~~~~~
> +
> +QEMU checks if the final (CPU) features, determined by given cpu model and
> +explicit feature adjustment of "+featureA/-featureB", can be supported or not.
> +It can produce feature not supported warning like
> +
> +  "warning: host doesn't support requested feature: CPUID.07H:EBX.intel-pt [bit 25]"
> +
> +It can also produce warning like
> +
> +  "warning: TDX forcibly sets the feature: CPUID.80000007H:EDX.invtsc [bit 8]"
> +
> +if the fixed-1 feature is requested to be disabled explicitly. This is newly
> +added to QEMU for TDX because TDX has fixed-1 features that are forcibly enabled
> +by TDX module and VMM cannot disable them.

This is where I'm wondering if libvirt has anything to be concerned
about. Possibly when libvirt queries the actual CPUID after launching
the guest it will just "do the right thing" ? Wondering if there's any
need for libvirt to be aware of CPUID restrictions before that point
though ?


> +
> +Launching a TD (TDX VM)
> +-----------------------
> +
> +To launch a TD, the necessary command line options are tdx-guest object and
> +split kernel-irqchip, as below:
> +
> +.. parsed-literal::
> +
> +    |qemu_system_x86| \\
> +        -object tdx-guest,id=tdx0 \\
> +        -machine ...,kernel-irqchip=split,confidential-guest-support=tdx0 \\
> +        -bios OVMF.fd \\

I don't think we need to show 'kernel-irqchip=split' now that we "do the
right thing" by default


This surely also ought to include '-accel kvm', as IIUC there's no
TCG support for TDX.

And presumably '-cpu host', since QEMU's default 'qemu64' CPU model
is likely a terrible match for what TDX will force set.

> +
> +Restrictions
> +------------
> +
> + - kernel-irqchip must be split;

Can append

   "This is set by default for TDX guests if kernel-irqchip is left on
    its default 'auto' setting."

> +
> + - No readonly support for private memory;
> +
> + - No SMM support: SMM support requires manipulating the guest register states
> +   which is not allowed;
> +


With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



  reply	other threads:[~2025-04-02 10:51 UTC|newest]

Thread overview: 161+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-01 13:01 [PATCH for 10.1 v8 00/55] QEMU TDX support Xiaoyao Li
2025-04-01 13:01 ` [PATCH v8 01/55] *** HACK *** linux-headers: Update headers to pull in TDX API changes Xiaoyao Li
2025-04-18  9:47   ` Zhao Liu
2025-04-22  1:57     ` Xiaoyao Li
2025-04-01 13:01 ` [PATCH v8 02/55] i386: Introduce tdx-guest object Xiaoyao Li
2025-04-02 10:53   ` Daniel P. Berrangé
2025-04-18  9:17   ` Zhao Liu
2025-04-22  2:14     ` Xiaoyao Li
2025-04-22  8:24     ` Daniel P. Berrangé
2025-04-22 14:25       ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 03/55] i386/tdx: Implement tdx_kvm_type() for TDX Xiaoyao Li
2025-04-02 10:55   ` Daniel P. Berrangé
2025-04-18  9:23   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 04/55] i386/tdx: Implement tdx_kvm_init() to initialize TDX VM context Xiaoyao Li
2025-04-02 10:57   ` Daniel P. Berrangé
2025-04-18  9:32   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 05/55] i386/tdx: Get tdx_capabilities via KVM_TDX_CAPABILITIES Xiaoyao Li
2025-04-02 11:00   ` Daniel P. Berrangé
2025-04-02 14:52     ` Xiaoyao Li
2025-04-02 14:54       ` Daniel P. Berrangé
2025-04-01 13:01 ` [PATCH v8 06/55] i386/tdx: Introduce is_tdx_vm() helper and cache tdx_guest object Xiaoyao Li
2025-04-18  9:45   ` Zhao Liu
2025-04-22  2:32     ` Xiaoyao Li
2025-04-22 14:20       ` Zhao Liu
2025-04-22 14:27         ` Xiaoyao Li
2025-04-01 13:01 ` [PATCH v8 07/55] kvm: Introduce kvm_arch_pre_create_vcpu() Xiaoyao Li
2025-04-02 11:43   ` Daniel P. Berrangé
2025-04-22 14:31   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 08/55] i386/tdx: Initialize TDX before creating TD vcpus Xiaoyao Li
2025-04-02 11:41   ` Daniel P. Berrangé
2025-04-08  2:37     ` Xiaoyao Li
2025-04-22 15:34       ` Zhao Liu
2025-04-23  8:00         ` Xiaoyao Li
2025-04-23 12:18           ` Zhao Liu
2025-04-22 14:54   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 09/55] i386/tdx: Add property sept-ve-disable for tdx-guest object Xiaoyao Li
2025-04-02 11:45   ` Daniel P. Berrangé
2025-04-22 14:56   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 10/55] i386/tdx: Make sept_ve_disable set by default Xiaoyao Li
2025-04-02 11:45   ` Daniel P. Berrangé
2025-04-22 15:00   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 11/55] i386/tdx: Wire CPU features up with attributes of TD guest Xiaoyao Li
2025-04-02 11:46   ` Daniel P. Berrangé
2025-04-22 15:06   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 12/55] i386/tdx: Validate TD attributes Xiaoyao Li
2025-04-02 11:47   ` Daniel P. Berrangé
2025-04-09  2:57     ` Xiaoyao Li
2025-04-22 15:35   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 13/55] i386/tdx: Support user configurable mrconfigid/mrowner/mrownerconfig Xiaoyao Li
2025-04-02 11:51   ` Daniel P. Berrangé
2025-04-08  3:14     ` Xiaoyao Li
2025-04-07 11:59   ` Markus Armbruster
2025-04-22 15:42   ` Zhao Liu
2025-04-23  8:11     ` Xiaoyao Li
2025-04-23 12:31       ` Zhao Liu
2025-04-23 13:08         ` Xiaoyao Li
2025-04-23 13:33       ` Daniel P. Berrangé
2025-04-01 13:01 ` [PATCH v8 14/55] i386/tdx: Set APIC bus rate to match with what TDX module enforces Xiaoyao Li
2025-04-02 11:56   ` Daniel P. Berrangé
2025-04-08  3:14     ` Xiaoyao Li
2025-04-22 15:44   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 15/55] i386/tdx: Implement user specified tsc frequency Xiaoyao Li
2025-04-02 12:00   ` Daniel P. Berrangé
2025-04-23  3:25   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 16/55] i386/tdx: load TDVF for TD guest Xiaoyao Li
2025-04-24  7:52   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 17/55] i386/tdvf: Introduce function to parse TDVF metadata Xiaoyao Li
2025-04-02 12:08   ` Daniel P. Berrangé
2025-04-09  4:11     ` Xiaoyao Li
2025-04-24  8:15       ` Zhao Liu
2025-04-24  8:11   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 18/55] i386/tdx: Parse TDVF metadata for TDX VM Xiaoyao Li
2025-04-02 12:11   ` Daniel P. Berrangé
2025-04-24  8:16   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 19/55] i386/tdx: Don't initialize pc.rom for TDX VMs Xiaoyao Li
2025-04-24 14:52   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 20/55] i386/tdx: Track mem_ptr for each firmware entry of TDVF Xiaoyao Li
2025-04-24 15:09   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 21/55] i386/tdx: Track RAM entries for TDX VM Xiaoyao Li
2025-04-25  4:49   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 22/55] headers: Add definitions from UEFI spec for volumes, resources, etc Xiaoyao Li
2025-04-25  4:51   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 23/55] i386/tdx: Setup the TD HOB list Xiaoyao Li
2025-04-25  7:05   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 24/55] i386/tdx: Add TDVF memory via KVM_TDX_INIT_MEM_REGION Xiaoyao Li
2025-04-25  8:07   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 25/55] i386/tdx: Call KVM_TDX_INIT_VCPU to initialize TDX vcpu Xiaoyao Li
2025-04-25  8:12   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 26/55] i386/tdx: Finalize TDX VM Xiaoyao Li
2025-04-27  9:07   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 27/55] i386/tdx: Enable user exit on KVM_HC_MAP_GPA_RANGE Xiaoyao Li
2025-04-27  9:07   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 28/55] i386/tdx: Handle KVM_SYSTEM_EVENT_TDX_FATAL Xiaoyao Li
2025-04-28 15:00   ` Zhao Liu
2025-05-08  6:07     ` Xiaoyao Li
2025-04-01 13:01 ` [PATCH v8 29/55] i386/tdx: Wire TDX_REPORT_FATAL_ERROR with GuestPanic facility Xiaoyao Li
2025-04-28 15:23   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 30/55] kvm: Check KVM_CAP_MAX_VCPUS at vm level Xiaoyao Li
2025-04-28 15:54   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 31/55] i386/cpu: introduce x86_confidential_guest_cpu_instance_init() Xiaoyao Li
2025-04-24  5:51   ` Xiaoyao Li
2025-04-29 10:06     ` Zhao Liu
2025-05-07  1:42       ` Xiaoyao Li
2025-04-29  6:35   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 32/55] i386/tdx: implement tdx_cpu_instance_init() Xiaoyao Li
2025-04-29  6:42   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 33/55] i386/cpu: Introduce enable_cpuid_0x1f to force exposing CPUID 0x1f Xiaoyao Li
2025-04-29 10:10   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 34/55] i386/tdx: Force " Xiaoyao Li
2025-04-29 10:10   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 35/55] i386/tdx: Set kvm_readonly_mem_enabled to false for TDX VM Xiaoyao Li
2025-04-29 10:12   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 36/55] i386/tdx: Disable SMM for TDX VMs Xiaoyao Li
2025-04-02 12:25   ` Daniel P. Berrangé
2025-04-29 10:15   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 37/55] i386/tdx: Disable PIC " Xiaoyao Li
2025-04-02 12:27   ` Daniel P. Berrangé
2025-04-29 10:16   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 38/55] i386/tdx: Set and check kernel_irqchip mode for TDX Xiaoyao Li
2025-04-02 10:41   ` Daniel P. Berrangé
2025-04-08  5:03     ` Xiaoyao Li
2025-04-29 10:22   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 39/55] i386/tdx: Don't synchronize guest tsc for TDs Xiaoyao Li
2025-04-29 10:18   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 40/55] i386/tdx: Only configure MSR_IA32_UCODE_REV in kvm_init_msrs() " Xiaoyao Li
2025-04-29 10:20   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 41/55] i386/apic: Skip kvm_apic_put() for TDX Xiaoyao Li
2025-05-04 15:46   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 42/55] cpu: Don't set vcpu_dirty when guest_state_protected Xiaoyao Li
2025-05-04 15:48   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 43/55] i386/cgs: Rename *mask_cpuid_features() to *adjust_cpuid_features() Xiaoyao Li
2025-04-02 12:57   ` Daniel P. Berrangé
2025-05-04 15:49   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 44/55] i386/tdx: Implement adjust_cpuid_features() for TDX Xiaoyao Li
2025-05-04 16:05   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 45/55] i386/tdx: Add TDX fixed1 bits to supported CPUIDs Xiaoyao Li
2025-04-02 12:32   ` Daniel P. Berrangé
2025-05-04 16:38   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 46/55] i386/tdx: Add supported CPUID bits related to TD Attributes Xiaoyao Li
2025-05-06 11:31   ` Zhao Liu
2025-05-08  6:31     ` Xiaoyao Li
2025-04-01 13:01 ` [PATCH v8 47/55] i386/tdx: Add supported CPUID bits relates to XFAM Xiaoyao Li
2025-04-01 13:01 ` [PATCH v8 48/55] i386/tdx: Add XFD to supported bit of TDX Xiaoyao Li
2025-05-06 11:25   ` Zhao Liu
2025-04-01 13:01 ` [PATCH v8 49/55] i386/tdx: Define supported KVM features for TDX Xiaoyao Li
2025-05-05 15:09   ` Zhao Liu
2025-04-01 13:02 ` [PATCH v8 50/55] i386/cgs: Introduce x86_confidential_guest_check_features() Xiaoyao Li
2025-05-05 15:11   ` Zhao Liu
2025-04-01 13:02 ` [PATCH v8 51/55] i386/tdx: Fetch and validate CPUID of TD guest Xiaoyao Li
2025-04-01 13:02 ` [PATCH v8 52/55] i386/tdx: Don't treat SYSCALL as unavailable Xiaoyao Li
2025-05-05 15:40   ` Zhao Liu
2025-04-01 13:02 ` [PATCH v8 53/55] i386/tdx: Make invtsc default on Xiaoyao Li
2025-05-05 15:14   ` Zhao Liu
2025-04-01 13:02 ` [PATCH v8 54/55] i386/tdx: Validate phys_bits against host value Xiaoyao Li
2025-04-02 12:37   ` Daniel P. Berrangé
2025-05-05 15:29   ` Zhao Liu
2025-05-08  6:33     ` Xiaoyao Li
2025-04-01 13:02 ` [PATCH v8 55/55] docs: Add TDX documentation Xiaoyao Li
2025-04-02 10:50   ` Daniel P. Berrangé [this message]
2025-04-02 11:47     ` Jiří Denemark
2025-04-08  5:15     ` Xiaoyao Li

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z-0WclTZ-e-sTjzO@redhat.com \
    --to=berrange@redhat.com \
    --cc=armbru@redhat.com \
    --cc=devel@lists.libvirt.org \
    --cc=francescolavra.fl@gmail.com \
    --cc=jdenemar@redhat.com \
    --cc=mst@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rick.p.edgecombe@intel.com \
    --cc=xiaoyao.li@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).