summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/vmd/vm.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/usr.sbin/vmd/vm.c b/usr.sbin/vmd/vm.c
index 458071fe9c3..f1d9b97741c 100644
--- a/usr.sbin/vmd/vm.c
+++ b/usr.sbin/vmd/vm.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vm.c,v 1.75 2022/11/10 23:39:51 dv Exp $ */
+/* $OpenBSD: vm.c,v 1.76 2022/11/11 10:52:44 dv Exp $ */
/*
* Copyright (c) 2015 Mike Larkin <mlarkin@openbsd.org>
@@ -1512,6 +1512,23 @@ vcpu_run_loop(void *arg)
} else
vrp->vrp_irq = 0xFFFF;
+ /* Still more pending? */
+ if (i8259_is_pending()) {
+ /*
+ * XXX can probably avoid ioctls here by providing intr
+ * in vrp
+ */
+ if (vcpu_pic_intr(vrp->vrp_vm_id,
+ vrp->vrp_vcpu_id, 1)) {
+ fatal("can't set INTR");
+ }
+ } else {
+ if (vcpu_pic_intr(vrp->vrp_vm_id,
+ vrp->vrp_vcpu_id, 0)) {
+ fatal("can't clear INTR");
+ }
+ }
+
if (ioctl(env->vmd_fd, VMM_IOC_RUN, vrp) == -1) {
/* If run ioctl failed, exit */
ret = errno;