qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v15 15/60] i386/xen: add pc_machine_kvm_type to initialize XE


From: Xiaoyao Li
Subject: Re: [PATCH v15 15/60] i386/xen: add pc_machine_kvm_type to initialize XEN_EMULATE mode
Date: Fri, 10 Mar 2023 11:15:37 +0800
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0 Thunderbird/102.8.0

On 3/1/2023 9:51 PM, David Woodhouse wrote:
From: David Woodhouse <dwmw@amazon.co.uk>

The xen_overlay device (and later similar devices for event channels and
grant tables) need to be instantiated. Do this from a kvm_type method on
the PC machine derivatives, since KVM is only way to support Xen emulation
for now.

Just curious, isn't there any more reasonable place to add machine specific initialization?

abusing the mc->kvm_type() looks bad to me.

If everything goes well, KVM x86 will support multiple vm_type[1].
At that time, QEMU will need to implement mc->kvm_type() to get/parse vm type. I have posted the patch to enable it for TDX[2].

[1] https://github.com/sean-jc/linux/commit/fbc35ac0be99b5e02248e7c8f1f3cacb9da512ce

[2] https://lore.kernel.org/qemu-devel/20220802074750.2581308-4-xiaoyao.li@intel.com/

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Paul Durrant <paul@xen.org>
---
  hw/i386/pc.c         | 11 +++++++++++
  include/hw/i386/pc.h |  3 +++
  2 files changed, 14 insertions(+)

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 992951c107..a316a01b15 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -90,6 +90,7 @@
  #include "hw/virtio/virtio-iommu.h"
  #include "hw/virtio/virtio-pmem-pci.h"
  #include "hw/virtio/virtio-mem-pci.h"
+#include "hw/i386/kvm/xen_overlay.h"
  #include "hw/mem/memory-device.h"
  #include "sysemu/replay.h"
  #include "target/i386/cpu.h"
@@ -1846,6 +1847,16 @@ static void pc_machine_initfn(Object *obj)
      cxl_machine_init(obj, &pcms->cxl_devices_state);
  }
+int pc_machine_kvm_type(MachineState *machine, const char *kvm_type)
+{
+#ifdef CONFIG_XEN_EMU
+    if (xen_mode == XEN_EMULATE) {
+        xen_overlay_create();
+    }
+#endif
+    return 0;
+}
+
  static void pc_machine_reset(MachineState *machine, ShutdownCause reason)
  {
      CPUState *cs;
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 66e3d059ef..467311007e 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -291,12 +291,15 @@ extern const size_t pc_compat_1_5_len;
  extern GlobalProperty pc_compat_1_4[];
  extern const size_t pc_compat_1_4_len;
+int pc_machine_kvm_type(MachineState *machine, const char *vm_type);
+
  #define DEFINE_PC_MACHINE(suffix, namestr, initfn, optsfn) \
      static void pc_machine_##suffix##_class_init(ObjectClass *oc, void *data) 
\
      { \
          MachineClass *mc = MACHINE_CLASS(oc); \
          optsfn(mc); \
          mc->init = initfn; \
+        mc->kvm_type = pc_machine_kvm_type; \
      } \
      static const TypeInfo pc_machine_type_##suffix = { \
          .name       = namestr TYPE_MACHINE_SUFFIX, \




reply via email to

[Prev in Thread] Current Thread [Next in Thread]