On 16/1/26 14:52, Mohamed Mediouni wrote:
Some code can be shared between x86_64 and arm64 WHPX. Do so as much as 
reasonable.

Signed-off-by: Mohamed Mediouni <[email protected]>

Reviewed-by: Pierrick Bouvier <[email protected]>
---
  MAINTAINERS                  |   2 +
  accel/whpx/meson.build       |   1 +
  accel/whpx/whpx-common.c     | 558 +++++++++++++++++++++++++++++++++++
  include/system/whpx-all.h    |  20 ++
  include/system/whpx-common.h |  21 ++
  target/i386/whpx/whpx-all.c  | 551 +---------------------------------
  6 files changed, 612 insertions(+), 541 deletions(-)
  create mode 100644 accel/whpx/whpx-common.c
  create mode 100644 include/system/whpx-all.h
  create mode 100644 include/system/whpx-common.h


diff --git a/include/system/whpx-all.h b/include/system/whpx-all.h
new file mode 100644
index 0000000000..f13cdf7f66
--- /dev/null
+++ b/include/system/whpx-all.h
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+#ifndef SYSTEM_WHPX_ALL_H
+#define SYSTEM_WHPX_ALL_H
+
+/* Called by whpx-common */
+int whpx_vcpu_run(CPUState *cpu);
+void whpx_get_registers(CPUState *cpu);
+void whpx_set_registers(CPUState *cpu, int level);
+int whpx_accel_init(AccelState *as, MachineState *ms);
+void whpx_cpu_instance_init(CPUState *cs);
+HRESULT whpx_set_exception_exit_bitmap(UINT64 exceptions);
+void whpx_apply_breakpoints(
+struct whpx_breakpoint_collection *breakpoints,
+    CPUState *cpu,
+    bool resuming);
+void whpx_translate_cpu_breakpoints(
+    struct whpx_breakpoints *breakpoints,
+    CPUState *cpu,
+    int cpu_breakpoint_count);
+#endif
diff --git a/include/system/whpx-common.h b/include/system/whpx-common.h
new file mode 100644
index 0000000000..e549c7539c
--- /dev/null
+++ b/include/system/whpx-common.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+#ifndef SYSTEM_WHPX_COMMON_H
+#define SYSTEM_WHPX_COMMON_H
+
+struct AccelCPUState {
+    WHV_EMULATOR_HANDLE emulator;
+    bool window_registered;
+    bool interruptable;
+    bool ready_for_pic_interrupt;
+    uint64_t tpr;
+    uint64_t apic_base;
+    bool interruption_pending;
+    /* Must be the last field as it may have a tail */
+    WHV_RUN_VP_EXIT_CONTEXT exit_ctx;
+};
+
+int whpx_first_vcpu_starting(CPUState *cpu);
+int whpx_last_vcpu_stopping(CPUState *cpu);
+void whpx_memory_init(void);
+struct whpx_breakpoint *whpx_lookup_breakpoint_by_addr(uint64_t address);
+#endif
I'd rather rename the target-specific handlers as
whpx_foo() -> whpx_arch_foo() to help follow in common code
when we are calling target-specific implementations.
(can be done on top later if the series is good to go)

Reply via email to