Lines Matching refs:vcpu
52 static int kvm_hv_msr_get_crash_data(struct kvm_vcpu *vcpu, in kvm_hv_msr_get_crash_data() argument
55 struct kvm_hv *hv = &vcpu->kvm->arch.hyperv; in kvm_hv_msr_get_crash_data()
64 static int kvm_hv_msr_get_crash_ctl(struct kvm_vcpu *vcpu, u64 *pdata) in kvm_hv_msr_get_crash_ctl() argument
66 struct kvm_hv *hv = &vcpu->kvm->arch.hyperv; in kvm_hv_msr_get_crash_ctl()
72 static int kvm_hv_msr_set_crash_ctl(struct kvm_vcpu *vcpu, u64 data, bool host) in kvm_hv_msr_set_crash_ctl() argument
74 struct kvm_hv *hv = &vcpu->kvm->arch.hyperv; in kvm_hv_msr_set_crash_ctl()
81 vcpu_debug(vcpu, "hv crash (0x%llx 0x%llx 0x%llx 0x%llx 0x%llx)\n", in kvm_hv_msr_set_crash_ctl()
89 kvm_make_request(KVM_REQ_HV_CRASH, vcpu); in kvm_hv_msr_set_crash_ctl()
95 static int kvm_hv_msr_set_crash_data(struct kvm_vcpu *vcpu, in kvm_hv_msr_set_crash_data() argument
98 struct kvm_hv *hv = &vcpu->kvm->arch.hyperv; in kvm_hv_msr_set_crash_data()
107 static int kvm_hv_set_msr_pw(struct kvm_vcpu *vcpu, u32 msr, u64 data, in kvm_hv_set_msr_pw() argument
110 struct kvm *kvm = vcpu->kvm; in kvm_hv_set_msr_pw()
136 kvm_x86_ops->patch_hypercall(vcpu, instructions); in kvm_hv_set_msr_pw()
162 return kvm_hv_msr_set_crash_data(vcpu, in kvm_hv_set_msr_pw()
166 return kvm_hv_msr_set_crash_ctl(vcpu, data, host); in kvm_hv_set_msr_pw()
169 vcpu_debug(vcpu, "hyper-v reset requested\n"); in kvm_hv_set_msr_pw()
170 kvm_make_request(KVM_REQ_HV_RESET, vcpu); in kvm_hv_set_msr_pw()
174 vcpu_unimpl(vcpu, "Hyper-V uhandled wrmsr: 0x%x data 0x%llx\n", in kvm_hv_set_msr_pw()
190 static int kvm_hv_set_msr(struct kvm_vcpu *vcpu, u32 msr, u64 data, bool host) in kvm_hv_set_msr() argument
192 struct kvm_vcpu_hv *hv = &vcpu->arch.hyperv; in kvm_hv_set_msr()
201 if (kvm_lapic_enable_pv_eoi(vcpu, 0)) in kvm_hv_set_msr()
206 addr = kvm_vcpu_gfn_to_hva(vcpu, gfn); in kvm_hv_set_msr()
212 kvm_vcpu_mark_page_dirty(vcpu, gfn); in kvm_hv_set_msr()
213 if (kvm_lapic_enable_pv_eoi(vcpu, in kvm_hv_set_msr()
219 return kvm_hv_vapic_msr_write(vcpu, APIC_EOI, data); in kvm_hv_set_msr()
221 return kvm_hv_vapic_msr_write(vcpu, APIC_ICR, data); in kvm_hv_set_msr()
223 return kvm_hv_vapic_msr_write(vcpu, APIC_TASKPRI, data); in kvm_hv_set_msr()
230 vcpu_unimpl(vcpu, "Hyper-V uhandled wrmsr: 0x%x data 0x%llx\n", in kvm_hv_set_msr()
238 static int kvm_hv_get_msr_pw(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) in kvm_hv_get_msr_pw() argument
241 struct kvm *kvm = vcpu->kvm; in kvm_hv_get_msr_pw()
260 return kvm_hv_msr_get_crash_data(vcpu, in kvm_hv_get_msr_pw()
264 return kvm_hv_msr_get_crash_ctl(vcpu, pdata); in kvm_hv_get_msr_pw()
269 vcpu_unimpl(vcpu, "Hyper-V unhandled rdmsr: 0x%x\n", msr); in kvm_hv_get_msr_pw()
277 static int kvm_hv_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) in kvm_hv_get_msr() argument
280 struct kvm_vcpu_hv *hv = &vcpu->arch.hyperv; in kvm_hv_get_msr()
287 kvm_for_each_vcpu(r, v, vcpu->kvm) { in kvm_hv_get_msr()
288 if (v == vcpu) { in kvm_hv_get_msr()
296 return kvm_hv_vapic_msr_read(vcpu, APIC_EOI, pdata); in kvm_hv_get_msr()
298 return kvm_hv_vapic_msr_read(vcpu, APIC_ICR, pdata); in kvm_hv_get_msr()
300 return kvm_hv_vapic_msr_read(vcpu, APIC_TASKPRI, pdata); in kvm_hv_get_msr()
308 vcpu_unimpl(vcpu, "Hyper-V unhandled rdmsr: 0x%x\n", msr); in kvm_hv_get_msr()
315 int kvm_hv_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data, bool host) in kvm_hv_set_msr_common() argument
320 mutex_lock(&vcpu->kvm->lock); in kvm_hv_set_msr_common()
321 r = kvm_hv_set_msr_pw(vcpu, msr, data, host); in kvm_hv_set_msr_common()
322 mutex_unlock(&vcpu->kvm->lock); in kvm_hv_set_msr_common()
325 return kvm_hv_set_msr(vcpu, msr, data, host); in kvm_hv_set_msr_common()
328 int kvm_hv_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) in kvm_hv_get_msr_common() argument
333 mutex_lock(&vcpu->kvm->lock); in kvm_hv_get_msr_common()
334 r = kvm_hv_get_msr_pw(vcpu, msr, pdata); in kvm_hv_get_msr_common()
335 mutex_unlock(&vcpu->kvm->lock); in kvm_hv_get_msr_common()
338 return kvm_hv_get_msr(vcpu, msr, pdata); in kvm_hv_get_msr_common()
346 int kvm_hv_hypercall(struct kvm_vcpu *vcpu) in kvm_hv_hypercall() argument
356 if (kvm_x86_ops->get_cpl(vcpu) != 0 || !is_protmode(vcpu)) { in kvm_hv_hypercall()
357 kvm_queue_exception(vcpu, UD_VECTOR); in kvm_hv_hypercall()
361 longmode = is_64_bit_mode(vcpu); in kvm_hv_hypercall()
364 param = ((u64)kvm_register_read(vcpu, VCPU_REGS_RDX) << 32) | in kvm_hv_hypercall()
365 (kvm_register_read(vcpu, VCPU_REGS_RAX) & 0xffffffff); in kvm_hv_hypercall()
366 ingpa = ((u64)kvm_register_read(vcpu, VCPU_REGS_RBX) << 32) | in kvm_hv_hypercall()
367 (kvm_register_read(vcpu, VCPU_REGS_RCX) & 0xffffffff); in kvm_hv_hypercall()
368 outgpa = ((u64)kvm_register_read(vcpu, VCPU_REGS_RDI) << 32) | in kvm_hv_hypercall()
369 (kvm_register_read(vcpu, VCPU_REGS_RSI) & 0xffffffff); in kvm_hv_hypercall()
373 param = kvm_register_read(vcpu, VCPU_REGS_RCX); in kvm_hv_hypercall()
374 ingpa = kvm_register_read(vcpu, VCPU_REGS_RDX); in kvm_hv_hypercall()
375 outgpa = kvm_register_read(vcpu, VCPU_REGS_R8); in kvm_hv_hypercall()
388 kvm_vcpu_on_spin(vcpu); in kvm_hv_hypercall()
397 kvm_register_write(vcpu, VCPU_REGS_RAX, ret); in kvm_hv_hypercall()
399 kvm_register_write(vcpu, VCPU_REGS_RDX, ret >> 32); in kvm_hv_hypercall()
400 kvm_register_write(vcpu, VCPU_REGS_RAX, ret & 0xffffffff); in kvm_hv_hypercall()