git: e51ed89897da - main - bhyve/aarch64: Handle unknown exceptions
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 15 Oct 2024 17:25:17 UTC
The branch main has been updated by andrew:
URL: https://cgit.FreeBSD.org/src/commit/?id=e51ed89897da9b940bb4399427aec398dae96fba
commit e51ed89897da9b940bb4399427aec398dae96fba
Author: Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2024-10-14 14:39:29 +0000
Commit: Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2024-10-15 17:24:42 +0000
bhyve/aarch64: Handle unknown exceptions
When an exception class is unhandled by the kernel we handle it in
userspace by exiting the process. Rather than exiting raise an unknown
reason exception in the guest. The guest can then handle the exception
as it wishes.
Reviewed by: markj
Sponsored by: Arm Ltd
Differential Revision: https://reviews.freebsd.org/D46511
---
usr.sbin/bhyve/aarch64/vmexit.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/usr.sbin/bhyve/aarch64/vmexit.c b/usr.sbin/bhyve/aarch64/vmexit.c
index e1a9509d5d12..9ecf25c04e41 100644
--- a/usr.sbin/bhyve/aarch64/vmexit.c
+++ b/usr.sbin/bhyve/aarch64/vmexit.c
@@ -263,15 +263,15 @@ vmexit_smccc(struct vmctx *ctx, struct vcpu *vcpu, struct vm_run *vmrun)
}
static int
-vmexit_hyp(struct vmctx *ctx __unused, struct vcpu *vcpu __unused,
- struct vm_run *vmrun)
+vmexit_hyp(struct vmctx *ctx __unused, struct vcpu *vcpu, struct vm_run *vmrun)
{
- struct vm_exit *vme;
+ /* Raise an unknown reason exception */
+ if (vm_inject_exception(vcpu,
+ (EXCP_UNKNOWN << ESR_ELx_EC_SHIFT) | ESR_ELx_IL,
+ vmrun->vm_exit->u.hyp.far_el2) != 0)
+ return (VMEXIT_ABORT);
- vme = vmrun->vm_exit;
- printf("unhandled exception: esr %#lx, far %#lx\n",
- vme->u.hyp.esr_el2, vme->u.hyp.far_el2);
- return (VMEXIT_ABORT);
+ return (VMEXIT_CONTINUE);
}
static int