Skip to content

Commit

Permalink
x86: store core id bits in cpuinfo_x8
Browse files Browse the repository at this point in the history
We need to store core id bits to cpuinfo_x86 in early_identify_cpu. So we
use it to create acpiid_to_node array in k8topolgy.c

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Cc: Christoph Lameter <clameter@sgi.com>
Cc: Andi Kleen <ak@suse.de>
Cc: Len Brown <lenb@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
Yinghai Lu authored and Ingo Molnar committed Jan 30, 2008
1 parent 8c4385d commit a860b63
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 25 deletions.
72 changes: 47 additions & 25 deletions arch/x86/kernel/setup_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -542,18 +542,7 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
int node = 0;
unsigned apicid = hard_smp_processor_id();
#endif
unsigned ecx = cpuid_ecx(0x80000008);

c->x86_max_cores = (ecx & 0xff) + 1;

/* CPU telling us the core id bits shift? */
bits = (ecx >> 12) & 0xF;

/* Otherwise recompute */
if (bits == 0) {
while ((1 << bits) < c->x86_max_cores)
bits++;
}
bits = c->x86_coreid_bits;

/* Low order bits define the core id (index of core in socket) */
c->cpu_core_id = c->phys_proc_id & ((1 << bits)-1);
Expand Down Expand Up @@ -591,6 +580,33 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
#endif
}

static void __cpuinit early_init_amd(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_SMP
unsigned bits, ecx;

/* Multi core CPU? */
if (c->extended_cpuid_level < 0x80000008)
return;

ecx = cpuid_ecx(0x80000008);

c->x86_max_cores = (ecx & 0xff) + 1;

/* CPU telling us the core id bits shift? */
bits = (ecx >> 12) & 0xF;

/* Otherwise recompute */
if (bits == 0) {
while ((1 << bits) < c->x86_max_cores)
bits++;
}

c->x86_coreid_bits = bits;

#endif
}

#define ENABLE_C1E_MASK 0x18000000
#define CPUID_PROCESSOR_SIGNATURE 1
#define CPUID_XFAM 0x0ff00000
Expand Down Expand Up @@ -858,7 +874,7 @@ struct cpu_model_info {
below. */
static void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c)
{
u32 tfms;
u32 tfms, xlvl;

c->loops_per_jiffy = loops_per_jiffy;
c->x86_cache_size = -1;
Expand All @@ -869,6 +885,7 @@ static void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c)
c->x86_clflush_size = 64;
c->x86_cache_alignment = c->x86_clflush_size;
c->x86_max_cores = 1;
c->x86_coreid_bits = 0;
c->extended_cpuid_level = 0;
memset(&c->x86_capability, 0, sizeof c->x86_capability);

Expand Down Expand Up @@ -905,18 +922,6 @@ static void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c)
#ifdef CONFIG_SMP
c->phys_proc_id = (cpuid_ebx(1) >> 24) & 0xff;
#endif
}

/*
* This does the hard work of actually picking apart the CPU stuff...
*/
void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
{
int i;
u32 xlvl;

early_identify_cpu(c);

/* AMD-defined flags: level 0x80000001 */
xlvl = cpuid_eax(0x80000000);
c->extended_cpuid_level = xlvl;
Expand All @@ -937,6 +942,23 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
c->x86_capability[2] = cpuid_edx(0x80860001);
}

switch (c->x86_vendor) {
case X86_VENDOR_AMD:
early_init_amd(c);
break;
}

}

/*
* This does the hard work of actually picking apart the CPU stuff...
*/
void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
{
int i;

early_identify_cpu(c);

init_scattered_cpuid_features(c);

c->apicid = phys_pkg_id(0);
Expand Down
1 change: 1 addition & 0 deletions include/asm-x86/processor_64.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ struct cpuinfo_x86 {
int x86_tlbsize; /* number of 4K pages in DTLB/ITLB combined(in pages)*/
__u8 x86_virt_bits, x86_phys_bits;
__u8 x86_max_cores; /* cpuid returned max cores value */
__u8 x86_coreid_bits; /* cpuid returned core id bits */
__u32 x86_power;
__u32 extended_cpuid_level; /* Max extended CPUID function supported */
unsigned long loops_per_jiffy;
Expand Down

0 comments on commit a860b63

Please sign in to comment.