Messages in this thread Patch in this message | | | Date | Wed, 1 Sep 1999 15:10:48 -0400 (EDT) | From | Vince Weaver <> | Subject | Standardized /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, | |