mirror of
https://github.com/qemu/qemu.git
synced 2025-08-15 22:31:15 +00:00

IGVM files can contain an initial VMSA that should be applied to each vcpu as part of the initial guest state. The sev_features flags are provided as part of the VMSA structure. However, KVM only allows sev_features to be set during initialization and not as the guest is being prepared for launch. This patch queries KVM for the supported set of sev_features flags and processes the VP context entries in the IGVM file during kvm_init to determine any sev_features flags set in the IGVM file. These are then provided in the call to KVM_SEV_INIT2 to ensure the guest state matches that specified in the IGVM file. The igvm process() function is modified to allow a partial processing of the file during initialization, with only the IGVM_VHT_VP_CONTEXT fields being processed. This means the function is called twice, firstly to extract the sev_features then secondly to actually configure the guest. Signed-off-by: Roy Hopkins <roy.hopkins@randomman.co.uk> Acked-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Stefano Garzarella <sgarzare@redhat.com> Acked-by: Gerd Hoffman <kraxel@redhat.com> Tested-by: Stefano Garzarella <sgarzare@redhat.com> Reviewed-by: Liam Merwick <liam.merwick@oracle.com> Reviewed-by: Ani Sinha <anisinha@redhat.com> Link: https://lore.kernel.org/r/b2f986aae04e1da2aee530c9be22a54c0c59a560.1751554099.git.roy.hopkins@randomman.co.uk Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
50 lines
1.2 KiB
C
50 lines
1.2 KiB
C
/*
|
|
* QEMU IGVM interface
|
|
*
|
|
* Copyright (C) 2024 SUSE
|
|
*
|
|
* Authors:
|
|
* Roy Hopkins <roy.hopkins@randomman.co.uk>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#ifndef QEMU_IGVM_CFG_H
|
|
#define QEMU_IGVM_CFG_H
|
|
|
|
#include "qom/object.h"
|
|
|
|
typedef struct IgvmCfg {
|
|
ObjectClass parent_class;
|
|
|
|
/*
|
|
* filename: Filename that specifies a file that contains the configuration
|
|
* of the guest in Independent Guest Virtual Machine (IGVM)
|
|
* format.
|
|
*/
|
|
char *filename;
|
|
} IgvmCfg;
|
|
|
|
typedef struct IgvmCfgClass {
|
|
ObjectClass parent_class;
|
|
|
|
/*
|
|
* If an IGVM filename has been specified then process the IGVM file.
|
|
* Performs a no-op if no filename has been specified.
|
|
* If onlyVpContext is true then only the IGVM_VHT_VP_CONTEXT entries
|
|
* in the IGVM file will be processed, allowing information about the
|
|
* CPU state to be determined before processing the entire file.
|
|
*
|
|
* Returns 0 for ok and -1 on error.
|
|
*/
|
|
int (*process)(IgvmCfg *cfg, ConfidentialGuestSupport *cgs,
|
|
bool onlyVpContext, Error **errp);
|
|
|
|
} IgvmCfgClass;
|
|
|
|
#define TYPE_IGVM_CFG "igvm-cfg"
|
|
|
|
OBJECT_DECLARE_TYPE(IgvmCfg, IgvmCfgClass, IGVM_CFG)
|
|
|
|
#endif
|