Lines Matching refs:ve

248 static int ve_instr_len(struct ve_info *ve)  in ve_instr_len()  argument
250 switch (ve->exit_reason) { in ve_instr_len()
257 return ve->instr_len; in ve_instr_len()
267 WARN_ONCE(1, "Unexpected #VE-type: %lld\n", ve->exit_reason); in ve_instr_len()
268 return ve->instr_len; in ve_instr_len()
295 static int handle_halt(struct ve_info *ve) in handle_halt() argument
302 return ve_instr_len(ve); in handle_halt()
316 static int read_msr(struct pt_regs *regs, struct ve_info *ve) in read_msr() argument
334 return ve_instr_len(ve); in read_msr()
337 static int write_msr(struct pt_regs *regs, struct ve_info *ve) in write_msr() argument
354 return ve_instr_len(ve); in write_msr()
357 static int handle_cpuid(struct pt_regs *regs, struct ve_info *ve) in handle_cpuid() argument
375 return ve_instr_len(ve); in handle_cpuid()
396 return ve_instr_len(ve); in handle_cpuid()
422 static int handle_mmio(struct pt_regs *regs, struct ve_info *ve) in handle_mmio() argument
468 if (!mmio_write(size, ve->gpa, val)) in handle_mmio()
473 if (!mmio_write(size, ve->gpa, val)) in handle_mmio()
495 if (!mmio_read(size, ve->gpa, &val)) in handle_mmio()
575 static int handle_io(struct pt_regs *regs, struct ve_info *ve) in handle_io() argument
577 u32 exit_qual = ve->exit_qual; in handle_io()
596 return ve_instr_len(ve); in handle_io()
605 struct ve_info ve; in tdx_early_handle_ve() local
608 tdx_get_ve_info(&ve); in tdx_early_handle_ve()
610 if (ve.exit_reason != EXIT_REASON_IO_INSTRUCTION) in tdx_early_handle_ve()
613 insn_len = handle_io(regs, &ve); in tdx_early_handle_ve()
621 void tdx_get_ve_info(struct ve_info *ve) in tdx_get_ve_info() argument
643 ve->exit_reason = out.rcx; in tdx_get_ve_info()
644 ve->exit_qual = out.rdx; in tdx_get_ve_info()
645 ve->gla = out.r8; in tdx_get_ve_info()
646 ve->gpa = out.r9; in tdx_get_ve_info()
647 ve->instr_len = lower_32_bits(out.r10); in tdx_get_ve_info()
648 ve->instr_info = upper_32_bits(out.r10); in tdx_get_ve_info()
657 static int virt_exception_user(struct pt_regs *regs, struct ve_info *ve) in virt_exception_user() argument
659 switch (ve->exit_reason) { in virt_exception_user()
661 return handle_cpuid(regs, ve); in virt_exception_user()
663 pr_warn("Unexpected #VE: %lld\n", ve->exit_reason); in virt_exception_user()
679 static int virt_exception_kernel(struct pt_regs *regs, struct ve_info *ve) in virt_exception_kernel() argument
681 switch (ve->exit_reason) { in virt_exception_kernel()
683 return handle_halt(ve); in virt_exception_kernel()
685 return read_msr(regs, ve); in virt_exception_kernel()
687 return write_msr(regs, ve); in virt_exception_kernel()
689 return handle_cpuid(regs, ve); in virt_exception_kernel()
691 if (is_private_gpa(ve->gpa)) in virt_exception_kernel()
693 return handle_mmio(regs, ve); in virt_exception_kernel()
695 return handle_io(regs, ve); in virt_exception_kernel()
697 pr_warn("Unexpected #VE: %lld\n", ve->exit_reason); in virt_exception_kernel()
702 bool tdx_handle_virt_exception(struct pt_regs *regs, struct ve_info *ve) in tdx_handle_virt_exception() argument
707 insn_len = virt_exception_user(regs, ve); in tdx_handle_virt_exception()
709 insn_len = virt_exception_kernel(regs, ve); in tdx_handle_virt_exception()