mirror of https://github.com/xemu-project/xemu.git
confidential guest support: Add kvm_init() and kvm_reset() in class
Different confidential VMs in different architectures all have the same needs to do their specific initialization (and maybe resetting) stuffs with KVM. Currently each of them exposes individual *_kvm_init() functions and let machine code or kvm code to call it. To facilitate the introduction of confidential guest technology from different x86 vendors, add two virtual functions, kvm_init() and kvm_reset() in ConfidentialGuestSupportClass, and expose two helpers functions for invodking them. Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> Message-Id: <20240229060038.606591-1-xiaoyao.li@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
292dd287e7
commit
41a605944e
|
@ -23,7 +23,10 @@
|
|||
#include "qom/object.h"
|
||||
|
||||
#define TYPE_CONFIDENTIAL_GUEST_SUPPORT "confidential-guest-support"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(ConfidentialGuestSupport, CONFIDENTIAL_GUEST_SUPPORT)
|
||||
OBJECT_DECLARE_TYPE(ConfidentialGuestSupport,
|
||||
ConfidentialGuestSupportClass,
|
||||
CONFIDENTIAL_GUEST_SUPPORT)
|
||||
|
||||
|
||||
struct ConfidentialGuestSupport {
|
||||
Object parent;
|
||||
|
@ -55,8 +58,37 @@ struct ConfidentialGuestSupport {
|
|||
|
||||
typedef struct ConfidentialGuestSupportClass {
|
||||
ObjectClass parent;
|
||||
|
||||
int (*kvm_init)(ConfidentialGuestSupport *cgs, Error **errp);
|
||||
int (*kvm_reset)(ConfidentialGuestSupport *cgs, Error **errp);
|
||||
} ConfidentialGuestSupportClass;
|
||||
|
||||
static inline int confidential_guest_kvm_init(ConfidentialGuestSupport *cgs,
|
||||
Error **errp)
|
||||
{
|
||||
ConfidentialGuestSupportClass *klass;
|
||||
|
||||
klass = CONFIDENTIAL_GUEST_SUPPORT_GET_CLASS(cgs);
|
||||
if (klass->kvm_init) {
|
||||
return klass->kvm_init(cgs, errp);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int confidential_guest_kvm_reset(ConfidentialGuestSupport *cgs,
|
||||
Error **errp)
|
||||
{
|
||||
ConfidentialGuestSupportClass *klass;
|
||||
|
||||
klass = CONFIDENTIAL_GUEST_SUPPORT_GET_CLASS(cgs);
|
||||
if (klass->kvm_reset) {
|
||||
return klass->kvm_reset(cgs, errp);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_USER_ONLY */
|
||||
|
||||
#endif /* QEMU_CONFIDENTIAL_GUEST_SUPPORT_H */
|
||||
|
|
Loading…
Reference in New Issue