patches.suse/kerntypes: Fixed #define.
[opensuse:kernel-source.git] / patches.suse / kerntypes
1 Add support for Kerntypes, needed for lcrash from lkcdutils.
2
3 diff -Naur linux-2.6.0-test7.before/include/linux/sched.h linux-2.6.0-test7.after/include/linux/sched.h
4 --- linux-2.6.0-test7.before/include/linux/sched.h      2003-10-09 00:54:01.000000000 +0530
5 +++ linux-2.6.0-test7.after/include/linux/sched.h       2003-10-09 12:00:10.000000000 +0530
6 @@ -91,6 +91,7 @@
7  extern int nr_threads;
8  extern int last_pid;
9  DECLARE_PER_CPU(unsigned long, process_counts);
10 +DECLARE_PER_CPU(struct runqueue, runqueues);
11  extern int nr_processes(void);
12  extern unsigned long nr_running(void);
13  extern unsigned long nr_uninterruptible(void);
14 @@ -546,6 +547,44 @@
15  void yield(void);
16  
17  /*
18 + * These are the runqueue data structures:
19 + */
20 +
21 +#define BITMAP_SIZE ((((MAX_PRIO+1+7)/8)+sizeof(long)-1)/sizeof(long))
22 +
23 +typedef struct runqueue runqueue_t;
24 +
25 +struct prio_array {
26 +       int nr_active;
27 +       unsigned long bitmap[BITMAP_SIZE];
28 +       struct list_head queue[MAX_PRIO];
29 +};
30 +
31 +/*
32 + * This is the main, per-CPU runqueue data structure.
33 + *
34 + * Locking rule: those places that want to lock multiple runqueues
35 + * (such as the load balancing or the thread migration code), lock
36 + * acquire operations must be ordered by ascending &runqueue.
37 + */
38 +struct runqueue {
39 +       spinlock_t lock;
40 +       unsigned long nr_running, nr_switches, expired_timestamp,
41 +                       nr_uninterruptible;
42 +       task_t *curr, *idle;
43 +       struct mm_struct *prev_mm;
44 +       prio_array_t *active, *expired, arrays[2];
45 +       int prev_cpu_load[NR_CPUS];
46 +#ifdef CONFIG_NUMA
47 +       atomic_t *node_nr_running;
48 +       int prev_node_load[MAX_NUMNODES];
49 +#endif
50 +       task_t *migration_thread;
51 +       struct list_head migration_queue;
52 +
53 +       atomic_t nr_iowait;
54 +};
55 +/*
56   * The default (Linux) execution domain.
57   */
58  extern struct exec_domain      default_exec_domain;
59 diff -Naur linux-2.6.0-test7.before/init/Makefile linux-2.6.0-test7.after/init/Makefile
60 --- linux-2.6.0-test7.before/init/Makefile      2003-10-09 00:54:04.000000000 +0530
61 +++ linux-2.6.0-test7.after/init/Makefile       2003-10-09 12:00:10.000000000 +0530
62 @@ -9,6 +9,9 @@
63  mounts-$(CONFIG_BLK_DEV_INITRD)        += do_mounts_initrd.o
64  mounts-$(CONFIG_BLK_DEV_MD)    += do_mounts_md.o
65  
66 +extra-$(CONFIG_CRASH_DUMP)     += kerntypes.o
67 +CFLAGS_kerntypes.o             := -gstabs
68 +
69  # files to be removed upon make clean
70  clean-files := ../include/linux/compile.h
71  
72 @@ -24,3 +27,4 @@
73  include/linux/compile.h: FORCE
74         @echo '  CHK     $@'
75         @sh $(srctree)/scripts/mkcompile_h $@ "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CC) $(CFLAGS)"
76 +
77 diff -Naur linux-2.6.0-test7.before/init/main.c linux-2.6.0-test7.after/init/main.c
78 --- linux-2.6.0-test7.before/init/main.c        2003-10-09 00:54:02.000000000 +0530
79 +++ linux-2.6.0-test7.after/init/main.c 2003-10-09 12:00:10.000000000 +0530
80 @@ -97,6 +97,16 @@
81  int system_running = 0;
82  
83  /*
84 + * The kernel_magic value represents the address of _end, which allows
85 + * namelist tools to "match" each other respectively.  That way a tool
86 + * that looks at /dev/mem can verify that it is using the right System.map
87 + * file -- if kernel_magic doesn't equal the namelist value of _end,
88 + * something's wrong.
89 + */
90 +extern unsigned long _end;
91 +unsigned long *kernel_magic = &_end;
92 +
93 +/*
94   * Boot command-line arguments
95   */
96  #define MAX_INIT_ARGS 8
97 diff -Naur linux-2.6.0-test7.before/init/version.c linux-2.6.0-test7.after/init/version.c
98 --- linux-2.6.0-test7.before/init/version.c     2003-10-09 00:54:05.000000000 +0530
99 +++ linux-2.6.0-test7.after/init/version.c      2003-10-09 12:00:10.000000000 +0530
100 @@ -11,6 +11,7 @@
101  #include <linux/uts.h>
102  #include <linux/utsname.h>
103  #include <linux/version.h>
104 +#include <linux/stringify.h>
105  
106  #define version(a) Version_ ## a
107  #define version_string(a) version(a)
108 @@ -31,3 +32,6 @@
109  const char *linux_banner = 
110         "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
111         LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
112 +
113 +const char *LINUX_COMPILE_VERSION_ID = __stringify(LINUX_COMPILE_VERSION_ID);
114 +LINUX_COMPILE_VERSION_ID_TYPE;
115 diff -Naur linux-2.6.0-test7.before/kernel/sched.c linux-2.6.0-test7.after/kernel/sched.c
116 --- linux-2.6.0-test7.before/kernel/sched.c     2003-10-09 00:54:27.000000000 +0530
117 +++ linux-2.6.0-test7.after/kernel/sched.c      2003-10-09 12:00:10.000000000 +0530
118 @@ -175,46 +178,8 @@
119         return BASE_TIMESLICE(p);
120  }
121  
122 -/*
123 - * These are the runqueue data structures:
124 - */
125 -
126 -#define BITMAP_SIZE ((((MAX_PRIO+1+7)/8)+sizeof(long)-1)/sizeof(long))
127 -
128 -typedef struct runqueue runqueue_t;
129 -
130 -struct prio_array {
131 -       int nr_active;
132 -       unsigned long bitmap[BITMAP_SIZE];
133 -       struct list_head queue[MAX_PRIO];
134 -};
135 -
136 -/*
137 - * This is the main, per-CPU runqueue data structure.
138 - *
139 - * Locking rule: those places that want to lock multiple runqueues
140 - * (such as the load balancing or the thread migration code), lock
141 - * acquire operations must be ordered by ascending &runqueue.
142 - */
143 -struct runqueue {
144 -       spinlock_t lock;
145 -       unsigned long nr_running, nr_switches, expired_timestamp,
146 -                       nr_uninterruptible;
147 -       task_t *curr, *idle;
148 -       struct mm_struct *prev_mm;
149 -       prio_array_t *active, *expired, arrays[2];
150 -       int prev_cpu_load[NR_CPUS];
151 -#ifdef CONFIG_NUMA
152 -       atomic_t *node_nr_running;
153 -       int prev_node_load[MAX_NUMNODES];
154 -#endif
155 -       task_t *migration_thread;
156 -       struct list_head migration_queue;
157 -
158 -       atomic_t nr_iowait;
159 -};
160  
161 -static DEFINE_PER_CPU(struct runqueue, runqueues);
162 +DEFINE_PER_CPU(struct runqueue, runqueues);
163  
164  #define cpu_rq(cpu)            (&per_cpu(runqueues, (cpu)))
165  #define this_rq()              (&__get_cpu_var(runqueues))
166 diff -Naur linux-2.6.0-test7.before/scripts/mkcompile_h linux-2.6.0-test7.after/scripts/mkcompile_h
167 --- linux-2.6.0-test7.before/scripts/mkcompile_h        2003-10-09 00:54:53.000000000 +0530
168 +++ linux-2.6.0-test7.after/scripts/mkcompile_h 2003-10-09 12:00:10.000000000 +0530
169 @@ -33,7 +33,7 @@
170  
171  UTS_LEN=64
172  UTS_TRUNCATE="sed -e s/\(.\{1,$UTS_LEN\}\).*/\1/"
173 -
174 +LINUX_COMPILE_VERSION_ID="__linux_compile_version_id__`hostname | tr -c '[0-9A-Za-z\n]' '__'`_`LANG=C date | tr -c '[0-9A-Za-z\n]' '_'`"
175  # Generate a temporary compile.h
176  
177  ( echo /\* This file is auto generated, version $VERSION \*/
178 @@ -55,6 +55,8 @@
179    fi
180  
181    echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | tail -n 1`\"
182 +  echo \#define LINUX_COMPILE_VERSION_ID $LINUX_COMPILE_VERSION_ID
183 +  echo \#define LINUX_COMPILE_VERSION_ID_TYPE typedef char* "$LINUX_COMPILE_VERSION_ID""_t"
184  ) > .tmpcompile
185  
186  # Only replace the real compile.h if the new one is different,
187 diff -Naur linux-2.6.0-test7.before/init/kerntypes.c linux-2.6.0-test7.after/init/kerntypes.c
188 --- linux-2.6.0-test7.before/init/kerntypes.c.orig      1970-01-01 01:00:00.000000000 +0100
189 +++ linux-2.6.0-test7.after/init/kerntypes.c    2003-10-31 11:57:13.000000000 +0100
190 @@ -0,0 +1,31 @@
191 +/*
192 + * kerntypes.c
193 + *
194 + * Copyright (C) 2000 Tom Morano (tjm@sgi.com) and
195 + *                    Matt D. Robinson (yakker@alacritech.com)
196 + *
197 + * Dummy module that includes headers for all kernel types of interest. 
198 + * The kernel type information is used by the lcrash utility when 
199 + * analyzing system crash dumps or the live system. Using the type 
200 + * information for the running system, rather than kernel header files,
201 + * makes for a more flexible and robust analysis tool.
202 + *
203 + * This source code is released under version 2 of the GNU GPL.
204 + */
205 +
206 +#include <linux/compile.h>
207 +#include <linux/module.h>
208 +#include <linux/mm.h>
209 +#include <linux/config.h>
210 +#include <linux/utsname.h>
211 +#include <linux/dump.h>
212 +
213 +#ifdef LINUX_COMPILE_VERSION_ID_TYPE
214 +/* Define version type for version validation of dump and kerntypes */
215 +LINUX_COMPILE_VERSION_ID_TYPE;
216 +#endif
217 +
218 +void
219 +kerntypes_dummy(void)
220 +{
221 +}
222 diff -Naur linux-2.6.0-test7.before/arch/s390/boot/Makefile linux-2.6.0-test7.after/arch/s390/boot/Makefile
223 --- linux-2.6.0-test7.before/arch/s390/boot/Makefile    2003-10-09 00:54:53.000000000 +0530
224 +++ linux-2.6.0-test7.after/arch/s390/boot/Makefile     2003-10-09 12:00:10.000000000 +0530
225 @@ -15,4 +15,4 @@
226  
227  install: $(CONFIGURE) $(obj)/image
228         sh -x $(obj)/install.sh $(KERNELRELEASE) $(obj)/image \
229 -             System.map Kerntypes "$(INSTALL_PATH)"
230 +             System.map init/kerntypes.o "$(INSTALL_PATH)"
231 diff -Naur linux-2.6.0-test7.before/arch/s390/boot/install.sh linux-2.6.0-test7.after/arch/s390/boot/install.sh
232 --- linux-2.6.0-test7.before/arch/s390/boot/install.sh  2003-10-09 00:54:16.000000000 +0530
233 +++ linux-2.6.0-test7.after/arch/s390/boot/install.sh   2003-10-09 12:00:10.000000000 +0530
234 @@ -16,7 +16,8 @@
235  #   $1 - kernel version
236  #   $2 - kernel image file
237  #   $3 - kernel map file
238 -#   $4 - default install path (blank if root directory)
239 +#   $4 - kernel type file
240 +#   $5 - default install path (blank if root directory)
241  #
242  
243  # User may have a custom install script
244 @@ -26,13 +27,22 @@
245  
246  # Default install - same as make zlilo
247  
248 -if [ -f $4/vmlinuz ]; then
249 -       mv $4/vmlinuz $4/vmlinuz.old
250 +if [ -f $5/vmlinuz ]; then
251 +       mv $5/vmlinuz $5/vmlinuz.old
252  fi
253  
254 -if [ -f $4/System.map ]; then
255 -       mv $4/System.map $4/System.old
256 +if [ -f $5/System.map ]; then
257 +       mv $5/System.map $5/System.old
258  fi
259  
260 -cat $2 > $4/vmlinuz
261 -cp $3 $4/System.map
262 +if [ -f $5/Kerntypes ]; then
263 +       mv $5/Kerntypes $5/Kerntypes.old
264 +fi
265 +
266 +cat $2 > $5/vmlinuz
267 +cp $3 $5/System.map
268 +
269 +# copy the kernel type file if it exists
270 +if [ -f $4 ]; then
271 +       cp $4 $5/Kerntypes
272 +fi
273 diff -Naur linux-2.6.0-test7.before/arch/s390/Kconfig linux-2.6.0-test7.after/arch/s390/Kconfig
274 --- linux-2.6.0-test7.before/arch/s390/Kconfig  2003-10-31 12:15:27.000000000 +0100
275 +++ linux-2.6.0-test7.after/arch/s390/Kconfig   2003-10-31 12:17:31.000000000 +0100
276 @@ -312,6 +312,15 @@
277           Say Y here only if you plan to use gdb to debug the kernel.
278           If you don't debug the kernel, you can say N.
279           
280 +config CRASH_DUMP
281 +       bool "Crash dump support"
282 +       depends on DEBUG_KERNEL
283 +       default n
284 +       help
285 +         Say Y here to enable saving an image of system memory when a
286 +         panic or other error occurs. Dumps can also be forced with
287 +         the SysRq+d key if MAGIC_SYSRQ is enabled.
288 +
289  config DEBUG_SPINLOCK_SLEEP
290         bool "Sleep-inside-spinlock checking"
291         help
292 diff -Naur linux-2.6.0-test7.before/include/linux/dump.h linux-2.6.0-test7.after/include/linux/dump.h
293 --- linux-2.6.0-test7.before/include/linux/dump.h       2003-03-14 14:07:09.000000000 +0100
294 +++ linux-2.6.0-test7.after/include/linux/dump.h        2003-10-31 13:02:10.000000000 +0100
295 @@ -0,0 +1,380 @@
296 +/*
297 + * Kernel header file for Linux crash dumps.
298 + *
299 + * Created by: Matt Robinson (yakker@sgi.com)
300 + * Copyright 1999 - 2002 Silicon Graphics, Inc. All rights reserved.
301 + *
302 + * vmdump.h to dump.h by: Matt D. Robinson (yakker@sourceforge.net)
303 + * Copyright 2001 - 2002 Matt D. Robinson.  All rights reserved.
304 + * Copyright (C) 2002 Free Software Foundation, Inc. All rights reserved.
305 + *
306 + * Most of this is the same old stuff from vmdump.h, except now we're
307 + * actually a stand-alone driver plugged into the block layer interface,
308 + * with the exception that we now allow for compression modes externally
309 + * loaded (e.g., someone can come up with their own).
310 + *
311 + * This code is released under version 2 of the GNU GPL.
312 + */
313 +
314 +/* This header file includes all structure definitions for crash dumps. */
315 +#ifndef _DUMP_H
316 +#define _DUMP_H
317 +
318 +#if defined(CONFIG_CRASH_DUMP) || defined (CONFIG_CRASH_DUMP_MODULE)
319 +
320 +#include <linux/list.h>
321 +#include <linux/notifier.h>
322 +
323 +/*
324 + * Structure: __lkcdinfo
325 + * Function:  This structure contains information needed for the lkcdutils
326 + *            package (particularly lcrash) to determine what information is
327 + *            associated to this kernel, specifically.
328 + */
329 +struct __lkcdinfo {
330 +       int     arch;
331 +       int     ptrsz;
332 +       int     byte_order;
333 +       int     linux_release;
334 +       int     page_shift;
335 +       int     page_size;
336 +       u64     page_mask;
337 +       u64     page_offset;
338 +       int     stack_offset;
339 +};
340 +
341 +/*
342 + * We only need to include the rest of the file if one of the
343 + * dump devices are enabled.
344 + */
345 +#if defined(CONFIG_CRASH_BLOCKDEV) || defined(CONFIG_CRASH_BLOCKDEV_MODULE) \
346 +    || defined(CONFIG_CRASH_NETDEV) || defined(CONFIG_CRASH_NETDEV_MODULE) \
347 +    || defined(CONFIG_CRASH_MEMDEV) || defined(CONFIG_CRASH_MEMDEV_MODULE)
348 +
349 +#include <linux/dumpdev.h>
350 +
351 +/* 
352 + * Predefine default DUMP_PAGE constants, asm header may override.
353 + *
354 + * On ia64 discontinuous memory systems it's possible for the memory
355 + * banks to stop at 2**12 page alignments, the smallest possible page
356 + * size. But the system page size, PAGE_SIZE, is in fact larger.
357 + */
358 +#define DUMP_PAGE_SHIFT        PAGE_SHIFT
359 +#define DUMP_PAGE_MASK         PAGE_MASK
360 +#define DUMP_PAGE_ALIGN(addr)  PAGE_ALIGN(addr)
361 +#define DUMP_HEADER_OFFSET     PAGE_SIZE
362 +
363 +#define OLDMINORBITS   8
364 +#define OLDMINORMASK   ((1U << OLDMINORBITS) -1)
365 +
366 +/* keep DUMP_PAGE_SIZE constant to 4K = 1<<12
367 + * it may be different from PAGE_SIZE then.
368 + */
369 +#define DUMP_PAGE_SIZE         4096
370 +
371 +/* 
372 + * Predefined default memcpy() to use when copying memory to the dump buffer.
373 + *
374 + * On ia64 there is a heads up function that can be called to let the prom
375 + * machine check monitor know that the current activity is risky and it should
376 + * ignore the fault (nofault). In this case the ia64 header will redefine this
377 + * macro to __dump_memcpy() and use it's arch specific version.
378 + */
379 +#define DUMP_memcpy            memcpy
380 +
381 +/* necessary header files */
382 +#include <asm/dump.h>                  /* for architecture-specific header */
383 +
384 +/* 
385 + * Size of the buffer that's used to hold:
386 + *
387 + *     1. the dump header (padded to fill the complete buffer)
388 + *     2. the possibly compressed page headers and data
389 + */
390 +#define DUMP_BUFFER_SIZE       (64 * 1024)  /* size of dump buffer         */
391 +#define DUMP_HEADER_SIZE       DUMP_BUFFER_SIZE
392 +
393 +/* standard header definitions */
394 +#define DUMP_MAGIC_NUMBER      0xa8190173618f23edULL  /* dump magic number */
395 +#define DUMP_MAGIC_LIVE                0xa8190173618f23cdULL  /* live magic number */
396 +#define DUMP_VERSION_NUMBER    0x8     /* dump version number              */
397 +#define DUMP_PANIC_LEN         0x100   /* dump panic string length         */
398 +
399 +/* dump levels - type specific stuff added later -- add as necessary */
400 +#define DUMP_LEVEL_NONE                0x0     /* no dumping at all -- just bail   */
401 +#define DUMP_LEVEL_HEADER      0x1     /* kernel dump header only          */
402 +#define DUMP_LEVEL_KERN                0x2     /* dump header and kernel pages     */
403 +#define DUMP_LEVEL_USED                0x4     /* dump header, kernel/user pages   */
404 +#define DUMP_LEVEL_ALL_RAM     0x8     /* dump header, all RAM pages       */
405 +#define DUMP_LEVEL_ALL         0x10    /* dump all memory RAM and firmware */
406 +
407 +
408 +/* dump compression options -- add as necessary */
409 +#define DUMP_COMPRESS_NONE     0x0     /* don't compress this dump         */
410 +#define DUMP_COMPRESS_RLE      0x1     /* use RLE compression              */
411 +#define DUMP_COMPRESS_GZIP     0x2     /* use GZIP compression             */
412 +
413 +/* dump flags - any dump-type specific flags -- add as necessary */
414 +#define DUMP_FLAGS_NONE                0x0     /* no flags are set for this dump   */
415 +#define DUMP_FLAGS_SOFTBOOT    0x2     /* 2 stage soft-boot based dump     */
416 +
417 +#define DUMP_FLAGS_TARGETMASK  0xf0000000 /* handle special case targets   */
418 +#define DUMP_FLAGS_DISKDUMP    0x80000000 /* dump to local disk            */
419 +#define DUMP_FLAGS_NETDUMP     0x40000000 /* dump over the network         */
420 +
421 +/* dump header flags -- add as necessary */
422 +#define DUMP_DH_FLAGS_NONE     0x0     /* no flags set (error condition!)  */
423 +#define DUMP_DH_RAW            0x1     /* raw page (no compression)        */
424 +#define DUMP_DH_COMPRESSED     0x2     /* page is compressed               */
425 +#define DUMP_DH_END            0x4     /* end marker on a full dump        */
426 +#define DUMP_DH_TRUNCATED      0x8     /* dump is incomplete               */
427 +#define DUMP_DH_TEST_PATTERN   0x10    /* dump page is a test pattern      */
428 +#define DUMP_DH_NOT_USED       0x20    /* 1st bit not used in flags        */
429 +
430 +/* names for various dump parameters in /proc/kernel */
431 +#define DUMP_ROOT_NAME         "sys/dump"
432 +#define DUMP_DEVICE_NAME       "device"
433 +#define DUMP_COMPRESS_NAME     "compress"
434 +#define DUMP_LEVEL_NAME                "level"
435 +#define DUMP_FLAGS_NAME                "flags"
436 +#define DUMP_ADDR_NAME         "addr"
437 +
438 +#define DUMP_SYSRQ_KEY         'd'     /* key to use for MAGIC_SYSRQ key   */
439 +
440 +/* CTL_DUMP names: */
441 +enum
442 +{
443 +       CTL_DUMP_DEVICE=1,
444 +       CTL_DUMP_COMPRESS=3,
445 +       CTL_DUMP_LEVEL=3,
446 +       CTL_DUMP_FLAGS=4,
447 +       CTL_DUMP_ADDR=5,
448 +       CTL_DUMP_TEST=6,
449 +};
450 +
451 +
452 +/* page size for gzip compression -- buffered slightly beyond hardware PAGE_SIZE used by DUMP */
453 +#define DUMP_DPC_PAGE_SIZE     (DUMP_PAGE_SIZE + 512)
454 +
455 +/* dump ioctl() control options */
456 +#define DIOSDUMPDEV            1       /* set the dump device              */
457 +#define DIOGDUMPDEV            2       /* get the dump device              */
458 +#define DIOSDUMPLEVEL          3       /* set the dump level               */
459 +#define DIOGDUMPLEVEL          4       /* get the dump level               */
460 +#define DIOSDUMPFLAGS          5       /* set the dump flag parameters     */
461 +#define DIOGDUMPFLAGS          6       /* get the dump flag parameters     */
462 +#define DIOSDUMPCOMPRESS       7       /* set the dump compress level      */
463 +#define DIOGDUMPCOMPRESS       8       /* get the dump compress level      */
464 +
465 +/* these ioctls are used only by netdump module */
466 +#define DIOSTARGETIP           9       /* set the target m/c's ip          */
467 +#define DIOGTARGETIP           10      /* get the target m/c's ip          */
468 +#define DIOSTARGETPORT         11      /* set the target m/c's port        */
469 +#define DIOGTARGETPORT         12      /* get the target m/c's port        */
470 +#define DIOSSOURCEPORT         13      /* set the source m/c's port        */
471 +#define DIOGSOURCEPORT         14      /* get the source m/c's port        */
472 +#define DIOSETHADDR            15      /* set ethernet address             */
473 +#define DIOGETHADDR            16      /* get ethernet address             */
474 +
475 +/*
476 + * Structure: __dump_header
477 + *  Function: This is the header dumped at the top of every valid crash
478 + *            dump.  
479 + */
480 +struct __dump_header {
481 +       /* the dump magic number -- unique to verify dump is valid */
482 +       u64     dh_magic_number;
483 +
484 +       /* the version number of this dump */
485 +       u32     dh_version;
486 +
487 +       /* the size of this header (in case we can't read it) */
488 +       u32     dh_header_size;
489 +
490 +       /* the level of this dump (just a header?) */
491 +       u32     dh_dump_level;
492 +
493 +       /* 
494 +        * We assume dump_page_size to be 4K in every case.
495 +        * Store here the configurable system page size (4K, 8K, 16K, etc.) 
496 +        */
497 +       u32     dh_page_size;
498 +
499 +       /* the size of all physical memory */
500 +       u64     dh_memory_size;
501 +
502 +       /* the start of physical memory */
503 +       u64     dh_memory_start;
504 +
505 +       /* the end of physical memory */
506 +       u64     dh_memory_end;
507 +
508 +       /* the number of hardware/physical pages in this dump specifically */
509 +       u32     dh_num_dump_pages;
510 +
511 +       /* the panic string, if available */
512 +       char    dh_panic_string[DUMP_PANIC_LEN];
513 +
514 +       /* timeval depends on architecture, two long values */
515 +       struct {
516 +               u64 tv_sec;
517 +               u64 tv_usec;
518 +       } dh_time; /* the time of the system crash */
519 +
520 +       /* the NEW utsname (uname) information -- in character form */
521 +       /* we do this so we don't have to include utsname.h         */
522 +       /* plus it helps us be more architecture independent        */
523 +       /* now maybe one day soon they'll make the [65] a #define!  */
524 +       char    dh_utsname_sysname[65];
525 +       char    dh_utsname_nodename[65];
526 +       char    dh_utsname_release[65];
527 +       char    dh_utsname_version[65];
528 +       char    dh_utsname_machine[65];
529 +       char    dh_utsname_domainname[65];
530 +
531 +       /* the address of current task (OLD = void *, NEW = u64) */
532 +       u64     dh_current_task;
533 +
534 +       /* what type of compression we're using in this dump (if any) */
535 +       u32     dh_dump_compress;
536 +
537 +       /* any additional flags */
538 +       u32     dh_dump_flags;
539 +
540 +       /* any additional flags */
541 +       u32     dh_dump_device;
542 +} __attribute__((packed));
543 +
544 +/*
545 + * Structure: __dump_page
546 + *  Function: To act as the header associated to each physical page of
547 + *            memory saved in the system crash dump.  This allows for
548 + *            easy reassembly of each crash dump page.  The address bits
549 + *            are split to make things easier for 64-bit/32-bit system
550 + *            conversions.
551 + *
552 + * dp_byte_offset and dp_page_index are landmarks that are helpful when
553 + * looking at a hex dump of /dev/vmdump,
554 + */
555 +struct __dump_page {
556 +       /* the address of this dump page */
557 +       u64     dp_address;
558 +
559 +       /* the size of this dump page */
560 +       u32     dp_size;
561 +
562 +       /* flags (currently DUMP_COMPRESSED, DUMP_RAW or DUMP_END) */
563 +       u32     dp_flags;
564 +} __attribute__((packed));
565 +
566 +#ifdef __KERNEL__
567 +
568 +/*
569 + * Structure: __dump_compress
570 + *  Function: This is what an individual compression mechanism can use
571 + *            to plug in their own compression techniques.  It's always
572 + *            best to build these as individual modules so that people
573 + *            can put in whatever they want.
574 + */
575 +struct __dump_compress {
576 +       /* the list_head structure for list storage */
577 +       struct list_head list;
578 +
579 +       /* the type of compression to use (DUMP_COMPRESS_XXX) */
580 +       int compress_type;
581 +       const char *compress_name;
582 +
583 +       /* the compression function to call */
584 +       u16 (*compress_func)(const u8 *, u16, u8 *, u16);
585 +};
586 +
587 +/* functions for dump compression registration */
588 +extern void dump_register_compression(struct __dump_compress *);
589 +extern void dump_unregister_compression(int);
590 +
591 +/*
592 + * Structure dump_mbank[]:
593 + *
594 + * For CONFIG_DISCONTIGMEM systems this array specifies the
595 + * memory banks/chunks that need to be dumped after a panic.
596 + *
597 + * For classic systems it specifies a single set of pages from
598 + * 0 to max_mapnr.
599 + */
600 +struct __dump_mbank {
601 +       u64     start;
602 +       u64     end;
603 +       int     type;
604 +       int     pad1;
605 +       long    pad2;
606 +};
607 +
608 +#define DUMP_MBANK_TYPE_CONVENTIONAL_MEMORY            1
609 +#define DUMP_MBANK_TYPE_OTHER                          2
610 +
611 +#define MAXCHUNKS 256
612 +extern int dump_mbanks;
613 +extern struct __dump_mbank dump_mbank[MAXCHUNKS];
614 +
615 +/* notification event codes */
616 +#define DUMP_BEGIN             0x0001  /* dump beginning */
617 +#define DUMP_END               0x0002  /* dump ending */
618 +
619 +/* Scheduler soft spin control.
620 + *
621 + * 0 - no dump in progress
622 + * 1 - cpu0 is dumping, ...
623 + */
624 +extern unsigned long dump_oncpu;
625 +extern void dump_execute(const char *, const struct pt_regs *);
626 +
627 +/*
628 + *     Notifier list for kernel code which wants to be called
629 + *     at kernel dump. 
630 + */
631 +extern struct notifier_block *dump_notifier_list;
632 +static inline int register_dump_notifier(struct notifier_block *nb)
633 +{
634 +       return notifier_chain_register(&dump_notifier_list, nb);
635 +}
636 +static inline int unregister_dump_notifier(struct notifier_block * nb)
637 +{
638 +       return notifier_chain_unregister(&dump_notifier_list, nb);
639 +}
640 +
641 +extern void (*dump_function_ptr)(const char *, const struct pt_regs *);
642 +static inline void dump(char * str, struct pt_regs * regs)
643 +{
644 +       if (dump_function_ptr)
645 +               dump_function_ptr(str, regs);
646 +}
647 +
648 +/*
649 + * Common Arch Specific Functions should be declared here.
650 + * This allows the C compiler to detect discrepancies.
651 + */
652 +extern void    __dump_open(void);
653 +extern void    __dump_cleanup(void);
654 +extern void    __dump_init(u64);
655 +extern void    __dump_save_regs(struct pt_regs *, const struct pt_regs *);
656 +extern int     __dump_configure_header(const struct pt_regs *);
657 +extern void    __dump_irq_enable(void);
658 +extern void    __dump_irq_restore(void);
659 +extern int     __dump_page_valid(unsigned long index);
660 +#ifdef CONFIG_SMP
661 +extern void    __dump_save_other_cpus(void);
662 +#else
663 +#define        __dump_save_other_cpus()
664 +#endif
665 +
666 +/* to track all used (compound + zero order) pages */
667 +#define PageInuse(p)   (PageCompound(p) || page_count(p))
668 +
669 +#endif /* __KERNEL__ */
670 +
671 +#endif /* CONFIG_CRASH_XXXDEV */
672 +
673 +#endif /* CONFIG_CRASH_DUMP */
674 +
675 +#endif /* _DUMP_H */