[Crash-utility] [PATCH] Display online cpus value in preference to kt->cpus

Luciano Chavez lnx1138 at linux.vnet.ibm.com
Mon Mar 8 21:23:03 UTC 2010


On Mon, 2010-03-08 at 20:30 +0000, Luciano Chavez wrote:
> On Mon, 2010-03-08 at 14:52 -0500, Dave Anderson wrote:
> > 
> > For now, all I was thinking would be to simply change display_sys_stats()
> > to something like:
> > 
> >         if (machine_type("PPC64"))
> >                 your_function();       
> >         else
> >                 fprintf(fp, "        CPUS: %d\n", kt->cpus);
> > 
> > and since your_function() does not need to be in a machine-specific
> > file, just put in kernel.c.  And you can also call it from the
> > ppc64_display_machine_stats() function.
> 
> Hi Dave,
> 
> I like this particular solution best! Simple and straightforward. I'll
> work on a patch that does exactly as suggested. I'll post it for review
> once I have it done this afternoon. Thanks for the help!

Below is the simpler revised patch. It applies and compiles to the
latest crash 5.0.1 source cleanly. 

I still need to verify it still fixes the original problem. I am
confident it will but just wanted to post the patch up first.

BTW, I was able to briefly access a POWER7 box this morning and
confirmed that at least the CPU count displayed would be worse on one of
those systems if indeed SMT was disabled and when using the current code
minus the patch.

~ # cat /sys/devices/system/cpu/online
0-23
~ # ppc64_cpu --smt=off
~ # cat /sys/devices/system/cpu/online
0,4,8,12,16,20

The current 5.0.1 code would display CPUS: 21 rather than CPUS: 6

Once I confirm the patch fixes this problem, I will post a followup.

-- 
Luciano Chavez <lnx1138 at linux.vnet.ibm.com>
IBM Linux Technology Center

diff -up crash-5.0.1/defs.h.old crash-5.0.1/defs.h
--- crash-5.0.1/defs.h.old	2010-03-08 14:23:57.000000000 -0600
+++ crash-5.0.1/defs.h	2010-03-08 14:34:29.000000000 -0600
@@ -3717,6 +3717,7 @@ int get_cpus_online(void);
 int get_cpus_present(void);
 int get_cpus_possible(void);
 int get_highest_cpu_online(void);
+int get_cpus_to_display(void);
 int in_cpu_map(int, int);
 void paravirt_init(void);
 void print_stack_text_syms(struct bt_info *, ulong, ulong);
diff -up crash-5.0.1/kernel.c.old crash-5.0.1/kernel.c
--- crash-5.0.1/kernel.c.old	2010-03-08 14:23:45.000000000 -0600
+++ crash-5.0.1/kernel.c	2010-03-08 15:09:05.000000000 -0600
@@ -3871,7 +3871,8 @@ display_sys_stats(void)
 	}
 	
 
-        fprintf(fp, "        CPUS: %d\n", kt->cpus);
+	fprintf(fp, "        CPUS: %d\n", 
+		machine_type("PPC64") ? get_cpus_to_display() : kt->cpus);
 	if (ACTIVE())
         	get_symbol_data("xtime", sizeof(struct timespec), &kt->date);
         fprintf(fp, "        DATE: %s\n", 
@@ -6256,6 +6257,18 @@ get_cpus_possible()
 	return possible;
 }
 
+
+/*
+ *  For when displaying cpus, return the number of cpus online if possible, otherwise kt->cpus.
+ */
+int
+get_cpus_to_display(void)
+{
+	int online = get_cpus_online();
+
+	return (online ? online : kt->cpus);
+}
+
 /*
  *  Xen machine-address to pseudo-physical-page translator.
  */ 
diff -up crash-5.0.1/ppc64.c.old crash-5.0.1/ppc64.c
--- crash-5.0.1/ppc64.c.old	2010-03-08 14:24:07.000000000 -0600
+++ crash-5.0.1/ppc64.c	2010-03-08 14:38:10.000000000 -0600
@@ -2215,7 +2215,7 @@ ppc64_display_machine_stats(void)
 
         fprintf(fp, "       MACHINE TYPE: %s\n", uts->machine);
         fprintf(fp, "        MEMORY SIZE: %s\n", get_memory_size(buf));
-        fprintf(fp, "               CPUS: %d\n", kt->cpus);
+        fprintf(fp, "               CPUS: %d\n", get_cpus_to_display());
         fprintf(fp, "    PROCESSOR SPEED: ");
         if ((mhz = machdep->processor_speed()))
                 fprintf(fp, "%ld Mhz\n", mhz);





More information about the Crash-utility mailing list