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@xxxxxxxxxxxxxxxxxx> 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@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility