When adding exec for vm's and fork/exec'd vio{blk,net} devices, the
current verbosity wasn't being set on the new process. The below change
keeps it simple, avoiding runtime string manipulation. Also tosses in an
ifdef around a very chatty debug message related to ipc with devices.

This doesn't address runtime toggling of verbosity with vmctl(8) nor
does it address the fact vmd has a janky concept of verbosity. Those are
future fixes.

ok?

diffstat /usr/src
 M  usr.sbin/vmd/virtio.c  |  9+  4-
 M  usr.sbin/vmd/vmd.h     |  4+  0-
 M  usr.sbin/vmd/vmm.c     |  7+  4-

3 files changed, 20 insertions(+), 8 deletions(-)

diff /usr/src
commit - 3228b0c4b8598ac2f799f997d457a8ba24307bec
path + /usr/src
blob - a58e35115432b3d16fb456e71bd71f93d9e2467d
file + usr.sbin/vmd/virtio.c
--- usr.sbin/vmd/virtio.c
+++ usr.sbin/vmd/virtio.c
@@ -1475,12 +1475,15 @@ virtio_dev_launch(struct vmd_vm *vm, struct virtio_dev
                nargv[5] = "-i";
                nargv[6] = vmm_fd;
                nargv[7] = "-n";
+               nargv[8] = NULL;

-               if (env->vmd_verbose) {
-                       nargv[8] = "-v";
+               if (env->vmd_verbose == 1) {
+                       nargv[8] = VMD_VERBOSE_1;
                        nargv[9] = NULL;
-               } else
-                       nargv[8] = NULL;
+               } else if (env->vmd_verbose > 1) {
+                       nargv[8] = VMD_VERBOSE_2;
+                       nargv[9] = NULL;
+               }

                /* Control resumes in vmd.c:main(). */
                execvp(nargv[0], nargv);
@@ -1699,8 +1702,10 @@ virtio_pci_io(int dir, uint16_t reg, uint32_t *data, u
                imsg_free(&imsg);

                if (msg.type == VIODEV_MSG_IO_READ && msg.data_valid) {
+#if DEBUG
                        log_debug("%s: got sync read response (reg=%s)",
                            __func__, virtio_reg_name(msg.reg));
+#endif /* DEBUG */
                        *data = msg.data;
                        /*
                         * It's possible we're asked to {de,}assert after the
blob - 744b8d1957423b91202b9630fe4a5a6dc4158089
file + usr.sbin/vmd/vmd.h
--- usr.sbin/vmd/vmd.h
+++ usr.sbin/vmd/vmd.h
@@ -102,6 +102,10 @@ enum imsg_type {
 /* Unique local address for IPv6 */
 #define VMD_ULA_PREFIX         "fd00::/8"

+/* Verbosity arguments for use when caling execvp(2). */
+#define VMD_VERBOSE_1          "-v";
+#define VMD_VERBOSE_2          "-vv";
+
 enum imsg_type {
        IMSG_VMDOP_START_VM_REQUEST = IMSG_PROC_MAX,
        IMSG_VMDOP_START_VM_CDROM,
blob - 541222e027294ea6d85c957e9cc1a55bb1ac829c
file + usr.sbin/vmd/vmm.c
--- usr.sbin/vmd/vmm.c
+++ usr.sbin/vmd/vmm.c
@@ -782,12 +782,15 @@ vmm_start_vm(struct imsg *imsg, uint32_t *id, pid_t *p
                nargv[3] = "-n";
                nargv[4] = "-i";
                nargv[5] = vmm_fd;
+               nargv[6] = NULL;

-               if (env->vmd_verbose) {
-                       nargv[6] = "-v";
+               if (env->vmd_verbose == 1) {
+                       nargv[6] = VMD_VERBOSE_1;
                        nargv[7] = NULL;
-               } else
-                       nargv[6] = NULL;
+               } else if (env->vmd_verbose > 1) {
+                       nargv[6] = VMD_VERBOSE_2;
+                       nargv[7] = NULL;
+               }

                /* Control resumes in vmd main(). */
                execvp(nargv[0], nargv);

Reply via email to