x86/CPU: Make intel_num_cpu_cores() generic
intel_num_cpu_cores() is a static function in intel.c which can't be used by other files. Define another function called detect_num_cpu_cores() in common.c to replace this function so it can be reused. Signed-off-by: David Wang <davidwang@zhaoxin.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: lukelin@viacpu.com Cc: qiyuanwang@zhaoxin.com Cc: gregkh@linuxfoundation.org Cc: brucechang@via-alliance.com Cc: timguo@zhaoxin.com Cc: cooperyan@zhaoxin.com Cc: hpa@zytor.com Cc: benjaminpan@viatech.com Link: https://lkml.kernel.org/r/1525314766-18910-2-git-send-email-davidwang@zhaoxin.com
This commit is contained in:
parent
b5cf8707e6
commit
2cc61be60e
@ -584,6 +584,20 @@ static void get_model_name(struct cpuinfo_x86 *c)
|
|||||||
*(s + 1) = '\0';
|
*(s + 1) = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int detect_num_cpu_cores(struct cpuinfo_x86 *c)
|
||||||
|
{
|
||||||
|
unsigned int eax, ebx, ecx, edx;
|
||||||
|
|
||||||
|
if (!IS_ENABLED(CONFIG_SMP) || c->cpuid_level < 4)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
cpuid_count(4, 0, &eax, &ebx, &ecx, &edx);
|
||||||
|
if (eax & 0x1f)
|
||||||
|
return (eax >> 26) + 1;
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void cpu_detect_cache_sizes(struct cpuinfo_x86 *c)
|
void cpu_detect_cache_sizes(struct cpuinfo_x86 *c)
|
||||||
{
|
{
|
||||||
unsigned int n, dummy, ebx, ecx, edx, l2size;
|
unsigned int n, dummy, ebx, ecx, edx, l2size;
|
||||||
|
@ -54,6 +54,7 @@ extern u32 get_scattered_cpuid_leaf(unsigned int level,
|
|||||||
extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);
|
extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);
|
||||||
extern void init_amd_cacheinfo(struct cpuinfo_x86 *c);
|
extern void init_amd_cacheinfo(struct cpuinfo_x86 *c);
|
||||||
|
|
||||||
|
extern int detect_num_cpu_cores(struct cpuinfo_x86 *c);
|
||||||
extern int detect_extended_topology(struct cpuinfo_x86 *c);
|
extern int detect_extended_topology(struct cpuinfo_x86 *c);
|
||||||
extern void detect_ht(struct cpuinfo_x86 *c);
|
extern void detect_ht(struct cpuinfo_x86 *c);
|
||||||
|
|
||||||
|
@ -453,24 +453,6 @@ static void srat_detect_node(struct cpuinfo_x86 *c)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* find out the number of processor cores on the die
|
|
||||||
*/
|
|
||||||
static int intel_num_cpu_cores(struct cpuinfo_x86 *c)
|
|
||||||
{
|
|
||||||
unsigned int eax, ebx, ecx, edx;
|
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_SMP) || c->cpuid_level < 4)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* Intel has a non-standard dependency on %ecx for this CPUID level. */
|
|
||||||
cpuid_count(4, 0, &eax, &ebx, &ecx, &edx);
|
|
||||||
if (eax & 0x1f)
|
|
||||||
return (eax >> 26) + 1;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void detect_vmx_virtcap(struct cpuinfo_x86 *c)
|
static void detect_vmx_virtcap(struct cpuinfo_x86 *c)
|
||||||
{
|
{
|
||||||
/* Intel VMX MSR indicated features */
|
/* Intel VMX MSR indicated features */
|
||||||
@ -671,7 +653,7 @@ static void init_intel(struct cpuinfo_x86 *c)
|
|||||||
* let's use the legacy cpuid vector 0x1 and 0x4 for topology
|
* let's use the legacy cpuid vector 0x1 and 0x4 for topology
|
||||||
* detection.
|
* detection.
|
||||||
*/
|
*/
|
||||||
c->x86_max_cores = intel_num_cpu_cores(c);
|
c->x86_max_cores = detect_num_cpu_cores(c);
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
detect_ht(c);
|
detect_ht(c);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user