From patchwork Wed Aug 16 12:52:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juergen Gross X-Patchwork-Id: 9903637 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 AEFF96038C for ; Wed, 16 Aug 2017 12:54:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A0888289CD for ; Wed, 16 Aug 2017 12:54:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 955CC289E0; Wed, 16 Aug 2017 12:54:36 +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 0868F289CD for ; Wed, 16 Aug 2017 12:54:36 +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 1dhxoN-0000Je-19; Wed, 16 Aug 2017 12:52:39 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dhxoM-0000Ep-0R for xen-devel@lists.xenproject.org; Wed, 16 Aug 2017 12:52:38 +0000 Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id 6D/7A-04533-51044995; Wed, 16 Aug 2017 12:52:37 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMLMWRWlGSWpSXmKPExsVyuP0Ov66Iw5R Ig85OZYvvWyYzOTB6HP5whSWAMYo1My8pvyKBNePstMcsBUe0K7Zdn8vWwLhSuYuRk0NCwEji 7cR/TF2MXBxCAgsZJdZf2MwMkmATUJXYcP0UK4gtIqAkcW/VZLAiZoHHTBIzdi1nAkkIC/hLf P70hw3EZgFqWLH2KCOIzStgInHyejs7xAZ5iY4Dk1lAbE6g+OQNx8BsIQFjie09jewTGLkXMD KsYtQoTi0qSy3SNTbQSyrKTM8oyU3MzNE1NDDWy00tLk5MT81JTCrWS87P3cQI9HA9AwPjDsb OE36HGCU5mJREeYO0pkQK8SXlp1RmJBZnxBeV5qQWH2KU4eBQkuAVswPKCRalpqdWpGXmAEMN Ji3BwaMkwptmC5TmLS5IzC3OTIdInWLU5Xg14f83JiGWvPy8VClx3kyQGQIgRRmleXAjYGF/i VFWSpiXkYGBQYinILUoN7MEVf4VozgHo5Iw71WQKTyZeSVwm14BHcEEdMSV9kkgR5QkIqSkGh i5QretuP60RUgoT/i3haDQ7KSXJ61Pc7lb/5rMXpbw+m/W0jK52bMX/72SrHf1afP7vxM6HTk rt5/dcVDqoejhlNh5H846T4u6oX7rnZigv8bKfbsuVv3zrtoYZ3PJ5Z2lhpyXAKdB/NO6judc pssDGe6IV3Ntdbxw8XOaRMfLc/om1+wXypkosRRnJBpqMRcVJwIAQ4E2OXYCAAA= X-Env-Sender: jgross@suse.com X-Msg-Ref: server-7.tower-31.messagelabs.com!1502887956!102708948!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 17513 invoked from network); 16 Aug 2017 12:52:36 -0000 Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by server-7.tower-31.messagelabs.com with DHE-RSA-CAMELLIA256-SHA encrypted SMTP; 16 Aug 2017 12:52:36 -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 mx1.suse.de (Postfix) with ESMTP id 4D7A3AE94; Wed, 16 Aug 2017 12:52:36 +0000 (UTC) From: Juergen Gross To: xen-devel@lists.xenproject.org Date: Wed, 16 Aug 2017 14:52:14 +0200 Message-Id: <20170816125219.5255-48-jgross@suse.com> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20170816125219.5255-1-jgross@suse.com> References: <20170816125219.5255-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 v3 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: Jan Beulich --- V2: - added modification of ARM linker script (Wei Liu) V3: - moved runtime parameter array in linker scripts (Jan Beulich) - renamed macros to *_runtime_param() (Jan Beulich) - added *runtime_only_param() macros (Jan Beulich) - let *_runtime_param() macros include boot param functionality (Jan Beulich) --- xen/arch/arm/xen.lds.S | 4 ++++ xen/arch/x86/xen.lds.S | 4 ++++ xen/common/kernel.c | 5 +++++ xen/include/xen/init.h | 57 ++++++++++++++++++++++++++++++++++++++++++++++++-- xen/include/xen/lib.h | 1 + 5 files changed, 69 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S index 2d54f224ec..c9b9546435 100644 --- a/xen/arch/arm/xen.lds.S +++ b/xen/arch/arm/xen.lds.S @@ -61,6 +61,10 @@ SECTIONS *(.lockprofile.data) __lock_profile_end = .; #endif + . = ALIGN(POINTER_ALIGN); + __param_start = .; + *(.data.param) + __param_end = .; } :text #if defined(BUILD_ID) diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S index ff08bbe42a..6a7bbb8ca1 100644 --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -120,6 +120,10 @@ SECTIONS *(.lockprofile.data) __lock_profile_end = .; #endif + . = ALIGN(POINTER_ALIGN); + __param_start = .; + *(.data.param) + __param_end = .; } :text #if defined(BUILD_ID) diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 1b66ad4e55..2ab8ed496d 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -188,6 +188,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 234ec25aae..db06c76fdf 100644 --- a/xen/include/xen/init.h +++ b/xen/include/xen/init.h @@ -90,11 +90,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; \ @@ -131,6 +136,54 @@ extern const struct kernel_param __setup_start[], __setup_end[]; .len = sizeof(_var), \ .par.var = &_var } +#define __rtparam __param(__dataparam) + +#define custom_runtime_only_param(_name, _var) \ + __rtparam __rtpar_##_var = \ + { .name = _name, \ + .type = OPT_CUSTOM, \ + .par.func = _var } +#define boolean_runtime_only_param(_name, _var) \ + __rtparam __rtpar_##_var = \ + { .name = _name, \ + .type = OPT_BOOL, \ + .len = sizeof(_var), \ + .par.var = &_var } +#define integer_runtime_only_param(_name, _var) \ + __rtparam __rtpar_##_var = \ + { .name = _name, \ + .type = OPT_UINT, \ + .len = sizeof(_var), \ + .par.var = &_var } +#define size_runtime_only_param(_name, _var) \ + __rtparam __rtpar_##_var = \ + { .name = _name, \ + .type = OPT_SIZE, \ + .len = sizeof(_var), \ + .par.var = &_var } +#define string_runtime_only_param(_name, _var) \ + __rtparam __rtpar_##_var = \ + { .name = _name, \ + .type = OPT_STR, \ + .len = sizeof(_var), \ + .par.var = &_var } + +#define custom_runtime_param(_name, _var) \ + custom_param(_name, _var); \ + custom_runtime_only_param(_name, _var) +#define boolean_runtime_param(_name, _var) \ + boolean_param(_name, _var); \ + boolean_runtime_only_param(_name, _var) +#define integer_runtime_param(_name, _var) \ + integer_param(_name, _var); \ + integer_runtime_only_param(_name, _var) +#define size_runtime_param(_name, _var) \ + size_param(_name, _var); \ + size_runtime_only_param(_name, _var) +#define string_runtime_param(_name, _var) \ + string_param(_name, _var); \ + string_runtime_only_param(_name, _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*/