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>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.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>,
	Julien Grall <julien.grall@arm.com>,
	Jan Beulich <jbeulich@suse.com>
Subject: [PATCH 06/12] xen: add domain specific parameter support
Date: Tue, 18 Sep 2018 08:03:03 +0200	[thread overview]
Message-ID: <20180918060309.7186-7-jgross@suse.com> (raw)
In-Reply-To: <20180918060309.7186-1-jgross@suse.com>

Add the framework for being able to define domain specific parameters.
This includes the needed macros for defining a parameter and the
minimal set of functions for doing parameter parsing.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
 xen/arch/arm/domain.c    |  5 +++++
 xen/arch/x86/domain.c    |  4 ++++
 xen/common/domain.c      | 10 ++++++++++
 xen/common/domctl.c      | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 xen/common/kernel.c      | 12 ++++++++++++
 xen/include/xen/domain.h |  3 +++
 xen/include/xen/init.h   | 34 +++++++++++++++++++++++++++++-----
 xen/include/xen/lib.h    |  1 +
 8 files changed, 110 insertions(+), 5 deletions(-)

diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index feebbf5a92..3f8bd6bdcc 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -1011,6 +1011,11 @@ void vcpu_kick(struct vcpu *vcpu)
     }
 }
 
+int arch_domain_check_parflags(struct domain *d, unsigned int flags)
+{
+    return 0;
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index d67a0478f6..8e57e7a181 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -2106,6 +2106,10 @@ static int __init init_vcpu_kick_softirq(void)
 }
 __initcall(init_vcpu_kick_softirq);
 
+int arch_domain_check_parflags(struct domain *d, unsigned int flags)
+{
+    return 0;
+}
 
 /*
  * Local variables:
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 65151e2ac4..ac0ad97638 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -1647,6 +1647,16 @@ int continue_hypercall_on_cpu(
     return 0;
 }
 
+int domain_check_parflags(void *instance, unsigned int flags)
+{
+    struct domain *d = instance;
+
+    if ( !(flags & PARAM_FLAG_RUNTIME) && d->creation_finished )
+         return -EBUSY;
+
+    return arch_domain_check_parflags(d, flags);
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/xen/common/domctl.c b/xen/common/domctl.c
index b2948814aa..149f0ed9d8 100644
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -1075,6 +1075,52 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
             copyback = 1;
         break;
 
+    case XEN_DOMCTL_set_parameter:
+    {
+#define XEN_SET_PARAMETER_MAX_SIZE 1023
+        char *params;
+
+        if ( op->u.set_parameter.pad[0] || op->u.set_parameter.pad[1] ||
+             op->u.set_parameter.pad[2] )
+        {
+            ret = -EINVAL;
+            break;
+        }
+        if ( d == current->domain )
+        {
+            printk("domain %u can't set parameter for itself!\n",
+                   d->domain_id);
+            ret = -EBUSY;
+            break;
+        }
+        if ( op->u.set_parameter.size > XEN_SET_PARAMETER_MAX_SIZE )
+        {
+            printk("parameter size too big!\n");
+            ret = -E2BIG;
+            break;
+        }
+        params = xmalloc_bytes(op->u.set_parameter.size + 1);
+        if ( !params )
+        {
+            ret = -ENOMEM;
+            break;
+        }
+        if ( copy_from_guest(params, op->u.set_parameter.params,
+                             op->u.set_parameter.size) )
+            ret = -EFAULT;
+        else
+        {
+            domain_pause(d);
+            params[op->u.set_parameter.size] = 0;
+            ret = domain_param_parse(d, params);
+            domain_unpause(d);
+        }
+
+        xfree(params);
+
+        break;
+    }
+
     default:
         ret = arch_do_domctl(op, d, u_domctl);
         break;
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index 0d3d7f6135..d0b3af1453 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -222,6 +222,13 @@ static const struct parse_data runtime_parse_data = {
     .end    = __param_end,
 };
 
+static const struct parse_data domain_parse_data = {
+    .scope = SCOPE_DOMAIN,
+    .start = __param_start,
+    .end   = __param_end,
+    .check = domain_check_parflags,
+};
+
 static void __init _cmdline_parse(const char *cmdline)
 {
     parse_params(cmdline, &boot_parse_data, NULL);
@@ -232,6 +239,11 @@ int runtime_parse(const char *line)
     return parse_params(line, &runtime_parse_data, NULL);
 }
 
+int domain_param_parse(struct domain *d, const char *line)
+{
+    return parse_params(line, &domain_parse_data, d);
+}
+
 /**
  *    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/domain.h b/xen/include/xen/domain.h
index 5e393fd7f2..944ed5beeb 100644
--- a/xen/include/xen/domain.h
+++ b/xen/include/xen/domain.h
@@ -72,6 +72,9 @@ int arch_domain_soft_reset(struct domain *d);
 
 void arch_p2m_set_access_required(struct domain *d, bool access_required);
 
+int domain_check_parflags(void *instance, unsigned int flags);
+int arch_domain_check_parflags(struct domain *d, unsigned int flags);
+
 int arch_set_info_guest(struct vcpu *, vcpu_guest_context_u);
 void arch_get_info_guest(struct vcpu *, vcpu_guest_context_u);
 
diff --git a/xen/include/xen/init.h b/xen/include/xen/init.h
index 3975964ee8..13cf5214b3 100644
--- a/xen/include/xen/init.h
+++ b/xen/include/xen/init.h
@@ -54,6 +54,8 @@
 
 #ifndef __ASSEMBLY__
 
+struct domain;
+
 /*
  * Used for initialization calls..
  */
@@ -74,7 +76,8 @@ void do_initcalls(void);
  * Used for kernel command line parameter setup
  */
 enum param_scope {
-    SCOPE_GLOBAL
+    SCOPE_GLOBAL,
+    SCOPE_DOMAIN
 };
 
 struct kernel_param {
@@ -93,6 +96,7 @@ struct kernel_param {
     union {
         void *var;
         int (*func)(const char *);
+        int (*func_domain)(const char *, struct domain *);
         int (*call)(const char *, void *);
     } par;
 };
@@ -109,12 +113,12 @@ extern const struct kernel_param __param_start[], __param_end[];
     __attribute__((__aligned__(1))) char
 #define __kparam          __param(__initsetup)
 
-#define def_custom_param(_name, _scope, _flags, _func) \
+#define def_custom_param(_name, _scope, _flags, _ptr, _func) \
     { .name = _name, \
       .type = OPT_CUSTOM, \
       .scope = _scope, \
       .flags = _flags, \
-      .par.func = _func }
+      .par._ptr = _func }
 #define def_var_param(_name, _type, _scope, _flags, _var) \
     { .name = _name, \
       .type = _type, \
@@ -126,7 +130,7 @@ extern const struct kernel_param __param_start[], __param_end[];
 #define custom_param(_name, _var) \
     __setup_str __setup_str_##_var[] = _name; \
     __kparam __setup_##_var = \
-        def_custom_param(__setup_str_##_var, SCOPE_GLOBAL, 0, _var)
+        def_custom_param(__setup_str_##_var, SCOPE_GLOBAL, 0, func, _var)
 #define boolean_param(_name, _var) \
     __setup_str __setup_str_##_var[] = _name; \
     __kparam __setup_##_var = \
@@ -148,7 +152,7 @@ extern const struct kernel_param __param_start[], __param_end[];
 
 #define custom_runtime_only_param(_name, _var) \
     __rtparam __rtpar_##_var = \
-        def_custom_param(_name, SCOPE_GLOBAL, 0, _var)
+        def_custom_param(_name, SCOPE_GLOBAL, 0, func, _var)
 #define boolean_runtime_only_param(_name, _var) \
     __rtparam __rtpar_##_var = \
         def_var_param(_name, OPT_BOOL, SCOPE_GLOBAL, 0, _var)
@@ -178,6 +182,26 @@ extern const struct kernel_param __param_start[], __param_end[];
     string_param(_name, _var); \
     string_runtime_only_param(_name, _var)
 
+#define custom_domain_param(_name, _flags, _var) \
+    __rtparam __domain_par_##_var = \
+        def_custom_param(_name, SCOPE_DOMAIN, _flags, func_domain, _var)
+#define boolean_domain_param(_name, _flags, _var) \
+    __rtparam __domain_par_##_var = \
+        def_var_param(_name, OPT_BOOL, SCOPE_DOMAIN, _flags, \
+                      (struct domain *)NULL->_var)
+#define integer_domain_param(_name, _flags, _var) \
+    __rtparam __domain_par_##_var = \
+        def_var_param(_name, OPT_UINT, SCOPE_DOMAIN, _flags, \
+                      (struct domain *)NULL->_var)
+#define size_domain_param(_name, _flags, _var) \
+    __rtparam __domain_par_##_var = \
+        def_var_param(_name, OPT_SIZE, SCOPE_DOMAIN, _flags, \
+                      (struct domain *)NULL->_var)
+#define string_domain_param(_name, _flags, _var) \
+    __rtparam __domain_par_##_var = \
+        def_var_param(_name, OPT_STR, SCOPE_DOMAIN, _flags, \
+                      (struct domain *)NULL->_var)
+
 #endif /* __ASSEMBLY__ */
 
 #ifdef CONFIG_LATE_HWDOM
diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h
index 972fc843fa..7ba5929ed5 100644
--- a/xen/include/xen/lib.h
+++ b/xen/include/xen/lib.h
@@ -70,6 +70,7 @@ struct domain;
 
 void cmdline_parse(const char *cmdline);
 int runtime_parse(const char *line);
+int domain_param_parse(struct domain *d, const char *line);
 int parse_bool(const char *s, const char *e);
 
 /**
-- 
2.16.4


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

  parent reply	other threads:[~2018-09-18  6:03 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-18  6:02 [PATCH 00/12] add per-domain and per-cpupool generic parameters Juergen Gross
2018-09-18  6:02 ` [PATCH 01/12] xen: use macros for filling parameter definition blocks Juergen Gross
2018-09-26 15:32   ` Dario Faggioli
2018-10-04 15:37   ` Jan Beulich
2018-09-18  6:02 ` [PATCH 02/12] xen: use a structure to define parsing parameters Juergen Gross
2018-09-26 15:17   ` Dario Faggioli
2018-10-04 15:40   ` Jan Beulich
2018-09-18  6:03 ` [PATCH 03/12] xen: add support for parameter scopes Juergen Gross
2018-09-18  6:03 ` [PATCH 04/12] xen: add a generic flags field to parameter definitions Juergen Gross
2018-09-18  6:03 ` [PATCH 05/12] xen: add hypercall interfaces for domain and cpupool parameter setting Juergen Gross
2018-09-18 21:23   ` Daniel De Graaf
2018-09-19  5:14     ` Juergen Gross
2018-09-26 17:06   ` Dario Faggioli
2018-09-18  6:03 ` Juergen Gross [this message]
2018-09-18  6:03 ` [PATCH 07/12] xen: add domain specific parameter support Juergen Gross
2018-09-26 16:58   ` Dario Faggioli
2018-09-18  6:03 ` [PATCH 08/12] tools/libxc: add per domain/cpupool " Juergen Gross
2018-09-18  6:03 ` [PATCH 09/12] tools/xl: add support for setting generic per-cpupool parameters Juergen Gross
2018-09-26 17:17   ` Dario Faggioli
2018-09-27  5:14     ` Juergen Gross
2018-09-18  6:03 ` [PATCH 10/12] tools/xl: add support for setting generic per-domain parameters Juergen Gross
2018-09-18  6:03 ` [PATCH 11/12] x86: add domain type flags for domain parameters Juergen Gross
2018-09-18  6:03 ` [PATCH 12/12] x86/xpti: add per-domain parameter for controlling xpti Juergen Gross
2018-09-18 10:32 ` [PATCH 00/12] add per-domain and per-cpupool generic parameters Jan Beulich
2018-09-18 11:10   ` Juergen Gross
     [not found]     ` <5?==?UTF-8?Q?BA0DF9602000078001=3d=3fUTF-8=3fQ=3fE9448@suse.com>
     [not found]       ` <6d56ad90-782?==?UTF-8?Q?5-adb7-f4e5-6c3ceb3210f6@suse.com>
     [not found]         ` <001ab73a-078d-4ec1-4acd-2fb43?==?UTF-8?Q?89e8867@citrix.com>
2018-09-18 11:18     ` George Dunlap
2018-09-18 11:30       ` Juergen Gross
2018-09-18 11:20     ` Jan Beulich
     [not found]     ` <5?= =?UTF-8?Q?BA0DF9602000078001=3d=3fUTF-8=3fQ=3fE9448@suse.com>
     [not found]       ` <6d56ad90-782?= =?UTF-8?Q?5-adb7-f4e5-6c3ceb3210f6@suse.com>
     [not found]         ` <001ab73a-078d-4ec1-4acd-2fb43?= =?UTF-8?Q?89e8867@citrix.com>
     [not found]           ` <20180919172818.3aksiju4s3ipw42p@zion.uk.xens?= =?UTF-8?Q?ource.com>
2018-09-19 17:58             ` Juergen Gross
     [not found]               ` <20180920160629.j?==?UTF-8?Q?ullgb435zi7bcbr@zi=3d=3fUTF-8=3fQ=3fon.uk.xensource.com>
     [not found]                 ` <eba521d?==?UTF-8?Q?2-f6c5-5096-82c2-af5983ed2372@suse.com>
2018-09-20 16:06               ` Wei Liu
     [not found]               ` <20180920160629.j?= =?UTF-8?Q?ullgb435zi7bcbr@zi=3d=3fUTF-8=3fQ=3fon.uk.xensource.com>
     [not found]                 ` <eba521d?= =?UTF-8?Q?2-f6c5-5096-82c2-af5983ed2372@suse.com>
     [not found]                   ` <20180921085240.dqzt5pomt?= =?UTF-8?Q?nfjs665@zion.uk.xensource.com>
2018-09-27  5:58                     ` Juergen Gross
2018-10-03 10:58                       ` Wei Liu
     [not found] ` <5BA0D44602000078001E93EA@suse.com>
2018-09-18 11:02   ` Juergen Gross
2018-09-18 11:19     ` Jan Beulich
2018-09-18 11:20       ` George Dunlap
2018-09-18 11:23         ` Jan Beulich
2018-09-18 11:29           ` George Dunlap
2018-09-18 11:34             ` Juergen Gross
2018-09-18 11:52             ` Jan Beulich
2018-09-18 11:24         ` Juergen Gross
     [not found]   ` <f8bc94ca-9eee-a5a2-5c32-0c?= =?UTF-8?Q?a1ed0cbf5d@suse.com>
     [not found]     ` <5BA0DF3702000078001E9444@suse.com>
2018-09-18 11:26       ` Juergen Gross
2018-09-18 11:47         ` Jan Beulich
     [not found]   ` <f8bc94ca=ef=bf=bd9eee?= =?UTF-8?B?77+9YTVhMu+/vTVjMzLvv70wY2ExZWQwY2JmNWRAc3VzZS5jb20+IDw1QkEwREYz?= =?UTF-8?Q?702000078001E9444@prv1=ef=bf=bdmh.provo.novell.com>
     [not found]     ` <78501912-e58?= =?UTF-8?Q?6-faa9-3569-3b2fd2fef9f5@citrix.com>
     [not found]       ` <5BA0E01902000078001E9468@su?= =?UTF-8?Q?se.com>
2018-09-18 11:28         ` Juergen Gross
     [not found] <20180918060309.7186=ef=bf=bd1=ef=bf=bdjgross@suse.com?= =?UTF-8?Q?>
     [not found] ` <5BA0D44602000078001E93EA@prv1=ef=bf=bdmh.provo.novell.com>
     [not found]   ` <7c?==?UTF-8?Q?b2a460-095c-27c8-a4cf-47ef8e7850d5@suse.com>
     [not found]   ` <7c?= =?UTF-8?Q?b2a460-095c-27c8-a4cf-47ef8e7850d5@suse.com>
     [not found]     ` <5BA0DF9602000078001?= =?UTF-8?Q?E9448@suse.com>
2018-09-18 11:32       ` Juergen Gross
     [not found]         ` <001ab73a-07?==?UTF-8?Q?8d-4ec1-4acd-2fb4389e8867@citrix.com>
     [not found]           ` <20180919172818.3aksiju4s3i?==?UTF-8?Q?pw42p@zion.uk.xens=3d=3fUTF-8=3fQ=3fource.com>
     [not found]             ` <fffd7e59-e437-8ed?==?UTF-8?Q?9-b228-b537fde050cd@suse.com>
2018-09-18 13:25         ` George Dunlap
2018-09-19 17:28           ` Wei Liu
     [not found]         ` <?= =?UTF-8?Q?001ab73a-078d-4ec1-4acd-2fb4389e8867@citrix.com>
2018-09-18 13:36           ` Juergen Gross
     [not found]           ` <0a89246d-00a6-d?= =?UTF-8?Q?04a-4bce-3f0b98839d39@suse.com>
2018-09-18 13:57             ` George Dunlap
2018-09-26 15:10               ` Dario Faggioli
     [not found]             ` <d698d8c9-2582-6314-10cb-ecb9535f?= =?UTF-8?Q?62e0@citrix.com>
2018-09-18 14:57               ` Juergen Gross
2018-09-18 15:21                 ` George Dunlap
     [not found]               ` <7785b4d9724db9224ca8bed58d0f061ce1d67b71.camel@?= =?UTF-8?Q?suse.com>
2018-09-27  6:10                 ` Juergen Gross
     [not found]         ` <001ab73a-07?= =?UTF-8?Q?8d-4ec1-4acd-2fb4389e8867@citrix.com>
     [not found]           ` <20180919172818.3aksiju4s3i?= =?UTF-8?Q?pw42p@zion.uk.xens=3d=3fUTF-8=3fQ=3fource.com>
     [not found]             ` <fffd7e59-e437-8ed?= =?UTF-8?Q?9-b228-b537fde050cd@suse.com>
     [not found]               ` <20180920160629.jullgb435zi7bcbr@zi?= =?UTF-8?Q?on.uk.xensource.com>
2018-09-21  5:23                 ` Juergen Gross
2018-09-21  8:52                   ` Wei Liu
2018-09-26 17:30                     ` Dario Faggioli
2018-10-03 11:00                       ` Wei Liu
2018-10-03 11:07                         ` Juergen Gross
2018-10-03 11:27                           ` Wei Liu
     [not found] <7cb2a460-095c-27c8-a4cf-47ef8e7?=850d5@suse.com>
     [not found] <20180918060309.7186=3def=3dbf=3dbd1=3def=3dbf=3dbdjgr?= =?UTF-8?Q?oss@suse.com=3f=3d>
     [not found] <20180918060309.7186=3d3def=3d3dbf=3d3dbd1=3d3def=3d3d?= =?UTF-8?Q?bf=3d3dbdjgr=3f=3doss@suse.com=3f=3d>
     [not found] ` <5BA0D44602000078001E93EA@p?= =?UTF-8?Q?rv1=ef=bf=bdmh.provo.novell.com>
     [not found]   ` <7cb2a460-095c-27c8-a4cf-47ef8e7?= =?UTF-8?Q?850d5@suse.com>
     [not found] <7cb2a460-095c-2?==?UTF-8?Q?7c8-a4cf-47ef8e7850d5@suse.com>
     [not found] ` <5BA0DF9602000078001=3d=3fUTF-8?==?UTF-8?Q?=3fQ=3fE9448@suse.com>
     [not found] <20180918060309.7186=3d3def=3d3dbf=3d3dbd1=3d3def=3d3d?==?UTF-8?Q?bf=3d3dbdjgr=3f=3doss@suse.com=3f=3d>
     [not found] ` <5BA0D44602000078001E93EA@p?==?UTF-8?Q?rv1=ef=bf=bdmh.provo.novell.com>
     [not found]   ` <7cb2a460-095c-27c8-a4cf-47ef8e7?==?UTF-8?Q?850d5@suse.com>
     [not found] <20180918060309.7186=3def=3dbf=3dbd1=3def=3dbf=3dbdjgr?==?UTF-8?Q?oss@suse.com=3f=3d>
     [not found] <20180918060309.7186=3d3d3def=3d3d3dbf=3d3d3dbd1=3d3d3?= =?UTF-8?Q?def=3d3d3d=3f=3dbf=3d3dbdjgr=3f=3doss@suse.com=3f=3d>
     [not found] ` <5BA0D44602?= =?UTF-8?Q?000078001E93EA@prv1=ef=bf=bdmh.provo.novell.com>
     [not found]   ` <7cb2a460-095c-2?= =?UTF-8?Q?7c8-a4cf-47ef8e7850d5@suse.com>
     [not found]     ` <5BA0DF9602000078001=3d=3fUTF-8?= =?UTF-8?Q?=3fQ=3fE9448@suse.com>

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=20180918060309.7186-7-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=julien.grall@arm.com \
    --cc=konrad.wilk@oracle.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.