diff options
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r-- | arch/x86/kvm/x86.c | 40 |
1 files changed, 2 insertions, 38 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index b05321adfd2f..5acd21245fc7 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -4773,8 +4773,6 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | |||
4773 | int r; | 4773 | int r; |
4774 | sigset_t sigsaved; | 4774 | sigset_t sigsaved; |
4775 | 4775 | ||
4776 | vcpu_load(vcpu); | ||
4777 | |||
4778 | if (vcpu->sigset_active) | 4776 | if (vcpu->sigset_active) |
4779 | sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved); | 4777 | sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved); |
4780 | 4778 | ||
@@ -4815,14 +4813,11 @@ out: | |||
4815 | if (vcpu->sigset_active) | 4813 | if (vcpu->sigset_active) |
4816 | sigprocmask(SIG_SETMASK, &sigsaved, NULL); | 4814 | sigprocmask(SIG_SETMASK, &sigsaved, NULL); |
4817 | 4815 | ||
4818 | vcpu_put(vcpu); | ||
4819 | return r; | 4816 | return r; |
4820 | } | 4817 | } |
4821 | 4818 | ||
4822 | int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | 4819 | int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) |
4823 | { | 4820 | { |
4824 | vcpu_load(vcpu); | ||
4825 | |||
4826 | regs->rax = kvm_register_read(vcpu, VCPU_REGS_RAX); | 4821 | regs->rax = kvm_register_read(vcpu, VCPU_REGS_RAX); |
4827 | regs->rbx = kvm_register_read(vcpu, VCPU_REGS_RBX); | 4822 | regs->rbx = kvm_register_read(vcpu, VCPU_REGS_RBX); |
4828 | regs->rcx = kvm_register_read(vcpu, VCPU_REGS_RCX); | 4823 | regs->rcx = kvm_register_read(vcpu, VCPU_REGS_RCX); |
@@ -4845,15 +4840,11 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
4845 | regs->rip = kvm_rip_read(vcpu); | 4840 | regs->rip = kvm_rip_read(vcpu); |
4846 | regs->rflags = kvm_get_rflags(vcpu); | 4841 | regs->rflags = kvm_get_rflags(vcpu); |
4847 | 4842 | ||
4848 | vcpu_put(vcpu); | ||
4849 | |||
4850 | return 0; | 4843 | return 0; |
4851 | } | 4844 | } |
4852 | 4845 | ||
4853 | int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | 4846 | int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) |
4854 | { | 4847 | { |
4855 | vcpu_load(vcpu); | ||
4856 | |||
4857 | kvm_register_write(vcpu, VCPU_REGS_RAX, regs->rax); | 4848 | kvm_register_write(vcpu, VCPU_REGS_RAX, regs->rax); |
4858 | kvm_register_write(vcpu, VCPU_REGS_RBX, regs->rbx); | 4849 | kvm_register_write(vcpu, VCPU_REGS_RBX, regs->rbx); |
4859 | kvm_register_write(vcpu, VCPU_REGS_RCX, regs->rcx); | 4850 | kvm_register_write(vcpu, VCPU_REGS_RCX, regs->rcx); |
@@ -4878,8 +4869,6 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
4878 | 4869 | ||
4879 | vcpu->arch.exception.pending = false; | 4870 | vcpu->arch.exception.pending = false; |
4880 | 4871 | ||
4881 | vcpu_put(vcpu); | ||
4882 | |||
4883 | return 0; | 4872 | return 0; |
4884 | } | 4873 | } |
4885 | 4874 | ||
@@ -4898,8 +4887,6 @@ int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu, | |||
4898 | { | 4887 | { |
4899 | struct desc_ptr dt; | 4888 | struct desc_ptr dt; |
4900 | 4889 | ||
4901 | vcpu_load(vcpu); | ||
4902 | |||
4903 | kvm_get_segment(vcpu, &sregs->cs, VCPU_SREG_CS); | 4890 | kvm_get_segment(vcpu, &sregs->cs, VCPU_SREG_CS); |
4904 | kvm_get_segment(vcpu, &sregs->ds, VCPU_SREG_DS); | 4891 | kvm_get_segment(vcpu, &sregs->ds, VCPU_SREG_DS); |
4905 | kvm_get_segment(vcpu, &sregs->es, VCPU_SREG_ES); | 4892 | kvm_get_segment(vcpu, &sregs->es, VCPU_SREG_ES); |
@@ -4931,26 +4918,20 @@ int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu, | |||
4931 | set_bit(vcpu->arch.interrupt.nr, | 4918 | set_bit(vcpu->arch.interrupt.nr, |
4932 | (unsigned long *)sregs->interrupt_bitmap); | 4919 | (unsigned long *)sregs->interrupt_bitmap); |
4933 | 4920 | ||
4934 | vcpu_put(vcpu); | ||
4935 | |||
4936 | return 0; | 4921 | return 0; |
4937 | } | 4922 | } |
4938 | 4923 | ||
4939 | int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, | 4924 | int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, |
4940 | struct kvm_mp_state *mp_state) | 4925 | struct kvm_mp_state *mp_state) |
4941 | { | 4926 | { |
4942 | vcpu_load(vcpu); | ||
4943 | mp_state->mp_state = vcpu->arch.mp_state; | 4927 | mp_state->mp_state = vcpu->arch.mp_state; |
4944 | vcpu_put(vcpu); | ||
4945 | return 0; | 4928 | return 0; |
4946 | } | 4929 | } |
4947 | 4930 | ||
4948 | int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, | 4931 | int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, |
4949 | struct kvm_mp_state *mp_state) | 4932 | struct kvm_mp_state *mp_state) |
4950 | { | 4933 | { |
4951 | vcpu_load(vcpu); | ||
4952 | vcpu->arch.mp_state = mp_state->mp_state; | 4934 | vcpu->arch.mp_state = mp_state->mp_state; |
4953 | vcpu_put(vcpu); | ||
4954 | return 0; | 4935 | return 0; |
4955 | } | 4936 | } |
4956 | 4937 | ||
@@ -4996,8 +4977,6 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, | |||
4996 | int pending_vec, max_bits; | 4977 | int pending_vec, max_bits; |
4997 | struct desc_ptr dt; | 4978 | struct desc_ptr dt; |
4998 | 4979 | ||
4999 | vcpu_load(vcpu); | ||
5000 | |||
5001 | dt.size = sregs->idt.limit; | 4980 | dt.size = sregs->idt.limit; |
5002 | dt.address = sregs->idt.base; | 4981 | dt.address = sregs->idt.base; |
5003 | kvm_x86_ops->set_idt(vcpu, &dt); | 4982 | kvm_x86_ops->set_idt(vcpu, &dt); |
@@ -5057,8 +5036,6 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, | |||
5057 | !is_protmode(vcpu)) | 5036 | !is_protmode(vcpu)) |
5058 | vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; | 5037 | vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; |
5059 | 5038 | ||
5060 | vcpu_put(vcpu); | ||
5061 | |||
5062 | return 0; | 5039 | return 0; |
5063 | } | 5040 | } |
5064 | 5041 | ||
@@ -5068,12 +5045,10 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, | |||
5068 | unsigned long rflags; | 5045 | unsigned long rflags; |
5069 | int i, r; | 5046 | int i, r; |
5070 | 5047 | ||
5071 | vcpu_load(vcpu); | ||
5072 | |||
5073 | if (dbg->control & (KVM_GUESTDBG_INJECT_DB | KVM_GUESTDBG_INJECT_BP)) { | 5048 | if (dbg->control & (KVM_GUESTDBG_INJECT_DB | KVM_GUESTDBG_INJECT_BP)) { |
5074 | r = -EBUSY; | 5049 | r = -EBUSY; |
5075 | if (vcpu->arch.exception.pending) | 5050 | if (vcpu->arch.exception.pending) |
5076 | goto unlock_out; | 5051 | goto out; |
5077 | if (dbg->control & KVM_GUESTDBG_INJECT_DB) | 5052 | if (dbg->control & KVM_GUESTDBG_INJECT_DB) |
5078 | kvm_queue_exception(vcpu, DB_VECTOR); | 5053 | kvm_queue_exception(vcpu, DB_VECTOR); |
5079 | else | 5054 | else |
@@ -5115,8 +5090,7 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, | |||
5115 | 5090 | ||
5116 | r = 0; | 5091 | r = 0; |
5117 | 5092 | ||
5118 | unlock_out: | 5093 | out: |
5119 | vcpu_put(vcpu); | ||
5120 | 5094 | ||
5121 | return r; | 5095 | return r; |
5122 | } | 5096 | } |
@@ -5152,7 +5126,6 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu, | |||
5152 | gpa_t gpa; | 5126 | gpa_t gpa; |
5153 | int idx; | 5127 | int idx; |
5154 | 5128 | ||
5155 | vcpu_load(vcpu); | ||
5156 | idx = srcu_read_lock(&vcpu->kvm->srcu); | 5129 | idx = srcu_read_lock(&vcpu->kvm->srcu); |
5157 | gpa = kvm_mmu_gva_to_gpa_system(vcpu, vaddr, NULL); | 5130 | gpa = kvm_mmu_gva_to_gpa_system(vcpu, vaddr, NULL); |
5158 | srcu_read_unlock(&vcpu->kvm->srcu, idx); | 5131 | srcu_read_unlock(&vcpu->kvm->srcu, idx); |
@@ -5160,7 +5133,6 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu, | |||
5160 | tr->valid = gpa != UNMAPPED_GVA; | 5133 | tr->valid = gpa != UNMAPPED_GVA; |
5161 | tr->writeable = 1; | 5134 | tr->writeable = 1; |
5162 | tr->usermode = 0; | 5135 | tr->usermode = 0; |
5163 | vcpu_put(vcpu); | ||
5164 | 5136 | ||
5165 | return 0; | 5137 | return 0; |
5166 | } | 5138 | } |
@@ -5169,8 +5141,6 @@ int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) | |||
5169 | { | 5141 | { |
5170 | struct fxsave *fxsave = (struct fxsave *)&vcpu->arch.guest_fx_image; | 5142 | struct fxsave *fxsave = (struct fxsave *)&vcpu->arch.guest_fx_image; |
5171 | 5143 | ||
5172 | vcpu_load(vcpu); | ||
5173 | |||
5174 | memcpy(fpu->fpr, fxsave->st_space, 128); | 5144 | memcpy(fpu->fpr, fxsave->st_space, 128); |
5175 | fpu->fcw = fxsave->cwd; | 5145 | fpu->fcw = fxsave->cwd; |
5176 | fpu->fsw = fxsave->swd; | 5146 | fpu->fsw = fxsave->swd; |
@@ -5180,8 +5150,6 @@ int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) | |||
5180 | fpu->last_dp = fxsave->rdp; | 5150 | fpu->last_dp = fxsave->rdp; |
5181 | memcpy(fpu->xmm, fxsave->xmm_space, sizeof fxsave->xmm_space); | 5151 | memcpy(fpu->xmm, fxsave->xmm_space, sizeof fxsave->xmm_space); |
5182 | 5152 | ||
5183 | vcpu_put(vcpu); | ||
5184 | |||
5185 | return 0; | 5153 | return 0; |
5186 | } | 5154 | } |
5187 | 5155 | ||
@@ -5189,8 +5157,6 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) | |||
5189 | { | 5157 | { |
5190 | struct fxsave *fxsave = (struct fxsave *)&vcpu->arch.guest_fx_image; | 5158 | struct fxsave *fxsave = (struct fxsave *)&vcpu->arch.guest_fx_image; |
5191 | 5159 | ||
5192 | vcpu_load(vcpu); | ||
5193 | |||
5194 | memcpy(fxsave->st_space, fpu->fpr, 128); | 5160 | memcpy(fxsave->st_space, fpu->fpr, 128); |
5195 | fxsave->cwd = fpu->fcw; | 5161 | fxsave->cwd = fpu->fcw; |
5196 | fxsave->swd = fpu->fsw; | 5162 | fxsave->swd = fpu->fsw; |
@@ -5200,8 +5166,6 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) | |||
5200 | fxsave->rdp = fpu->last_dp; | 5166 | fxsave->rdp = fpu->last_dp; |
5201 | memcpy(fxsave->xmm_space, fpu->xmm, sizeof fxsave->xmm_space); | 5167 | memcpy(fxsave->xmm_space, fpu->xmm, sizeof fxsave->xmm_space); |
5202 | 5168 | ||
5203 | vcpu_put(vcpu); | ||
5204 | |||
5205 | return 0; | 5169 | return 0; |
5206 | } | 5170 | } |
5207 | 5171 | ||