From: Wei Liu Date: Fri, 29 Jul 2016 17:24:25 +0000 (+0100) Subject: tools/console: introduce --start-notify-fd option for console client X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~598 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=373f99d2eafd084073731486a20a3a5a2e120548;p=xen.git tools/console: introduce --start-notify-fd option for console client The console client will write 0x00 to that fd before entering console loop to indicate its readiness. Signed-off-by: Wei Liu Acked-by: Ian Jackson --- diff --git a/tools/console/client/main.c b/tools/console/client/main.c index be3970030a..977779f034 100644 --- a/tools/console/client/main.c +++ b/tools/console/client/main.c @@ -77,6 +77,7 @@ static void usage(const char *program) { " -h, --help display this help and exit\n" " -n, --num N use console number N\n" " --type TYPE console type. must be 'pv' or 'serial'\n" + " --start-notify-fd N file descriptor used to notify parent\n" , program); } @@ -327,10 +328,12 @@ int main(int argc, char **argv) int ch; unsigned int num = 0; int opt_ind=0; + int start_notify_fd = -1; struct option lopt[] = { { "type", 1, 0, 't' }, { "num", 1, 0, 'n' }, { "help", 0, 0, 'h' }, + { "start-notify-fd", 1, 0, 's' }, { 0 }, }; @@ -364,6 +367,9 @@ int main(int argc, char **argv) exit(EINVAL); } break; + case 's': + start_notify_fd = atoi(optarg); + break; default: fprintf(stderr, "Invalid argument\n"); fprintf(stderr, "Try `%s --help' for more information.\n", @@ -462,6 +468,22 @@ int main(int argc, char **argv) init_term(STDIN_FILENO, &stdin_old_attr); atexit(restore_term_stdin); /* if this fails, oh dear */ } + + if (start_notify_fd != -1) { + /* Write 0x00 to notify parent about client's readiness */ + static const char msg[] = { 0x00 }; + int r; + + do { + r = write(start_notify_fd, msg, 1); + } while ((r == -1 && errno == EINTR) || r == 0); + + if (r == -1) + err(errno, "Could not notify parent with fd %d", + start_notify_fd); + close(start_notify_fd); + } + console_loop(spty, xs, path, interactive); free(path);