I'm more familiar with the KVM part working on the x86 architecture, so try to explain this in the KVM x86 implementation.
In the x86 architecture, KVM uses CPU functions to separate the hypervisor and the guest mode. In terms of Intel, they are the root and non-root modes of VMX, respectively.
Writing to the VM (hypervisor → VM) is started by the KVM using the VMLAUNCH instruction with all the necessary information for the user filled in the VMCS CPU in kernel mode. Only a system call is invoked from qemu-kvm to the kvm kernel module.
VM , - , , HW . VM, CPU root . , VM (VM → ) HW, VMCS. KVM VMCS, . VM → .
, qemu-kvm qemu. , Intel VT-d, IOMMU . , .
, (Intel VT-x), linux/arch/x86/kvm/vmx.c. Intel VT.