Lines Matching refs:ve

344 static int ve_instr_len(struct ve_info *ve)
346 switch (ve->exit_reason) {
352 /* It is safe to use ve->instr_len for #VE due instructions */
353 return ve->instr_len;
356 * For EPT violations, ve->insn_len is not defined. For those,
360 WARN_ONCE(1, "ve->instr_len is not defined for EPT violations");
363 WARN_ONCE(1, "Unexpected #VE-type: %lld\n", ve->exit_reason);
364 return ve->instr_len;
391 static int handle_halt(struct ve_info *ve)
398 return ve_instr_len(ve);
412 static int read_msr(struct pt_regs *regs, struct ve_info *ve)
430 return ve_instr_len(ve);
433 static int write_msr(struct pt_regs *regs, struct ve_info *ve)
450 return ve_instr_len(ve);
453 static int handle_cpuid(struct pt_regs *regs, struct ve_info *ve)
471 return ve_instr_len(ve);
492 return ve_instr_len(ve);
518 static int handle_mmio(struct pt_regs *regs, struct ve_info *ve)
547 if (!fault_in_kernel_space(ve->gla)) {
569 if (!mmio_write(size, ve->gpa, val))
574 if (!mmio_write(size, ve->gpa, val))
596 if (!mmio_read(size, ve->gpa, &val))
676 static int handle_io(struct pt_regs *regs, struct ve_info *ve)
678 u32 exit_qual = ve->exit_qual;
697 return ve_instr_len(ve);
706 struct ve_info ve;
709 tdx_get_ve_info(&ve);
711 if (ve.exit_reason != EXIT_REASON_IO_INSTRUCTION)
714 insn_len = handle_io(regs, &ve);
722 void tdx_get_ve_info(struct ve_info *ve)
744 ve->exit_reason = args.rcx;
745 ve->exit_qual = args.rdx;
746 ve->gla = args.r8;
747 ve->gpa = args.r9;
748 ve->instr_len = lower_32_bits(args.r10);
749 ve->instr_info = upper_32_bits(args.r10);
758 static int virt_exception_user(struct pt_regs *regs, struct ve_info *ve)
760 switch (ve->exit_reason) {
762 return handle_cpuid(regs, ve);
764 pr_warn("Unexpected #VE: %lld\n", ve->exit_reason);
780 static int virt_exception_kernel(struct pt_regs *regs, struct ve_info *ve)
782 switch (ve->exit_reason) {
784 return handle_halt(ve);
786 return read_msr(regs, ve);
788 return write_msr(regs, ve);
790 return handle_cpuid(regs, ve);
792 if (is_private_gpa(ve->gpa))
794 return handle_mmio(regs, ve);
796 return handle_io(regs, ve);
798 pr_warn("Unexpected #VE: %lld\n", ve->exit_reason);
803 bool tdx_handle_virt_exception(struct pt_regs *regs, struct ve_info *ve)
808 insn_len = virt_exception_user(regs, ve);
810 insn_len = virt_exception_kernel(regs, ve);