* [PATCH] Create cpu_sibling_map for PPC64
@ 2004-07-28 21:19 Matthew Dobson
2004-08-01 4:45 ` Andrew Morton
0 siblings, 1 reply; 4+ messages in thread
From: Matthew Dobson @ 2004-07-28 21:19 UTC (permalink / raw)
To: Andrew Morton, Anton Blanchard, LKML, LSE Tech
In light of some proposed changes in the sched_domains code, I coded up
this little ditty that simply creates and populates a cpu_sibling_map
for PPC64 machines. The patch just checks the CPU flags to determine if
the CPU supports SMT (aka Hyper-Threading aka Multi-Threading aka ...)
and fills in a mask of the siblings for each CPU in the system. This
should allow us to build sched_domains for PPC64 with generic code in
kernel/sched.c for the SMT systems. SMT is becoming more popular and is
turning up in more and more architectures. I don't think it will be too
long until this feature is supported by most arches...
[mcd@arrakis source]$ diffstat
~/linux/patches/ppc64-cpu_sibling_map.patch
arch/ppc64/kernel/smp.c | 7 +++++++
include/asm-ppc64/smp.h | 1 +
2 files changed, 8 insertions(+)
Signed-off-by: Matthew Dobson <colpatch@us.ibm.com>
-Matt
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.8-rc2-mm1/arch/ppc64/kernel/smp.c linux-2.6.8-rc2-mm1+ppc64-cpu_sibling_map/arch/ppc64/kernel/smp.c
--- linux-2.6.8-rc2-mm1/arch/ppc64/kernel/smp.c 2004-07-28 10:50:29.000000000 -0700
+++ linux-2.6.8-rc2-mm1+ppc64-cpu_sibling_map/arch/ppc64/kernel/smp.c 2004-07-28 12:02:38.000000000 -0700
@@ -64,6 +64,7 @@ cpumask_t cpu_possible_map = CPU_MASK_NO
cpumask_t cpu_online_map = CPU_MASK_NONE;
cpumask_t cpu_available_map = CPU_MASK_NONE;
cpumask_t cpu_present_at_boot = CPU_MASK_NONE;
+cpumask_t cpu_sibling_map[NR_CPUS] = { [0 .. NR_CPUS-1] = CPU_MASK_NONE };
EXPORT_SYMBOL(cpu_online_map);
EXPORT_SYMBOL(cpu_possible_map);
@@ -870,6 +871,12 @@ void __init smp_prepare_cpus(unsigned in
for_each_cpu(cpu)
if (cpu != boot_cpuid)
smp_create_idle(cpu);
+
+ for_each_cpu(cpu) {
+ cpu_set(cpu, cpu_sibling_map[cpu]);
+ if (cur_cpu_spec->cpu_features & CPU_FTR_SMT)
+ cpu_set(cpu ^ 0x1, cpu_sibling_map[cpu]);
+ }
}
void __devinit smp_prepare_boot_cpu(void)
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.8-rc2-mm1/include/asm-ppc64/smp.h linux-2.6.8-rc2-mm1+ppc64-cpu_sibling_map/include/asm-ppc64/smp.h
--- linux-2.6.8-rc2-mm1/include/asm-ppc64/smp.h 2004-07-28 10:50:50.000000000 -0700
+++ linux-2.6.8-rc2-mm1+ppc64-cpu_sibling_map/include/asm-ppc64/smp.h 2004-07-28 12:02:38.000000000 -0700
@@ -49,6 +49,7 @@ extern cpumask_t cpu_present_at_boot;
extern cpumask_t cpu_online_map;
extern cpumask_t cpu_possible_map;
extern cpumask_t cpu_available_map;
+extern cpumask_t cpu_sibling_map[NR_CPUS];
#define cpu_present_at_boot(cpu) cpu_isset(cpu, cpu_present_at_boot)
#define cpu_available(cpu) cpu_isset(cpu, cpu_available_map)
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] Create cpu_sibling_map for PPC64 2004-07-28 21:19 [PATCH] Create cpu_sibling_map for PPC64 Matthew Dobson @ 2004-08-01 4:45 ` Andrew Morton 2004-08-02 21:16 ` Matthew Dobson 2004-08-02 21:45 ` Matthew Dobson 0 siblings, 2 replies; 4+ messages in thread From: Andrew Morton @ 2004-08-01 4:45 UTC (permalink / raw) To: colpatch; +Cc: anton, linux-kernel, lse-tech Matthew Dobson <colpatch@us.ibm.com> wrote: > > In light of some proposed changes in the sched_domains code, I coded up > this little ditty that simply creates and populates a cpu_sibling_map > for PPC64 machines. err, did you compile it? --- 25-power4/arch/ppc64/kernel/smp.c~create-cpu_sibling_map-for-ppc64-fix 2004-07-31 21:43:18.620845384 -0700 +++ 25-power4-akpm/arch/ppc64/kernel/smp.c 2004-07-31 21:43:21.258444408 -0700 @@ -64,7 +64,7 @@ cpumask_t cpu_possible_map = CPU_MASK_NO cpumask_t cpu_online_map = CPU_MASK_NONE; cpumask_t cpu_available_map = CPU_MASK_NONE; cpumask_t cpu_present_at_boot = CPU_MASK_NONE; -cpumask_t cpu_sibling_map[NR_CPUS] = { [0 .. NR_CPUS-1] = CPU_MASK_NONE }; +cpumask_t cpu_sibling_map[NR_CPUS] = { [0 ... NR_CPUS-1] = CPU_MASK_NONE }; EXPORT_SYMBOL(cpu_online_map); EXPORT_SYMBOL(cpu_possible_map); _ ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] Create cpu_sibling_map for PPC64 2004-08-01 4:45 ` Andrew Morton @ 2004-08-02 21:16 ` Matthew Dobson 2004-08-02 21:45 ` Matthew Dobson 1 sibling, 0 replies; 4+ messages in thread From: Matthew Dobson @ 2004-08-02 21:16 UTC (permalink / raw) To: Andrew Morton; +Cc: Anton Blanchard, LKML, LSE Tech On Sat, 2004-07-31 at 21:45, Andrew Morton wrote: > Matthew Dobson <colpatch@us.ibm.com> wrote: > > > > In light of some proposed changes in the sched_domains code, I coded up > > this little ditty that simply creates and populates a cpu_sibling_map > > for PPC64 machines. > > err, did you compile it? Oh, you wanted the version that compiles!?! ;) Besides me being really bad at counting dots, our lab was down for a bit and I didn't test or compile that before I sent it. I was sending it more as an RFC than a patch destined for acceptance (yet). I still don't have access to a machine to test it on, but I hope to snag some time soon. Glad to see *someone* is reading my code, though, since it obviously isn't me! ;) -Matt ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] Create cpu_sibling_map for PPC64 2004-08-01 4:45 ` Andrew Morton 2004-08-02 21:16 ` Matthew Dobson @ 2004-08-02 21:45 ` Matthew Dobson 1 sibling, 0 replies; 4+ messages in thread From: Matthew Dobson @ 2004-08-02 21:45 UTC (permalink / raw) To: Andrew Morton; +Cc: Anton Blanchard, LKML, LSE Tech, Nathan Lynch On Sat, 2004-07-31 at 21:45, Andrew Morton wrote: > Matthew Dobson <colpatch@us.ibm.com> wrote: > > > > In light of some proposed changes in the sched_domains code, I coded up > > this little ditty that simply creates and populates a cpu_sibling_map > > for PPC64 machines. > > err, did you compile it? Ok... beyond not compiling it, I must have had my brain turned off when I pushed the patch forward from 2.6.7-mm? to 2.6.8-rc2-mm1, because cpu_sibling_map[] is already there, although only conditionally defined for CONFIG_SCHED_SMT. Talking to PPC developers at OLS, I think cpu_sibling_map[] has (or more properly, will have) uses outside sched_domains and thus deserves an unconditional definition. Here's a patch to change that. [mcd@arrakis source]$ diffstat ~/linux/patches/ppc64-cpu_sibling_map.patch arch/ppc64/kernel/smp.c | 7 +------ include/asm-ppc64/smp.h | 4 +--- 2 files changed, 2 insertions(+), 9 deletions(-) -Matt diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.8-rc2-mm1/arch/ppc64/kernel/smp.c linux-2.6.8-rc2-mm1+ppc64-cpu_sibling_map/arch/ppc64/kernel/smp.c --- linux-2.6.8-rc2-mm1/arch/ppc64/kernel/smp.c 2004-07-28 10:50:29.000000000 -0700 +++ linux-2.6.8-rc2-mm1+ppc64-cpu_sibling_map/arch/ppc64/kernel/smp.c 2004-08-02 14:27:18.000000000 -0700 @@ -55,15 +55,13 @@ #include <asm/rtas.h> int smp_threads_ready; -#ifdef CONFIG_SCHED_SMT -cpumask_t cpu_sibling_map[NR_CPUS]; -#endif unsigned long cache_decay_ticks; cpumask_t cpu_possible_map = CPU_MASK_NONE; cpumask_t cpu_online_map = CPU_MASK_NONE; cpumask_t cpu_available_map = CPU_MASK_NONE; cpumask_t cpu_present_at_boot = CPU_MASK_NONE; +cpumask_t cpu_sibling_map[NR_CPUS] = { [0 ... NR_CPUS-1] = CPU_MASK_NONE }; EXPORT_SYMBOL(cpu_online_map); EXPORT_SYMBOL(cpu_possible_map); @@ -448,14 +446,11 @@ static inline void look_for_more_cpus(vo for (i = 0; i < maxcpus; i++) cpu_set(i, cpu_possible_map); -#ifdef CONFIG_SCHED_SMT - memset(cpu_sibling_map, 0, sizeof(cpu_sibling_map)); for_each_cpu(i) { cpu_set(i, cpu_sibling_map[i]); if (cur_cpu_spec->cpu_features & CPU_FTR_SMT) cpu_set(i^1, cpu_sibling_map[i]); } -#endif } #else /* ... CONFIG_HOTPLUG_CPU */ static inline int __devinit smp_startup_cpu(unsigned int lcpu) diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.8-rc2-mm1/include/asm-ppc64/smp.h linux-2.6.8-rc2-mm1+ppc64-cpu_sibling_map/include/asm-ppc64/smp.h --- linux-2.6.8-rc2-mm1/include/asm-ppc64/smp.h 2004-07-28 10:50:50.000000000 -0700 +++ linux-2.6.8-rc2-mm1+ppc64-cpu_sibling_map/include/asm-ppc64/smp.h 2004-08-02 14:24:43.000000000 -0700 @@ -49,6 +49,7 @@ extern cpumask_t cpu_present_at_boot; extern cpumask_t cpu_online_map; extern cpumask_t cpu_possible_map; extern cpumask_t cpu_available_map; +extern cpumask_t cpu_sibling_map[NR_CPUS]; #define cpu_present_at_boot(cpu) cpu_isset(cpu, cpu_present_at_boot) #define cpu_available(cpu) cpu_isset(cpu, cpu_available_map) @@ -73,9 +74,6 @@ void smp_init_pSeries(void); extern int __cpu_disable(void); extern void __cpu_die(unsigned int cpu); extern void cpu_die(void) __attribute__((noreturn)); -#ifdef CONFIG_SCHED_SMT -extern cpumask_t cpu_sibling_map[NR_CPUS]; -#endif #endif /* !(CONFIG_SMP) */ #define get_hard_smp_processor_id(CPU) (paca[(CPU)].hw_cpu_id) ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2004-08-02 21:46 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-07-28 21:19 [PATCH] Create cpu_sibling_map for PPC64 Matthew Dobson 2004-08-01 4:45 ` Andrew Morton 2004-08-02 21:16 ` Matthew Dobson 2004-08-02 21:45 ` Matthew Dobson
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.