Messages in this thread | | | Date | Fri, 4 Feb 2011 14:07:44 -0800 | From | Andrew Morton <> | Subject | Re: [PATCH 1/4] x86, amd: Normalize compute unit IDs on multi-node processors |
| |
On Mon, 24 Jan 2011 16:05:40 +0100 Hans Rosenfeld <hans.rosenfeld@amd.com> wrote:
> From: Andreas Herrmann <andreas.herrmann3@amd.com> > > On multi-node CPUs we don't need the socket wide compute unit ID but > the node-wide compute unit ID. Thus we need to normalize the value. > This is similar to what we do with cpu_core_id. > > A compute unit is then identified by physical_package_id, node_id, and > compute_unit_id. > > ... > > --- a/arch/x86/kernel/cpu/amd.c > +++ b/arch/x86/kernel/cpu/amd.c > @@ -261,7 +261,7 @@ static int __cpuinit nearby_node(int apicid) > #ifdef CONFIG_X86_HT > static void __cpuinit amd_get_topology(struct cpuinfo_x86 *c) > { > - u32 nodes; > + u32 nodes, cores_per_cu; > u8 node_id; > int cpu = smp_processor_id(); > > @@ -276,6 +276,7 @@ static void __cpuinit amd_get_topology(struct cpuinfo_x86 *c) > /* get compute unit information */ > smp_num_siblings = ((ebx >> 8) & 3) + 1; > c->compute_unit_id = ebx & 0xff; > + cores_per_cu = ((ebx >> 8) & 3) + 1; > } else if (cpu_has(c, X86_FEATURE_NODEID_MSR)) { > u64 value; > > @@ -288,15 +289,18 @@ static void __cpuinit amd_get_topology(struct cpuinfo_x86 *c) > /* fixup multi-node processor information */ > if (nodes > 1) { > u32 cores_per_node; > + u32 cus_per_node; > > set_cpu_cap(c, X86_FEATURE_AMD_DCM); > cores_per_node = c->x86_max_cores / nodes; > + cus_per_node = cores_per_node / cores_per_cu; > > /* store NodeID, use llc_shared_map to store sibling info */ > per_cpu(cpu_llc_id, cpu) = node_id; > > /* core id to be in range from 0 to (cores_per_node - 1) */ > - c->cpu_core_id = c->cpu_core_id % cores_per_node; > + c->cpu_core_id %= cores_per_node; > + c->compute_unit_id %= cus_per_node; > } > } > #endif
arch/x86/kernel/cpu/amd.c: In function 'init_amd': arch/x86/kernel/cpu/amd.c:268: warning: 'cores_per_cu' may be used uninitialized in this function
The code looks buggy to me.
| |