From patchwork Mon Aug 14 07:08:44 2017 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: 9898271 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 BEA43603B5 for ; Mon, 14 Aug 2017 07:12:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B02A826538 for ; Mon, 14 Aug 2017 07:12:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A4DA226E74; Mon, 14 Aug 2017 07:12:21 +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 69858285A2 for ; Mon, 14 Aug 2017 07:12:15 +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 1dh9Uw-0003wR-4u; Mon, 14 Aug 2017 07:09:14 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dh9Uv-0003sl-2k for xen-devel@lists.xenproject.org; Mon, 14 Aug 2017 07:09:13 +0000 Received: from [85.158.139.211] by server-15.bemta-5.messagelabs.com id 64/06-01736-89C41995; Mon, 14 Aug 2017 07:09:12 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrELMWRWlGSWpSXmKPExsVyuP0Ov+50n4m RBg8OS1h83zKZyYHR4/CHKywBjFGsmXlJ+RUJrBkzLi5hKtigVNG1oJW5gfGITBcjJ4eEgJHE 24n/mLoYuTiEBBYySlx4s5IdJMEmoCqx4fopVhBbREBJ4t6qyWBFzAKPmSRm7FrOBJIQFvCXu Nn+kAXEZgFqeNH6ghHE5hUwlVh0cRoTxAZ5iY4Dk8FqOIHil/YtBbOFBEwk+rZ2sUxg5F7AyL CKUb04tagstUjXXC+pKDM9oyQ3MTNH19DAVC83tbg4MT01JzGpWC85P3cTI9C/DECwg/HYZOd DjJIcTEqivAk+vZFCfEn5KZUZicUZ8UWlOanFhxhlODiUJHhneE+MFBIsSk1PrUjLzAEGGkxa goNHSYQ3DyTNW1yQmFucmQ6ROsWoy/Fqwv9vTEIsefl5qVLivDEgRQIgRRmleXAjYEF/iVFWS piXEegoIZ6C1KLczBJU+VeM4hyMSsK8diBTeDLzSuA2vQI6ggnoiD6Q+3mLSxIRUlINjM2qW0 2O1ubYT5Dg1D/0Zrq+Md8B3XSxT9cnLjdY0Bc1zew658oTF2N+yggw5NevDmN/ZhCb/4kpjCG bSXaOT911qX0VjFebX+Z1GuWv4D5QbBt7ecY10W83PLdPYdvW/cPB9HHBYf3JX5eGH5zXnFA7 V4dzxeuDOzU2qfPssFct5YhnE1yfpsRSnJFoqMVcVJwIABYsR8x1AgAA X-Env-Sender: jgross@suse.com X-Msg-Ref: server-4.tower-206.messagelabs.com!1502694551!107084194!1 X-Originating-IP: [195.135.220.15] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 56641 invoked from network); 14 Aug 2017 07:09:11 -0000 Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by server-4.tower-206.messagelabs.com with DHE-RSA-CAMELLIA256-SHA encrypted SMTP; 14 Aug 2017 07:09:11 -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 mx1.suse.de (Postfix) with ESMTP id 05F7FABB1; Mon, 14 Aug 2017 07:09:11 +0000 (UTC) From: Juergen Gross To: xen-devel@lists.xenproject.org Date: Mon, 14 Aug 2017 09:08:44 +0200 Message-Id: <20170814070849.20986-48-jgross@suse.com> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20170814070849.20986-1-jgross@suse.com> References: <20170814070849.20986-1-jgross@suse.com> Cc: Juergen Gross , Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Jan Beulich Subject: [Xen-devel] [PATCH v2 47/52] xen: add basic support for runtime parameter changing 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 Add the needed infrastructure for runtime parameter changing similar to that used at boot time via cmdline. We are using the same parsing functions as for cmdline parsing, but with a different array of parameter definitions. Cc: Andrew Cooper Cc: George Dunlap Cc: Ian Jackson Cc: Jan Beulich Cc: Konrad Rzeszutek Wilk Cc: Stefano Stabellini Cc: Tim Deegan Cc: Wei Liu Signed-off-by: Juergen Gross Reviewed-by: Wei Liu --- V2: - added modification of ARM linker script (Wei Liu) --- xen/arch/arm/xen.lds.S | 4 ++++ xen/arch/x86/xen.lds.S | 4 ++++ xen/common/kernel.c | 5 +++++ xen/include/xen/init.h | 22 ++++++++++++++++++++-- xen/include/xen/lib.h | 1 + 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S index 2d54f224ec..75c41354ac 100644 --- a/xen/arch/arm/xen.lds.S +++ b/xen/arch/arm/xen.lds.S @@ -81,6 +81,10 @@ SECTIONS __start_schedulers_array = .; *(.data.schedulers) __end_schedulers_array = .; + . = ALIGN(POINTER_ALIGN); + __param_start = .; + *(.data.param) + __param_end = .; *(.data.rel) *(.data.rel.*) CONSTRUCTORS diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S index ff08bbe42a..5bd7912759 100644 --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -226,6 +226,10 @@ SECTIONS __start_schedulers_array = .; *(.data.schedulers) __end_schedulers_array = .; + . = ALIGN(POINTER_ALIGN); + __param_start = .; + *(.data.param) + __param_end = .; } :text .data : { /* Data */ diff --git a/xen/common/kernel.c b/xen/common/kernel.c index c05198b226..9bb9e5c73a 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -178,6 +178,11 @@ static void __init _cmdline_parse(const char *cmdline) parse_params(cmdline, __setup_start, __setup_end); } +int runtime_parse(const char *line) +{ + return parse_params(line, __param_start, __param_end); +} + /** * cmdline_parse -- parses the xen command line. * If CONFIG_CMDLINE is set, it would be parsed prior to @cmdline. diff --git a/xen/include/xen/init.h b/xen/include/xen/init.h index 25d2eef8dd..7c7f92c6b2 100644 --- a/xen/include/xen/init.h +++ b/xen/include/xen/init.h @@ -87,11 +87,16 @@ struct kernel_param { }; extern const struct kernel_param __setup_start[], __setup_end[]; +extern const struct kernel_param __param_start[], __param_end[]; + +#define __dataparam __used_section(".data.param") + +#define __param(att) static const att \ + __attribute__((__aligned__(sizeof(void *)))) struct kernel_param #define __setup_str static const __initconst \ __attribute__((__aligned__(1))) char -#define __kparam static const __initsetup \ - __attribute__((__aligned__(sizeof(void *)))) struct kernel_param +#define __kparam __param(__initsetup) #define custom_param(_name, _var) \ __setup_str __setup_str_##_var[] = _name; \ @@ -113,6 +118,19 @@ extern const struct kernel_param __setup_start[], __setup_end[]; __kparam __setup_##_var = \ { __setup_str_##_var, OPT_STR, sizeof(_var), &_var } +#define __rtparam __param(__dataparam) + +#define custom_param_runtime(_name, _var) \ + __rtparam __rtpar_##_var = { _name, OPT_CUSTOM, 0, _var } +#define boolean_param_runtime(_name, _var) \ + __rtparam __rtpar_##_var = { _name, OPT_BOOL, sizeof(_var), &_var } +#define integer_param_runtime(_name, _var) \ + __rtparam __rtpar_##_var = { _name, OPT_UINT, sizeof(_var), &_var } +#define size_param_runtime(_name, _var) \ + __rtparam __rtpar_##_var = { _name, OPT_SIZE, sizeof(_var), &_var } +#define string_param_runtime(_name, _var) \ + __rtparam __rtpar_##_var = { _name, OPT_STR, sizeof(_var), &_var } + #endif /* __ASSEMBLY__ */ #ifdef CONFIG_LATE_HWDOM diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h index 995a85a7db..5651498de2 100644 --- a/xen/include/xen/lib.h +++ b/xen/include/xen/lib.h @@ -71,6 +71,7 @@ struct domain; void cmdline_parse(const char *cmdline); +int runtime_parse(const char *line); int parse_bool(const char *s); /*#define DEBUG_TRACE_DUMP*/