Lines Matching defs:ve

206 static int ve_instr_len(struct ve_info *ve)
208 switch (ve->exit_reason) {
214 /* It is safe to use ve->instr_len for #VE due instructions */
215 return ve->instr_len;
218 * For EPT violations, ve->insn_len is not defined. For those,
222 WARN_ONCE(1, "ve->instr_len is not defined for EPT violations");
225 WARN_ONCE(1, "Unexpected #VE-type: %lld\n", ve->exit_reason);
226 return ve->instr_len;
253 static int handle_halt(struct ve_info *ve)
260 return ve_instr_len(ve);
274 static int read_msr(struct pt_regs *regs, struct ve_info *ve)
292 return ve_instr_len(ve);
295 static int write_msr(struct pt_regs *regs, struct ve_info *ve)
312 return ve_instr_len(ve);
315 static int handle_cpuid(struct pt_regs *regs, struct ve_info *ve)
333 return ve_instr_len(ve);
354 return ve_instr_len(ve);
380 static int handle_mmio(struct pt_regs *regs, struct ve_info *ve)
426 if (!mmio_write(size, ve->gpa, val))
431 if (!mmio_write(size, ve->gpa, val))
453 if (!mmio_read(size, ve->gpa, &val))
533 static int handle_io(struct pt_regs *regs, struct ve_info *ve)
535 u32 exit_qual = ve->exit_qual;
554 return ve_instr_len(ve);
563 struct ve_info ve;
566 tdx_get_ve_info(&ve);
568 if (ve.exit_reason != EXIT_REASON_IO_INSTRUCTION)
571 insn_len = handle_io(regs, &ve);
579 void tdx_get_ve_info(struct ve_info *ve)
601 ve->exit_reason = out.rcx;
602 ve->exit_qual = out.rdx;
603 ve->gla = out.r8;
604 ve->gpa = out.r9;
605 ve->instr_len = lower_32_bits(out.r10);
606 ve->instr_info = upper_32_bits(out.r10);
615 static int virt_exception_user(struct pt_regs *regs, struct ve_info *ve)
617 switch (ve->exit_reason) {
619 return handle_cpuid(regs, ve);
621 pr_warn("Unexpected #VE: %lld\n", ve->exit_reason);
637 static int virt_exception_kernel(struct pt_regs *regs, struct ve_info *ve)
639 switch (ve->exit_reason) {
641 return handle_halt(ve);
643 return read_msr(regs, ve);
645 return write_msr(regs, ve);
647 return handle_cpuid(regs, ve);
649 if (is_private_gpa(ve->gpa))
651 return handle_mmio(regs, ve);
653 return handle_io(regs, ve);
655 pr_warn("Unexpected #VE: %lld\n", ve->exit_reason);
660 bool tdx_handle_virt_exception(struct pt_regs *regs, struct ve_info *ve)
665 insn_len = virt_exception_user(regs, ve);
667 insn_len = virt_exception_kernel(regs, ve);