kvm 中的kvm_run 是如何与qemu中的kvm_run联系到一起的
在qemu下面的函数中,完成了 env->kvm_run的映射.
int kvm_init_vcpu(CPUArchState *env)
env->kvm_run = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, 238 env->kvm_fd, 0);
下面是kvm 与qemu设备中交互使用的I/O共享页的分析
kvm_run应该就是所谓的I/O共享页的概念
应该查找kvm_cpu_exec在哪里被利用,应为由程序可以看书来的书kvm_run这个结构对应的数据是可以共享的,qemu在调用函数kvm_cpu_exec以前一定会和内核交互相应关于KVM_RUM的信息 ,在kvm_init_vcpu中有
env->kvm_run=mmap(NULL,mmap_size,PROT_READ|....)这里应该是连接kvm和qemu的IO共享页
这里的mmap应该是利用的是下面结构中的函数:
static struct file_operations kvm_vcpu_fops = { .release = kvm_vcpu_release, .unlocked_ioctl = kvm_vcpu_ioctl, #ifdef CONFIG_COMPAT .compat_ioctl = kvm_vcpu_compat_ioctl, #endif .mmap = kvm_vcpu_mmap,// .llseek = noop_llseek, }; static int kvm_vcpu_mmap(struct file *file, struct vm_area_struct *vma) { vma->vm_ops = &kvm_vcpu_vm_ops; return 0; }//