mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
sched: fix a potential issue with core scheduling
cpupool_online_cpumask() is used by credit and rt scheduler. It returns all the cpus of a cpupool or all online cpus in case no cpupool is specified. The "no cpupool" case can be dropped, as no scheduler other than the init scheduler will ever work on cpus not associated with any cpupool. As the individual schedulers should only ever work on scheduling resources instead of individual cpus, their cpupool_online_cpumask() use should be replaced by cpupool->res_valid. Note that only with core scheduling active this might result in potential problems, as with cpu scheduling both masks are identical. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Dario Faggioli <dfaggioli@suse.com> Release-acked-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
1 parent
ad591454f0
commit
0aaad752be
3 files changed
+3
-7
No files matched your search
@@ -1684,12 +1684,11 @@ csched_load_balance(struct csched_private *prv, int cpu,
|
||||
struct cpupool *c = get_sched_res(cpu)->cpupool;
|
||||
struct csched_unit *speer;
|
||||
cpumask_t workers;
|
||||
cpumask_t *online;
|
||||
cpumask_t *online = c->res_valid;
|
||||
int peer_cpu, first_cpu, peer_node, bstep;
|
||||
int node = cpu_to_node(cpu);
|
||||
|
||||
BUG_ON(get_sched_res(cpu) != snext->unit->res);
|
||||
online = cpupool_online_cpumask(c);
|
||||
|
||||
/*
|
||||
* If this CPU is going offline, or is not (yet) part of any cpupool
|
||||
|
||||
@@ -774,8 +774,8 @@ rt_deinit_pdata(const struct scheduler *ops, void *pcpu, int cpu)
|
||||
|
||||
if ( prv->repl_timer.cpu == cpu )
|
||||
{
|
||||
struct cpupool *c = get_sched_res(cpu)->cpupool;
|
||||
unsigned int new_cpu = cpumask_cycle(cpu, cpupool_online_cpumask(c));
|
||||
cpumask_t *online = get_sched_res(cpu)->cpupool->res_valid;
|
||||
unsigned int new_cpu = cpumask_cycle(cpu, online);
|
||||
|
||||
/*
|
||||
* Make sure the timer run on one of the cpus that are still available
|
||||
|
||||
@@ -545,9 +545,6 @@ struct cpupool
|
||||
enum sched_gran gran;
|
||||
};
|
||||
|
||||
#define cpupool_online_cpumask(_pool) \
|
||||
(((_pool) == NULL) ? &cpu_online_map : (_pool)->cpu_valid)
|
||||
|
||||
static inline cpumask_t *cpupool_domain_master_cpumask(const struct domain *d)
|
||||
{
|
||||
/*
|
||||
|
||||