On Thu, Aug 07, 2025 at 04:39:25PM +0200, Magnus Kulke wrote: > Hey all, > > This is the third revision of a patch set implementing an accelerator > for the MSHV kernel driver, exposing HyperV to Linux "Dom0" hosts in various > scenarios. Thank you for the feedback so far. Since the last revision we > incorporated feedback from the last review and identified further areas for > performance fixes, notably in the irqfd handling. I'm looking forward to your > comments. > > Best regards, > > magnus
So regarding merging plans. Did you guys get in touch with Sunil? That's the easiest smoothest path, through an existing maintainer. > Changelog: > > v2 => v3 > > - Addressed code review comments (style) > - Reserve GSI 01-23 for IO-APIC pins (this resolved a problem in which MSI > routes would be overwritten with interrupts from legacy devices, breaking > irqfd notification for virtio-blk queues) > - Guard memory slot table with mutex and RCU mechanism (multiple threads > might access the memory slot table, and in the event of an UNMAPPED_GPA > exit we need to query the table for an unmapped region covering that GPA) > - Include memory slot manager in MshvState > - Produce mshv.h kernel header with ./scripts/update-linux-headers.sh from > linux 6.16 (not all UAPI definitions are defined in the upstream kernel, > hence we ship hw/hyper/hvgdk*.h and hw/hyperv/hvhdk*.h headers) > - Added a QMP command query-mshv (a requirement for integration into > higher-level tooling) > - Removed handling of HALT vm exit, since this is not a supported HV > message any more. > - Added 2 maintainers from Microsoft for the respective file hierarchy > - Added mshv as accelerator option in the documentation > > RFC (v1) => v2 > > - Addressed code review comments (style, consilidation). > - Rewrote the logic that handles overlap-in-userspace mappings to use > a static list of slots, inspired by the HVF accelerator code. > - Fixed a bug that wrote corrupt payload in a MSHV_SET_MSI_ROUTING > call, preventing vhost=on to work on tap network devices. > - Removed an erronous truncation of guest addresses to 32bit when > registering ioeventfd's using MSHV_IOEVENTFD. This resulted in > shadowing of low memory when ioevents were registered with > addresses beyond the 4gb barrier and thus unexpected "unmapped gpa" > vm exits in lower mem regions (impacting io performance). > - Fixed problem in which the MSI routing table was committed for KVM > KVM instead of MSHV in virtio-pci bus initialization. > - Added handler for HLT vm exits. > - The above fixes removed a few limitation present in the previous > revision: > - Guest with machine type "pc" are booting (testing is still mostly > performed with q35) > - Tap network devices can be used with vhost=on option. > - Seabios can be used with >2.75G memory and multiple virtio-pci > devices > - I/O performance improvement as extranous MMIO vm exits are avoided > by registering ioevents with a correct address. > > Notes: > > - A discrete kernel ioctl "set_immediate_exit" (to avoid a race condition > when handling terminiation signals like ctrl-a x) has been tested and > proven to mitigate the problem. Since other consumers of /dev/mshv have > simular requirements as QEMU, we opted to iterate a bit more on the > respective kernel interface. > > Magnus Kulke (25): > accel: Add Meson and config support for MSHV accelerator > target/i386/emulate: Allow instruction decoding from stream > target/i386/mshv: Add x86 decoder/emu implementation > hw/intc: Generalize APIC helper names from kvm_* to accel_* > include/hw/hyperv: Add MSHV ABI header definitions > linux-headers/linux: Add mshv.h headers > accel/mshv: Add accelerator skeleton > accel/mshv: Register memory region listeners > accel/mshv: Initialize VM partition > accel/mshv: Add vCPU creation and execution loop > accel/mshv: Add vCPU signal handling > target/i386/mshv: Add CPU create and remove logic > target/i386/mshv: Implement mshv_store_regs() > target/i386/mshv: Implement mshv_get_standard_regs() > target/i386/mshv: Implement mshv_get_special_regs() > target/i386/mshv: Implement mshv_arch_put_registers() > target/i386/mshv: Set local interrupt controller state > target/i386/mshv: Register CPUID entries with MSHV > target/i386/mshv: Register MSRs with MSHV > target/i386/mshv: Integrate x86 instruction decoder/emulator > target/i386/mshv: Write MSRs to the hypervisor > target/i386/mshv: Implement mshv_vcpu_run() > accel/mshv: Handle overlapping mem mappings > docs: Add mshv to documentation > MAINTAINERS: Add maintainers for mshv accelerator > > Praveen K Paladugu (1): > qapi/accel: Allow to query mshv capabilities > > MAINTAINERS | 15 + > accel/Kconfig | 3 + > accel/accel-irq.c | 106 ++ > accel/meson.build | 3 +- > accel/mshv/irq.c | 397 +++++++ > accel/mshv/mem.c | 562 ++++++++++ > accel/mshv/meson.build | 9 + > accel/mshv/mshv-all.c | 726 +++++++++++++ > accel/mshv/msr.c | 373 +++++++ > accel/mshv/trace-events | 30 + > accel/mshv/trace.h | 14 + > docs/devel/codebase.rst | 2 +- > hw/core/machine-qmp-cmds.c | 14 + > hw/intc/apic.c | 8 + > hw/intc/ioapic.c | 20 +- > hw/virtio/virtio-pci.c | 21 +- > include/hw/hyperv/hvgdk.h | 19 + > include/hw/hyperv/hvgdk_mini.h | 864 +++++++++++++++ > include/hw/hyperv/hvhdk.h | 164 +++ > include/hw/hyperv/hvhdk_mini.h | 105 ++ > include/system/accel-irq.h | 37 + > include/system/mshv.h | 195 ++++ > linux-headers/linux/mshv.h | 291 ++++++ > meson.build | 11 + > meson_options.txt | 2 + > qapi/accelerator.json | 29 + > qemu-options.hx | 16 +- > scripts/meson-buildoptions.sh | 3 + > scripts/update-linux-headers.sh | 2 +- > target/i386/cpu.h | 4 +- > target/i386/emulate/meson.build | 7 +- > target/i386/emulate/x86_decode.c | 27 +- > target/i386/emulate/x86_decode.h | 9 + > target/i386/emulate/x86_emu.c | 3 +- > target/i386/emulate/x86_emu.h | 2 + > target/i386/meson.build | 2 + > target/i386/mshv/meson.build | 8 + > target/i386/mshv/mshv-cpu.c | 1674 ++++++++++++++++++++++++++++++ > target/i386/mshv/x86.c | 297 ++++++ > 39 files changed, 6038 insertions(+), 36 deletions(-) > create mode 100644 accel/accel-irq.c > create mode 100644 accel/mshv/irq.c > create mode 100644 accel/mshv/mem.c > create mode 100644 accel/mshv/meson.build > create mode 100644 accel/mshv/mshv-all.c > create mode 100644 accel/mshv/msr.c > create mode 100644 accel/mshv/trace-events > create mode 100644 accel/mshv/trace.h > create mode 100644 include/hw/hyperv/hvgdk.h > create mode 100644 include/hw/hyperv/hvgdk_mini.h > create mode 100644 include/hw/hyperv/hvhdk.h > create mode 100644 include/hw/hyperv/hvhdk_mini.h > create mode 100644 include/system/accel-irq.h > create mode 100644 include/system/mshv.h > create mode 100644 linux-headers/linux/mshv.h > create mode 100644 target/i386/mshv/meson.build > create mode 100644 target/i386/mshv/mshv-cpu.c > create mode 100644 target/i386/mshv/x86.c > > -- > 2.34.1
