Lines Matching refs:ctxt
178 static enum es_result vc_init_em_ctxt(struct es_em_ctxt *ctxt, in vc_init_em_ctxt() argument
184 memset(ctxt, 0, sizeof(*ctxt)); in vc_init_em_ctxt()
185 ctxt->regs = regs; in vc_init_em_ctxt()
188 ret = vc_decode_insn(ctxt); in vc_init_em_ctxt()
193 static void vc_finish_insn(struct es_em_ctxt *ctxt) in vc_finish_insn() argument
195 ctxt->regs->ip += ctxt->insn.length; in vc_finish_insn()
198 static enum es_result verify_exception_info(struct ghcb *ghcb, struct es_em_ctxt *ctxt) in verify_exception_info() argument
214 ctxt->fi.vector = v; in verify_exception_info()
217 ctxt->fi.error_code = info >> 32; in verify_exception_info()
227 struct es_em_ctxt *ctxt, in sev_es_ghcb_hv_call() argument
242 return verify_exception_info(ghcb, ctxt); in sev_es_ghcb_hv_call()
283 static int __sev_cpuid_hv_ghcb(struct ghcb *ghcb, struct es_em_ctxt *ctxt, struct cpuid_leaf *leaf) in __sev_cpuid_hv_ghcb() argument
298 ret = sev_es_ghcb_hv_call(ghcb, ctxt, SVM_EXIT_CPUID, 0, 0); in __sev_cpuid_hv_ghcb()
316 static int sev_cpuid_hv(struct ghcb *ghcb, struct es_em_ctxt *ctxt, struct cpuid_leaf *leaf) in sev_cpuid_hv() argument
318 return ghcb ? __sev_cpuid_hv_ghcb(ghcb, ctxt, leaf) in sev_cpuid_hv()
425 static void snp_cpuid_hv(struct ghcb *ghcb, struct es_em_ctxt *ctxt, struct cpuid_leaf *leaf) in snp_cpuid_hv() argument
427 if (sev_cpuid_hv(ghcb, ctxt, leaf)) in snp_cpuid_hv()
431 static int snp_cpuid_postprocess(struct ghcb *ghcb, struct es_em_ctxt *ctxt, in snp_cpuid_postprocess() argument
438 snp_cpuid_hv(ghcb, ctxt, &leaf_hv); in snp_cpuid_postprocess()
457 snp_cpuid_hv(ghcb, ctxt, &leaf_hv); in snp_cpuid_postprocess()
505 snp_cpuid_hv(ghcb, ctxt, &leaf_hv); in snp_cpuid_postprocess()
527 snp_cpuid(struct ghcb *ghcb, struct es_em_ctxt *ctxt, struct cpuid_leaf *leaf) in snp_cpuid() argument
561 return snp_cpuid_postprocess(ghcb, ctxt, leaf); in snp_cpuid()
631 static enum es_result vc_insn_string_check(struct es_em_ctxt *ctxt, in vc_insn_string_check() argument
635 if (user_mode(ctxt->regs) && fault_in_kernel_space(address)) { in vc_insn_string_check()
636 ctxt->fi.vector = X86_TRAP_PF; in vc_insn_string_check()
637 ctxt->fi.error_code = X86_PF_USER; in vc_insn_string_check()
638 ctxt->fi.cr2 = address; in vc_insn_string_check()
640 ctxt->fi.error_code |= X86_PF_WRITE; in vc_insn_string_check()
648 static enum es_result vc_insn_string_read(struct es_em_ctxt *ctxt, in vc_insn_string_read() argument
658 ret = vc_insn_string_check(ctxt, address, false); in vc_insn_string_read()
666 ret = vc_read_mem(ctxt, s, d, data_size); in vc_insn_string_read()
674 static enum es_result vc_insn_string_write(struct es_em_ctxt *ctxt, in vc_insn_string_write() argument
684 ret = vc_insn_string_check(ctxt, address, true); in vc_insn_string_write()
692 ret = vc_write_mem(ctxt, d, b, data_size); in vc_insn_string_write()
719 static enum es_result vc_ioio_exitinfo(struct es_em_ctxt *ctxt, u64 *exitinfo) in vc_ioio_exitinfo() argument
721 struct insn *insn = &ctxt->insn; in vc_ioio_exitinfo()
733 port = ctxt->regs->dx & 0xffff; in vc_ioio_exitinfo()
741 port = ctxt->regs->dx & 0xffff; in vc_ioio_exitinfo()
762 port = ctxt->regs->dx & 0xffff; in vc_ioio_exitinfo()
769 port = ctxt->regs->dx & 0xffff; in vc_ioio_exitinfo()
811 return vc_ioio_check(ctxt, (u16)port, size); in vc_ioio_exitinfo()
814 static enum es_result vc_handle_ioio(struct ghcb *ghcb, struct es_em_ctxt *ctxt) in vc_handle_ioio() argument
816 struct pt_regs *regs = ctxt->regs; in vc_handle_ioio()
820 ret = vc_ioio_exitinfo(ctxt, &exit_info_1); in vc_handle_ioio()
847 es_base = insn_get_seg_base(ctxt->regs, INAT_SEG_REG_ES); in vc_handle_ioio()
851 ret = vc_insn_string_read(ctxt, in vc_handle_ioio()
866 ret = sev_es_ghcb_hv_call(ghcb, ctxt, SVM_EXIT_IOIO, in vc_handle_ioio()
873 ret = vc_insn_string_write(ctxt, in vc_handle_ioio()
908 ret = sev_es_ghcb_hv_call(ghcb, ctxt, SVM_EXIT_IOIO, exit_info_1, 0); in vc_handle_ioio()
922 static int vc_handle_cpuid_snp(struct ghcb *ghcb, struct es_em_ctxt *ctxt) in vc_handle_cpuid_snp() argument
924 struct pt_regs *regs = ctxt->regs; in vc_handle_cpuid_snp()
930 ret = snp_cpuid(ghcb, ctxt, &leaf); in vc_handle_cpuid_snp()
942 struct es_em_ctxt *ctxt) in vc_handle_cpuid() argument
944 struct pt_regs *regs = ctxt->regs; in vc_handle_cpuid()
949 snp_cpuid_ret = vc_handle_cpuid_snp(ghcb, ctxt); in vc_handle_cpuid()
965 ret = sev_es_ghcb_hv_call(ghcb, ctxt, SVM_EXIT_CPUID, 0, 0); in vc_handle_cpuid()
984 struct es_em_ctxt *ctxt, in vc_handle_rdtsc() argument
990 ret = sev_es_ghcb_hv_call(ghcb, ctxt, exit_code, 0, 0); in vc_handle_rdtsc()
998 ctxt->regs->ax = ghcb->save.rax; in vc_handle_rdtsc()
999 ctxt->regs->dx = ghcb->save.rdx; in vc_handle_rdtsc()
1001 ctxt->regs->cx = ghcb->save.rcx; in vc_handle_rdtsc()
1109 struct es_em_ctxt ctxt; in vmgexit_psc() local
1136 ret = sev_es_ghcb_hv_call(ghcb, &ctxt, SVM_VMGEXIT_PSC, 0, 0); in vmgexit_psc()