lkml.org 
[lkml]   [1999]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectStandardized /proc/cpuinfo patch
Tired of the talk, I made a patch ;)

This adds to the beginning of /proc/cpuinfo the following fields

number_of_cpus
cpu_arch
cpu_type
cpu_vendor
cpu_MHz
cpu_bogomips

Because the above tokens are all new, old parsing routines should not
break.

After the above will follow a new-line, then the original /proc/cpuinfo.

I have tested this on intel; I tried to make the changes for non-intel.
All the others were straightforward except ppc, which is a mess.

The patch is against 2.3.16. It is attached, and also is available from

http://www.glue.umd.edu/~weave/patches/patch_arch_independent_cpuinfo-2.3.16

I will appreciate any questions/comments/flames ;)

Here is the /proc/cpuinfo of my computer now.

number_of_cpus : 1
cpu_arch : ix86
cpu_type : AMD-K6(tm) 3D processor
cpu_vendor : AuthenticAMD
cpu_MHz : 337.507930
cpu_bogomips : 673.38

processor : 0
vendor_id : AuthenticAMD
cpu family : 5
model : 8
model name : AMD-K6(tm) 3D processor
stepping : 12
cpu MHz : 337.507930
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr mce cx8 sep mtrr pge mmx 3dnow
bogomips : 673.38




____________
\ /\ /\ / Vince Weaver
\/__\/__\/ weave@eng.umd.edu http://www.glue.umd.edu/~weave
diff -r -u ./linux/arch/alpha/kernel/setup.c /usr/src/linux/arch/alpha/kernel/setup.c
--- ./linux/arch/alpha/kernel/setup.c Tue Aug 31 13:50:44 1999
+++ /usr/src/linux/arch/alpha/kernel/setup.c Wed Sep 1 14:23:01 1999
@@ -754,6 +754,12 @@
&systype_name, &sysvariation_name);

len = sprintf(buffer,
+ "number_of_cpus\t: %d\n"
+ "cpu_arch\t: alpha\n"
+ "cpu_type\t: %s\n"
+ "cpu_vendor\t: %s\n"
+ "cpu_MHz\t: %lu.%06lu\n"
+ "cpu_bogomips\t: %lu.%02lu\n\n"
"cpu\t\t\t: Alpha\n"
"cpu model\t\t: %s\n"
"cpu variation\t\t: %ld\n"
@@ -772,6 +778,12 @@
"kernel unaligned acc\t: %ld (pc=%lx,va=%lx)\n"
"user unaligned acc\t: %ld (pc=%lx,va=%lx)\n"
"platform string\t\t: %s\n",
+ NR_CPUS,
+ cpu_name,
+ systype_name,
+ (hwrpb->cycle_freq/1000000),
+ (hwrpb->cycle_freq%1000000),
+ loops_per_sec / 500000, (loops_per_sec / 5000) % 100,
cpu_name, cpu->variation, cpu->revision,
(char*)cpu->serial_no,
systype_name, sysvariation_name, hwrpb->sys_revision,
diff -r -u ./linux/arch/arm/kernel/setup.c /usr/src/linux/arch/arm/kernel/setup.c
--- ./linux/arch/arm/kernel/setup.c Mon Aug 30 21:15:15 1999
+++ /usr/src/linux/arch/arm/kernel/setup.c Wed Sep 1 14:26:05 1999
@@ -426,9 +426,19 @@
int len;

len = sprintf(buffer,
+ "number_of_cpus\t: 1\n"
+ "cpu_arch\t: arm\n"
+ "cpu_type\t: %s\n"
+ "cpu_vendor\t: %s\n"
+ "cpu_MHz\t: unknown\n"
+ "cpu_bogomips\t: %lu.%02lu\n\n"
"Processor\t: %s %s rev %d (%s)\n"
"BogoMips\t: %lu.%02lu\n"
"Hardware\t: %s\n",
+ proc_info.cpu_name,
+ proc_info.manufacturer,
+ (loops_per_sec+2500) / 500000,
+ ((loops_per_sec+2500) / 5000) % 100,
proc_info.manufacturer,
proc_info.cpu_name,
(int)processor_id & 15,
diff -r -u ./linux/arch/i386/kernel/setup.c /usr/src/linux/arch/i386/kernel/setup.c
--- ./linux/arch/i386/kernel/setup.c Mon Aug 30 13:54:05 1999
+++ /usr/src/linux/arch/i386/kernel/setup.c Wed Sep 1 13:52:35 1999
@@ -25,6 +25,9 @@
*
* Memory region support
* David Parsons <orc@pell.chi.il.us>, July-August 1999
+ *
+ * Architecture independent cpuinfo stuff
+ * Vince Weaver <weave@eng.umd.edu>, September 1999
*/

/*
@@ -1215,7 +1218,27 @@
};
struct cpuinfo_x86 *c = cpu_data;
int i, n;
-
+
+ /* begin architecture independent cpuinfo */
+ p += sprintf(p,"number_of_cpus\t: %d\n"
+ "cpu_arch\t: ix86\n"
+ "cpu_type\t: %s\n"
+ "cpu_vendor\t: %s\n",
+ NR_CPUS,
+ c->x86_model_id[0] ? c->x86_model_id : "unknown",
+ c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown");
+
+ if (c->x86_capability & X86_FEATURE_TSC) {
+ p += sprintf(p, "cpu_MHz\t\t: %lu.%06lu\n",
+ cpu_hz / 1000000, (cpu_hz % 1000000));
+ }
+ else p+=sprintf(p, "cpu_MHz\t: unknown\n");
+
+ p += sprintf(p, "cpu_bogomips\t: %lu.%02lu\n\n",
+ (c->loops_per_sec+2500)/500000,
+ ((c->loops_per_sec+2500)/5000) % 100);
+ /* end architecture independent cpuinfo */
+
for(n=0; n<NR_CPUS; n++, c++) {
#ifdef __SMP__
if (!(cpu_online_map & (1<<n)))
diff -r -u ./linux/arch/m68k/kernel/setup.c /usr/src/linux/arch/m68k/kernel/setup.c
--- ./linux/arch/m68k/kernel/setup.c Thu Aug 26 15:42:31 1999
+++ /usr/src/linux/arch/m68k/kernel/setup.c Wed Sep 1 14:30:41 1999
@@ -384,12 +384,22 @@

clockfreq = loops_per_sec*clockfactor;

- return(sprintf(buffer, "CPU:\t\t%s\n"
+ return(sprintf(buffer,
+ "number_of_cpus\t: 1\n"
+ "cpu_arch\t: m68k\n"
+ "cpu_type\t: %s\n"
+ "cpu_vendor\t: %s\n"
+ "cpu_MHz\t: %lu.%1lu\n"
+ "cpu_bogomips\t: %lu.%02lu\n\n"
+ "CPU:\t\t%s\n"
"MMU:\t\t%s\n"
"FPU:\t\t%s\n"
"Clocking:\t%lu.%1luMHz\n"
"BogoMips:\t%lu.%02lu\n"
"Calibration:\t%lu loops\n",
+ cpu, "Motorola",
+ clockfreq/1000000,(clockfreq/100000)%10,
+ loops_per_sec/500000,(loops_per_sec/5000)%100,
cpu, mmu, fpu,
clockfreq/1000000,(clockfreq/100000)%10,
loops_per_sec/500000,(loops_per_sec/5000)%100,
diff -r -u ./linux/arch/mips/kernel/proc.c /usr/src/linux/arch/mips/kernel/proc.c
--- ./linux/arch/mips/kernel/proc.c Tue Oct 20 16:52:54 1998
+++ /usr/src/linux/arch/mips/kernel/proc.c Wed Sep 1 14:36:26 1999
@@ -42,7 +42,23 @@
unsigned int version = read_32bit_cp0_register(CP0_PRID);
int len;

- len = sprintf(buffer, "cpu\t\t\t: MIPS\n");
+ len = sprintf(buffer, "number_of_cpus\t: %d\n"
+ "cpu_arch\t: mips\n"
+ "cpu_type\t: %s\n"
+ "cpu_vendor\t: %s\n"
+ "cpu_MHz\t: %s\n"
+ "cpu_bogomips\t: %lu.%02lu\n",
+ NR_CPUS,
+ cpu_name[mips_cputype <= CPU_LAST ?
+ mips_cputype :
+ CPU_UNKNOWN],
+ "mips",
+ "unknown",
+ "unkown",
+ (loops_per_sec + 2500) / 500000,
+ ((loops_per_sec + 2500) / 5000) % 100);
+
+ len += sprintf(buffer + len, "cpu\t\t\t: MIPS\n");
len += sprintf(buffer + len, "cpu model\t\t: %s V%d.%d\n",
cpu_name[mips_cputype <= CPU_LAST ?
mips_cputype :
diff -r -u ./linux/arch/ppc/kernel/setup.c /usr/src/linux/arch/ppc/kernel/setup.c
--- ./linux/arch/ppc/kernel/setup.c Tue Aug 31 14:36:43 1999
+++ /usr/src/linux/arch/ppc/kernel/setup.c Wed Sep 1 15:01:08 1999
@@ -203,6 +203,7 @@
unsigned long len = 0;
unsigned long bogosum = 0;
unsigned long i;
+ char cpu_name[20];

#ifdef __SMP__
#define CPU_PRESENT(x) (cpu_callin_map[(x)])
@@ -215,6 +216,82 @@
#define CD(x) (x)
#endif

+ /* Yuck, this is just plain ugly -- vmw */
+
+ switch (GET_PVR >> 16)
+ {
+ case 1:
+ sprintf(cpu_name, "601\n");
+ break;
+ case 3:
+ sprintf(cpu_name, "603\n");
+ break;
+ case 4:
+ sprintf(cpu_name, "604\n");
+ break;
+ case 6:
+ sprintf(cpu_name, "603e\n");
+ break;
+ case 7:
+ sprintf(cpu_name, "603ev\n");
+ break;
+ case 8:
+ sprintf(cpu_name, "750\n");
+ break;
+ case 9:
+ sprintf(cpu_name, "604e\n");
+ break;
+ case 10:
+ sprintf(cpu_name, "604ev5 (MachV)\n");
+ break;
+ case 50:
+ sprintf(cpu_name, "821\n");
+ case 80:
+ sprintf(cpu_name, "860\n");
+ break;
+ default:
+ sprintf(cpu_name, "unknown");
+ break;
+ }
+
+ /*
+ * Assume here that all clock rates are the same in a
+ * smp system. -- Cort
+ */
+ if ( have_of )
+ {
+ struct device_node *cpu_node;
+ int *fp;
+
+ cpu_node = find_type_devices("cpu");
+ if ( !cpu_node ) break;
+ {
+ int s;
+ for ( s = 0; (s < i) && cpu_node->next ;
+ s++, cpu_node = cpu_node->next )
+ /* nothing */ ;
+ if ( s != i )
+ printk("get_cpuinfo(): ran out of "
+ "cpu nodes.\n");
+ }
+ fp = (int *) get_property(cpu_node, "clock-frequency", NULL);
+ }
+
+ len += sprintf(len+buffer,
+ "number_of_cpus\t: %d\n"
+ "cpu_arch\t: ppc\n"
+ "cpu_type\t: %s\n"
+ "cpu_vendor\t: %s\n"
+ "cpu_MHz\t: %s\n"
+ "cpu_bogomips\t: %lu.%02lu\n\n",
+ smp_num_cpus,
+ cpu_name,
+ "unknown",
+ *fp / 1000000,
+ (CD(loops_per_sec)+2500)/500000,
+ (CD(loops_per_sec)+2500)/5000 % 100);
+
+
for ( i = 0; i < smp_num_cpus ; i++ )
{
if ( !CPU_PRESENT(i) )
diff -r -u ./linux/arch/sh/kernel/setup.c /usr/src/linux/arch/sh/kernel/setup.c
--- ./linux/arch/sh/kernel/setup.c Mon Aug 30 21:12:59 1999
+++ /usr/src/linux/arch/sh/kernel/setup.c Wed Sep 1 14:41:43 1999
@@ -172,6 +172,23 @@
int get_cpuinfo(char *buffer)
{
char *p = buffer;
+
+ p += sprintf(p,"number_of_cpus\t: 1\n"
+ "cpu_arch\t: sh\n"
+ "cpu_type\t: %s\n"
+ "cpu_vendor\t: %s\n"
+ "cpu_MHz\t: %s\n"
+ "cpu_bogomips\t: %lu.%02lu\n\n",
+#ifdef CONFIG_CPU_SH3
+ "SH3",
+#elif CONFIG_CPU_SH4
+ "SH4",
+#endif
+ "unknown",
+ "unknown",
+ (loops_per_sec+2500)/500000,
+ ((loops_per_sec+2500)/5000) % 100);
+

#ifdef CONFIG_CPU_SH3
p += sprintf(p,"cpu family\t: SH3\n"
diff -r -u ./linux/arch/sparc/kernel/setup.c /usr/src/linux/arch/sparc/kernel/setup.c
--- ./linux/arch/sparc/kernel/setup.c Tue Aug 31 14:23:29 1999
+++ /usr/src/linux/arch/sparc/kernel/setup.c Wed Sep 1 14:47:20 1999
@@ -516,7 +516,14 @@
int cpuid=hard_smp_processor_id();
int len;

- len = sprintf(buffer, "cpu\t\t: %s\n"
+ len = sprintf(buffer,
+ "number_of_cpus\t: %d\n"
+ "cpu_arch\t: sparc\n"
+ "cpu_type\t: %s\n"
+ "cpu_vendor\t: %s\n"
+ "cpu_MHz\t: %s\n"
+ "cpu_bogomips\t: %lu.%02lu\n\n"
+ "cpu\t\t: %s\n"
"fpu\t\t: %s\n"
"promlib\t\t: Version %d Revision %d\n"
"prom\t\t: %d.%d\n"
@@ -527,6 +534,11 @@
"BogoMips\t: %lu.%02lu\n"
#endif
,
+ smp_num_cpus,
+ sparc_cpu_type[cpuid] ? : "undetermined",
+ "unknown",
+ "unknown",
+ loops_per_sec/500000, (loops_per_sec/5000) % 100,
sparc_cpu_type[cpuid] ? : "undetermined",
sparc_fpu_type[cpuid] ? : "undetermined",
romvec->pv_romvers, prom_rev, romvec->pv_printrev >> 16, (short)romvec->pv_printrev,
diff -r -u ./linux/arch/sparc64/kernel/setup.c /usr/src/linux/arch/sparc64/kernel/setup.c
--- ./linux/arch/sparc64/kernel/setup.c Tue Aug 31 14:23:30 1999
+++ /usr/src/linux/arch/sparc64/kernel/setup.c Wed Sep 1 14:51:33 1999
@@ -616,7 +616,13 @@
int cpuid=smp_processor_id();
int len;

- len = sprintf(buffer,
+ len = sprintf(buffer,
+ "number_of_cpus\t: %d\n"
+ "cpu_arch\t: sparc64\n"
+ "cpu_type\t: %s\n"
+ "cpu_vendor\t: %s\n"
+ "cpu_MHz\t: %s\n"
+ "cpu_bogomips\t: %lu.%02lu\n\n"
"cpu\t\t: %s\n"
"fpu\t\t: %s\n"
"promlib\t\t: Version 3 Revision %d\n"
@@ -628,6 +634,11 @@
"BogoMips\t: %lu.%02lu\n"
#endif
,
+ smp_num_cpus,
+ sparc_cpu_type[cpuid],
+ "unknown",
+ "unknown",
+ loops_per_sec/500000, (loops_per_sec/5000) % 100,
sparc_cpu_type[cpuid],
sparc_fpu_type[cpuid],
prom_rev, prom_prev >> 16, (prom_prev >> 8) & 0xff, prom_prev & 0xff,
\
 
 \ /
  Last update: 2005-03-22 13:53    [W:0.090 / U:1.236 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site