Revert removal of toggling interrupt line in vmd vcpu run loop.
authordv <dv@openbsd.org>
Fri, 11 Nov 2022 10:52:44 +0000 (10:52 +0000)
committerdv <dv@openbsd.org>
Fri, 11 Nov 2022 10:52:44 +0000 (10:52 +0000)
phessler reports a performance regression. Needs more testing.

usr.sbin/vmd/vm.c

index 458071f..f1d9b97 100644 (file)
@@ -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;