Hi Alexander, On 1/20/21 11:44 PM, Alexander Graf wrote: > Until now, Hypervisor.framework has only been available on x86_64 systems. > With Apple Silicon shipping now, it extends its reach to aarch64. To > prepare for support for multiple architectures, let's move common code out > into its own accel directory. > > Signed-off-by: Alexander Graf <ag...@csgraf.de> > Reviewed-by: Roman Bolshakov <r.bolsha...@yadro.com> > Tested-by: Roman Bolshakov <r.bolsha...@yadro.com> > > --- > > v3 -> v4: > > - Use hv.h instead of Hypervisor.h for 10.15 compat > - Remove manual inclusion of Hypervisor.h in common .c files > --- > MAINTAINERS | 8 + > accel/hvf/hvf-all.c | 54 +++++ > accel/hvf/hvf-cpus.c | 462 ++++++++++++++++++++++++++++++++++++ > accel/hvf/meson.build | 7 + > accel/meson.build | 1 + > include/sysemu/hvf_int.h | 54 +++++ > target/i386/hvf/hvf-cpus.c | 131 ---------- > target/i386/hvf/hvf-cpus.h | 25 -- > target/i386/hvf/hvf-i386.h | 33 +-- > target/i386/hvf/hvf.c | 360 +--------------------------- > target/i386/hvf/meson.build | 1 - > target/i386/hvf/x86hvf.c | 11 +- > target/i386/hvf/x86hvf.h | 2 - > 13 files changed, 596 insertions(+), 553 deletions(-) > create mode 100644 accel/hvf/hvf-all.c > create mode 100644 accel/hvf/hvf-cpus.c > create mode 100644 accel/hvf/meson.build > create mode 100644 include/sysemu/hvf_int.h > delete mode 100644 target/i386/hvf/hvf-cpus.c > delete mode 100644 target/i386/hvf/hvf-cpus.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index 3216387521..e589ec02e0 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -448,7 +448,15 @@ M: Roman Bolshakov <r.bolsha...@yadro.com> > W: https://wiki.qemu.org/Features/HVF > S: Maintained > F: target/i386/hvf/ > + > +HVF > +M: Cameron Esfahani <di...@apple.com> > +M: Roman Bolshakov <r.bolsha...@yadro.com> > +W: https://wiki.qemu.org/Features/HVF > +S: Maintained > +F: accel/hvf/ > F: include/sysemu/hvf.h > +F: include/sysemu/hvf_int.h > > WHPX CPUs > M: Sunil Muthuswamy <sunil...@microsoft.com> > diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c > new file mode 100644 > index 0000000000..5b415eb0ed > --- /dev/null > +++ b/accel/hvf/hvf-all.c > @@ -0,0 +1,54 @@ > +/* > + * QEMU Hypervisor.framework support > + * > + * This work is licensed under the terms of the GNU GPL, version 2. See > + * the COPYING file in the top-level directory. > + * > + * Contributions after 2012-01-13 are licensed under the terms of the > + * GNU GPL, version 2 or (at your option) any later version.
Maybe start with GPLv2+ directly? > diff --git a/include/sysemu/hvf_int.h b/include/sysemu/hvf_int.h > new file mode 100644 > index 0000000000..69de46db7d > --- /dev/null > +++ b/include/sysemu/hvf_int.h > @@ -0,0 +1,54 @@ > +/* > + * QEMU Hypervisor.framework (HVF) 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. > + * > + */ > + > +/* header to be included in HVF-specific code */ Can we have this header local to accel/hvf/ ? Otherwise: Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> > + > +#ifndef HVF_INT_H > +#define HVF_INT_H > + > +#include <Hypervisor/hv.h> > + > +/* hvf_slot flags */ > +#define HVF_SLOT_LOG (1 << 0) > + > +typedef struct hvf_slot { > + uint64_t start; > + uint64_t size; > + uint8_t *mem; > + int slot_id; > + uint32_t flags; > + MemoryRegion *region; > +} hvf_slot; > + > +typedef struct hvf_vcpu_caps { > + uint64_t vmx_cap_pinbased; > + uint64_t vmx_cap_procbased; > + uint64_t vmx_cap_procbased2; > + uint64_t vmx_cap_entry; > + uint64_t vmx_cap_exit; > + uint64_t vmx_cap_preemption_timer; > +} hvf_vcpu_caps; > + > +struct HVFState { > + AccelState parent; > + hvf_slot slots[32]; > + int num_slots; > + > + hvf_vcpu_caps *hvf_caps; > +}; > +extern HVFState *hvf_state; > + > +void assert_hvf_ok(hv_return_t ret); > +int hvf_get_registers(CPUState *cpu); > +int hvf_put_registers(CPUState *cpu); > +int hvf_arch_init_vcpu(CPUState *cpu); > +void hvf_arch_vcpu_destroy(CPUState *cpu); > +int hvf_vcpu_exec(CPUState *cpu); > +hvf_slot *hvf_find_overlap_slot(uint64_t, uint64_t); > + > +#endif