[Crash-utility] [PATCH] Fix display processor speed on ppc/ppc64

Pavan Naregundi pavan at linux.vnet.ibm.com
Wed Mar 24 05:07:50 UTC 2010


Hi Everyone,

On Power6 crash displays "MACHINE: ppc64 (unknown Mhz)" for processor
speed upon initialization and by the "sys" sub-command.

# crash

crash 5.0.1
Copyright (C) 2002-2010  Red Hat, Inc.
Copyright (C) 2004, 2005, 2006  IBM Corporation
Copyright (C) 1999-2006  Hewlett-Packard Co
Copyright (C) 2005, 2006  Fujitsu Limited
Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
Copyright (C) 2005  NEC Corporation
Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
This program is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions.  Enter "help copying" to see the conditions.
This program has absolutely no warranty.  Enter "help warranty" for details.

GNU gdb (GDB) 7.0
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "powerpc64-unknown-linux-gnu"...

      KERNEL: /boot/vmlinux-2.6.32.9-0.5-ppc64
    DUMPFILE: /dev/mem
        CPUS: 5
        DATE: Thu Mar 18 03:13:59 2010
      UPTIME: 04:11:31
LOAD AVERAGE: 0.34, 0.15, 0.05
       TASKS: 319
    NODENAME: brucelp3
     RELEASE: 2.6.32.9-0.5-ppc64
     VERSION: #1 SMP 2010-03-15 12:22:00 +0100
     MACHINE: ppc64  (unknown Mhz) ======> display unknown Mhz
      MEMORY: 1 GB
         PID: 17788
     COMMAND: "crash"
        TASK: c00000003ae58b80  [THREAD_INFO: c00000003df68000]
         CPU: 6
       STATE: TASK_RUNNING (ACTIVE)
=====================

When investigated this issue was absence of 'have_of' symbol in current
kernels. Below is the commit which removed the support of 'have_of'.

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6b82b3e4b54b2fce2ca11976c535012b836b2016


This patch overcomes the use of 'have_of' variable.. Please review this
patch..

Regards,
Pavan
IBM Linux Technology Center

---
diff -Naur a/ppc64.c b/ppc64.c
--- a/ppc64.c	2010-03-24 10:14:33.000000000 +0530
+++ b/ppc64.c	2010-03-24 10:14:51.000000000 +0530
@@ -742,7 +742,7 @@
 ppc64_processor_speed(void)
 {
         ulong res, value, ppc_md, md_setup_res;
-        ulong we_have_of, prep_setup_res;
+        ulong prep_setup_res;
         ulong node, type, name, properties;
 	char str_buf[32];
 	uint len;
@@ -751,22 +751,12 @@
         if (machdep->mhz)
                 return(machdep->mhz);
 
-        /* first, check if the have_of variable a) exists, and b) is
TRUE */
-        if(symbol_exists("have_of")) {
-                get_symbol_data("have_of", sizeof(void *),
&we_have_of);
-        } else {
-                we_have_of = 0;
-        }
-
-        if(we_have_of) {
+        if(symbol_exists("allnodes")) {
                 /* we have a machine with open firmware, so search the
OF nodes
                  * for cpu nodes.
                  * Too bad we can't call kernel helper functions
here :)
                  */
 
-                if(!symbol_exists("allnodes"))
-                        return (machdep->mhz = 0);
-
                 get_symbol_data("allnodes", sizeof(void *), &node);
                 while(node) {
                         readmem(node+OFFSET(device_node_type),
diff -Naur a/ppc.c b/ppc.c
--- a/ppc.c	2010-03-24 10:14:33.000000000 +0530
+++ b/ppc.c	2010-03-24 10:14:51.000000000 +0530
@@ -461,7 +461,7 @@
 ppc_processor_speed(void)
 {
 	ulong res, value, ppc_md, md_setup_res;
-	ulong we_have_of, prep_setup_res;
+	ulong prep_setup_res;
 	ulong node, type, name, properties;
 	char str_buf[16];
 	ulong len, mhz = 0;
@@ -469,22 +469,12 @@
 	if (machdep->mhz)
 		return(machdep->mhz);
 
-	/* first, check if the have_of variable a) exists, and b) is TRUE */
-	if(symbol_exists("have_of")) {
-		get_symbol_data("have_of", sizeof(void *), &we_have_of);
-	} else {
-		we_have_of = 0;
-	}
-
-	if(we_have_of) {
+	if(symbol_exists("allnodes")) {
 		/* we have a machine with open firmware, so search the OF nodes 
 		 * for cpu nodes.
 		 * Too bad we can't call kernel helper functions here :)
 		 */
 		
-		if(!symbol_exists("allnodes"))
-			return (machdep->mhz = 0);
-		
 		get_symbol_data("allnodes", sizeof(void *), &node);
 		while(node) {
 			readmem(node+OFFSET(device_node_type),





More information about the Crash-utility mailing list