|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] schedulers: validate / correct global data just once
commit d97b65f842613d54bb45277657014985ca0d6f2f
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Mon Jul 2 13:09:46 2018 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Jul 2 13:09:46 2018 +0200
schedulers: validate / correct global data just once
Also mark command line parsing routine __init.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Dario Faggioli <dfaggioli@xxxxxxxx>
---
xen/common/sched_credit.c | 55 +++++++++++++++++++++++++++-------------------
xen/common/sched_credit2.c | 51 ++++++++++++++++++++++++------------------
2 files changed, 62 insertions(+), 44 deletions(-)
diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c
index 9bc638c09c..84e744bfe4 100644
--- a/xen/common/sched_credit.c
+++ b/xen/common/sched_credit.c
@@ -2156,6 +2156,36 @@ csched_dump(const struct scheduler *ops)
spin_unlock_irqrestore(&prv->lock, flags);
}
+static int __init
+csched_global_init(void)
+{
+ if ( sched_credit_tslice_ms > XEN_SYSCTL_CSCHED_TSLICE_MAX ||
+ sched_credit_tslice_ms < XEN_SYSCTL_CSCHED_TSLICE_MIN )
+ {
+ printk("WARNING: sched_credit_tslice_ms outside of valid range
[%d,%d].\n"
+ " Resetting to default %u\n",
+ XEN_SYSCTL_CSCHED_TSLICE_MIN,
+ XEN_SYSCTL_CSCHED_TSLICE_MAX,
+ CSCHED_DEFAULT_TSLICE_MS);
+ sched_credit_tslice_ms = CSCHED_DEFAULT_TSLICE_MS;
+ }
+
+ if ( MICROSECS(sched_ratelimit_us) > MILLISECS(sched_credit_tslice_ms) )
+ printk("WARNING: sched_ratelimit_us >"
+ "sched_credit_tslice_ms is undefined\n"
+ "Setting ratelimit to tslice\n");
+
+ if ( vcpu_migration_delay_us > XEN_SYSCTL_CSCHED_MGR_DLY_MAX_US )
+ {
+ vcpu_migration_delay_us = 0;
+ printk("WARNING: vcpu_migration_delay outside of valid range
[0,%d]us.\n"
+ "Resetting to default: %u\n",
+ XEN_SYSCTL_CSCHED_MGR_DLY_MAX_US, vcpu_migration_delay_us);
+ }
+
+ return 0;
+}
+
static int
csched_init(struct scheduler *ops)
{
@@ -2186,36 +2216,13 @@ csched_init(struct scheduler *ops)
INIT_LIST_HEAD(&prv->active_sdom);
prv->master = UINT_MAX;
- if ( sched_credit_tslice_ms > XEN_SYSCTL_CSCHED_TSLICE_MAX
- || sched_credit_tslice_ms < XEN_SYSCTL_CSCHED_TSLICE_MIN )
- {
- printk("WARNING: sched_credit_tslice_ms outside of valid range
[%d,%d].\n"
- " Resetting to default %u\n",
- XEN_SYSCTL_CSCHED_TSLICE_MIN,
- XEN_SYSCTL_CSCHED_TSLICE_MAX,
- CSCHED_DEFAULT_TSLICE_MS);
- sched_credit_tslice_ms = CSCHED_DEFAULT_TSLICE_MS;
- }
-
__csched_set_tslice(prv, sched_credit_tslice_ms);
if ( MICROSECS(sched_ratelimit_us) > MILLISECS(sched_credit_tslice_ms) )
- {
- printk("WARNING: sched_ratelimit_us >"
- "sched_credit_tslice_ms is undefined\n"
- "Setting ratelimit to tslice\n");
prv->ratelimit = prv->tslice;
- }
else
prv->ratelimit = MICROSECS(sched_ratelimit_us);
- if ( vcpu_migration_delay_us > XEN_SYSCTL_CSCHED_MGR_DLY_MAX_US )
- {
- vcpu_migration_delay_us = 0;
- printk("WARNING: vcpu_migration_delay outside of valid range
[0,%d]us.\n"
- "Resetting to default: %u\n",
- XEN_SYSCTL_CSCHED_MGR_DLY_MAX_US, vcpu_migration_delay_us);
- }
prv->vcpu_migr_delay = MICROSECS(vcpu_migration_delay_us);
return 0;
@@ -2266,6 +2273,8 @@ static const struct scheduler sched_credit_def = {
.sched_id = XEN_SCHEDULER_CREDIT,
.sched_data = NULL,
+ .global_init = csched_global_init,
+
.insert_vcpu = csched_vcpu_insert,
.remove_vcpu = csched_vcpu_remove,
diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c
index 9a3e71f1c8..743848121f 100644
--- a/xen/common/sched_credit2.c
+++ b/xen/common/sched_credit2.c
@@ -448,7 +448,7 @@ static const char *const opt_runqueue_str[] = {
};
static int __read_mostly opt_runqueue = OPT_RUNQUEUE_SOCKET;
-static int parse_credit2_runqueue(const char *s)
+static int __init parse_credit2_runqueue(const char *s)
{
unsigned int i;
@@ -3937,6 +3937,33 @@ csched2_deinit_pdata(const struct scheduler *ops, void
*pcpu, int cpu)
return;
}
+static int __init
+csched2_global_init(void)
+{
+ if ( opt_load_precision_shift < LOADAVG_PRECISION_SHIFT_MIN )
+ {
+ printk("WARNING: %s: opt_load_precision_shift %u below min %d,
resetting\n",
+ __func__, opt_load_precision_shift,
LOADAVG_PRECISION_SHIFT_MIN);
+ opt_load_precision_shift = LOADAVG_PRECISION_SHIFT_MIN;
+ }
+
+ if ( opt_load_window_shift <= LOADAVG_GRANULARITY_SHIFT )
+ {
+ printk("WARNING: %s: opt_load_window_shift %u too short, resetting\n",
+ __func__, opt_load_window_shift);
+ opt_load_window_shift = LOADAVG_WINDOW_SHIFT;
+ }
+
+ if ( CSCHED2_BDGT_REPL_PERIOD < CSCHED2_MIN_TIMER )
+ {
+ printk("WARNING: %s: opt_cap_period %u too small, resetting\n",
+ __func__, opt_cap_period);
+ opt_cap_period = 10; /* ms */
+ }
+
+ return 0;
+}
+
static int
csched2_init(struct scheduler *ops)
{
@@ -3958,29 +3985,9 @@ csched2_init(struct scheduler *ops)
opt_runqueue_str[opt_runqueue],
opt_cap_period);
- if ( opt_load_precision_shift < LOADAVG_PRECISION_SHIFT_MIN )
- {
- printk("WARNING: %s: opt_load_precision_shift %d below min %d,
resetting\n",
- __func__, opt_load_precision_shift,
LOADAVG_PRECISION_SHIFT_MIN);
- opt_load_precision_shift = LOADAVG_PRECISION_SHIFT_MIN;
- }
-
- if ( opt_load_window_shift <= LOADAVG_GRANULARITY_SHIFT )
- {
- printk("WARNING: %s: opt_load_window_shift %d too short, resetting\n",
- __func__, opt_load_window_shift);
- opt_load_window_shift = LOADAVG_WINDOW_SHIFT;
- }
printk(XENLOG_INFO "load tracking window length %llu ns\n",
1ULL << opt_load_window_shift);
- if ( CSCHED2_BDGT_REPL_PERIOD < CSCHED2_MIN_TIMER )
- {
- printk("WARNING: %s: opt_cap_period %d too small, resetting\n",
- __func__, opt_cap_period);
- opt_cap_period = 10; /* ms */
- }
-
/*
* Basically no CPU information is available at this point; just
* set up basic structures, and a callback when the CPU info is
@@ -4031,6 +4038,8 @@ static const struct scheduler sched_credit2_def = {
.sched_id = XEN_SCHEDULER_CREDIT2,
.sched_data = NULL,
+ .global_init = csched2_global_init,
+
.insert_vcpu = csched2_vcpu_insert,
.remove_vcpu = csched2_vcpu_remove,
--
generated by git-patchbot for /home/xen/git/xen.git#staging
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |