diff mbox

[3/6] discover/boot: Set boot_tty variable before kexec

Message ID 20160608062812.14480-4-sam@mendozajonas.com
State Accepted
Headers show

Commit Message

samjonas June 8, 2016, 6:28 a.m. UTC
If boot_tty is set or a boot command is sent manually from a certain
console, set the boot_tty environment variable to be used by a boot hook
before kexec.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
---
 discover/boot.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)
diff mbox

Patch

diff --git a/discover/boot.c b/discover/boot.c
index 0d3491f..ba6ce25 100644
--- a/discover/boot.c
+++ b/discover/boot.c
@@ -24,6 +24,7 @@ 
 #include "boot.h"
 #include "paths.h"
 #include "resource.h"
+#include "platform.h"
 
 static const char *boot_hook_dir = PKG_SYSCONF_DIR "/boot.d";
 enum {
@@ -39,6 +40,7 @@  struct boot_task {
 	const char *local_initrd;
 	const char *local_dtb;
 	const char *args;
+	const char *boot_tty;
 	boot_status_fn status_fn;
 	void *status_arg;
 	bool dry_run;
@@ -206,6 +208,7 @@  static void boot_hook_setenv(struct boot_task *task)
 	unsetenv("boot_initrd");
 	unsetenv("boot_dtb");
 	unsetenv("boot_args");
+	unsetenv("boot_tty");
 
 	setenv("boot_image", task->local_image, 1);
 	if (task->local_initrd)
@@ -214,6 +217,8 @@  static void boot_hook_setenv(struct boot_task *task)
 		setenv("boot_dtb", task->local_dtb, 1);
 	if (task->args)
 		setenv("boot_args", task->args, 1);
+	if (task->boot_tty)
+		setenv("boot_tty", task->boot_tty, 1);
 }
 
 static int hook_filter(const struct dirent *dirent)
@@ -430,6 +435,7 @@  struct boot_task *boot(void *ctx, struct discover_boot_option *opt,
 		boot_status_fn status_fn, void *status_arg)
 {
 	struct pb_url *image = NULL, *initrd = NULL, *dtb = NULL;
+	const struct config *config;
 	struct boot_task *boot_task;
 	const char *boot_desc;
 	int rc;
@@ -481,6 +487,13 @@  struct boot_task *boot(void *ctx, struct discover_boot_option *opt,
 		boot_task->args = NULL;
 	}
 
+	if (cmd && cmd->tty)
+		boot_task->boot_tty = talloc_strdup(boot_task, cmd->tty);
+	else {
+		config = config_get();
+		boot_task->boot_tty = config ? config->boot_tty : NULL;
+	}
+
 	/* start async loads for boot resources */
 	rc = start_url_load(boot_task, "kernel image", image, &boot_task->image)
 	  || start_url_load(boot_task, "initrd", initrd, &boot_task->initrd)