Lines Matching refs:ctxt

734     struct hvm_tsc_adjust ctxt;  in hvm_save_tsc_adjust()  local
739 ctxt.tsc_adjust = v->arch.hvm_vcpu.msr_tsc_adjust; in hvm_save_tsc_adjust()
740 err = hvm_save_entry(TSC_ADJUST, v->vcpu_id, h, &ctxt); in hvm_save_tsc_adjust()
752 struct hvm_tsc_adjust ctxt; in hvm_load_tsc_adjust() local
761 if ( hvm_load_entry(TSC_ADJUST, h, &ctxt) != 0 ) in hvm_load_tsc_adjust()
764 v->arch.hvm_vcpu.msr_tsc_adjust = ctxt.tsc_adjust; in hvm_load_tsc_adjust()
774 struct hvm_hw_cpu ctxt; in hvm_save_cpu_ctxt() local
784 memset(&ctxt, 0, sizeof(ctxt)); in hvm_save_cpu_ctxt()
787 hvm_funcs.save_cpu_ctxt(v, &ctxt); in hvm_save_cpu_ctxt()
789 ctxt.tsc = hvm_get_guest_tsc_fixed(v, d->arch.hvm_domain.sync_tsc); in hvm_save_cpu_ctxt()
791 ctxt.msr_tsc_aux = hvm_msr_tsc_aux(v); in hvm_save_cpu_ctxt()
794 ctxt.idtr_limit = seg.limit; in hvm_save_cpu_ctxt()
795 ctxt.idtr_base = seg.base; in hvm_save_cpu_ctxt()
798 ctxt.gdtr_limit = seg.limit; in hvm_save_cpu_ctxt()
799 ctxt.gdtr_base = seg.base; in hvm_save_cpu_ctxt()
802 ctxt.cs_sel = seg.sel; in hvm_save_cpu_ctxt()
803 ctxt.cs_limit = seg.limit; in hvm_save_cpu_ctxt()
804 ctxt.cs_base = seg.base; in hvm_save_cpu_ctxt()
805 ctxt.cs_arbytes = seg.attr; in hvm_save_cpu_ctxt()
808 ctxt.ds_sel = seg.sel; in hvm_save_cpu_ctxt()
809 ctxt.ds_limit = seg.limit; in hvm_save_cpu_ctxt()
810 ctxt.ds_base = seg.base; in hvm_save_cpu_ctxt()
811 ctxt.ds_arbytes = seg.attr; in hvm_save_cpu_ctxt()
814 ctxt.es_sel = seg.sel; in hvm_save_cpu_ctxt()
815 ctxt.es_limit = seg.limit; in hvm_save_cpu_ctxt()
816 ctxt.es_base = seg.base; in hvm_save_cpu_ctxt()
817 ctxt.es_arbytes = seg.attr; in hvm_save_cpu_ctxt()
820 ctxt.ss_sel = seg.sel; in hvm_save_cpu_ctxt()
821 ctxt.ss_limit = seg.limit; in hvm_save_cpu_ctxt()
822 ctxt.ss_base = seg.base; in hvm_save_cpu_ctxt()
823 ctxt.ss_arbytes = seg.attr; in hvm_save_cpu_ctxt()
826 ctxt.fs_sel = seg.sel; in hvm_save_cpu_ctxt()
827 ctxt.fs_limit = seg.limit; in hvm_save_cpu_ctxt()
828 ctxt.fs_base = seg.base; in hvm_save_cpu_ctxt()
829 ctxt.fs_arbytes = seg.attr; in hvm_save_cpu_ctxt()
832 ctxt.gs_sel = seg.sel; in hvm_save_cpu_ctxt()
833 ctxt.gs_limit = seg.limit; in hvm_save_cpu_ctxt()
834 ctxt.gs_base = seg.base; in hvm_save_cpu_ctxt()
835 ctxt.gs_arbytes = seg.attr; in hvm_save_cpu_ctxt()
838 ctxt.tr_sel = seg.sel; in hvm_save_cpu_ctxt()
839 ctxt.tr_limit = seg.limit; in hvm_save_cpu_ctxt()
840 ctxt.tr_base = seg.base; in hvm_save_cpu_ctxt()
841 ctxt.tr_arbytes = seg.attr; in hvm_save_cpu_ctxt()
844 ctxt.ldtr_sel = seg.sel; in hvm_save_cpu_ctxt()
845 ctxt.ldtr_limit = seg.limit; in hvm_save_cpu_ctxt()
846 ctxt.ldtr_base = seg.base; in hvm_save_cpu_ctxt()
847 ctxt.ldtr_arbytes = seg.attr; in hvm_save_cpu_ctxt()
851 memcpy(ctxt.fpu_regs, v->arch.fpu_ctxt, sizeof(ctxt.fpu_regs)); in hvm_save_cpu_ctxt()
852 ctxt.flags = XEN_X86_FPU_INITIALISED; in hvm_save_cpu_ctxt()
855 ctxt.rax = v->arch.user_regs.rax; in hvm_save_cpu_ctxt()
856 ctxt.rbx = v->arch.user_regs.rbx; in hvm_save_cpu_ctxt()
857 ctxt.rcx = v->arch.user_regs.rcx; in hvm_save_cpu_ctxt()
858 ctxt.rdx = v->arch.user_regs.rdx; in hvm_save_cpu_ctxt()
859 ctxt.rbp = v->arch.user_regs.rbp; in hvm_save_cpu_ctxt()
860 ctxt.rsi = v->arch.user_regs.rsi; in hvm_save_cpu_ctxt()
861 ctxt.rdi = v->arch.user_regs.rdi; in hvm_save_cpu_ctxt()
862 ctxt.rsp = v->arch.user_regs.rsp; in hvm_save_cpu_ctxt()
863 ctxt.rip = v->arch.user_regs.rip; in hvm_save_cpu_ctxt()
864 ctxt.rflags = v->arch.user_regs.rflags; in hvm_save_cpu_ctxt()
865 ctxt.r8 = v->arch.user_regs.r8; in hvm_save_cpu_ctxt()
866 ctxt.r9 = v->arch.user_regs.r9; in hvm_save_cpu_ctxt()
867 ctxt.r10 = v->arch.user_regs.r10; in hvm_save_cpu_ctxt()
868 ctxt.r11 = v->arch.user_regs.r11; in hvm_save_cpu_ctxt()
869 ctxt.r12 = v->arch.user_regs.r12; in hvm_save_cpu_ctxt()
870 ctxt.r13 = v->arch.user_regs.r13; in hvm_save_cpu_ctxt()
871 ctxt.r14 = v->arch.user_regs.r14; in hvm_save_cpu_ctxt()
872 ctxt.r15 = v->arch.user_regs.r15; in hvm_save_cpu_ctxt()
873 ctxt.dr0 = v->arch.debugreg[0]; in hvm_save_cpu_ctxt()
874 ctxt.dr1 = v->arch.debugreg[1]; in hvm_save_cpu_ctxt()
875 ctxt.dr2 = v->arch.debugreg[2]; in hvm_save_cpu_ctxt()
876 ctxt.dr3 = v->arch.debugreg[3]; in hvm_save_cpu_ctxt()
877 ctxt.dr6 = v->arch.debugreg[6]; in hvm_save_cpu_ctxt()
878 ctxt.dr7 = v->arch.debugreg[7]; in hvm_save_cpu_ctxt()
880 if ( hvm_save_entry(CPU, v->vcpu_id, h, &ctxt) != 0 ) in hvm_save_cpu_ctxt()
970 struct hvm_hw_cpu ctxt; in hvm_load_cpu_ctxt() local
984 if ( hvm_load_entry_zeroextend(CPU, h, &ctxt) != 0 ) in hvm_load_cpu_ctxt()
987 if ( ctxt.pad0 != 0 ) in hvm_load_cpu_ctxt()
991 if ( (ctxt.cr0 & HVM_CR0_GUEST_RESERVED_BITS) || in hvm_load_cpu_ctxt()
992 !(ctxt.cr0 & X86_CR0_ET) || in hvm_load_cpu_ctxt()
993 ((ctxt.cr0 & (X86_CR0_PE|X86_CR0_PG)) == X86_CR0_PG) ) in hvm_load_cpu_ctxt()
996 d->domain_id, ctxt.cr0); in hvm_load_cpu_ctxt()
1000 if ( ctxt.cr4 & ~hvm_cr4_guest_valid_bits(v, 1) ) in hvm_load_cpu_ctxt()
1003 d->domain_id, ctxt.cr4); in hvm_load_cpu_ctxt()
1007 errstr = hvm_efer_valid(v, ctxt.msr_efer, MASK_EXTR(ctxt.cr0, X86_CR0_PG)); in hvm_load_cpu_ctxt()
1011 v, ctxt.msr_efer, errstr); in hvm_load_cpu_ctxt()
1015 if ( (ctxt.flags & ~XEN_X86_FPU_INITIALISED) != 0 ) in hvm_load_cpu_ctxt()
1018 ctxt.flags); in hvm_load_cpu_ctxt()
1028 UNFOLD_ARBYTES(ctxt.cs_arbytes); in hvm_load_cpu_ctxt()
1029 UNFOLD_ARBYTES(ctxt.ds_arbytes); in hvm_load_cpu_ctxt()
1030 UNFOLD_ARBYTES(ctxt.es_arbytes); in hvm_load_cpu_ctxt()
1031 UNFOLD_ARBYTES(ctxt.fs_arbytes); in hvm_load_cpu_ctxt()
1032 UNFOLD_ARBYTES(ctxt.gs_arbytes); in hvm_load_cpu_ctxt()
1033 UNFOLD_ARBYTES(ctxt.ss_arbytes); in hvm_load_cpu_ctxt()
1034 UNFOLD_ARBYTES(ctxt.tr_arbytes); in hvm_load_cpu_ctxt()
1035 UNFOLD_ARBYTES(ctxt.ldtr_arbytes); in hvm_load_cpu_ctxt()
1039 if ( hvm_funcs.load_cpu_ctxt(v, &ctxt) < 0 ) in hvm_load_cpu_ctxt()
1045 v->arch.hvm_vcpu.msr_tsc_aux = ctxt.msr_tsc_aux; in hvm_load_cpu_ctxt()
1047 hvm_set_guest_tsc_fixed(v, ctxt.tsc, d->arch.hvm_domain.sync_tsc); in hvm_load_cpu_ctxt()
1049 seg.limit = ctxt.idtr_limit; in hvm_load_cpu_ctxt()
1050 seg.base = ctxt.idtr_base; in hvm_load_cpu_ctxt()
1053 seg.limit = ctxt.gdtr_limit; in hvm_load_cpu_ctxt()
1054 seg.base = ctxt.gdtr_base; in hvm_load_cpu_ctxt()
1057 seg.sel = ctxt.cs_sel; in hvm_load_cpu_ctxt()
1058 seg.limit = ctxt.cs_limit; in hvm_load_cpu_ctxt()
1059 seg.base = ctxt.cs_base; in hvm_load_cpu_ctxt()
1060 seg.attr = ctxt.cs_arbytes; in hvm_load_cpu_ctxt()
1063 seg.sel = ctxt.ds_sel; in hvm_load_cpu_ctxt()
1064 seg.limit = ctxt.ds_limit; in hvm_load_cpu_ctxt()
1065 seg.base = ctxt.ds_base; in hvm_load_cpu_ctxt()
1066 seg.attr = ctxt.ds_arbytes; in hvm_load_cpu_ctxt()
1069 seg.sel = ctxt.es_sel; in hvm_load_cpu_ctxt()
1070 seg.limit = ctxt.es_limit; in hvm_load_cpu_ctxt()
1071 seg.base = ctxt.es_base; in hvm_load_cpu_ctxt()
1072 seg.attr = ctxt.es_arbytes; in hvm_load_cpu_ctxt()
1075 seg.sel = ctxt.ss_sel; in hvm_load_cpu_ctxt()
1076 seg.limit = ctxt.ss_limit; in hvm_load_cpu_ctxt()
1077 seg.base = ctxt.ss_base; in hvm_load_cpu_ctxt()
1078 seg.attr = ctxt.ss_arbytes; in hvm_load_cpu_ctxt()
1081 seg.sel = ctxt.fs_sel; in hvm_load_cpu_ctxt()
1082 seg.limit = ctxt.fs_limit; in hvm_load_cpu_ctxt()
1083 seg.base = ctxt.fs_base; in hvm_load_cpu_ctxt()
1084 seg.attr = ctxt.fs_arbytes; in hvm_load_cpu_ctxt()
1087 seg.sel = ctxt.gs_sel; in hvm_load_cpu_ctxt()
1088 seg.limit = ctxt.gs_limit; in hvm_load_cpu_ctxt()
1089 seg.base = ctxt.gs_base; in hvm_load_cpu_ctxt()
1090 seg.attr = ctxt.gs_arbytes; in hvm_load_cpu_ctxt()
1093 seg.sel = ctxt.tr_sel; in hvm_load_cpu_ctxt()
1094 seg.limit = ctxt.tr_limit; in hvm_load_cpu_ctxt()
1095 seg.base = ctxt.tr_base; in hvm_load_cpu_ctxt()
1096 seg.attr = ctxt.tr_arbytes; in hvm_load_cpu_ctxt()
1099 seg.sel = ctxt.ldtr_sel; in hvm_load_cpu_ctxt()
1100 seg.limit = ctxt.ldtr_limit; in hvm_load_cpu_ctxt()
1101 seg.base = ctxt.ldtr_base; in hvm_load_cpu_ctxt()
1102 seg.attr = ctxt.ldtr_arbytes; in hvm_load_cpu_ctxt()
1108 v->fpu_initialised = !!(ctxt.flags & XEN_X86_FPU_INITIALISED); in hvm_load_cpu_ctxt()
1111 memcpy(v->arch.fpu_ctxt, ctxt.fpu_regs, sizeof(ctxt.fpu_regs)); in hvm_load_cpu_ctxt()
1123 v->arch.user_regs.rax = ctxt.rax; in hvm_load_cpu_ctxt()
1124 v->arch.user_regs.rbx = ctxt.rbx; in hvm_load_cpu_ctxt()
1125 v->arch.user_regs.rcx = ctxt.rcx; in hvm_load_cpu_ctxt()
1126 v->arch.user_regs.rdx = ctxt.rdx; in hvm_load_cpu_ctxt()
1127 v->arch.user_regs.rbp = ctxt.rbp; in hvm_load_cpu_ctxt()
1128 v->arch.user_regs.rsi = ctxt.rsi; in hvm_load_cpu_ctxt()
1129 v->arch.user_regs.rdi = ctxt.rdi; in hvm_load_cpu_ctxt()
1130 v->arch.user_regs.rsp = ctxt.rsp; in hvm_load_cpu_ctxt()
1131 v->arch.user_regs.rip = ctxt.rip; in hvm_load_cpu_ctxt()
1132 v->arch.user_regs.rflags = ctxt.rflags | X86_EFLAGS_MBS; in hvm_load_cpu_ctxt()
1133 v->arch.user_regs.r8 = ctxt.r8; in hvm_load_cpu_ctxt()
1134 v->arch.user_regs.r9 = ctxt.r9; in hvm_load_cpu_ctxt()
1135 v->arch.user_regs.r10 = ctxt.r10; in hvm_load_cpu_ctxt()
1136 v->arch.user_regs.r11 = ctxt.r11; in hvm_load_cpu_ctxt()
1137 v->arch.user_regs.r12 = ctxt.r12; in hvm_load_cpu_ctxt()
1138 v->arch.user_regs.r13 = ctxt.r13; in hvm_load_cpu_ctxt()
1139 v->arch.user_regs.r14 = ctxt.r14; in hvm_load_cpu_ctxt()
1140 v->arch.user_regs.r15 = ctxt.r15; in hvm_load_cpu_ctxt()
1141 v->arch.debugreg[0] = ctxt.dr0; in hvm_load_cpu_ctxt()
1142 v->arch.debugreg[1] = ctxt.dr1; in hvm_load_cpu_ctxt()
1143 v->arch.debugreg[2] = ctxt.dr2; in hvm_load_cpu_ctxt()
1144 v->arch.debugreg[3] = ctxt.dr3; in hvm_load_cpu_ctxt()
1145 v->arch.debugreg[6] = ctxt.dr6; in hvm_load_cpu_ctxt()
1146 v->arch.debugreg[7] = ctxt.dr7; in hvm_load_cpu_ctxt()
1168 struct hvm_hw_cpu_xsave *ctxt; in hvm_save_cpu_xsave_states() local
1181 ctxt = (struct hvm_hw_cpu_xsave *)&h->data[h->cur]; in hvm_save_cpu_xsave_states()
1184 ctxt->xfeature_mask = xfeature_mask; in hvm_save_cpu_xsave_states()
1185 ctxt->xcr0 = v->arch.xcr0; in hvm_save_cpu_xsave_states()
1186 ctxt->xcr0_accum = v->arch.xcr0_accum; in hvm_save_cpu_xsave_states()
1187 expand_xsave_states(v, &ctxt->save_area, in hvm_save_cpu_xsave_states()
1188 size - offsetof(typeof(*ctxt), save_area)); in hvm_save_cpu_xsave_states()
1212 struct hvm_hw_cpu_xsave *ctxt; in hvm_load_cpu_xsave_states() local
1258 ctxt = (struct hvm_hw_cpu_xsave *)&h->data[h->cur]; in hvm_load_cpu_xsave_states()
1261 err = validate_xstate(ctxt->xcr0, ctxt->xcr0_accum, in hvm_load_cpu_xsave_states()
1262 (const void *)&ctxt->save_area.xsave_hdr); in hvm_load_cpu_xsave_states()
1268 d->domain_id, vcpuid, ctxt->xfeature_mask, ctxt->xcr0_accum, in hvm_load_cpu_xsave_states()
1269 ctxt->xcr0, ctxt->save_area.xsave_hdr.xstate_bv, err); in hvm_load_cpu_xsave_states()
1272 size = HVM_CPU_XSAVE_SIZE(ctxt->xcr0_accum); in hvm_load_cpu_xsave_states()
1298 if ( xsave_area_compressed((const void *)&ctxt->save_area) ) in hvm_load_cpu_xsave_states()
1314 v->arch.xcr0 = ctxt->xcr0; in hvm_load_cpu_xsave_states()
1315 v->arch.xcr0_accum = ctxt->xcr0_accum; in hvm_load_cpu_xsave_states()
1316 if ( ctxt->xcr0_accum & XSTATE_NONLAZY ) in hvm_load_cpu_xsave_states()
1318 compress_xsave_states(v, &ctxt->save_area, in hvm_load_cpu_xsave_states()
1337 struct hvm_msr *ctxt; in hvm_save_cpu_msrs() local
1343 ctxt = (struct hvm_msr *)&h->data[h->cur]; in hvm_save_cpu_msrs()
1344 ctxt->count = 0; in hvm_save_cpu_msrs()
1369 ctxt->msr[ctxt->count].index = msrs_to_send[i]; in hvm_save_cpu_msrs()
1370 ctxt->msr[ctxt->count++].val = val; in hvm_save_cpu_msrs()
1374 hvm_funcs.save_msr(v, ctxt); in hvm_save_cpu_msrs()
1376 ASSERT(ctxt->count <= msr_count_max); in hvm_save_cpu_msrs()
1378 for ( i = 0; i < ctxt->count; ++i ) in hvm_save_cpu_msrs()
1379 ctxt->msr[i]._rsvd = 0; in hvm_save_cpu_msrs()
1381 if ( ctxt->count ) in hvm_save_cpu_msrs()
1384 d->length = HVM_CPU_MSR_SIZE(ctxt->count); in hvm_save_cpu_msrs()
1385 h->cur += HVM_CPU_MSR_SIZE(ctxt->count); in hvm_save_cpu_msrs()
1400 struct hvm_msr *ctxt; in hvm_load_cpu_msrs() local
1435 ctxt = (struct hvm_msr *)&h->data[h->cur]; in hvm_load_cpu_msrs()
1438 if ( desc->length != HVM_CPU_MSR_SIZE(ctxt->count) ) in hvm_load_cpu_msrs()
1443 HVM_CPU_MSR_SIZE(ctxt->count)); in hvm_load_cpu_msrs()
1447 for ( i = 0; i < ctxt->count; ++i ) in hvm_load_cpu_msrs()
1448 if ( ctxt->msr[i]._rsvd ) in hvm_load_cpu_msrs()
1453 err = hvm_funcs.load_msr(v, ctxt); in hvm_load_cpu_msrs()
1455 for ( i = 0; !err && i < ctxt->count; ++i ) in hvm_load_cpu_msrs()
1457 switch ( ctxt->msr[i].index ) in hvm_load_cpu_msrs()
1462 rc = guest_wrmsr(v, ctxt->msr[i].index, ctxt->msr[i].val); in hvm_load_cpu_msrs()
1469 if ( !ctxt->msr[i]._rsvd ) in hvm_load_cpu_msrs()
3683 const struct x86_emulate_ctxt *ctxt) in is_sysdesc_access() argument
3688 switch ( ctxt->opcode ) in is_sysdesc_access()
3724 const struct x86_emulate_ctxt *ctxt) in is_cross_vendor() argument
3726 switch ( ctxt->opcode ) in is_cross_vendor()
3742 struct hvm_emulate_ctxt ctxt; in hvm_ud_intercept() local
3744 hvm_emulate_init_once(&ctxt, opt_hvm_fep ? NULL : is_cross_vendor, regs); in hvm_ud_intercept()
3748 const struct segment_register *cs = &ctxt.seg_reg[x86_seg_cs]; in hvm_ud_intercept()
3749 uint32_t walk = (ctxt.seg_reg[x86_seg_ss].dpl == 3) in hvm_ud_intercept()
3780 switch ( hvm_emulate_one(&ctxt) ) in hvm_ud_intercept()
3787 hvm_inject_event(&ctxt.ctxt.event); in hvm_ud_intercept()
3790 hvm_emulate_writeback(&ctxt); in hvm_ud_intercept()