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

Re: [PATCH] accel: Move Xen accelerator code under accel/xen/



On 5/7/20 5:58 PM, Philippe Mathieu-Daudé wrote:
This code is not related to hardware emulation.
Move it under accel/ with the other hypervisors.

Signed-off-by: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx>
---
We could also move the memory management functions from
hw/i386/xen/xen-hvm.c but it is not trivial.

Necessary step to remove "exec/ram_addr.h" in the next series.
---
  include/exec/ram_addr.h                    |  2 +-
  include/hw/xen/xen.h                       | 11 ------
  include/sysemu/xen.h                       | 40 ++++++++++++++++++++++
  hw/xen/xen-common.c => accel/xen/xen-all.c |  3 ++
  hw/acpi/piix4.c                            |  2 +-
  hw/i386/pc.c                               |  1 +
  hw/i386/pc_piix.c                          |  1 +
  hw/i386/pc_q35.c                           |  1 +
  hw/i386/xen/xen-hvm.c                      |  1 +
  hw/i386/xen/xen_platform.c                 |  1 +
  hw/isa/piix3.c                             |  1 +
  hw/pci/msix.c                              |  1 +
  migration/savevm.c                         |  2 +-
  softmmu/vl.c                               |  2 +-
  stubs/xen-hvm.c                            |  9 -----
  target/i386/cpu.c                          |  2 +-
  MAINTAINERS                                |  2 ++
  accel/Makefile.objs                        |  1 +
  accel/xen/Makefile.objs                    |  1 +
  hw/xen/Makefile.objs                       |  2 +-
  20 files changed, 60 insertions(+), 26 deletions(-)
  create mode 100644 include/sysemu/xen.h
  rename hw/xen/xen-common.c => accel/xen/xen-all.c (99%)
  create mode 100644 accel/xen/Makefile.objs

diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
index 5e59a3d8d7..4e05292f91 100644
--- a/include/exec/ram_addr.h
+++ b/include/exec/ram_addr.h
@@ -21,7 +21,7 @@
#ifndef CONFIG_USER_ONLY
  #include "cpu.h"
-#include "hw/xen/xen.h"
+#include "sysemu/xen.h"
  #include "sysemu/tcg.h"
  #include "exec/ramlist.h"
  #include "exec/ramblock.h"
diff --git a/include/hw/xen/xen.h b/include/hw/xen/xen.h
index 5ac1c6dc55..771dd447f2 100644
--- a/include/hw/xen/xen.h
+++ b/include/hw/xen/xen.h
@@ -20,13 +20,6 @@ extern uint32_t xen_domid;
  extern enum xen_mode xen_mode;
  extern bool xen_domid_restrict;
-extern bool xen_allowed;
-
-static inline bool xen_enabled(void)
-{
-    return xen_allowed;
-}
-
  int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num);
  void xen_piix3_set_irq(void *opaque, int irq_num, int level);
  void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int 
len);
@@ -39,10 +32,6 @@ void xenstore_store_pv_console_info(int i, struct Chardev 
*chr);
void xen_hvm_init(PCMachineState *pcms, MemoryRegion **ram_memory); -void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
-                   struct MemoryRegion *mr, Error **errp);
-void xen_hvm_modified_memory(ram_addr_t start, ram_addr_t length);
-
  void xen_register_framebuffer(struct MemoryRegion *mr);
#endif /* QEMU_HW_XEN_H */
diff --git a/include/sysemu/xen.h b/include/sysemu/xen.h
new file mode 100644
index 0000000000..609d2d4184
--- /dev/null
+++ b/include/sysemu/xen.h
@@ -0,0 +1,40 @@
+/*
+ * QEMU Xen support
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#ifndef SYSEMU_XEN_H
+#define SYSEMU_XEN_H
+
+#ifdef CONFIG_XEN
+
+extern bool xen_allowed;
+
+#define xen_enabled() (xen_allowed)
+
+#ifndef CONFIG_USER_ONLY
+void xen_hvm_modified_memory(ram_addr_t start, ram_addr_t length);
+void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
+                   struct MemoryRegion *mr, Error **errp);
+#endif
+
+#else /* !CONFIG_XEN */
+
+#define xen_enabled() 0
+#ifndef CONFIG_USER_ONLY
+static inline void xen_hvm_modified_memory(ram_addr_t start, ram_addr_t length)
+{
+    abort();
+}
+static inline void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
+                                 MemoryRegion *mr, Error **errp)
+{
+    abort();
+}
+#endif

Unfortunately this triggers:

#1  0x00007fca778a5895 abort (libc.so.6)
#2  0x000055f51ebd3e12 xen_hvm_modified_memory (qemu-system-aarch64)
#3 0x000055f51ebd44c9 cpu_physical_memory_set_dirty_range (qemu-system-aarch64)
#4  0x000055f51ebd9de4 ram_block_add (qemu-system-aarch64)
#5  0x000055f51ebda2e3 qemu_ram_alloc_internal (qemu-system-aarch64)
#6  0x000055f51ebda3be qemu_ram_alloc (qemu-system-aarch64)
#7 0x000055f51ec3db9b memory_region_init_ram_shared_nomigrate (qemu-system-aarch64)
#8  0x000055f51ef089e6 ram_backend_memory_alloc (qemu-system-aarch64)
#9 0x000055f51ef081ae host_memory_backend_memory_complete (qemu-system-aarch64)
#10 0x000055f51f2b624b user_creatable_complete (qemu-system-aarch64)
#11 0x000055f51ed93382 create_default_memdev (qemu-system-aarch64)
#12 0x000055f51ed96d1a qemu_init (qemu-system-aarch64)
#13 0x000055f51f3b14bb main (qemu-system-aarch64)
#14 0x00007fca778a6f43 __libc_start_main (libc.so.6)
#15 0x000055f51ebd27de _start (qemu-system-aarch64)

I'll resend adding the following patch checking for xen_enabled() before calling, as we do with other accelerators:

-- >8 --
diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
@@ -330,7 +330,9 @@ static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start,
         }
     }

-    xen_hvm_modified_memory(start, length);
+    if (xen_enabled()) {
+        xen_hvm_modified_memory(start, length);
+    }
 }

 #if !defined(_WIN32)
@@ -388,7 +390,9 @@ static inline void cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
             }
         }

-        xen_hvm_modified_memory(start, pages << TARGET_PAGE_BITS);
+        if (xen_enabled()) {
+            xen_hvm_modified_memory(start, pages << TARGET_PAGE_BITS);
+        }
     } else {
uint8_t clients = tcg_enabled() ? DIRTY_CLIENTS_ALL : DIRTY_CLIENTS_NOCODE;
---




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.