From patchwork Wed Aug 9 07:07:01 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: 9889721 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 E7EF8602D7 for ; Wed, 9 Aug 2017 07:10:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D8ED626BE9 for ; Wed, 9 Aug 2017 07:10:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CDCE5274D1; Wed, 9 Aug 2017 07:10:27 +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 3E92526BE9 for ; Wed, 9 Aug 2017 07:10:27 +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 1dfL6a-0002Cn-Pk; Wed, 09 Aug 2017 07:08:36 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dfL6Z-00027I-Fu for xen-devel@lists.xen.org; Wed, 09 Aug 2017 07:08:35 +0000 Received: from [85.158.139.211] by server-2.bemta-5.messagelabs.com id 3B/39-01996-2F4BA895; Wed, 09 Aug 2017 07:08:34 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrILMWRWlGSWpSXmKPExsVyuP0Ov+7HLV2 RBv8Xylss+biYxYHR4+ju30wBjFGsmXlJ+RUJrBnXt9xgKmiXq+hfz93AOEeyi5GTQ0LASOLt xH9MXYxcHEICCxklDvZNZAJJsAmoSmy4fooVxBYRkJa49vkyI0gRs8BjJokZu5aDFQkL+EhM6 DzBBmKzADV8O/obzOYVMJX4sfsuG8QGeYmOA5NZQGxOoPiUl9vBeoUETCRunZ3GNoGRewEjwy pG9eLUorLUIl1zvaSizPSMktzEzBxdQwNTvdzU4uLE9NScxKRiveT83E2MQO8yAMEOxmOTnQ8 xSnIwKYnybtLujBTiS8pPqcxILM6ILyrNSS0+xCjDwaEkweu5uStSSLAoNT21Ii0zBxhmMGkJ Dh4lEd5tIGne4oLE3OLMdIjUKUZdjlcT/n9jEmLJy89LlRLn/Q1SJABSlFGaBzcCFvKXGGWlh HkZgY4S4ilILcrNLEGVf8UozsGoJMwbBjKFJzOvBG7TK6AjmICOiPDtBDmiJBEhJdXAmBAq/z HT1Eu8LsV3z1/O3FcX7V5JZLzi4T1xIHXFrC0XCr+Wmum4rz+0O93CXEeY66TjlgdfJ0o9XRP y4p/yGcY/++ZZTZOcEPMsnNV9+sGVt3Vc5Vyy+9c/2n276sG6Qo2ZXPqCEzylb1TXtF2y7HBY GsFvdl5i1fzgm4/fORts1fQRl8j4oMRSnJFoqMVcVJwIAKl9V6d0AgAA X-Env-Sender: jgross@suse.com X-Msg-Ref: server-8.tower-206.messagelabs.com!1502262513!106327105!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 33923 invoked from network); 9 Aug 2017 07:08:33 -0000 Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by server-8.tower-206.messagelabs.com with DHE-RSA-CAMELLIA256-SHA encrypted SMTP; 9 Aug 2017 07:08:33 -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 15B7BAF1D; Wed, 9 Aug 2017 07:07:33 +0000 (UTC) From: Juergen Gross To: xen-devel@lists.xen.org Date: Wed, 9 Aug 2017 09:07:01 +0200 Message-Id: <20170809070706.13481-48-jgross@suse.com> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20170809070706.13481-1-jgross@suse.com> References: <20170809070706.13481-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 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 --- xen/arch/x86/xen.lds.S | 4 ++++ xen/common/kernel.c | 5 +++++ xen/include/xen/init.h | 22 ++++++++++++++++++++-- xen/include/xen/lib.h | 1 + 4 files changed, 30 insertions(+), 2 deletions(-) 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 0d63685c4f..6883a4f22f 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*/