kvm_vm_ioctl_create_vcpu: vcpu = kvm_arch_vcpu_create(kvm, id); r = kvm_arch_vcpu_setup(vcpu); r = kvm_create_vcpu_debugfs(vcpu); r = create_vcpu_fd(vcpu); kvm->vcpus[atomic_read(&kvm->online_vcpus)] = vcpu; kvm_arch_vcpu_postcreate(vcpu);
linux-4.9/arch/x86/kvm/X86.c struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id) { struct kvm_vcpu *vcpu;
if (check_tsc_unstable() && atomic_read(&kvm->online_vcpus) != 0) printk_once(KERN_WARNING "kvm: SMP vm created on host with unstable TSC; " "guest TSC will not be reliable\n");
vcpu = kvm_x86_ops->vcpu_create(kvm, id);
return vcpu; }
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) { int r;
kvm_vcpu_mtrr_init(vcpu); r = vcpu_load(vcpu); if (r) return r; kvm_vcpu_reset(vcpu, false); kvm_mmu_setup(vcpu); vcpu_put(vcpu); return r; }
Kvm_main.c linux-4.9/virt/kvm static struct file_operations kvm_vcpu_fops = { .release = kvm_vcpu_release, .unlocked_ioctl = kvm_vcpu_ioctl, #ifdef CONFIG_KVM_COMPAT .compat_ioctl = kvm_vcpu_compat_ioctl, #endif .mmap = kvm_vcpu_mmap, .llseek = noop_llseek, };
static int create_vcpu_fd(struct kvm_vcpu *vcpu) { return anon_inode_getfd("kvm-vcpu", &kvm_vcpu_fops, vcpu, O_RDWR | O_CLOEXEC); }
kvm-vcpu 文件接口
最新推荐文章于 2024-01-13 18:02:47 发布