[Crash-utility] Not working on 2.6.34-rc2-mm1

Dave Anderson anderson at redhat.com
Sun Apr 4 01:06:29 UTC 2010


----- "Zhang Le" <r0bertz at gentoo.org> wrote:

> I got this on 2.6.34-rc2-mm1:
> 
> crash: invalid structure member offset: pglist_data_bdata
>        FILE: memory.c  LINE: 12097  FUNCTION: dump_memory_nodes()
> 
> [/usr/bin/crash] error trace: => 81356bc
>       
>   81356bc: OFFSET_verify+140
> 
> any pointers on how to fix this?
> 
> Zhang, Le

Actually that particular issue was addressed in crash version 5.0.2
that was just released this week: 

         - Fix for initialization-time failure on 2.6.34 and later kernels that
           were configured with CONFIG_NO_BOOTMEM.  Without the patch, the crash
           session fails with the error message "crash: invalid structure member
           offset: pglist_data_bdata".
           (anderson at redhat.com)

However, if 2.6.34-rc2-mm1 has this patch (and I presume that is since it's
in 2.6.34-rc3), then you're temporarily out of luck:

---------------------------------------------------------------------------

commit dd17c8f72993f9461e9c19250e3f155d6d99df22
Author: Rusty Russell <rusty at rustcorp.com.au>
Date:   Thu Oct 29 22:34:15 2009 +0900

    percpu: remove per_cpu__ prefix.

    Now that the return from alloc_percpu is compatible with the address
    of per-cpu vars, it makes sense to hand around the address of per-cpu
    variables.  To make this sane, we remove the per_cpu__ prefix we used
    created to stop people accidentally using these vars directly.

    Now we have sparse, we can use that (next patch).

    tj: * Updated to convert stuff which were missed by or added after the
          original patch.

        * Kill per_cpu_var() macro.

    Signed-off-by: Rusty Russell <rusty at rustcorp.com.au>
    Signed-off-by: Tejun Heo <tj at kernel.org>
    Reviewed-by: Christoph Lameter <cl at linux-foundation.org>

diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h
index 5a5d6ce..ee99f6c 100644
--- a/include/linux/percpu-defs.h
+++ b/include/linux/percpu-defs.h
@@ -2,12 +2,6 @@
 #define _LINUX_PERCPU_DEFS_H

 /*
- * Determine the real variable name from the name visible in the
- * kernel sources.
- */
-#define per_cpu_var(var) per_cpu__##var
-
-/*
  * Base implementations of per-CPU variable declarations and definitions, where
  * the section in which the variable is to be placed is provided by the
  * 'sec' argument.  This may be used to affect the parameters governing the
@@ -56,24 +50,24 @@
  */
 #define DECLARE_PER_CPU_SECTION(type, name, sec)                       \
        extern __PCPU_DUMMY_ATTRS char __pcpu_scope_##name;             \
-       extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name
+       extern __PCPU_ATTRS(sec) __typeof__(type) name

 #define DEFINE_PER_CPU_SECTION(type, name, sec)                                \
        __PCPU_DUMMY_ATTRS char __pcpu_scope_##name;                    \
        extern __PCPU_DUMMY_ATTRS char __pcpu_unique_##name;            \
        __PCPU_DUMMY_ATTRS char __pcpu_unique_##name;                   \
        __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES __weak                 \
-       __typeof__(type) per_cpu__##name
+       __typeof__(type) name
 #else
 /*
  * Normal declaration and definition macros.
  */
 #define DECLARE_PER_CPU_SECTION(type, name, sec)                       \
-       extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name
+       extern __PCPU_ATTRS(sec) __typeof__(type) name

 #define DEFINE_PER_CPU_SECTION(type, name, sec)                                \
        __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES                        \
-       __typeof__(type) per_cpu__##name
+       __typeof__(type) name
 #endif

 /*
@@ -137,8 +131,8 @@
 /*
  * Intermodule exports for per-CPU variables.
  */
-#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
-#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
+#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(var)
+#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(var)


 #endif /* _LINUX_PERCPU_DEFS_H */

----------------------------------------------------------------------

That patch changes all "per_cpu__xxx" symbols to no longer have
the "per_cpu__" prefix -- which breaks quite a few things in the
crash utility, and it will not initialize.

I'm working on a fix for it, and will release a new version of
crash, hopefully this coming week.

Dave




More information about the Crash-utility mailing list