Lines Matching refs:vmcb
37 if (svm->vmcb->control.exit_code != SVM_EXIT_NPF) {
42 svm->vmcb->control.exit_code = SVM_EXIT_NPF;
43 svm->vmcb->control.exit_code_hi = 0;
44 svm->vmcb->control.exit_info_1 = (1ULL << 32);
45 svm->vmcb->control.exit_info_2 = fault->address;
48 svm->vmcb->control.exit_info_1 &= ~0xffffffffULL;
49 svm->vmcb->control.exit_info_1 |= fault->error_code;
61 svm->vmcb->control.exit_code = SVM_EXIT_EXCP_BASE + PF_VECTOR;
62 svm->vmcb->control.exit_code_hi = 0;
63 svm->vmcb->control.exit_info_1 = fault->error_code;
64 svm->vmcb->control.exit_info_2 = fault->address;
95 struct vmcb *hsave = svm->nested.hsave;
120 vmcb_mark_dirty(svm->vmcb, VMCB_INTERCEPTS);
125 c = &svm->vmcb->control;
166 /* asid not copied, it is handled manually for svm->vmcb. */
190 * nested vmcb. It is optimized in that it only merges the parts where
214 svm->vmcb->control.msrpm_base_pa = __sme_set(__pa(svm->nested.msrpm));
252 static bool nested_vmcb_check_save(struct vcpu_svm *svm, struct vmcb *vmcb12)
305 svm->nested.ctl.event_inj = svm->vmcb->control.event_inj;
306 svm->nested.ctl.event_inj_err = svm->vmcb->control.event_inj_err;
314 * svm->vmcb->control.int_ctl and possibly setting V_IRQ
323 svm->nested.ctl.int_ctl |= svm->vmcb->control.int_ctl & mask;
331 struct vmcb *vmcb12)
399 static void nested_prepare_vmcb_save(struct vcpu_svm *svm, struct vmcb *vmcb12)
402 svm->vmcb->save.es = vmcb12->save.es;
403 svm->vmcb->save.cs = vmcb12->save.cs;
404 svm->vmcb->save.ss = vmcb12->save.ss;
405 svm->vmcb->save.ds = vmcb12->save.ds;
406 svm->vmcb->save.gdtr = vmcb12->save.gdtr;
407 svm->vmcb->save.idtr = vmcb12->save.idtr;
419 svm->vmcb->save.cr2 = svm->vcpu.arch.cr2 = vmcb12->save.cr2;
425 svm->vmcb->save.rax = vmcb12->save.rax;
426 svm->vmcb->save.rsp = vmcb12->save.rsp;
427 svm->vmcb->save.rip = vmcb12->save.rip;
428 svm->vmcb->save.dr7 = vmcb12->save.dr7;
430 svm->vmcb->save.cpl = vmcb12->save.cpl;
443 svm->vmcb->control.tsc_offset = svm->vcpu.arch.tsc_offset =
446 svm->vmcb->control.int_ctl =
450 svm->vmcb->control.int_vector = svm->nested.ctl.int_vector;
451 svm->vmcb->control.int_state = svm->nested.ctl.int_state;
452 svm->vmcb->control.event_inj = svm->nested.ctl.event_inj;
453 svm->vmcb->control.event_inj_err = svm->nested.ctl.event_inj_err;
455 svm->vmcb->control.pause_filter_count = svm->nested.ctl.pause_filter_count;
456 svm->vmcb->control.pause_filter_thresh = svm->nested.ctl.pause_filter_thresh;
467 vmcb_mark_all_dirty(svm->vmcb);
471 struct vmcb *vmcb12)
495 struct vmcb *vmcb12;
496 struct vmcb *hsave = svm->nested.hsave;
497 struct vmcb *vmcb = svm->vmcb;
506 vmcb12_gpa = svm->vmcb->save.rax;
533 trace_kvm_nested_vmrun(svm->vmcb->save.rip, vmcb12_gpa,
551 * Save the old vmcb, so we don't need to pick what we save, but can
554 hsave->save.es = vmcb->save.es;
555 hsave->save.cs = vmcb->save.cs;
556 hsave->save.ss = vmcb->save.ss;
557 hsave->save.ds = vmcb->save.ds;
558 hsave->save.gdtr = vmcb->save.gdtr;
559 hsave->save.idtr = vmcb->save.idtr;
565 hsave->save.rsp = vmcb->save.rsp;
566 hsave->save.rax = vmcb->save.rax;
568 hsave->save.cr3 = vmcb->save.cr3;
572 copy_vmcb_control_area(&hsave->control, &vmcb->control);
585 svm->vmcb->control.exit_code = SVM_EXIT_ERR;
586 svm->vmcb->control.exit_code_hi = 0;
587 svm->vmcb->control.exit_info_1 = 0;
588 svm->vmcb->control.exit_info_2 = 0;
598 void nested_svm_vmloadsave(struct vmcb *from_vmcb, struct vmcb *to_vmcb)
617 struct vmcb *vmcb12;
618 struct vmcb *hsave = svm->nested.hsave;
619 struct vmcb *vmcb = svm->vmcb;
641 /* Give the current vmcb to the guest */
643 vmcb12->save.es = vmcb->save.es;
644 vmcb12->save.cs = vmcb->save.cs;
645 vmcb12->save.ss = vmcb->save.ss;
646 vmcb12->save.ds = vmcb->save.ds;
647 vmcb12->save.gdtr = vmcb->save.gdtr;
648 vmcb12->save.idtr = vmcb->save.idtr;
652 vmcb12->save.cr2 = vmcb->save.cr2;
658 vmcb12->save.dr7 = vmcb->save.dr7;
660 vmcb12->save.cpl = vmcb->save.cpl;
662 vmcb12->control.int_state = vmcb->control.int_state;
663 vmcb12->control.exit_code = vmcb->control.exit_code;
664 vmcb12->control.exit_code_hi = vmcb->control.exit_code_hi;
665 vmcb12->control.exit_info_1 = vmcb->control.exit_info_1;
666 vmcb12->control.exit_info_2 = vmcb->control.exit_info_2;
672 vmcb12->control.next_rip = vmcb->control.next_rip;
680 svm->vmcb->control.pause_filter_count;
682 svm->vmcb->control.pause_filter_thresh;
685 copy_vmcb_control_area(&vmcb->control, &hsave->control);
690 svm->vmcb->control.tsc_offset = svm->vcpu.arch.tsc_offset =
696 svm->vmcb->save.es = hsave->save.es;
697 svm->vmcb->save.cs = hsave->save.cs;
698 svm->vmcb->save.ss = hsave->save.ss;
699 svm->vmcb->save.ds = hsave->save.ds;
700 svm->vmcb->save.gdtr = hsave->save.gdtr;
701 svm->vmcb->save.idtr = hsave->save.idtr;
709 svm->vmcb->save.dr7 = 0;
710 svm->vmcb->save.cpl = 0;
711 svm->vmcb->control.exit_int_info = 0;
713 vmcb_mark_all_dirty(svm->vmcb);
731 svm->vmcb->save.cr3 = hsave->save.cr3;
791 struct vmcb *hsave = svm->nested.hsave;
792 struct vmcb *vmcb = svm->vmcb;
796 copy_vmcb_control_area(&vmcb->control, &hsave->control);
813 write = svm->vmcb->control.exit_info_1 & 1;
838 port = svm->vmcb->control.exit_info_1 >> 16;
839 size = (svm->vmcb->control.exit_info_1 & SVM_IOIO_SIZE_MASK) >>
855 u32 exit_code = svm->vmcb->control.exit_code;
917 if (svm->vmcb->save.cpl) {
936 svm->vmcb->control.exit_code = SVM_EXIT_EXCP_BASE + nr;
937 svm->vmcb->control.exit_code_hi = 0;
940 svm->vmcb->control.exit_info_1 = svm->vcpu.arch.exception.error_code;
948 svm->vmcb->control.exit_info_2 = svm->vcpu.arch.apf.nested_apf_token;
950 svm->vmcb->control.exit_info_2 = svm->vcpu.arch.exception.payload;
952 svm->vmcb->control.exit_info_2 = svm->vcpu.arch.cr2;
968 svm->vmcb->control.exit_code = SVM_EXIT_SMI;
969 svm->vmcb->control.exit_info_1 = 0;
970 svm->vmcb->control.exit_info_2 = 0;
977 svm->vmcb->control.exit_code = SVM_EXIT_NMI;
978 svm->vmcb->control.exit_info_1 = 0;
979 svm->vmcb->control.exit_info_2 = 0;
986 trace_kvm_nested_intr_vmexit(svm->vmcb->save.rip);
988 svm->vmcb->control.exit_code = SVM_EXIT_INTR;
989 svm->vmcb->control.exit_info_1 = 0;
990 svm->vmcb->control.exit_info_2 = 0;
1002 svm->vmcb->control.exit_code = SVM_EXIT_INIT;
1003 svm->vmcb->control.exit_info_1 = 0;
1004 svm->vmcb->control.exit_info_2 = 0;
1068 u32 exit_code = svm->vmcb->control.exit_code;
1104 struct vmcb __user *user_vmcb = (struct vmcb __user *)
1156 struct vmcb *hsave = svm->nested.hsave;
1157 struct vmcb __user *user_vmcb = (struct vmcb __user *)
1240 copy_vmcb_control_area(&hsave->control, &svm->vmcb->control);