All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org
Cc: Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wei.liu2@citrix.com>,
	George Dunlap <George.Dunlap@eu.citrix.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>, Tim Deegan <tim@xen.org>,
	Jan Beulich <jbeulich@suse.com>
Subject: [PATCH v4 48/53] xen: add basic support for runtime parameter changing
Date: Wed, 23 Aug 2017 19:34:41 +0200	[thread overview]
Message-ID: <20170823173446.24801-49-jgross@suse.com> (raw)
In-Reply-To: <20170823173446.24801-1-jgross@suse.com>

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 <andrew.cooper3@citrix.com>
Cc: George Dunlap <George.Dunlap@eu.citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Tim Deegan <tim@xen.org>
Cc: Wei Liu <wei.liu2@citrix.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---
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 65cd3a92ba..da1a709146 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -192,6 +192,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 8e57bbd021..ed00ae1379 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, const char *e);
 
 /*#define DEBUG_TRACE_DUMP*/
-- 
2.12.3


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  parent reply	other threads:[~2017-08-23 17:35 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-23 17:33 [PATCH v4 00/53] Support for modifying parameters at runtime Juergen Gross
2017-08-23 17:33 ` [PATCH v4 01/53] xen: add an optional string end parameter to parse_bool() Juergen Gross
2017-08-24  6:04   ` Tian, Kevin
2017-08-24 11:47   ` Wei Liu
2017-08-24 15:33   ` Jan Beulich
2017-08-24 15:43   ` Andrew Cooper
2017-08-25  8:31     ` Juergen Gross
2017-08-25  8:50       ` Jan Beulich
     [not found]   ` <599F0DFB020000780017365B@suse.com>
2017-08-24 16:28     ` Juergen Gross
2017-08-23 17:33 ` [PATCH v4 02/53] xen/arch/arm/acpi/boot.c: let custom parameter parsing routines return errno Juergen Gross
2017-08-23 17:33 ` [PATCH v4 03/53] xen/arch/arm/domain_build.c: " Juergen Gross
2017-08-23 17:33 ` [PATCH v4 04/53] xen/arch/arm/traps.c: " Juergen Gross
2017-08-23 17:33 ` [PATCH v4 05/53] xen/arch/x86/apic.c: " Juergen Gross
2017-08-23 17:33 ` [PATCH v4 06/53] xen/arch/x86/cpu/mcheck/mce.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 07/53] xen/arch/x86/cpu/vpmu.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 08/53] xen/arch/x86/dom0_build.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 09/53] xen/arch/x86/genapic/probe.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 10/53] xen/arch/x86/hvm/viridian.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 11/53] xen/arch/x86/hvm/vmx/vmcs.c: " Juergen Gross
2017-08-24  6:07   ` Tian, Kevin
2017-08-23 17:34 ` [PATCH v4 12/53] xen/arch/x86/io_apic.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 13/53] xen/arch/x86/irq.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 14/53] xen/arch/x86/microcode.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 15/53] xen/arch/x86/mm.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 16/53] xen/arch/x86/nmi.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 17/53] xen/arch/x86/numa.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 18/53] xen/arch/x86/oprofile/nmi_int.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 19/53] xen/arch/x86/psr.c: " Juergen Gross
2017-08-24 15:35   ` Jan Beulich
     [not found]   ` <599F0E57020000780017365E@suse.com>
2017-08-24 16:27     ` Juergen Gross
2017-08-25  8:17       ` Jan Beulich
     [not found]       ` <599FF92102000078001738F2@suse.com>
2017-08-25  8:33         ` Juergen Gross
2017-08-23 17:34 ` [PATCH v4 20/53] xen/arch/x86/setup.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 21/53] xen/arch/x86/shutdown.c: " Juergen Gross
2017-08-25  8:40   ` Jan Beulich
2017-08-23 17:34 ` [PATCH v4 22/53] xen/arch/x86/time.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 23/53] xen/arch/x86/x86_64/mmconfig-shared.c: " Juergen Gross
2017-08-25  8:41   ` Jan Beulich
2017-08-23 17:34 ` [PATCH v4 24/53] xen/common/core_parking.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 25/53] xen/common/domain.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 26/53] xen/common/efi/boot.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 27/53] xen/common/kexec.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 28/53] xen/common/memory.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 29/53] xen/common/sched_credit2.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 30/53] xen/drivers/acpi/tables.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 31/53] xen/drivers/char/console.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 32/53] xen/drivers/cpufreq/cpufreq.c: " Juergen Gross
2017-08-25  8:42   ` Jan Beulich
2017-08-23 17:34 ` [PATCH v4 33/53] xen/drivers/passthrough/amd/iommu_acpi.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 34/53] xen/drivers/passthrough/iommu.c: " Juergen Gross
2017-08-25  8:43   ` Jan Beulich
2017-08-23 17:34 ` [PATCH v4 35/53] xen/drivers/passthrough/pci.c: " Juergen Gross
2017-08-25  8:44   ` Jan Beulich
2017-08-23 17:34 ` [PATCH v4 36/53] xen/drivers/passthrough/vtd/dmar.c: " Juergen Gross
2017-08-24  6:09   ` Tian, Kevin
2017-08-23 17:34 ` [PATCH v4 37/53] xen/drivers/passthrough/vtd/quirks.c: " Juergen Gross
2017-08-24  6:10   ` Tian, Kevin
2017-08-23 17:34 ` [PATCH v4 38/53] xen/drivers/video/vesa.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 39/53] xen/xsm/flask/flask_op.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 40/53] xen: check parameter validity when parsing command line Juergen Gross
2017-08-24 14:27   ` Wei Liu
2017-08-23 17:34 ` [PATCH v4 41/53] xen/arch/x86/apic.c: remove custom_param() error messages Juergen Gross
2017-08-23 17:34 ` [PATCH v4 42/53] xen/arch/x86/cpu/mcheck/mce.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 43/53] xen/arch/x86/hvm/viridian.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 44/53] xen/arch/x86/io_apic.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 45/53] xen/common/kexec.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 46/53] xen/common/sched_credit2.c: " Juergen Gross
2017-08-23 17:34 ` [PATCH v4 47/53] xen: carve out a generic parsing function from _cmdline_parse() Juergen Gross
2017-08-23 17:34 ` Juergen Gross [this message]
2017-08-23 17:34 ` [PATCH v4 49/53] xen: add hypercall for setting parameters at runtime Juergen Gross
2017-08-24 14:28   ` Wei Liu
2017-08-23 17:34 ` [PATCH v4 50/53] libxc: add function to set hypervisor parameters Juergen Gross
2017-08-23 17:34 ` [PATCH v4 51/53] libxl: add libxl_set_parameters() function Juergen Gross
2017-08-23 17:34 ` [PATCH v4 52/53] xl: add new xl command set-parameters Juergen Gross
2017-08-23 17:34 ` [PATCH v4 53/53] xen: make some console related parameters settable at runtime Juergen Gross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170823173446.24801-49-jgross@suse.com \
    --to=jgross@suse.com \
    --cc=George.Dunlap@eu.citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=sstabellini@kernel.org \
    --cc=tim@xen.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.