FYI, QEMU soft freeze is next week, and rc0 release
is Jul 22nd. I proposed we merge this series once
the QEMU rc0 release is out, so this is likely ready
for the libvirt August 1st release.

On Thu, Jul 10, 2025 at 03:21:02AM -0400, Zhenzhong Duan wrote:
> Hi,
> 
> This series brings libvirt the x86 TDX support.
> 
> * What's TDX?
> TDX stands for Trust Domain Extensions which isolates VMs from
> the virtual-machine manager (VMM)/hypervisor and any other software on
> the platform.
> 
> This patchset extends libvirt to support TDX, with which one can start a TDX
> guest from high level rather than running qemu directly.
> 
> * Misc
> As QEMU use a software emulated way to reset guest which isn't supported by 
> TDX
> guest for security reason. We simulate reboot for TDX guest by kill and 
> create a
> new one in FakeReboot framework.
> 
> Complete code can be found at [1].
> 
> * Test
> Tested with upstream qemu v10.0.0-1724-gf9a3def17b
> shutdown/reboot/reset with virsh
> shutdown/reboot trigger in guest
> shutdown with on_poweroff=destroy/restart
> reboot with on_reboot=destroy/restart
> GUEST_PANICKED event processing
> auto firmware matching
> 
> * Patch organization
> - patch 1-4:   Some preparing work
> - patch 5-6:   Support query of TDX capabilities
> - patch 7-15:  Add TDX type to launchsecurity framework
> - patch 16-21: Add reboot/reset support to TDX guest
> - patch 22:    Add conf test dump/cases for '+inteltdx' variant
> - patch 23:    Add docs
> 
> TODO:
> - add reconnect logic in virsh command
> 
> [1] https://github.com/intel/libvirt-tdx/commits/tdx_for_upstream_v4
> 
> Thanks
> Zhenzhong
> 
> Changelog:
> v4:
> - add QGS config to qemuxmlconftest (Daniel)
> - use 0x10000000 policy value in test as debug isn't supported yet (Daniel)
> - s/mrowner/mrOwner/ s/mrownerconfig/mrOwnerConfig/ (Daniel)
> - s/quoteGenerationSocket/quoteGenerationService/ (Daniel)
> - handle "GUEST_PANICKED" event of type tdx (Daniel)
> - add automatic firmware matching (Daniel)
> 
> v3:
> - fix a hiden failure in qemuBuildTDXQGSCommandLine() (Peter Krempa)
> - avoid the use of the ternary operator (Peter Krempa)
> - add capability test dump before capability introduced (Peter Krempa)
> - change tests version number from 11.0.0 to 10.1.0 (Peter Krempa)
> 
> v2:
> - add capability and xmlconf test (Peter Krempa)
> 
> v1:
> - 
> s/virQEMUCapsKVMSupportsSecureGuestINTEL/virQEMUCapsKVMSupportsSecureGuestTDX 
> (Daniel)
> - make policy element optional and expose to QEMU directly (Daniel)
> - s/qemuProcessSecFakeReboot/qemuProcessFakeRebootViaRecreate (Daniel)
> - simplify QGS element schema by supporting only UNIX socket (Daniel)
> - add new events VIR_DOMAIN_EVENT_[STOPPED|STARTED] for control plane (Daniel)
> - s/quoteGenerationService/quoteGenerationSocket as QEMU
> - add virsh reset support
> 
> rfcv4:
> - add a check to tools/virt-host-validate-qemu.c (Daniel)
> - remove check of q35 (Daniel)
> - model 'SocktetAddress' QAPI in xml schema (Daniel)
> - s/Quote-Generation-Service/quoteGenerationService/ (Daniel)
> - define bits in tdx->policy and add validating logic (Daniel)
> - presume QEMU choose split kernel irqchip for TDX guest by default (Daniel)
> - utilize existing FakeReboot framework to do reboot for TDX guest (Daniel)
> - drop patch11 'conf: Add support to keep same domid for hard reboot' (Daniel)
> - add test in tests/ to validate parsing and formatting logic (Daniel)
> - add doc in docs/formatdomain.rst (Daniel)
> - add R-B
> 
> rfcv3:
> - Change to generate qemu cmdline with -bios
> - drop firmware auto match as -bios is used
> - add a hard reboot method to reboot TDX guest
> 
> rfcv3: https://www.mail-archive.com/devel@lists.libvirt.org/msg00385.html
> 
> rfcv2:
> - give up using qmp cmd and check TDX directly on host for TDX capabilities.
> - use launchsecurity framework to support TDX
> - use <os>.<loader> for general loader
> - add auto firmware match feature for TDX
> 
> A example TDVF fimware description file 70-edk2-x86_64-tdx.json:
> {
>     "description": "UEFI firmware for x86_64, supporting Intel TDX",
>     "interface-types": [
>         "uefi"
>     ],
>     "mapping": {
>         "device": "generic",
>         "filename": "/usr/share/OVMF/OVMF_CODE-tdx.fd"
>     },
>     "targets": [
>         {
>             "architecture": "x86_64",
>             "machines": [
>                 "pc-q35-*"
>             ]
>         }
>     ],
>     "features": [
>         "intel-tdx",
>         "verbose-dynamic"
>     ],
>     "tags": [
> 
>     ]
> }
> 
> rfcv2: https://www.mail-archive.com/libvir-list@redhat.com/msg219378.html
> 
> 
> Zhenzhong Duan (23):
>   tools: Secure guest check for Intel in virt-host-validate
>   qemu: Check if INTEL Trust Domain Extention support is enabled
>   qemucapabilitiesdata: Document '+inteltdx' variant
>   qemucapabilitiestest: Add data for the qemu-10.1.0 dev cycle on x86_64
>     for the '+inteltdx' variant
>   qemu: Add QEMU_CAPS_TDX_GUEST capability
>   conf: Expose TDX feature in domain capabilities
>   conf: Add tdx as launch security type
>   conf: Validate TDX launchSecurity element
>     mrConfigId/mrOwner/mrOwnerConfig
>   qemu: Add command line and validation for TDX type
>   conf: Expose TDX type in domain launch security capability
>   qemu: Force special parameters enabled for TDX guest
>   qemu: log the crash information for TDX
>   qemu_firmware: Pick the right firmware for TDX guests
>   conf: Add Intel TDX Quote Generation Service(QGS) support
>   qemu: Add command line for TDX Quote Generation Service(QGS)
>   qemu: Add FakeReboot support for TDX guest
>   qemu: Support reboot command in guest
>   qemu: Avoid duplicate FakeReboot for secure guest
>   qemu: Send event VIR_DOMAIN_EVENT_[STOPPED|STARTED] during recreation
>   qemu: Bypass sending VIR_DOMAIN_EVENT_RESUMED event when TD VM reboot
>   qemu: Support domain reset command for TDX guest
>   qemuxmlconftest: Add latest version of 'launch-security-tdx*' test
>     data
>   docs: domain: Add documentation for Intel TDX guest
> 
>  docs/formatdomain.rst                         |    63 +
>  docs/formatdomaincaps.rst                     |     1 +
>  examples/c/misc/event-test.c                  |     6 +
>  include/libvirt/libvirt-domain.h              |     2 +
>  src/conf/domain_capabilities.c                |     1 +
>  src/conf/domain_capabilities.h                |     1 +
>  src/conf/domain_conf.c                        |    82 +
>  src/conf/domain_conf.h                        |    21 +
>  src/conf/domain_validate.c                    |    11 +
>  src/conf/schemas/domaincaps.rng               |     9 +
>  src/conf/schemas/domaincommon.rng             |    41 +
>  src/conf/virconftypes.h                       |     2 +
>  src/qemu/qemu_capabilities.c                  |    38 +-
>  src/qemu/qemu_capabilities.h                  |     1 +
>  src/qemu/qemu_cgroup.c                        |     1 +
>  src/qemu/qemu_command.c                       |    43 +
>  src/qemu/qemu_domain.h                        |     1 +
>  src/qemu/qemu_driver.c                        |    11 +-
>  src/qemu/qemu_firmware.c                      |    20 +
>  src/qemu/qemu_monitor.c                       |    50 +-
>  src/qemu/qemu_monitor.h                       |    13 +-
>  src/qemu/qemu_monitor_json.c                  |    38 +-
>  src/qemu/qemu_namespace.c                     |     1 +
>  src/qemu/qemu_process.c                       |   104 +-
>  src/qemu/qemu_process.h                       |     2 +
>  src/qemu/qemu_validate.c                      |    45 +
>  src/security/security_dac.c                   |     2 +
>  .../qemu_10.1.0-q35.x86_64+inteltdx.xml       |   783 +
>  .../domaincapsdata/qemu_10.1.0-q35.x86_64.xml |     7 +-
>  .../qemu_10.1.0-tcg.x86_64+inteltdx.xml       |  1830 +
>  .../domaincapsdata/qemu_10.1.0-tcg.x86_64.xml |     6 +-
>  .../qemu_10.1.0.x86_64+inteltdx.xml           |   783 +
>  tests/domaincapsdata/qemu_10.1.0.x86_64.xml   |     7 +-
>  tests/domaincapsmock.c                        |     3 +-
>  tests/qemucapabilitiesdata/README.rst         |     5 +
>  .../caps_10.1.0_x86_64+inteltdx.replies       | 44552 ++++++++++++++++
>  .../caps_10.1.0_x86_64+inteltdx.xml           |  3585 ++
>  .../caps_10.1.0_x86_64.xml                    |     1 +
>  .../caps.x86_64+inteltdx.xml                  |    29 +
>  .../firmware/60-edk2-ovmf-x64-inteltdx.json   |     1 +
>  ...h-security-tdx.x86_64-latest+inteltdx.args |    44 +
>  ...ch-security-tdx.x86_64-latest+inteltdx.xml |    75 +
>  tests/qemuxmlconfdata/launch-security-tdx.xml |    28 +
>  tests/qemuxmlconftest.c                       |     3 +
>  tools/virsh-domain-event.c                    |     6 +-
>  tools/virt-host-validate-common.c             |    31 +-
>  tools/virt-host-validate-common.h             |     1 +
>  47 files changed, 52372 insertions(+), 18 deletions(-)
>  create mode 100644 tests/domaincapsdata/qemu_10.1.0-q35.x86_64+inteltdx.xml
>  create mode 100644 tests/domaincapsdata/qemu_10.1.0-tcg.x86_64+inteltdx.xml
>  create mode 100644 tests/domaincapsdata/qemu_10.1.0.x86_64+inteltdx.xml
>  create mode 100644 
> tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.replies
>  create mode 100644 tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml
>  create mode 100644 tests/qemucaps2xmloutdata/caps.x86_64+inteltdx.xml
>  create mode 100644 
> tests/qemuxmlconfdata/launch-security-tdx.x86_64-latest+inteltdx.args
>  create mode 100644 
> tests/qemuxmlconfdata/launch-security-tdx.x86_64-latest+inteltdx.xml
>  create mode 100644 tests/qemuxmlconfdata/launch-security-tdx.xml
> 
> -- 
> 2.47.1
> 

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 via email to