|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 44/49] xen: round up max vcpus to scheduling granularity
Make sure the number of vcpus is always a multiple of the scheduling
granularity. Note that we don't support a scheduling granularity above
one on ARM.
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
xen/arch/x86/dom0_build.c | 1 +
xen/common/domain.c | 1 +
xen/common/domctl.c | 1 +
xen/include/xen/sched.h | 5 +++++
4 files changed, 8 insertions(+)
diff --git a/xen/arch/x86/dom0_build.c b/xen/arch/x86/dom0_build.c
index 77b5646424..76a81dd4a9 100644
--- a/xen/arch/x86/dom0_build.c
+++ b/xen/arch/x86/dom0_build.c
@@ -258,6 +258,7 @@ unsigned int __init dom0_max_vcpus(void)
max_vcpus = opt_dom0_max_vcpus_min;
if ( opt_dom0_max_vcpus_max < max_vcpus )
max_vcpus = opt_dom0_max_vcpus_max;
+ max_vcpus = sched_max_vcpus(max_vcpus);
limit = dom0_pvh ? HVM_MAX_VCPUS : MAX_VIRT_CPUS;
if ( max_vcpus > limit )
max_vcpus = limit;
diff --git a/xen/common/domain.c b/xen/common/domain.c
index b448d20d40..d338a2204c 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -290,6 +290,7 @@ static int sanitise_domain_config(struct
xen_domctl_createdomain *config)
return -EINVAL;
}
+ config->max_vcpus = sched_max_vcpus(config->max_vcpus);
if ( config->max_vcpus < 1 )
{
dprintk(XENLOG_INFO, "No vCPUS\n");
diff --git a/xen/common/domctl.c b/xen/common/domctl.c
index ccde1ba706..80837a2a5e 100644
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -542,6 +542,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t)
u_domctl)
{
unsigned int i, max = op->u.max_vcpus.max;
+ max = sched_max_vcpus(max);
ret = -EINVAL;
if ( (d == current->domain) || /* no domain_pause() */
(max != d->max_vcpus) ) /* max_vcpus set up in createdomain */
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 52a1abfca9..314a453a60 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -490,6 +490,11 @@ extern struct vcpu *idle_vcpu[NR_CPUS];
extern unsigned int sched_granularity;
+static inline unsigned int sched_max_vcpus(unsigned int n_vcpus)
+{
+ return DIV_ROUND_UP(n_vcpus, sched_granularity) * sched_granularity;
+}
+
static inline bool is_system_domain(const struct domain *d)
{
return d->domain_id >= DOMID_FIRST_RESERVED;
--
2.16.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |