Lines Matching refs:vmcb12
252 static bool nested_vmcb_check_save(struct vcpu_svm *svm, struct vmcb *vmcb12) in nested_vmcb_check_save() argument
264 if ((vmcb12->save.efer & EFER_SVME) == 0) in nested_vmcb_check_save()
267 if (((vmcb12->save.cr0 & X86_CR0_CD) == 0) && (vmcb12->save.cr0 & X86_CR0_NW)) in nested_vmcb_check_save()
270 if (!kvm_dr6_valid(vmcb12->save.dr6) || !kvm_dr7_valid(vmcb12->save.dr7)) in nested_vmcb_check_save()
273 vmcb12_lma = (vmcb12->save.efer & EFER_LME) && (vmcb12->save.cr0 & X86_CR0_PG); in nested_vmcb_check_save()
276 if (!(vmcb12->save.cr4 & X86_CR4_PAE) || in nested_vmcb_check_save()
277 !(vmcb12->save.cr0 & X86_CR0_PE) || in nested_vmcb_check_save()
278 (vmcb12->save.cr3 & vcpu->arch.cr3_lm_rsvd_bits)) in nested_vmcb_check_save()
281 if (kvm_valid_cr4(&svm->vcpu, vmcb12->save.cr4)) in nested_vmcb_check_save()
331 struct vmcb *vmcb12) in nested_vmcb_save_pending_event() argument
343 vmcb12->control.exit_int_info_err = in nested_vmcb_save_pending_event()
360 vmcb12->control.exit_int_info = exit_int_info; in nested_vmcb_save_pending_event()
399 static void nested_prepare_vmcb_save(struct vcpu_svm *svm, struct vmcb *vmcb12) in nested_prepare_vmcb_save() argument
402 svm->vmcb->save.es = vmcb12->save.es; in nested_prepare_vmcb_save()
403 svm->vmcb->save.cs = vmcb12->save.cs; in nested_prepare_vmcb_save()
404 svm->vmcb->save.ss = vmcb12->save.ss; in nested_prepare_vmcb_save()
405 svm->vmcb->save.ds = vmcb12->save.ds; in nested_prepare_vmcb_save()
406 svm->vmcb->save.gdtr = vmcb12->save.gdtr; in nested_prepare_vmcb_save()
407 svm->vmcb->save.idtr = vmcb12->save.idtr; in nested_prepare_vmcb_save()
408 kvm_set_rflags(&svm->vcpu, vmcb12->save.rflags); in nested_prepare_vmcb_save()
415 svm_set_efer(&svm->vcpu, vmcb12->save.efer | EFER_SVME); in nested_prepare_vmcb_save()
417 svm_set_cr0(&svm->vcpu, vmcb12->save.cr0); in nested_prepare_vmcb_save()
418 svm_set_cr4(&svm->vcpu, vmcb12->save.cr4); in nested_prepare_vmcb_save()
419 svm->vmcb->save.cr2 = svm->vcpu.arch.cr2 = vmcb12->save.cr2; in nested_prepare_vmcb_save()
420 kvm_rax_write(&svm->vcpu, vmcb12->save.rax); in nested_prepare_vmcb_save()
421 kvm_rsp_write(&svm->vcpu, vmcb12->save.rsp); in nested_prepare_vmcb_save()
422 kvm_rip_write(&svm->vcpu, vmcb12->save.rip); in nested_prepare_vmcb_save()
425 svm->vmcb->save.rax = vmcb12->save.rax; in nested_prepare_vmcb_save()
426 svm->vmcb->save.rsp = vmcb12->save.rsp; in nested_prepare_vmcb_save()
427 svm->vmcb->save.rip = vmcb12->save.rip; in nested_prepare_vmcb_save()
428 svm->vmcb->save.dr7 = vmcb12->save.dr7; in nested_prepare_vmcb_save()
429 svm->vcpu.arch.dr6 = vmcb12->save.dr6; in nested_prepare_vmcb_save()
430 svm->vmcb->save.cpl = vmcb12->save.cpl; in nested_prepare_vmcb_save()
471 struct vmcb *vmcb12) in enter_svm_guest_mode() argument
476 nested_prepare_vmcb_save(svm, vmcb12); in enter_svm_guest_mode()
479 ret = nested_svm_load_cr3(&svm->vcpu, vmcb12->save.cr3, in enter_svm_guest_mode()
495 struct vmcb *vmcb12; in nested_svm_vmrun() local
517 vmcb12 = map.hva; in nested_svm_vmrun()
522 load_nested_vmcb_control(svm, &vmcb12->control); in nested_svm_vmrun()
524 if (!nested_vmcb_check_save(svm, vmcb12) || in nested_svm_vmrun()
526 vmcb12->control.exit_code = SVM_EXIT_ERR; in nested_svm_vmrun()
527 vmcb12->control.exit_code_hi = 0; in nested_svm_vmrun()
528 vmcb12->control.exit_info_1 = 0; in nested_svm_vmrun()
529 vmcb12->control.exit_info_2 = 0; in nested_svm_vmrun()
534 vmcb12->save.rip, in nested_svm_vmrun()
535 vmcb12->control.int_ctl, in nested_svm_vmrun()
536 vmcb12->control.event_inj, in nested_svm_vmrun()
537 vmcb12->control.nested_ctl); in nested_svm_vmrun()
539 trace_kvm_nested_intercepts(vmcb12->control.intercepts[INTERCEPT_CR] & 0xffff, in nested_svm_vmrun()
540 vmcb12->control.intercepts[INTERCEPT_CR] >> 16, in nested_svm_vmrun()
541 vmcb12->control.intercepts[INTERCEPT_EXCEPTION], in nested_svm_vmrun()
542 vmcb12->control.intercepts[INTERCEPT_WORD3], in nested_svm_vmrun()
543 vmcb12->control.intercepts[INTERCEPT_WORD4], in nested_svm_vmrun()
544 vmcb12->control.intercepts[INTERCEPT_WORD5]); in nested_svm_vmrun()
576 if (enter_svm_guest_mode(svm, vmcb12_gpa, vmcb12)) in nested_svm_vmrun()
617 struct vmcb *vmcb12; in nested_svm_vmexit() local
629 vmcb12 = map.hva; in nested_svm_vmexit()
643 vmcb12->save.es = vmcb->save.es; in nested_svm_vmexit()
644 vmcb12->save.cs = vmcb->save.cs; in nested_svm_vmexit()
645 vmcb12->save.ss = vmcb->save.ss; in nested_svm_vmexit()
646 vmcb12->save.ds = vmcb->save.ds; in nested_svm_vmexit()
647 vmcb12->save.gdtr = vmcb->save.gdtr; in nested_svm_vmexit()
648 vmcb12->save.idtr = vmcb->save.idtr; in nested_svm_vmexit()
649 vmcb12->save.efer = svm->vcpu.arch.efer; in nested_svm_vmexit()
650 vmcb12->save.cr0 = kvm_read_cr0(&svm->vcpu); in nested_svm_vmexit()
651 vmcb12->save.cr3 = kvm_read_cr3(&svm->vcpu); in nested_svm_vmexit()
652 vmcb12->save.cr2 = vmcb->save.cr2; in nested_svm_vmexit()
653 vmcb12->save.cr4 = svm->vcpu.arch.cr4; in nested_svm_vmexit()
654 vmcb12->save.rflags = kvm_get_rflags(&svm->vcpu); in nested_svm_vmexit()
655 vmcb12->save.rip = kvm_rip_read(&svm->vcpu); in nested_svm_vmexit()
656 vmcb12->save.rsp = kvm_rsp_read(&svm->vcpu); in nested_svm_vmexit()
657 vmcb12->save.rax = kvm_rax_read(&svm->vcpu); in nested_svm_vmexit()
658 vmcb12->save.dr7 = vmcb->save.dr7; in nested_svm_vmexit()
659 vmcb12->save.dr6 = svm->vcpu.arch.dr6; in nested_svm_vmexit()
660 vmcb12->save.cpl = vmcb->save.cpl; in nested_svm_vmexit()
662 vmcb12->control.int_state = vmcb->control.int_state; in nested_svm_vmexit()
663 vmcb12->control.exit_code = vmcb->control.exit_code; in nested_svm_vmexit()
664 vmcb12->control.exit_code_hi = vmcb->control.exit_code_hi; in nested_svm_vmexit()
665 vmcb12->control.exit_info_1 = vmcb->control.exit_info_1; in nested_svm_vmexit()
666 vmcb12->control.exit_info_2 = vmcb->control.exit_info_2; in nested_svm_vmexit()
668 if (vmcb12->control.exit_code != SVM_EXIT_ERR) in nested_svm_vmexit()
669 nested_vmcb_save_pending_event(svm, vmcb12); in nested_svm_vmexit()
672 vmcb12->control.next_rip = vmcb->control.next_rip; in nested_svm_vmexit()
674 vmcb12->control.int_ctl = svm->nested.ctl.int_ctl; in nested_svm_vmexit()
675 vmcb12->control.tlb_ctl = svm->nested.ctl.tlb_ctl; in nested_svm_vmexit()
676 vmcb12->control.event_inj = svm->nested.ctl.event_inj; in nested_svm_vmexit()
677 vmcb12->control.event_inj_err = svm->nested.ctl.event_inj_err; in nested_svm_vmexit()
679 vmcb12->control.pause_filter_count = in nested_svm_vmexit()
681 vmcb12->control.pause_filter_thresh = in nested_svm_vmexit()
715 trace_kvm_nested_vmexit_inject(vmcb12->control.exit_code, in nested_svm_vmexit()
716 vmcb12->control.exit_info_1, in nested_svm_vmexit()
717 vmcb12->control.exit_info_2, in nested_svm_vmexit()
718 vmcb12->control.exit_int_info, in nested_svm_vmexit()
719 vmcb12->control.exit_int_info_err, in nested_svm_vmexit()