![Con Kolivas](/assets/img/avatar_default.png)
Remove the SMT-nice feature which idles sibling cpus on SMT cpus to facilitiate nice working properly where cpu power is shared. The idling of cpus in the presence of runnable tasks is considered too fragile, easy to break with outside code, and the complexity of managing this system if an architecture comes along with many logical cores sharing cpu power will be unworkable. Remove the associated per_cpu_gain variable in sched_domains used only by this code. Also: The reason is that with dynticks enabled, this code breaks without yet further tweaks so dynticks brought on the rapid demise of this code. So either we tweak this code or kill it off entirely. It was Ingo's preference to kill it off. Either way this needs to happen for 2.6.21 since dynticks has gone in. Signed-off-by: Con Kolivas <kernel@kolivas.org> Acked-by: Ingo Molnar <mingo@elte.hu> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
72 lines
1.9 KiB
C
72 lines
1.9 KiB
C
#ifndef _ASM_X86_64_TOPOLOGY_H
|
|
#define _ASM_X86_64_TOPOLOGY_H
|
|
|
|
|
|
#ifdef CONFIG_NUMA
|
|
|
|
#include <asm/mpspec.h>
|
|
#include <asm/bitops.h>
|
|
|
|
extern cpumask_t cpu_online_map;
|
|
|
|
extern unsigned char cpu_to_node[];
|
|
extern cpumask_t node_to_cpumask[];
|
|
|
|
#ifdef CONFIG_ACPI_NUMA
|
|
extern int __node_distance(int, int);
|
|
#define node_distance(a,b) __node_distance(a,b)
|
|
/* #else fallback version */
|
|
#endif
|
|
|
|
#define cpu_to_node(cpu) (cpu_to_node[cpu])
|
|
#define parent_node(node) (node)
|
|
#define node_to_first_cpu(node) (first_cpu(node_to_cpumask[node]))
|
|
#define node_to_cpumask(node) (node_to_cpumask[node])
|
|
#define pcibus_to_node(bus) ((long)(bus->sysdata))
|
|
#define pcibus_to_cpumask(bus) node_to_cpumask(pcibus_to_node(bus));
|
|
|
|
#define numa_node_id() read_pda(nodenumber)
|
|
|
|
/* sched_domains SD_NODE_INIT for x86_64 machines */
|
|
#define SD_NODE_INIT (struct sched_domain) { \
|
|
.span = CPU_MASK_NONE, \
|
|
.parent = NULL, \
|
|
.child = NULL, \
|
|
.groups = NULL, \
|
|
.min_interval = 8, \
|
|
.max_interval = 32, \
|
|
.busy_factor = 32, \
|
|
.imbalance_pct = 125, \
|
|
.cache_nice_tries = 2, \
|
|
.busy_idx = 3, \
|
|
.idle_idx = 2, \
|
|
.newidle_idx = 0, \
|
|
.wake_idx = 1, \
|
|
.forkexec_idx = 1, \
|
|
.flags = SD_LOAD_BALANCE \
|
|
| SD_BALANCE_FORK \
|
|
| SD_BALANCE_EXEC \
|
|
| SD_SERIALIZE \
|
|
| SD_WAKE_BALANCE, \
|
|
.last_balance = jiffies, \
|
|
.balance_interval = 1, \
|
|
.nr_balance_failed = 0, \
|
|
}
|
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_SMP
|
|
#define topology_physical_package_id(cpu) (cpu_data[cpu].phys_proc_id)
|
|
#define topology_core_id(cpu) (cpu_data[cpu].cpu_core_id)
|
|
#define topology_core_siblings(cpu) (cpu_core_map[cpu])
|
|
#define topology_thread_siblings(cpu) (cpu_sibling_map[cpu])
|
|
#define mc_capable() (boot_cpu_data.x86_max_cores > 1)
|
|
#define smt_capable() (smp_num_siblings > 1)
|
|
#endif
|
|
|
|
#include <asm-generic/topology.h>
|
|
|
|
extern cpumask_t cpu_coregroup_map(int cpu);
|
|
|
|
#endif
|