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(a)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);
--
Crash-utility mailing list
Crash-utility(a)redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility