From patchwork Tue Aug 23 15:16:03 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: 9295833 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 BBFCF608A7 for ; Tue, 23 Aug 2016 15:19:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AD7C128CB8 for ; Tue, 23 Aug 2016 15:19:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A1E5228CBE; Tue, 23 Aug 2016 15:19:16 +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 44E3428CB8 for ; Tue, 23 Aug 2016 15:19:16 +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 1bcDR8-0002AC-G5; Tue, 23 Aug 2016 15:16:22 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bcDR7-00023b-3u; Tue, 23 Aug 2016 15:16:21 +0000 Received: from [193.109.254.147] by server-8.bemta-6.messagelabs.com id 32/2C-05361-4C86CB75; Tue, 23 Aug 2016 15:16:20 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrFLMWRWlGSWpSXmKPExsVyuP0Ov+7hjD3 hBqee6lm8/bqE2eL7lslMDkwehz9cYQlgjGLNzEvKr0hgzTgy6S5rwQTpivs//jA3MB4U62Lk 5JAQMJJ4O/EfUxcjF4eQwEJGieerJzKCJNgEVCU2XD/FCmKLCLhJfPk+iw3EZhaIkJjz4RQLi C0sYCXx93gTWD0LUP2pvVPA6nkF7CXmd2xlhVggJ3F95nQmEJsTKH7hzF7mLkYOoGV2EnP3x0 1g5F7AyLCKUaM4tagstUjX0FIvqSgzPaMkNzEzR9fQwEwvN7W4ODE9NScxqVgvOT93EyPQzwx AsIPxx7KAQ4ySHExKory6RnvChfiS8lMqMxKLM+KLSnNSiw8xynBwKEnwVqYD5QSLUtNTK9Iy c4ABB5OW4OBREuGdCZLmLS5IzC3OTIdInWJUlBLnbQFJCIAkMkrz4NpgQX6JUVZKmJcR6BAhn oLUotzMElT5V4ziHIxKwrw5IFN4MvNK4Ka/AlrMBLS45f5ukMUliQgpqQbG2X3sG3YsvKu133 NLnN2SFecl3z+0l50nmX/lYI7Xp0lB7iF15V98ZlvNuDBd5c+33mtp/VtU1a57SKown0sOWN2 5bNMp5fO6Ac8bsxRajl9hfNHP/tlsXb13rGbGre2501+X2bT26t3zmfLjeoyUe0H6Zv0/F58K bOXcrZia/yRifd9WtyVflFiKMxINtZiLihMBLiEYKm0CAAA= X-Env-Sender: jgross@suse.com X-Msg-Ref: server-5.tower-27.messagelabs.com!1471965379!55449283!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 27308 invoked from network); 23 Aug 2016 15:16:19 -0000 Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by server-5.tower-27.messagelabs.com with DHE-RSA-CAMELLIA256-SHA encrypted SMTP; 23 Aug 2016 15:16:19 -0000 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 55570ADB4; Tue, 23 Aug 2016 15:16:19 +0000 (UTC) From: Juergen Gross To: minios-devel@lists.xenproject.org, xen-devel@lists.xenproject.org Date: Tue, 23 Aug 2016 17:16:03 +0200 Message-Id: <1471965368-6159-18-git-send-email-jgross@suse.com> X-Mailer: git-send-email 2.6.6 In-Reply-To: <1471965368-6159-1-git-send-email-jgross@suse.com> References: <1471965368-6159-1-git-send-email-jgross@suse.com> Cc: Juergen Gross , samuel.thibault@ens-lyon.org, wei.liu2@citrix.com Subject: [Xen-devel] [PATCH 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