Hi, Microsoft's Linux Systems Group developed a Linux driver for the Microsoft Hypervisor (MSHV for short). The driver is being upstreamed. The first supported VMM is Cloud Hypervisor. We want to add QEMU as the second supported VMM.
The plan is to write an mshv accelerator in QEMU. The accelerator is still in the works. MSHV doesn't emulate instructions. VMMs are supposed to bring their own instruction emulator. The path we've chosen is to reuse what's already in QEMU. The instruction emulator in HVF looks good for what we need. This patch series makes the instruction emulator in HVF a common component for the i386 target. It removes HVF specific code by using a set of hooks. The new incoming MSHV accelerator will implement the hooks, and where necessary, enhance the emulator and / or add new hooks. The patches have been lightly tested by running a Linux VM on an Intel-based Mac. Thanks, Wei. Changes in v2: 1. Address comments from Paolo on variable and directory names. 2. Rebase and drop the already applied patches. 3. Add a new entry in MAINTAINERS. Wei Liu (14): target/i386/hvf: introduce x86_emul_ops target/i386/hvf: remove HVF specific calls from x86_decode.c target/i386/hvf: provide and use handle_io in emul_ops target/i386: rename hvf_mmio_buf to emu_mmio_buf target/i386/hvf: use emul_ops->read_mem in x86_emu.c taret/i386/hvf: provide and use write_mem in emul_ops target/i386/hvf: provide and use simulate_{wrmsr,rdmsr} in emul_ops target/i386: rename lazy flags field and its type target/i386/hvf: drop unused headers target/i386/hvf: rename some include guards target/i386: add a directory for x86 instruction emulator target/i386/emulate: add a panic.h target/i386: move x86 instruction emulator out of hvf MAINTAINERS: add an entry for the x86 instruction emulator MAINTAINERS | 8 +++ target/i386/cpu.h | 8 +-- target/i386/emulate/meson.build | 5 ++ target/i386/emulate/panic.h | 45 ++++++++++++++++ target/i386/{hvf => emulate}/x86.h | 4 +- target/i386/{hvf => emulate}/x86_decode.c | 22 +++----- target/i386/{hvf => emulate}/x86_decode.h | 4 +- target/i386/{hvf => emulate}/x86_emu.c | 62 +++++++++++------------ target/i386/{hvf => emulate}/x86_emu.h | 15 +++++- target/i386/{hvf => emulate}/x86_flags.c | 56 ++++++++++---------- target/i386/{hvf => emulate}/x86_flags.h | 6 +-- target/i386/hvf/hvf-i386.h | 4 +- target/i386/hvf/hvf.c | 57 +++++++++++++++------ target/i386/hvf/meson.build | 3 -- target/i386/hvf/vmx.h | 2 +- target/i386/hvf/x86.c | 4 +- target/i386/hvf/x86_cpuid.c | 2 +- target/i386/hvf/x86_descr.h | 2 +- target/i386/hvf/x86_mmu.c | 2 +- target/i386/hvf/x86_task.c | 6 +-- target/i386/hvf/x86hvf.c | 2 +- target/i386/meson.build | 1 + 22 files changed, 203 insertions(+), 117 deletions(-) create mode 100644 target/i386/emulate/meson.build create mode 100644 target/i386/emulate/panic.h rename target/i386/{hvf => emulate}/x86.h (99%) rename target/i386/{hvf => emulate}/x86_decode.c (99%) rename target/i386/{hvf => emulate}/x86_decode.h (99%) rename target/i386/{hvf => emulate}/x86_emu.c (95%) rename target/i386/{hvf => emulate}/x86_emu.h (75%) rename target/i386/{hvf => emulate}/x86_flags.c (83%) rename target/i386/{hvf => emulate}/x86_flags.h (97%) -- 2.47.2