The T4-2 firmware does NOT select newly downloaded configurations, so
I have to run

        # ldomctl download config-try-3-with-this-feature
        [... wait... sometimes it hangs and needs ^C + rerun...]
        # ldomctl select config-try-3-with-this-feature

The following is much more convenient:

        # ldomctl download -s config-try-3-with-this-feature

With firmware that does select automatically, this would just select
twice, which does no harm.

Feedback? OK? (for after release)


diff --git a/usr.sbin/ldomctl/ldomctl.8 b/usr.sbin/ldomctl/ldomctl.8
index ec63fb157e5..3c20ad9009a 100644
--- a/usr.sbin/ldomctl/ldomctl.8
+++ b/usr.sbin/ldomctl/ldomctl.8
@@ -56,7 +56,7 @@ Specify an escape character as per
 .El
 .It Cm delete Ar configuration
 Delete the specified configuration from non-volatile storage.
-.It Cm download Ar directory
+.It Cm download Oo Fl s Oc Ar directory
 Save a logical domain configuration to non-volatile storage on the
 service processor.
 The name of the configuration is taken from the name of the
@@ -69,6 +69,10 @@ Depending on the firmware, the new configuration must be 
activated explicitly
 using the
 .Cm select
 command.
+.Bl -tag -width 3n
+.It Fl s
+Explicitly select the new configuration.
+.El
 .It Cm dump
 Dump the current configuration from non-volatile storage into the current
 working directory.
diff --git a/usr.sbin/ldomctl/ldomctl.c b/usr.sbin/ldomctl/ldomctl.c
index 906ab414488..05601e133ed 100644
--- a/usr.sbin/ldomctl/ldomctl.c
+++ b/usr.sbin/ldomctl/ldomctl.c
@@ -126,7 +126,7 @@ __dead void
 usage(void)
 {
        fprintf(stderr, "usage:\t%1$s delete|select configuration\n"
-           "\t%1$s download directory\n"
+           "\t%1$s download [-s] directory\n"
            "\t%1$s dump|list|list-io\n"
            "\t%1$s init-system [-n] file\n"
            "\t%1$s create-vdisk -s size file\n"
@@ -389,8 +389,21 @@ void
 download(int argc, char **argv)
 {
        struct ds_conn *dc;
+       int ch, do_select = 0;
 
-       if (argc != 2)
+       while ((ch = getopt(argc, argv, "s")) != -1) {
+               switch (ch) {
+               case 's':
+                       do_select = 1;
+                       break;
+               default:
+                       usage();
+               }
+       }
+       argc -= optind;
+       argv += optind;
+
+       if (argc != 1)
                usage();
 
        hv_config();
@@ -400,7 +413,9 @@ download(int argc, char **argv)
        while (TAILQ_EMPTY(&mdstore_sets))
                ds_conn_handle(dc);
 
-       mdstore_download(dc, argv[1]);
+       mdstore_download(dc, argv[0]);
+       if (do_select)
+               mdstore_select(dc, argv[0]);
 }
 
 void

Reply via email to