aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/kvm/kvm_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/kvm/kvm_main.c')
-rw-r--r--drivers/kvm/kvm_main.c102
1 files changed, 51 insertions, 51 deletions
diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index 981f5d3cfd94..6fb36c80e3e8 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -599,57 +599,6 @@ void fx_init(struct kvm_vcpu *vcpu)
599EXPORT_SYMBOL_GPL(fx_init); 599EXPORT_SYMBOL_GPL(fx_init);
600 600
601/* 601/*
602 * Creates some virtual cpus. Good luck creating more than one.
603 */
604static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, int n)
605{
606 int r;
607 struct kvm_vcpu *vcpu;
608
609 r = -EINVAL;
610 if (!valid_vcpu(n))
611 goto out;
612
613 vcpu = &kvm->vcpus[n];
614
615 mutex_lock(&vcpu->mutex);
616
617 if (vcpu->vmcs) {
618 mutex_unlock(&vcpu->mutex);
619 return -EEXIST;
620 }
621
622 vcpu->host_fx_image = (char*)ALIGN((hva_t)vcpu->fx_buf,
623 FX_IMAGE_ALIGN);
624 vcpu->guest_fx_image = vcpu->host_fx_image + FX_IMAGE_SIZE;
625
626 r = kvm_arch_ops->vcpu_create(vcpu);
627 if (r < 0)
628 goto out_free_vcpus;
629
630 r = kvm_mmu_create(vcpu);
631 if (r < 0)
632 goto out_free_vcpus;
633
634 kvm_arch_ops->vcpu_load(vcpu);
635 r = kvm_mmu_setup(vcpu);
636 if (r >= 0)
637 r = kvm_arch_ops->vcpu_setup(vcpu);
638 vcpu_put(vcpu);
639
640 if (r < 0)
641 goto out_free_vcpus;
642
643 return 0;
644
645out_free_vcpus:
646 kvm_free_vcpu(vcpu);
647 mutex_unlock(&vcpu->mutex);
648out:
649 return r;
650}
651
652/*
653 * Allocate some memory and give it an address in the guest physical address 602 * Allocate some memory and give it an address in the guest physical address
654 * space. 603 * space.
655 * 604 *
@@ -1964,6 +1913,57 @@ static int kvm_vm_ioctl_debug_guest(struct kvm *kvm,
1964 return r; 1913 return r;
1965} 1914}
1966 1915
1916/*
1917 * Creates some virtual cpus. Good luck creating more than one.
1918 */
1919static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, int n)
1920{
1921 int r;
1922 struct kvm_vcpu *vcpu;
1923
1924 r = -EINVAL;
1925 if (!valid_vcpu(n))
1926 goto out;
1927
1928 vcpu = &kvm->vcpus[n];
1929
1930 mutex_lock(&vcpu->mutex);
1931
1932 if (vcpu->vmcs) {
1933 mutex_unlock(&vcpu->mutex);
1934 return -EEXIST;
1935 }
1936
1937 vcpu->host_fx_image = (char*)ALIGN((hva_t)vcpu->fx_buf,
1938 FX_IMAGE_ALIGN);
1939 vcpu->guest_fx_image = vcpu->host_fx_image + FX_IMAGE_SIZE;
1940
1941 r = kvm_arch_ops->vcpu_create(vcpu);
1942 if (r < 0)
1943 goto out_free_vcpus;
1944
1945 r = kvm_mmu_create(vcpu);
1946 if (r < 0)
1947 goto out_free_vcpus;
1948
1949 kvm_arch_ops->vcpu_load(vcpu);
1950 r = kvm_mmu_setup(vcpu);
1951 if (r >= 0)
1952 r = kvm_arch_ops->vcpu_setup(vcpu);
1953 vcpu_put(vcpu);
1954
1955 if (r < 0)
1956 goto out_free_vcpus;
1957
1958 return 0;
1959
1960out_free_vcpus:
1961 kvm_free_vcpu(vcpu);
1962 mutex_unlock(&vcpu->mutex);
1963out:
1964 return r;
1965}
1966
1967static long kvm_vm_ioctl(struct file *filp, 1967static long kvm_vm_ioctl(struct file *filp,
1968 unsigned int ioctl, unsigned long arg) 1968 unsigned int ioctl, unsigned long arg)
1969{ 1969{