Lines Matching defs:ve

229 static int ve_instr_len(struct ve_info *ve)
231 switch (ve->exit_reason) {
237 /* It is safe to use ve->instr_len for #VE due instructions */
238 return ve->instr_len;
241 * For EPT violations, ve->insn_len is not defined. For those,
245 WARN_ONCE(1, "ve->instr_len is not defined for EPT violations");
248 WARN_ONCE(1, "Unexpected #VE-type: %lld\n", ve->exit_reason);
249 return ve->instr_len;
276 static int handle_halt(struct ve_info *ve)
283 return ve_instr_len(ve);
297 static int read_msr(struct pt_regs *regs, struct ve_info *ve)
315 return ve_instr_len(ve);
318 static int write_msr(struct pt_regs *regs, struct ve_info *ve)
335 return ve_instr_len(ve);
338 static int handle_cpuid(struct pt_regs *regs, struct ve_info *ve)
356 return ve_instr_len(ve);
377 return ve_instr_len(ve);
404 static int handle_mmio(struct pt_regs *regs, struct ve_info *ve)
450 if (!mmio_write(size, ve->gpa, val))
455 if (!mmio_write(size, ve->gpa, val))
477 if (!mmio_read(size, ve->gpa, &val))
557 static int handle_io(struct pt_regs *regs, struct ve_info *ve)
559 u32 exit_qual = ve->exit_qual;
578 return ve_instr_len(ve);
587 struct ve_info ve;
590 tdx_get_ve_info(&ve);
592 if (ve.exit_reason != EXIT_REASON_IO_INSTRUCTION)
595 insn_len = handle_io(regs, &ve);
603 void tdx_get_ve_info(struct ve_info *ve)
625 ve->exit_reason = args.rcx;
626 ve->exit_qual = args.rdx;
627 ve->gla = args.r8;
628 ve->gpa = args.r9;
629 ve->instr_len = lower_32_bits(args.r10);
630 ve->instr_info = upper_32_bits(args.r10);
639 static int virt_exception_user(struct pt_regs *regs, struct ve_info *ve)
641 switch (ve->exit_reason) {
643 return handle_cpuid(regs, ve);
645 pr_warn("Unexpected #VE: %lld\n", ve->exit_reason);
661 static int virt_exception_kernel(struct pt_regs *regs, struct ve_info *ve)
663 switch (ve->exit_reason) {
665 return handle_halt(ve);
667 return read_msr(regs, ve);
669 return write_msr(regs, ve);
671 return handle_cpuid(regs, ve);
673 if (is_private_gpa(ve->gpa))
675 return handle_mmio(regs, ve);
677 return handle_io(regs, ve);
679 pr_warn("Unexpected #VE: %lld\n", ve->exit_reason);
684 bool tdx_handle_virt_exception(struct pt_regs *regs, struct ve_info *ve)
689 insn_len = virt_exception_user(regs, ve);
691 insn_len = virt_exception_kernel(regs, ve);