summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2018-03-15 14:28:39 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2018-03-15 14:47:08 +0000
commit670823da472498e267a5aa84a4f71885fa7c175f (patch)
tree2e952910be15c9110da348c0feb815d5afdd267b
parent8b01be43d736359f1a7339c7e752c0b2b977d375 (diff)
downloadillumos-joyent-670823da472498e267a5aa84a4f71885fa7c175f.tar.gz
OS-6777 bhyve VM not rebooting
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com> Reviewed by: John Levon <john.levon@joyent.com> Reviewed by: Mike Gerdts <mike.gerdts@joyent.com> Approved by: John Levon <john.levon@joyent.com>
-rw-r--r--usr/src/lib/brand/bhyve/zone/boot.c32
-rw-r--r--usr/src/lib/brand/bhyve/zone/config.xml1
2 files changed, 30 insertions, 3 deletions
diff --git a/usr/src/lib/brand/bhyve/zone/boot.c b/usr/src/lib/brand/bhyve/zone/boot.c
index 88641d567a..51a363b8da 100644
--- a/usr/src/lib/brand/bhyve/zone/boot.c
+++ b/usr/src/lib/brand/bhyve/zone/boot.c
@@ -35,7 +35,7 @@
#define BHYVE_DIR "var/run/bhyve"
#define BHYVE_ARGS_FILE BHYVE_DIR "/" "zhyve.cmd"
-#define ZH_MAXARGS 100
+#define ZH_MAXARGS 100
#define DEFAULT_BOOTROM "/usr/share/bhyve/uefi-csm-rom.bin"
@@ -205,7 +205,7 @@ add_nets(int *argc, char **argv)
char slotconf[MAXNAMELEN];
char *primary = NULL;
- if ((nets = get_zcfg_var("net", "resources", NULL))== NULL) {
+ if ((nets = get_zcfg_var("net", "resources", NULL)) == NULL) {
return (0);
}
@@ -381,6 +381,31 @@ init_debug(void)
debug = (val != NULL && val[0] != '\0');
}
+static int
+setup_reboot(char *zonename)
+{
+ zoneid_t zoneid;
+
+ if ((zoneid = getzoneidbyname(zonename)) < 0) {
+ (void) printf("Error: bhyve zoneid (%s) does not exist\n",
+ zonename);
+ return (-1);
+ }
+
+ if (zoneid == GLOBAL_ZONEID) {
+ (void) printf("Error: bhyve global zoneid (%s)\n", zonename);
+ return (-1);
+ }
+
+ if (zone_setattr(zoneid, ZONE_ATTR_INITREBOOT, NULL, 0) < 0 ||
+ zone_setattr(zoneid, ZONE_ATTR_INITRESTART0, NULL, 0) < 0) {
+ (void) printf("Error: bhyve zoneid %d setattr failed: %s\n",
+ zoneid, strerror(errno));
+ return (-1);
+ }
+
+ return (0);
+}
int
main(int argc, char **argv)
@@ -410,6 +435,9 @@ main(int argc, char **argv)
zonename = argv[1];
zonepath = argv[2];
+ if (setup_reboot(zonename) < 0)
+ return (1);
+
for (zhargc = 0; zhargv[zhargc] != NULL; zhargc++) {
dprintf(("def_arg: argv[%d]='%s'\n", zhargc, zhargv[zhargc]));
}
diff --git a/usr/src/lib/brand/bhyve/zone/config.xml b/usr/src/lib/brand/bhyve/zone/config.xml
index 1dc3143fad..82b95f4e57 100644
--- a/usr/src/lib/brand/bhyve/zone/config.xml
+++ b/usr/src/lib/brand/bhyve/zone/config.xml
@@ -22,7 +22,6 @@
<modname></modname>
<initname>/usr/lib/brand/bhyve/zhyve</initname>
- <restartinit>false</restartinit>
<login_cmd />
<forcedlogin_cmd />
<user_cmd />