mirror of https://gitee.com/openkylin/linux.git
sched: Dynamic sched_domain::level
Remove the SD_LV_ enum and use dynamic level assignments. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Mike Galbraith <efault@gmx.de> Cc: Nick Piggin <npiggin@kernel.dk> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andrew Morton <akpm@linux-foundation.org> Link: http://lkml.kernel.org/r/20110407122942.969433965@chello.nl Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
54ab4ff431
commit
60495e7760
|
@ -892,25 +892,6 @@ static inline struct cpumask *sched_group_cpus(struct sched_group *sg)
|
||||||
return to_cpumask(sg->cpumask);
|
return to_cpumask(sg->cpumask);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum sched_domain_level {
|
|
||||||
SD_LV_NONE = 0,
|
|
||||||
#ifdef CONFIG_SCHED_SMT
|
|
||||||
SD_LV_SIBLING,
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SCHED_MC
|
|
||||||
SD_LV_MC,
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SCHED_BOOK
|
|
||||||
SD_LV_BOOK,
|
|
||||||
#endif
|
|
||||||
SD_LV_CPU,
|
|
||||||
#ifdef CONFIG_NUMA
|
|
||||||
SD_LV_NODE,
|
|
||||||
SD_LV_ALLNODES,
|
|
||||||
#endif
|
|
||||||
SD_LV_MAX
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sched_domain_attr {
|
struct sched_domain_attr {
|
||||||
int relax_domain_level;
|
int relax_domain_level;
|
||||||
};
|
};
|
||||||
|
@ -919,6 +900,8 @@ struct sched_domain_attr {
|
||||||
.relax_domain_level = -1, \
|
.relax_domain_level = -1, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern int sched_domain_level_max;
|
||||||
|
|
||||||
struct sched_domain {
|
struct sched_domain {
|
||||||
/* These fields must be setup */
|
/* These fields must be setup */
|
||||||
struct sched_domain *parent; /* top domain must be null terminated */
|
struct sched_domain *parent; /* top domain must be null terminated */
|
||||||
|
@ -936,7 +919,7 @@ struct sched_domain {
|
||||||
unsigned int forkexec_idx;
|
unsigned int forkexec_idx;
|
||||||
unsigned int smt_gain;
|
unsigned int smt_gain;
|
||||||
int flags; /* See SD_* */
|
int flags; /* See SD_* */
|
||||||
enum sched_domain_level level;
|
int level;
|
||||||
|
|
||||||
/* Runtime fields. */
|
/* Runtime fields. */
|
||||||
unsigned long last_balance; /* init to jiffies. units in jiffies */
|
unsigned long last_balance; /* init to jiffies. units in jiffies */
|
||||||
|
|
|
@ -1159,7 +1159,7 @@ int current_cpuset_is_being_rebound(void)
|
||||||
static int update_relax_domain_level(struct cpuset *cs, s64 val)
|
static int update_relax_domain_level(struct cpuset *cs, s64 val)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
if (val < -1 || val >= SD_LV_MAX)
|
if (val < -1 || val >= sched_domain_level_max)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -6966,7 +6966,6 @@ sd_init_##type(struct sched_domain_topology_level *tl, int cpu) \
|
||||||
{ \
|
{ \
|
||||||
struct sched_domain *sd = *per_cpu_ptr(tl->data.sd, cpu); \
|
struct sched_domain *sd = *per_cpu_ptr(tl->data.sd, cpu); \
|
||||||
*sd = SD_##type##_INIT; \
|
*sd = SD_##type##_INIT; \
|
||||||
sd->level = SD_LV_##type; \
|
|
||||||
SD_INIT_NAME(sd, type); \
|
SD_INIT_NAME(sd, type); \
|
||||||
sd->private = &tl->data; \
|
sd->private = &tl->data; \
|
||||||
return sd; \
|
return sd; \
|
||||||
|
@ -6988,13 +6987,14 @@ SD_INIT_FUNC(CPU)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int default_relax_domain_level = -1;
|
static int default_relax_domain_level = -1;
|
||||||
|
int sched_domain_level_max;
|
||||||
|
|
||||||
static int __init setup_relax_domain_level(char *str)
|
static int __init setup_relax_domain_level(char *str)
|
||||||
{
|
{
|
||||||
unsigned long val;
|
unsigned long val;
|
||||||
|
|
||||||
val = simple_strtoul(str, NULL, 0);
|
val = simple_strtoul(str, NULL, 0);
|
||||||
if (val < SD_LV_MAX)
|
if (val < sched_domain_level_max)
|
||||||
default_relax_domain_level = val;
|
default_relax_domain_level = val;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -7173,8 +7173,11 @@ struct sched_domain *build_sched_domain(struct sched_domain_topology_level *tl,
|
||||||
|
|
||||||
set_domain_attribute(sd, attr);
|
set_domain_attribute(sd, attr);
|
||||||
cpumask_and(sched_domain_span(sd), cpu_map, tl->mask(cpu));
|
cpumask_and(sched_domain_span(sd), cpu_map, tl->mask(cpu));
|
||||||
if (child)
|
if (child) {
|
||||||
|
sd->level = child->level + 1;
|
||||||
|
sched_domain_level_max = max(sched_domain_level_max, sd->level);
|
||||||
child->parent = sd;
|
child->parent = sd;
|
||||||
|
}
|
||||||
sd->child = child;
|
sd->child = child;
|
||||||
|
|
||||||
return sd;
|
return sd;
|
||||||
|
|
Loading…
Reference in New Issue