[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 08/62] xen-platform: allow its creation with XEN_EMULATE mode
From: |
Paolo Bonzini |
Subject: |
[PULL 08/62] xen-platform: allow its creation with XEN_EMULATE mode |
Date: |
Thu, 2 Mar 2023 13:29:35 +0100 |
From: Joao Martins <joao.m.martins@oracle.com>
The only thing we need to fix to make this build is the PIO hack which
sets the BIOS memory areas to R/W v.s. R/O. Theoretically we could hook
that up to the PAM registers on the emulated PIIX, but in practice
nobody cares, so just leave it doing nothing.
Now it builds without actual Xen, move it to CONFIG_XEN_BUS to include it
in the KVM-only builds.
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Paul Durrant <paul@xen.org>
---
hw/i386/xen/meson.build | 5 ++++-
hw/i386/xen/xen_platform.c | 39 +++++++++++++++++++++++++-------------
2 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/hw/i386/xen/meson.build b/hw/i386/xen/meson.build
index be84130300cb..2e64a34e16f8 100644
--- a/hw/i386/xen/meson.build
+++ b/hw/i386/xen/meson.build
@@ -2,6 +2,9 @@ i386_ss.add(when: 'CONFIG_XEN', if_true: files(
'xen-hvm.c',
'xen-mapcache.c',
'xen_apic.c',
- 'xen_platform.c',
'xen_pvdevice.c',
))
+
+i386_ss.add(when: 'CONFIG_XEN_BUS', if_true: files(
+ 'xen_platform.c',
+))
diff --git a/hw/i386/xen/xen_platform.c b/hw/i386/xen/xen_platform.c
index 8a616970539c..539f7da374ce 100644
--- a/hw/i386/xen/xen_platform.c
+++ b/hw/i386/xen/xen_platform.c
@@ -27,9 +27,9 @@
#include "qapi/error.h"
#include "hw/ide/pci.h"
#include "hw/pci/pci.h"
-#include "hw/xen/xen_common.h"
#include "migration/vmstate.h"
-#include "hw/xen/xen-legacy-backend.h"
+#include "hw/xen/xen.h"
+#include "net/net.h"
#include "trace.h"
#include "sysemu/xen.h"
#include "sysemu/block-backend.h"
@@ -37,6 +37,11 @@
#include "qemu/module.h"
#include "qom/object.h"
+#ifdef CONFIG_XEN
+#include "hw/xen/xen_common.h"
+#include "hw/xen/xen-legacy-backend.h"
+#endif
+
//#define DEBUG_PLATFORM
#ifdef DEBUG_PLATFORM
@@ -279,18 +284,26 @@ static void platform_fixed_ioport_writeb(void *opaque,
uint32_t addr, uint32_t v
PCIXenPlatformState *s = opaque;
switch (addr) {
- case 0: /* Platform flags */ {
- hvmmem_type_t mem_type = (val & PFFLAG_ROM_LOCK) ?
- HVMMEM_ram_ro : HVMMEM_ram_rw;
- if (xen_set_mem_type(xen_domid, mem_type, 0xc0, 0x40)) {
- DPRINTF("unable to change ro/rw state of ROM memory area!\n");
- } else {
+ case 0: /* Platform flags */
+ if (xen_mode == XEN_EMULATE) {
+ /* XX: Use i440gx/q35 PAM setup to do this? */
s->flags = val & PFFLAG_ROM_LOCK;
- DPRINTF("changed ro/rw state of ROM memory area. now is %s
state.\n",
- (mem_type == HVMMEM_ram_ro ? "ro":"rw"));
+#ifdef CONFIG_XEN
+ } else {
+ hvmmem_type_t mem_type = (val & PFFLAG_ROM_LOCK) ?
+ HVMMEM_ram_ro : HVMMEM_ram_rw;
+
+ if (xen_set_mem_type(xen_domid, mem_type, 0xc0, 0x40)) {
+ DPRINTF("unable to change ro/rw state of ROM memory area!\n");
+ } else {
+ s->flags = val & PFFLAG_ROM_LOCK;
+ DPRINTF("changed ro/rw state of ROM memory area. now is %s
state.\n",
+ (mem_type == HVMMEM_ram_ro ? "ro" : "rw"));
+ }
+#endif
}
break;
- }
+
case 2:
log_writeb(s, val);
break;
@@ -508,8 +521,8 @@ static void xen_platform_realize(PCIDevice *dev, Error
**errp)
uint8_t *pci_conf;
/* Device will crash on reset if xen is not initialized */
- if (!xen_enabled()) {
- error_setg(errp, "xen-platform device requires the Xen accelerator");
+ if (xen_mode == XEN_DISABLED) {
+ error_setg(errp, "xen-platform device requires a Xen guest");
return;
}
--
2.39.1
- [PULL 00/62] i386, misc changes for QEMU 8.0 soft freeze, Paolo Bonzini, 2023/03/02
- [PULL 02/62] xen: add CONFIG_XEN_BUS and CONFIG_XEN_EMU options for Xen emulation, Paolo Bonzini, 2023/03/02
- [PULL 03/62] xen: Add XEN_DISABLED mode and make it default, Paolo Bonzini, 2023/03/02
- [PULL 05/62] i386/kvm: handle Xen HVM cpuid leaves, Paolo Bonzini, 2023/03/02
- [PULL 04/62] i386/kvm: Add xen-version KVM accelerator property and init KVM Xen support, Paolo Bonzini, 2023/03/02
- [PULL 01/62] include: import Xen public headers to hw/xen/interface, Paolo Bonzini, 2023/03/02
- [PULL 06/62] i386/kvm: Set Xen vCPU ID in KVM, Paolo Bonzini, 2023/03/02
- [PULL 07/62] xen-platform: exclude vfio-pci from the PCI platform unplug, Paolo Bonzini, 2023/03/02
- [PULL 08/62] xen-platform: allow its creation with XEN_EMULATE mode,
Paolo Bonzini <=
- [PULL 09/62] i386/xen: handle guest hypercalls, Paolo Bonzini, 2023/03/02
- [PULL 10/62] i386/xen: implement HYPERVISOR_xen_version, Paolo Bonzini, 2023/03/02
- [PULL 11/62] i386/xen: implement HYPERVISOR_sched_op, SCHEDOP_shutdown, Paolo Bonzini, 2023/03/02
- [PULL 12/62] i386/xen: Implement SCHEDOP_poll and SCHEDOP_yield, Paolo Bonzini, 2023/03/02
- [PULL 13/62] hw/xen: Add xen_overlay device for emulating shared xenheap pages, Paolo Bonzini, 2023/03/02
- [PULL 15/62] i386/xen: add pc_machine_kvm_type to initialize XEN_EMULATE mode, Paolo Bonzini, 2023/03/02
- [PULL 14/62] xen: Permit --xen-domid argument when accel is KVM, Paolo Bonzini, 2023/03/02
- [PULL 16/62] i386/xen: manage and save/restore Xen guest long_mode setting, Paolo Bonzini, 2023/03/02
- [PULL 19/62] i386/xen: implement HYPERVISOR_hvm_op, Paolo Bonzini, 2023/03/02
- [PULL 21/62] i386/xen: handle VCPUOP_register_vcpu_info, Paolo Bonzini, 2023/03/02