提交 a967ceac 编写于 作者: H Hiroshi Shimamoto 提交者: Ingo Molnar

x86: make cpu/proc|_64.c similar

clean up for unification.
Signed-off-by: NHiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 8fa6878f
...@@ -8,75 +8,90 @@ ...@@ -8,75 +8,90 @@
/* /*
* Get CPU information for use by the procfs. * Get CPU information for use by the procfs.
*/ */
static void show_cpuinfo_core(struct seq_file *m, struct cpuinfo_x86 *c,
unsigned int cpu)
{
#ifdef CONFIG_X86_HT
if (c->x86_max_cores * smp_num_siblings > 1) {
seq_printf(m, "physical id\t: %d\n", c->phys_proc_id);
seq_printf(m, "siblings\t: %d\n",
cpus_weight(per_cpu(cpu_core_map, cpu)));
seq_printf(m, "core id\t\t: %d\n", c->cpu_core_id);
seq_printf(m, "cpu cores\t: %d\n", c->booted_cores);
}
#endif
}
static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c)
{
/*
* We use exception 16 if we have hardware math and we've either seen
* it or the CPU claims it is internal
*/
int fpu_exception = c->hard_math && (ignore_fpu_irq || cpu_has_fpu);
seq_printf(m,
"fdiv_bug\t: %s\n"
"hlt_bug\t\t: %s\n"
"f00f_bug\t: %s\n"
"coma_bug\t: %s\n"
"fpu\t\t: %s\n"
"fpu_exception\t: %s\n"
"cpuid level\t: %d\n"
"wp\t\t: %s\n",
c->fdiv_bug ? "yes" : "no",
c->hlt_works_ok ? "no" : "yes",
c->f00f_bug ? "yes" : "no",
c->coma_bug ? "yes" : "no",
c->hard_math ? "yes" : "no",
fpu_exception ? "yes" : "no",
c->cpuid_level,
c->wp_works_ok ? "yes" : "no");
}
static int show_cpuinfo(struct seq_file *m, void *v) static int show_cpuinfo(struct seq_file *m, void *v)
{ {
struct cpuinfo_x86 *c = v; struct cpuinfo_x86 *c = v;
int i, n = 0; unsigned int cpu = 0;
int fpu_exception; int i;
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
n = c->cpu_index; cpu = c->cpu_index;
#endif #endif
seq_printf(m, "processor\t: %d\n" seq_printf(m, "processor\t: %u\n"
"vendor_id\t: %s\n" "vendor_id\t: %s\n"
"cpu family\t: %d\n" "cpu family\t: %d\n"
"model\t\t: %d\n" "model\t\t: %u\n"
"model name\t: %s\n", "model name\t: %s\n",
n, cpu,
c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown", c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",
c->x86, c->x86,
c->x86_model, c->x86_model,
c->x86_model_id[0] ? c->x86_model_id : "unknown"); c->x86_model_id[0] ? c->x86_model_id : "unknown");
if (c->x86_mask || c->cpuid_level >= 0) if (c->x86_mask || c->cpuid_level >= 0)
seq_printf(m, "stepping\t: %d\n", c->x86_mask); seq_printf(m, "stepping\t: %d\n", c->x86_mask);
else else
seq_printf(m, "stepping\t: unknown\n"); seq_printf(m, "stepping\t: unknown\n");
if ( cpu_has(c, X86_FEATURE_TSC) ) { if (cpu_has(c, X86_FEATURE_TSC)) {
unsigned int freq = cpufreq_quick_get(n); unsigned int freq = cpufreq_quick_get(cpu);
if (!freq) if (!freq)
freq = cpu_khz; freq = cpu_khz;
seq_printf(m, "cpu MHz\t\t: %u.%03u\n", seq_printf(m, "cpu MHz\t\t: %u.%03u\n",
freq / 1000, (freq % 1000)); freq / 1000, (freq % 1000));
} }
/* Cache size */ /* Cache size */
if (c->x86_cache_size >= 0) if (c->x86_cache_size >= 0)
seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size); seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
#ifdef CONFIG_X86_HT
if (c->x86_max_cores * smp_num_siblings > 1) { show_cpuinfo_core(m, c, cpu);
seq_printf(m, "physical id\t: %d\n", c->phys_proc_id); show_cpuinfo_misc(m, c);
seq_printf(m, "siblings\t: %d\n",
cpus_weight(per_cpu(cpu_core_map, n))); seq_printf(m, "flags\t\t:");
seq_printf(m, "core id\t\t: %d\n", c->cpu_core_id); for (i = 0; i < 32*NCAPINTS; i++)
seq_printf(m, "cpu cores\t: %d\n", c->booted_cores); if (cpu_has(c, i) && x86_cap_flags[i] != NULL)
}
#endif
/* We use exception 16 if we have hardware math and we've either seen it or the CPU claims it is internal */
fpu_exception = c->hard_math && (ignore_fpu_irq || cpu_has_fpu);
seq_printf(m, "fdiv_bug\t: %s\n"
"hlt_bug\t\t: %s\n"
"f00f_bug\t: %s\n"
"coma_bug\t: %s\n"
"fpu\t\t: %s\n"
"fpu_exception\t: %s\n"
"cpuid level\t: %d\n"
"wp\t\t: %s\n"
"flags\t\t:",
c->fdiv_bug ? "yes" : "no",
c->hlt_works_ok ? "no" : "yes",
c->f00f_bug ? "yes" : "no",
c->coma_bug ? "yes" : "no",
c->hard_math ? "yes" : "no",
fpu_exception ? "yes" : "no",
c->cpuid_level,
c->wp_works_ok ? "yes" : "no");
for ( i = 0 ; i < 32*NCAPINTS ; i++ )
if ( test_bit(i, c->x86_capability) &&
x86_cap_flags[i] != NULL )
seq_printf(m, " %s", x86_cap_flags[i]); seq_printf(m, " %s", x86_cap_flags[i]);
for (i = 0; i < 32; i++) for (i = 0; i < 32; i++)
...@@ -91,8 +106,8 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -91,8 +106,8 @@ static int show_cpuinfo(struct seq_file *m, void *v)
} }
seq_printf(m, "\nbogomips\t: %lu.%02lu\n", seq_printf(m, "\nbogomips\t: %lu.%02lu\n",
c->loops_per_jiffy/(500000/HZ), c->loops_per_jiffy/(500000/HZ),
(c->loops_per_jiffy/(5000/HZ)) % 100); (c->loops_per_jiffy/(5000/HZ)) % 100);
seq_printf(m, "clflush size\t: %u\n\n", c->x86_clflush_size); seq_printf(m, "clflush size\t: %u\n\n", c->x86_clflush_size);
return 0; return 0;
...@@ -106,14 +121,17 @@ static void *c_start(struct seq_file *m, loff_t *pos) ...@@ -106,14 +121,17 @@ static void *c_start(struct seq_file *m, loff_t *pos)
return &cpu_data(*pos); return &cpu_data(*pos);
return NULL; return NULL;
} }
static void *c_next(struct seq_file *m, void *v, loff_t *pos) static void *c_next(struct seq_file *m, void *v, loff_t *pos)
{ {
*pos = next_cpu(*pos, cpu_online_map); *pos = next_cpu(*pos, cpu_online_map);
return c_start(m, pos); return c_start(m, pos);
} }
static void c_stop(struct seq_file *m, void *v) static void c_stop(struct seq_file *m, void *v)
{ {
} }
const struct seq_operations cpuinfo_op = { const struct seq_operations cpuinfo_op = {
.start = c_start, .start = c_start,
.next = c_next, .next = c_next,
......
...@@ -8,25 +8,48 @@ ...@@ -8,25 +8,48 @@
/* /*
* Get CPU information for use by the procfs. * Get CPU information for use by the procfs.
*/ */
static void show_cpuinfo_core(struct seq_file *m, struct cpuinfo_x86 *c,
unsigned int cpu)
{
#ifdef CONFIG_SMP
if (c->x86_max_cores * smp_num_siblings > 1) {
seq_printf(m, "physical id\t: %d\n", c->phys_proc_id);
seq_printf(m, "siblings\t: %d\n",
cpus_weight(per_cpu(cpu_core_map, cpu)));
seq_printf(m, "core id\t\t: %d\n", c->cpu_core_id);
seq_printf(m, "cpu cores\t: %d\n", c->booted_cores);
}
#endif
}
static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c)
{
seq_printf(m,
"fpu\t\t: yes\n"
"fpu_exception\t: yes\n"
"cpuid level\t: %d\n"
"wp\t\t: yes\n",
c->cpuid_level);
}
static int show_cpuinfo(struct seq_file *m, void *v) static int show_cpuinfo(struct seq_file *m, void *v)
{ {
struct cpuinfo_x86 *c = v; struct cpuinfo_x86 *c = v;
int cpu = 0, i; unsigned int cpu = 0;
int i;
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
cpu = c->cpu_index; cpu = c->cpu_index;
#endif #endif
seq_printf(m, "processor\t: %u\n" seq_printf(m, "processor\t: %u\n"
"vendor_id\t: %s\n" "vendor_id\t: %s\n"
"cpu family\t: %d\n" "cpu family\t: %d\n"
"model\t\t: %d\n" "model\t\t: %u\n"
"model name\t: %s\n", "model name\t: %s\n",
(unsigned)cpu, cpu,
c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown", c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",
c->x86, c->x86,
(int)c->x86_model, c->x86_model,
c->x86_model_id[0] ? c->x86_model_id : "unknown"); c->x86_model_id[0] ? c->x86_model_id : "unknown");
if (c->x86_mask || c->cpuid_level >= 0) if (c->x86_mask || c->cpuid_level >= 0)
...@@ -35,7 +58,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -35,7 +58,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
seq_printf(m, "stepping\t: unknown\n"); seq_printf(m, "stepping\t: unknown\n");
if (cpu_has(c, X86_FEATURE_TSC)) { if (cpu_has(c, X86_FEATURE_TSC)) {
unsigned int freq = cpufreq_quick_get((unsigned)cpu); unsigned int freq = cpufreq_quick_get(cpu);
if (!freq) if (!freq)
freq = cpu_khz; freq = cpu_khz;
...@@ -47,24 +70,10 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -47,24 +70,10 @@ static int show_cpuinfo(struct seq_file *m, void *v)
if (c->x86_cache_size >= 0) if (c->x86_cache_size >= 0)
seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size); seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
#ifdef CONFIG_SMP show_cpuinfo_core(m, c, cpu);
if (smp_num_siblings * c->x86_max_cores > 1) { show_cpuinfo_misc(m, c);
seq_printf(m, "physical id\t: %d\n", c->phys_proc_id);
seq_printf(m, "siblings\t: %d\n",
cpus_weight(per_cpu(cpu_core_map, cpu)));
seq_printf(m, "core id\t\t: %d\n", c->cpu_core_id);
seq_printf(m, "cpu cores\t: %d\n", c->booted_cores);
}
#endif
seq_printf(m,
"fpu\t\t: yes\n"
"fpu_exception\t: yes\n"
"cpuid level\t: %d\n"
"wp\t\t: yes\n"
"flags\t\t:",
c->cpuid_level);
seq_printf(m, "flags\t\t:");
for (i = 0; i < 32*NCAPINTS; i++) for (i = 0; i < 32*NCAPINTS; i++)
if (cpu_has(c, i) && x86_cap_flags[i] != NULL) if (cpu_has(c, i) && x86_cap_flags[i] != NULL)
seq_printf(m, " %s", x86_cap_flags[i]); seq_printf(m, " %s", x86_cap_flags[i]);
...@@ -119,8 +128,8 @@ static void c_stop(struct seq_file *m, void *v) ...@@ -119,8 +128,8 @@ static void c_stop(struct seq_file *m, void *v)
} }
const struct seq_operations cpuinfo_op = { const struct seq_operations cpuinfo_op = {
.start = c_start, .start = c_start,
.next = c_next, .next = c_next,
.stop = c_stop, .stop = c_stop,
.show = show_cpuinfo, .show = show_cpuinfo,
}; };
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册