----- "Pavan Naregundi" <pavan(a)linux.vnet.ibm.com> wrote:
 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...
 
 
 This patch overcomes the use of 'have_of' variable.. Please review this
 patch..
 
 Regards,
 Pavan
 IBM Linux Technology Center 
This patch doesn't seem like it would be backwards-compatible for older
systems which do *not* have the "have_of" symbol.  Can you confirm
that this patch will still work for them?
Thanks,
  Dave
 
 
 ---
 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),