Commit 850f7d78 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] sched: trivial fixes, cleanups

From: Ingo Molnar <mingo@elte.hu>

The trivial fixes.

- added recent trivial bits from Nick's and my patches.
- hotplug CPU fix
- early init cleanup
parent fa8f2c50
...@@ -719,7 +719,7 @@ config X86_PAE ...@@ -719,7 +719,7 @@ config X86_PAE
# Common NUMA Features # Common NUMA Features
config NUMA config NUMA
bool "Numa Memory Allocation Support" bool "Numa Memory Allocation and Scheduler Support"
depends on SMP && HIGHMEM64G && (X86_NUMAQ || X86_GENERICARCH || (X86_SUMMIT && ACPI)) depends on SMP && HIGHMEM64G && (X86_NUMAQ || X86_GENERICARCH || (X86_SUMMIT && ACPI))
default n if X86_PC default n if X86_PC
default y if (X86_NUMAQ || X86_SUMMIT) default y if (X86_NUMAQ || X86_SUMMIT)
......
...@@ -1162,9 +1162,9 @@ __init void arch_init_sched_domains(void) ...@@ -1162,9 +1162,9 @@ __init void arch_init_sched_domains(void)
first_cpu = last_cpu = NULL; first_cpu = last_cpu = NULL;
if (i != first_cpu(cpu_domain->span)) { if (i != first_cpu(cpu_domain->span)) {
cpu_sched_domain(i)->flags |= SD_FLAG_SHARE_CPUPOWER; cpu_sched_domain(i)->flags |= SD_SHARE_CPUPOWER;
cpu_sched_domain(first_cpu(cpu_domain->span))->flags |= cpu_sched_domain(first_cpu(cpu_domain->span))->flags |=
SD_FLAG_SHARE_CPUPOWER; SD_SHARE_CPUPOWER;
continue; continue;
} }
...@@ -1258,7 +1258,7 @@ __init void arch_init_sched_domains(void) ...@@ -1258,7 +1258,7 @@ __init void arch_init_sched_domains(void)
cpu_domain->groups = cpu_group; cpu_domain->groups = cpu_group;
} }
} }
#else /* CONFIG_NUMA */ #else /* !CONFIG_NUMA */
static struct sched_group sched_group_cpus[NR_CPUS]; static struct sched_group sched_group_cpus[NR_CPUS];
static struct sched_group sched_group_phys[NR_CPUS]; static struct sched_group sched_group_phys[NR_CPUS];
static DEFINE_PER_CPU(struct sched_domain, phys_domains); static DEFINE_PER_CPU(struct sched_domain, phys_domains);
...@@ -1286,9 +1286,9 @@ __init void arch_init_sched_domains(void) ...@@ -1286,9 +1286,9 @@ __init void arch_init_sched_domains(void)
first_cpu = last_cpu = NULL; first_cpu = last_cpu = NULL;
if (i != first_cpu(cpu_domain->span)) { if (i != first_cpu(cpu_domain->span)) {
cpu_sched_domain(i)->flags |= SD_FLAG_SHARE_CPUPOWER; cpu_sched_domain(i)->flags |= SD_SHARE_CPUPOWER;
cpu_sched_domain(first_cpu(cpu_domain->span))->flags |= cpu_sched_domain(first_cpu(cpu_domain->span))->flags |=
SD_FLAG_SHARE_CPUPOWER; SD_SHARE_CPUPOWER;
continue; continue;
} }
......
...@@ -4,7 +4,9 @@ ...@@ -4,7 +4,9 @@
#ifdef __KERNEL__ #ifdef __KERNEL__
# define HZ 1000 /* Internal kernel timer frequency */ # define HZ 1000 /* Internal kernel timer frequency */
# define USER_HZ 100 /* .. some user interfaces are in "ticks" */ # define USER_HZ 100 /* .. some user interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ) /* like times() */ # define CLOCKS_PER_SEC (USER_HZ) /* like times() */
# define JIFFIES_TO_MSEC(x) (x)
# define MSEC_TO_JIFFIES(x) (x)
#endif #endif
#ifndef HZ #ifndef HZ
......
...@@ -650,7 +650,7 @@ extern void select_idle_routine(const struct cpuinfo_x86 *c); ...@@ -650,7 +650,7 @@ extern void select_idle_routine(const struct cpuinfo_x86 *c);
#ifdef CONFIG_SCHED_SMT #ifdef CONFIG_SCHED_SMT
#define ARCH_HAS_SCHED_DOMAIN #define ARCH_HAS_SCHED_DOMAIN
#define ARCH_HAS_SCHED_WAKE_BALANCE #define ARCH_HAS_SCHED_WAKE_IDLE
#endif #endif
#endif /* __ASM_I386_PROCESSOR_H */ #endif /* __ASM_I386_PROCESSOR_H */
...@@ -543,14 +543,13 @@ do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0) ...@@ -543,14 +543,13 @@ do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0)
#define PF_SYNCWRITE 0x00200000 /* I am doing a sync write */ #define PF_SYNCWRITE 0x00200000 /* I am doing a sync write */
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
#define SCHED_LOAD_SHIFT 7 /* increase resolution of load calculations */ #define SCHED_LOAD_SCALE 128UL /* increase resolution of load */
#define SCHED_LOAD_SCALE (1UL << SCHED_LOAD_SHIFT)
#define SD_FLAG_NEWIDLE 1 /* Balance when about to become idle */ #define SD_BALANCE_NEWIDLE 1 /* Balance when about to become idle */
#define SD_FLAG_EXEC 2 /* Balance on exec */ #define SD_BALANCE_EXEC 2 /* Balance on exec */
#define SD_FLAG_WAKE 4 /* Balance on task wakeup */ #define SD_WAKE_IDLE 4 /* Wake to idle CPU on task wakeup */
#define SD_FLAG_FASTMIGRATE 8 /* Sync wakes put task on waking CPU */ #define SD_WAKE_AFFINE 8 /* Wake task to waking CPU */
#define SD_FLAG_SHARE_CPUPOWER 16 /* Domain members share cpu power */ #define SD_SHARE_CPUPOWER 16 /* Domain members share cpu power */
struct sched_group { struct sched_group {
struct sched_group *next; /* Must be a circular list */ struct sched_group *next; /* Must be a circular list */
...@@ -577,7 +576,7 @@ struct sched_domain { ...@@ -577,7 +576,7 @@ struct sched_domain {
unsigned long long cache_hot_time; /* Task considered cache hot (ns) */ unsigned long long cache_hot_time; /* Task considered cache hot (ns) */
unsigned int cache_nice_tries; /* Leave cache hot tasks for # tries */ unsigned int cache_nice_tries; /* Leave cache hot tasks for # tries */
unsigned int per_cpu_gain; /* CPU % gained by adding domain cpus */ unsigned int per_cpu_gain; /* CPU % gained by adding domain cpus */
int flags; /* See SD_FLAG_* */ int flags; /* See SD_* */
/* Runtime fields. */ /* Runtime fields. */
unsigned long last_balance; /* init to jiffies. units in jiffies */ unsigned long last_balance; /* init to jiffies. units in jiffies */
...@@ -597,7 +596,9 @@ struct sched_domain { ...@@ -597,7 +596,9 @@ struct sched_domain {
.cache_hot_time = 0, \ .cache_hot_time = 0, \
.cache_nice_tries = 0, \ .cache_nice_tries = 0, \
.per_cpu_gain = 15, \ .per_cpu_gain = 15, \
.flags = SD_FLAG_FASTMIGRATE | SD_FLAG_NEWIDLE | SD_FLAG_WAKE,\ .flags = SD_BALANCE_NEWIDLE \
| SD_WAKE_AFFINE \
| SD_WAKE_IDLE, \
.last_balance = jiffies, \ .last_balance = jiffies, \
.balance_interval = 1, \ .balance_interval = 1, \
.nr_balance_failed = 0, \ .nr_balance_failed = 0, \
...@@ -615,7 +616,8 @@ struct sched_domain { ...@@ -615,7 +616,8 @@ struct sched_domain {
.cache_hot_time = (5*1000000/2), \ .cache_hot_time = (5*1000000/2), \
.cache_nice_tries = 1, \ .cache_nice_tries = 1, \
.per_cpu_gain = 100, \ .per_cpu_gain = 100, \
.flags = SD_FLAG_FASTMIGRATE | SD_FLAG_NEWIDLE,\ .flags = SD_BALANCE_NEWIDLE \
| SD_WAKE_AFFINE, \
.last_balance = jiffies, \ .last_balance = jiffies, \
.balance_interval = 1, \ .balance_interval = 1, \
.nr_balance_failed = 0, \ .nr_balance_failed = 0, \
...@@ -634,7 +636,7 @@ struct sched_domain { ...@@ -634,7 +636,7 @@ struct sched_domain {
.cache_hot_time = (10*1000000), \ .cache_hot_time = (10*1000000), \
.cache_nice_tries = 1, \ .cache_nice_tries = 1, \
.per_cpu_gain = 100, \ .per_cpu_gain = 100, \
.flags = SD_FLAG_EXEC, \ .flags = SD_BALANCE_EXEC, \
.last_balance = jiffies, \ .last_balance = jiffies, \
.balance_interval = 1, \ .balance_interval = 1, \
.nr_balance_failed = 0, \ .nr_balance_failed = 0, \
...@@ -645,6 +647,9 @@ DECLARE_PER_CPU(struct sched_domain, base_domains); ...@@ -645,6 +647,9 @@ DECLARE_PER_CPU(struct sched_domain, base_domains);
#define cpu_sched_domain(cpu) (&per_cpu(base_domains, (cpu))) #define cpu_sched_domain(cpu) (&per_cpu(base_domains, (cpu)))
#define this_sched_domain() (&__get_cpu_var(base_domains)) #define this_sched_domain() (&__get_cpu_var(base_domains))
#define for_each_domain(cpu, domain) \
for (domain = cpu_sched_domain(cpu); domain; domain = domain->parent)
extern int set_cpus_allowed(task_t *p, cpumask_t new_mask); extern int set_cpus_allowed(task_t *p, cpumask_t new_mask);
#else #else
static inline int set_cpus_allowed(task_t *p, cpumask_t new_mask) static inline int set_cpus_allowed(task_t *p, cpumask_t new_mask)
......
...@@ -417,6 +417,13 @@ asmlinkage void __init start_kernel(void) ...@@ -417,6 +417,13 @@ asmlinkage void __init start_kernel(void)
*/ */
smp_prepare_boot_cpu(); smp_prepare_boot_cpu();
/*
* Set up the scheduler prior starting any interrupts (such as the
* timer interrupt). Full topology setup happens at smp_init()
* time - but meanwhile we still have a functioning scheduler.
*/
sched_init();
build_all_zonelists(); build_all_zonelists();
page_alloc_init(); page_alloc_init();
printk("Kernel command line: %s\n", saved_command_line); printk("Kernel command line: %s\n", saved_command_line);
...@@ -428,7 +435,7 @@ asmlinkage void __init start_kernel(void) ...@@ -428,7 +435,7 @@ asmlinkage void __init start_kernel(void)
rcu_init(); rcu_init();
init_IRQ(); init_IRQ();
pidhash_init(); pidhash_init();
sched_init(); init_timers();
softirq_init(); softirq_init();
time_init(); time_init();
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment