aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/kernel/cpu/intel.c
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2005-04-16 18:25:15 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:25:15 -0400
commit3dd9d514846cdca1dcef2e4fce666d85e199e844 (patch)
tree28e60a8b733db213e88b0aee8ef3861a93a6fa48 /arch/i386/kernel/cpu/intel.c
parentf2ea2750fbe56867bc8e0eb595115b14195a3e5e (diff)
[PATCH] x86_64: add support for Intel dual-core detection and displaying
Appended patch adds the support for Intel dual-core detection and displaying the core related information in /proc/cpuinfo. It adds two new fields "core id" and "cpu cores" to x86 /proc/cpuinfo and the "core id" field for x86_64("cpu cores" field is already present in x86_64). Number of processor cores in a die is detected using cpuid(4) and this is documented in IA-32 Intel Architecture Software Developer's Manual (vol 2a) (http://developer.intel.com/design/pentium4/manuals/index_new.htm#sdm_vol2a) This patch also adds cpu_core_map similar to cpu_sibling_map. Slightly hacked by AK. Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/i386/kernel/cpu/intel.c')
-rw-r--r--arch/i386/kernel/cpu/intel.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/i386/kernel/cpu/intel.c b/arch/i386/kernel/cpu/intel.c
index b8d847b850d..121aa2176e6 100644
--- a/arch/i386/kernel/cpu/intel.c
+++ b/arch/i386/kernel/cpu/intel.c
@@ -77,6 +77,27 @@ static void __init Intel_errata_workarounds(struct cpuinfo_x86 *c)
77} 77}
78 78
79 79
80/*
81 * find out the number of processor cores on the die
82 */
83static int __init num_cpu_cores(struct cpuinfo_x86 *c)
84{
85 unsigned int eax;
86
87 if (c->cpuid_level < 4)
88 return 1;
89
90 __asm__("cpuid"
91 : "=a" (eax)
92 : "0" (4), "c" (0)
93 : "bx", "dx");
94
95 if (eax & 0x1f)
96 return ((eax >> 26) + 1);
97 else
98 return 1;
99}
100
80static void __init init_intel(struct cpuinfo_x86 *c) 101static void __init init_intel(struct cpuinfo_x86 *c)
81{ 102{
82 unsigned int l2 = 0; 103 unsigned int l2 = 0;
@@ -139,6 +160,8 @@ static void __init init_intel(struct cpuinfo_x86 *c)
139 if ( p ) 160 if ( p )
140 strcpy(c->x86_model_id, p); 161 strcpy(c->x86_model_id, p);
141 162
163 c->x86_num_cores = num_cpu_cores(c);
164
142 detect_ht(c); 165 detect_ht(c);
143 166
144 /* Work around errata */ 167 /* Work around errata */