From patchwork Wed Aug 24 10:11:39 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?SsO8cmdlbiBHcm/Dnw==?= X-Patchwork-Id: 9297395 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 89F9D607F0 for ; Wed, 24 Aug 2016 10:13:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 78B4928E8E for ; Wed, 24 Aug 2016 10:13:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6C17C28EE2; Wed, 24 Aug 2016 10:13:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CE7DF28E8E for ; Wed, 24 Aug 2016 10:13:47 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bcVA5-0001jH-7G; Wed, 24 Aug 2016 10:11:57 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bcVA2-0001Uw-VE; Wed, 24 Aug 2016 10:11:55 +0000 Received: from [85.158.137.68] by server-17.bemta-3.messagelabs.com id AC/5D-27186-9E27DB75; Wed, 24 Aug 2016 10:11:53 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrNLMWRWlGSWpSXmKPExsVyuP0Ov+7Lor3 hBr+WClu8/bqE2eL7lslMDkwehz9cYQlgjGLNzEvKr0hgzZg4fx1TwRnpipvz9zE2MP4U62Lk 5JAQMJJ4O/EfUxcjF4eQwEJGiUnvLrKDJNgEVCU2XD/FCmKLCLhJfPk+iw3EZhaIkJjz4RQLi C0sYCvRO68DrIYFqH7X2knMIDavgIPE3JkfmCEWyElcnzmdCcTmBIpPW/wArFdIwF5i/9uprB MYuRcwMqxi1ChOLSpLLdI1MtNLKspMzyjJTczM0TU0MNbLTS0uTkxPzUlMKtZLzs/dxAj0dD0 DA+MOxoa9focYJTmYlER5b6ruDRfiS8pPqcxILM6ILyrNSS0+xCjDwaEkwVtQCJQTLEpNT61I y8wBhhxMWoKDR0mENwQkzVtckJhbnJkOkTrFqCglzssGkhAASWSU5sG1wcL8EqOslDAvIwMDg xBPQWpRbmYJqvwrRnEORiVh3nqQKTyZeSVw018BLWYCWtxyfzfI4pJEhJRUA2PznWuzVe4+vG 3xO23pzFtLc7ZcebNVU/b1x8vuDy5ZelxIKHI9lPmru26W1Yepv1tn3VM7+/ms40XeO5V31hx nr/8f/WrK1b6q7tJFQdwTJ8UG1m2sT1k5/9y1+Z+OfJJ+02n7d/vT/cJrf+1L/XwuvuGZu6un 1OrAoy/nCL3j5+rYe5DjcOT1BUosxRmJhlrMRcWJACqt/4puAgAA X-Env-Sender: jgross@suse.com X-Msg-Ref: server-14.tower-31.messagelabs.com!1472033513!57120340!1 X-Originating-IP: [195.135.220.15] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 8.84; banners=-,-,- X-VirusChecked: Checked Received: (qmail 15609 invoked from network); 24 Aug 2016 10:11:53 -0000 Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by server-14.tower-31.messagelabs.com with DHE-RSA-CAMELLIA256-SHA encrypted SMTP; 24 Aug 2016 10:11:53 -0000 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id E7B0AABE1; Wed, 24 Aug 2016 10:11:52 +0000 (UTC) From: Juergen Gross To: minios-devel@lists.xenproject.org, xen-devel@lists.xenproject.org Date: Wed, 24 Aug 2016 12:11:39 +0200 Message-Id: <1472033504-23180-18-git-send-email-jgross@suse.com> X-Mailer: git-send-email 2.6.6 In-Reply-To: <1472033504-23180-1-git-send-email-jgross@suse.com> References: <1472033504-23180-1-git-send-email-jgross@suse.com> Cc: Juergen Gross , samuel.thibault@ens-lyon.org, wei.liu2@citrix.com Subject: [Xen-devel] [PATCH v2 17/22] mini-os: add get_cmdline() function X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP The command line parameters are passed in start_info structure for pv, but via hvm_start_info for HVMlite. Add a generic function to fill a local cmdline variable with the command line string. Signed-off-by: Juergen Gross Reviewed-by: Samuel Thibault --- arch/x86/setup.c | 20 ++++++++++++++++++-- include/kernel.h | 3 +++ kernel.c | 1 + main.c | 5 +++-- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/arch/x86/setup.c b/arch/x86/setup.c index 6645784..13633f0 100644 --- a/arch/x86/setup.c +++ b/arch/x86/setup.c @@ -31,6 +31,7 @@ #include #include #include +#include /* * Shared page for communicating with the hypervisor. @@ -88,6 +89,13 @@ static inline void sse_init(void) { #ifdef CONFIG_PARAVIRT #define hpc_init() + +static void get_cmdline(void *p) +{ + start_info_t *si = p; + + strncpy(cmdline, (char *)si->cmd_line, MAX_CMDLINE_SIZE - 1); +} #else static void hpc_init(void) { @@ -109,6 +117,14 @@ static void hpc_init(void) wrmsrl(ebx, (unsigned long)&hypercall_page); barrier(); } + +static void get_cmdline(void *p) +{ + struct hvm_start_info *si = p; + + if ( si->cmdline_paddr ) + strncpy(cmdline, to_virt(si->cmdline_paddr), MAX_CMDLINE_SIZE - 1); +} #endif /* @@ -139,6 +155,7 @@ arch_init(void *par) shared_info. Use xprintk instead. */ get_console(par); get_xenbus(par); + get_cmdline(par); si = par; memcpy(&start_info, si, sizeof(*si)); @@ -153,8 +170,7 @@ arch_init(void *par) printk(" mod_start: 0x%lx(VA)\n", si->mod_start); printk(" mod_len: %lu\n", si->mod_len); printk(" flags: 0x%x\n", (unsigned int)si->flags); - printk(" cmd_line: %s\n", - si->cmd_line ? (const char *)si->cmd_line : "NULL"); + printk(" cmd_line: %s\n", cmdline); printk(" stack: %p-%p\n", stack, stack + sizeof(stack)); /* Grab the shared_info pointer and put it in a safe place. */ diff --git a/include/kernel.h b/include/kernel.h index 13e3274..d37ddda 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -1,6 +1,9 @@ #ifndef _KERNEL_H_ #define _KERNEL_H_ +#define MAX_CMDLINE_SIZE 1024 +extern char cmdline[MAX_CMDLINE_SIZE]; + void start_kernel(void); void do_exit(void) __attribute__((noreturn)); void arch_do_exit(void); diff --git a/kernel.c b/kernel.c index 437e5b4..f22997e 100644 --- a/kernel.c +++ b/kernel.c @@ -48,6 +48,7 @@ #include uint8_t xen_features[XENFEAT_NR_SUBMAPS * 32]; +char cmdline[MAX_CMDLINE_SIZE]; void setup_xen_features(void) { diff --git a/main.c b/main.c index 4ec40b5..71e3be3 100644 --- a/main.c +++ b/main.c @@ -6,6 +6,7 @@ #ifdef HAVE_LIBC #include +#include #include #include #include @@ -134,7 +135,7 @@ static void call_main(void *p) #define PARSE_ARGS_COUNT(ARGS) PARSE_ARGS(ARGS, argc++, c++, ) #define PARSE_ARGS_STORE(ARGS) PARSE_ARGS(ARGS, argv[argc++] = c, memmove(c, c + 1, strlen(c + 1) + 1), *c++ = 0) - PARSE_ARGS_COUNT((char*)start_info.cmd_line); + PARSE_ARGS_COUNT(cmdline); #ifdef CONFIG_QEMU_XS_ARGS PARSE_ARGS_COUNT(domargs); #endif @@ -143,7 +144,7 @@ static void call_main(void *p) argv[0] = "main"; argc = 1; - PARSE_ARGS_STORE((char*)start_info.cmd_line) + PARSE_ARGS_STORE(cmdline) #ifdef CONFIG_QEMU_XS_ARGS PARSE_ARGS_STORE(domargs) #endif