From c3a4a6e2dfbfc9b3dfda8833c6dbbd1cb909563e Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Mon, 3 Apr 2017 09:16:54 +0200 Subject: [PATCH] enable a check if the HermitCore app depends on a proxy --- arch/x86/kernel/tasks.c | 17 +++++++++++++++++ include/hermit/tasks.h | 4 ++++ kernel/main.c | 12 +----------- tools/proxy.c | 6 +++--- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/arch/x86/kernel/tasks.c b/arch/x86/kernel/tasks.c index b46da80e0..fa79aa07d 100644 --- a/arch/x86/kernel/tasks.c +++ b/arch/x86/kernel/tasks.c @@ -37,6 +37,7 @@ #include #include #include +#include #define TLS_OFFSET 8 @@ -96,6 +97,22 @@ static int thread_entry(void* arg, size_t ep) return 0; } +int is_proxy(void) +{ + if (is_uhyve()) + return 0; + if (!is_single_kernel()) + return 1; + if (mb_info && (mb_info->flags & MULTIBOOT_INFO_CMDLINE)) + { + // search in the command line for cpu frequency + char* found = strstr((char*) (size_t)mb_info->cmdline, "-proxy"); + if (!found) + return 1; + } + return 0; +} + size_t* get_current_stack(void) { task_t* curr_task = per_core(current_task); diff --git a/include/hermit/tasks.h b/include/hermit/tasks.h index 672f0973f..c32a120b9 100644 --- a/include/hermit/tasks.h +++ b/include/hermit/tasks.h @@ -270,6 +270,10 @@ static inline void check_workqueues(void) check_workqueues_in_irqhandler(-1); } +/** @brief check if a proxy is available + */ +int is_proxy(void); + #ifdef __cplusplus } #endif diff --git a/kernel/main.c b/kernel/main.c index 7fda5fb9a..699818b37 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -404,7 +404,7 @@ static int initd(void* arg) // initialize network err = init_netifs(); - if (is_uhyve() || (err != 0)) + if ((err != 0) || is_proxy()) { char* dummy[] = {"app_name", NULL}; @@ -415,16 +415,6 @@ static int initd(void* arg) return 0; } -#if 0 - if (is_single_kernel()) { - char* dummy[] = {"app_name", NULL}; - - libc_start(1, dummy, NULL); - - return 0; - } -#endif - // initialize iRCCE if (!is_single_kernel()) init_rcce(); diff --git a/tools/proxy.c b/tools/proxy.c index a06e182f8..3ebac52a6 100644 --- a/tools/proxy.c +++ b/tools/proxy.c @@ -126,7 +126,7 @@ static void exit_handler(int sig) exit(0); } -static char* cpufreq(void) +static char* get_append_string(void) { char line[2048]; char* match; @@ -148,7 +148,7 @@ static char* cpufreq(void) ; *point = '\0'; - snprintf(cmdline, MAX_PATH, "-freq%s", match); + snprintf(cmdline, MAX_PATH, "\"-freq%s -proxy\"", match); fclose(fp); return cmdline; @@ -314,7 +314,7 @@ static int qemu_init(char *path) char port_str[MAX_PATH]; pid_t qemu_pid; char* qemu_str = "qemu-system-x86_64"; - char* qemu_argv[] = {qemu_str, "-daemonize", "-display", "none", "-smp", "1", "-m", "2G", "-pidfile", pidname, "-net", "nic,model=rtl8139", "-net", hostfwd, "-chardev", chardev_file, "-device", "pci-serial,chardev=gnc0", "-kernel", loader_path, "-initrd", path, "-append", cpufreq(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; + char* qemu_argv[] = {qemu_str, "-daemonize", "-display", "none", "-smp", "1", "-m", "2G", "-pidfile", pidname, "-net", "nic,model=rtl8139", "-net", hostfwd, "-chardev", chardev_file, "-device", "pci-serial,chardev=gnc0", "-kernel", loader_path, "-initrd", path, "-append", get_append_string(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; str = getenv("HERMIT_CPUS"); if (str)