Whamcloud - gitweb
Branch: HEAD
[fs/lustre-release.git] / lustre / kernel_patches / patches / linux-2.6.10-fc3-lkcd.patch
1 Index: linux-2.6.10/arch/i386/Kconfig.debug
2 ===================================================================
3 --- linux-2.6.10.orig/arch/i386/Kconfig.debug   2005-04-05 16:29:30.191000944 +0800
4 +++ linux-2.6.10/arch/i386/Kconfig.debug        2005-04-05 16:47:53.904211032 +0800
5 @@ -2,6 +2,63 @@
6  
7  source "lib/Kconfig.debug"
8  
9 +config CRASH_DUMP
10 +       tristate "Crash dump support (EXPERIMENTAL)"
11 +       depends on EXPERIMENTAL
12 +       default n
13 +       ---help---
14 +         Say Y here to enable saving an image of system memory when a panic
15 +         or other error occurs. Dumps can also be forced with the SysRq+d
16 +         key if MAGIC_SYSRQ is enabled.
17 +
18 +config KERNTYPES
19 +       bool
20 +       depends on CRASH_DUMP
21 +       default y
22 +
23 +config CRASH_DUMP_BLOCKDEV
24 +       tristate "Crash dump block device driver"
25 +       depends on CRASH_DUMP
26 +       help
27 +         Say Y to allow saving crash dumps directly to a disk device.
28 +
29 +config CRASH_DUMP_NETDEV
30 +       tristate "Crash dump network device driver"
31 +       depends on CRASH_DUMP
32 +       help
33 +         Say Y to allow saving crash dumps over a network device.
34 +
35 +config CRASH_DUMP_MEMDEV
36 +       bool "Crash dump staged memory driver"
37 +       depends on CRASH_DUMP
38 +       help
39 +         Say Y to allow intermediate saving crash dumps in spare 
40 +         memory pages which would then be written out to disk
41 +         later.
42 +
43 +config CRASH_DUMP_SOFTBOOT
44 +       bool "Save crash dump across a soft reboot"
45 +       depends on CRASH_DUMP_MEMDEV
46 +       help
47 +         Say Y to allow a crash dump to be preserved in memory
48 +         pages across a soft reboot and written out to disk
49 +         thereafter. For this to work, CRASH_DUMP must be 
50 +         configured as part of the kernel (not as a module).
51 +
52 +config CRASH_DUMP_COMPRESS_RLE
53 +       tristate "Crash dump RLE compression"
54 +       depends on CRASH_DUMP
55 +       help
56 +         Say Y to allow saving dumps with Run Length Encoding compression.
57 +
58 +config CRASH_DUMP_COMPRESS_GZIP
59 +       tristate "Crash dump GZIP compression"
60 +       select ZLIB_INFLATE
61 +       select ZLIB_DEFLATE
62 +       depends on CRASH_DUMP
63 +       help
64 +         Say Y to allow saving dumps with Gnu Zip compression.
65 +
66  config EARLY_PRINTK
67         bool "Early printk" if EMBEDDED
68         default y
69 @@ -15,8 +72,8 @@
70           with klogd/syslogd or the X server. You should normally N here,
71           unless you want to debug such a crash.
72  
73 -config DEBUG_STACKOVERFLOW
74 -       bool "Check for stack overflows"
75 +config DEBUG_STACKOVERFLOW 
76 +       bool "Check for stack overflows" 
77         depends on DEBUG_KERNEL
78  
79  config KPROBES
80 Index: linux-2.6.10/arch/i386/mm/init.c
81 ===================================================================
82 --- linux-2.6.10.orig/arch/i386/mm/init.c       2005-04-05 16:47:05.157621640 +0800
83 +++ linux-2.6.10/arch/i386/mm/init.c    2005-04-05 16:47:53.909210272 +0800
84 @@ -244,6 +244,13 @@
85     return 0;
86  }
87  
88 +/* To enable modules to check if a page is in RAM */
89 +int pfn_is_ram(unsigned long pfn)
90 +{
91 +       return (page_is_ram(pfn));
92 +}
93 +
94 +
95  #ifdef CONFIG_HIGHMEM
96  pte_t *kmap_pte;
97  pgprot_t kmap_prot;
98 Index: linux-2.6.10/arch/i386/kernel/traps.c
99 ===================================================================
100 --- linux-2.6.10.orig/arch/i386/kernel/traps.c  2005-04-05 16:47:05.156621792 +0800
101 +++ linux-2.6.10/arch/i386/kernel/traps.c       2005-04-05 16:47:53.906210728 +0800
102 @@ -27,6 +27,7 @@
103  #include <linux/ptrace.h>
104  #include <linux/utsname.h>
105  #include <linux/kprobes.h>
106 +#include <linux/dump.h>
107  
108  #ifdef CONFIG_EISA
109  #include <linux/ioport.h>
110 @@ -382,6 +383,7 @@
111         bust_spinlocks(0);
112         die.lock_owner = -1;
113         spin_unlock_irq(&die.lock);
114 +       dump((char *)str, regs);
115         if (in_interrupt())
116                 panic("Fatal exception in interrupt");
117  
118 @@ -654,6 +656,7 @@
119         printk(" on CPU%d, eip %08lx, registers:\n",
120                 smp_processor_id(), regs->eip);
121         show_registers(regs);
122 +       dump((char *)msg, regs);
123         printk("console shuts up ...\n");
124         console_silent();
125         spin_unlock(&nmi_print_lock);
126 Index: linux-2.6.10/arch/i386/kernel/setup.c
127 ===================================================================
128 --- linux-2.6.10.orig/arch/i386/kernel/setup.c  2004-12-25 05:34:45.000000000 +0800
129 +++ linux-2.6.10/arch/i386/kernel/setup.c       2005-04-05 16:47:53.905210880 +0800
130 @@ -662,6 +662,10 @@
131   */
132  #define LOWMEMSIZE()   (0x9f000)
133  
134 +#ifdef CONFIG_CRASH_DUMP_SOFTBOOT
135 +unsigned long crashdump_addr = 0xdeadbeef;
136 +#endif
137 +
138  static void __init parse_cmdline_early (char ** cmdline_p)
139  {
140         char c = ' ', *to = command_line, *from = saved_command_line;
141 @@ -823,6 +827,11 @@
142                 if (c == ' ' && !memcmp(from, "vmalloc=", 8))
143                         __VMALLOC_RESERVE = memparse(from+8, &from);
144  
145 +#ifdef CONFIG_CRASH_DUMP_SOFTBOOT
146 +               if (c == ' ' && !memcmp(from, "crashdump=", 10))
147 +                   crashdump_addr = memparse(from+10, &from); 
148 +#endif
149 +
150                 c = *(from++);
151                 if (!c)
152                         break;
153 @@ -1288,6 +1297,10 @@
154  
155  static char * __init machine_specific_memory_setup(void);
156  
157 +#ifdef CONFIG_CRASH_DUMP_SOFTBOOT
158 +extern void crashdump_reserve(void);
159 +#endif
160 +
161  /*
162   * Determine if we were loaded by an EFI loader.  If so, then we have also been
163   * passed the efi memmap, systab, etc., so we should use these data structures
164 @@ -1393,6 +1406,10 @@
165  #endif
166  
167  
168 +#ifdef CONFIG_CRASH_DUMP_SOFTBOOT
169 +       crashdump_reserve(); /* Preserve crash dump state from prev boot */
170 +#endif
171 +
172         dmi_scan_machine();
173  
174  #ifdef CONFIG_X86_GENERICARCH
175 Index: linux-2.6.10/arch/i386/kernel/smp.c
176 ===================================================================
177 --- linux-2.6.10.orig/arch/i386/kernel/smp.c    2005-04-05 16:47:05.154622096 +0800
178 +++ linux-2.6.10/arch/i386/kernel/smp.c 2005-04-05 16:47:53.908210424 +0800
179 @@ -19,6 +19,7 @@
180  #include <linux/mc146818rtc.h>
181  #include <linux/cache.h>
182  #include <linux/interrupt.h>
183 +#include <linux/dump.h>
184  
185  #include <asm/mtrr.h>
186  #include <asm/tlbflush.h>
187 @@ -143,6 +144,13 @@
188          */
189         cfg = __prepare_ICR(shortcut, vector);
190  
191 +       if (vector == DUMP_VECTOR) {
192 +               /*
193 +                * Setup DUMP IPI to be delivered as an NMI
194 +                */
195 +               cfg = (cfg&~APIC_VECTOR_MASK)|APIC_DM_NMI;
196 +       }
197 +
198         /*
199          * Send the IPI. The write to APIC_ICR fires this off.
200          */
201 @@ -220,6 +228,13 @@
202                          * program the ICR 
203                          */
204                         cfg = __prepare_ICR(0, vector);
205 +
206 +                       if (vector == DUMP_VECTOR) {
207 +                               /*
208 +                                * Setup DUMP IPI to be delivered as an NMI
209 +                                */
210 +                               cfg = (cfg&~APIC_VECTOR_MASK)|APIC_DM_NMI;
211 +                       }       
212                         
213                         /*
214                          * Send the IPI. The write to APIC_ICR fires this off.
215 @@ -506,6 +521,11 @@
216  
217  static struct call_data_struct * call_data;
218  
219 +void dump_send_ipi(void)
220 +{
221 +       send_IPI_allbutself(DUMP_VECTOR);
222 +}
223 +
224  /*
225   * this function sends a 'generic call function' IPI to all other CPUs
226   * in the system.
227 @@ -561,7 +581,7 @@
228         return 0;
229  }
230  
231 -static void stop_this_cpu (void * dummy)
232 +void stop_this_cpu (void * dummy)
233  {
234         /*
235          * Remove this CPU:
236 @@ -622,4 +642,3 @@
237                 atomic_inc(&call_data->finished);
238         }
239  }
240 -
241 Index: linux-2.6.10/arch/i386/kernel/i386_ksyms.c
242 ===================================================================
243 --- linux-2.6.10.orig/arch/i386/kernel/i386_ksyms.c     2004-12-25 05:35:40.000000000 +0800
244 +++ linux-2.6.10/arch/i386/kernel/i386_ksyms.c  2005-04-05 16:47:53.907210576 +0800
245 @@ -16,6 +16,7 @@
246  #include <linux/tty.h>
247  #include <linux/highmem.h>
248  #include <linux/time.h>
249 +#include <linux/nmi.h>
250  
251  #include <asm/semaphore.h>
252  #include <asm/processor.h>
253 @@ -31,6 +32,7 @@
254  #include <asm/tlbflush.h>
255  #include <asm/nmi.h>
256  #include <asm/ist.h>
257 +#include <asm/e820.h>
258  #include <asm/kdebug.h>
259  
260  extern void dump_thread(struct pt_regs *, struct user *);
261 @@ -192,3 +194,20 @@
262  #endif
263  
264  EXPORT_SYMBOL(csum_partial);
265 +
266 +#ifdef CONFIG_CRASH_DUMP_MODULE
267 +#ifdef CONFIG_SMP
268 +extern irq_desc_t irq_desc[NR_IRQS];
269 +extern cpumask_t irq_affinity[NR_IRQS];
270 +extern void stop_this_cpu(void *);
271 +EXPORT_SYMBOL(irq_desc);
272 +EXPORT_SYMBOL(irq_affinity);
273 +EXPORT_SYMBOL(stop_this_cpu);
274 +EXPORT_SYMBOL(dump_send_ipi);
275 +#endif
276 +extern int pfn_is_ram(unsigned long);
277 +EXPORT_SYMBOL(pfn_is_ram);
278 +#ifdef ARCH_HAS_NMI_WATCHDOG
279 +EXPORT_SYMBOL(touch_nmi_watchdog);
280 +#endif
281 +#endif
282 Index: linux-2.6.10/arch/s390/Kconfig.debug
283 ===================================================================
284 --- linux-2.6.10.orig/arch/s390/Kconfig.debug   2004-12-25 05:34:31.000000000 +0800
285 +++ linux-2.6.10/arch/s390/Kconfig.debug        2005-04-05 16:47:53.921208448 +0800
286 @@ -2,4 +2,13 @@
287  
288  source "lib/Kconfig.debug"
289  
290 +config KERNTYPES
291 +       bool "Kerntypes debugging information"
292 +       default y
293 +       ---help---
294 +         Say Y here to save additional kernel debugging information in the
295 +         file init/kerntypes.o. This information is used by crash analysis
296 +         tools such as lcrash to assign structures to kernel addresses.
297 +
298 +
299  endmenu
300 Index: linux-2.6.10/arch/s390/boot/Makefile
301 ===================================================================
302 --- linux-2.6.10.orig/arch/s390/boot/Makefile   2004-12-25 05:35:49.000000000 +0800
303 +++ linux-2.6.10/arch/s390/boot/Makefile        2005-04-05 16:47:53.922208296 +0800
304 @@ -15,4 +15,4 @@
305  
306  install: $(CONFIGURE) $(obj)/image
307         sh -x  $(srctree)/$(obj)/install.sh $(KERNELRELEASE) $(obj)/image \
308 -             System.map Kerntypes "$(INSTALL_PATH)"
309 +             System.map init/Kerntypes "$(INSTALL_PATH)"
310 Index: linux-2.6.10/arch/s390/boot/install.sh
311 ===================================================================
312 --- linux-2.6.10.orig/arch/s390/boot/install.sh 2004-12-25 05:35:01.000000000 +0800
313 +++ linux-2.6.10/arch/s390/boot/install.sh      2005-04-05 16:47:53.921208448 +0800
314 @@ -16,7 +16,8 @@
315  #   $1 - kernel version
316  #   $2 - kernel image file
317  #   $3 - kernel map file
318 -#   $4 - default install path (blank if root directory)
319 +#   $4 - kernel type file
320 +#   $5 - default install path (blank if root directory)
321  #
322  
323  # User may have a custom install script
324 @@ -26,13 +27,13 @@
325  
326  # Default install - same as make zlilo
327  
328 -if [ -f $4/vmlinuz ]; then
329 -       mv $4/vmlinuz $4/vmlinuz.old
330 +if [ -f $5/vmlinuz ]; then
331 +       mv $5/vmlinuz $5/vmlinuz.old
332  fi
333  
334 -if [ -f $4/System.map ]; then
335 -       mv $4/System.map $4/System.old
336 +if [ -f $5/System.map ]; then
337 +       mv $5/System.map $5/System.old
338  fi
339  
340 -cat $2 > $4/vmlinuz
341 -cp $3 $4/System.map
342 +cat $2 > $5/vmlinuz
343 +cp $3 $5/System.map
344 Index: linux-2.6.10/arch/ia64/Kconfig.debug
345 ===================================================================
346 --- linux-2.6.10.orig/arch/ia64/Kconfig.debug   2004-12-25 05:34:32.000000000 +0800
347 +++ linux-2.6.10/arch/ia64/Kconfig.debug        2005-04-05 16:47:53.917209056 +0800
348 @@ -2,6 +2,65 @@
349  
350  source "lib/Kconfig.debug"
351  
352 +config CRASH_DUMP
353 +       tristate "Crash dump support (EXPERIMENTAL)"
354 +       depends on EXPERIMENTAL
355 +       default n
356 +       ---help---
357 +         Say Y here to enable saving an image of system memory when a panic
358 +         or other error occurs. Dumps can also be forced with the SysRq+d
359 +         key if MAGIC_SYSRQ is enabled.
360 +
361 +config KERNTYPES
362 +        bool
363 +        depends on CRASH_DUMP
364 +        default y
365 +
366 +config CRASH_DUMP_BLOCKDEV
367 +       tristate "Crash dump block device driver"
368 +       depends on CRASH_DUMP
369 +       help
370 +         Say Y to allow saving crash dumps directly to a disk device.
371 +
372 +config CRASH_DUMP_NETDEV
373 +       tristate "Crash dump network device driver"
374 +       depends on CRASH_DUMP
375 +       help
376 +        Say Y to allow saving crash dumps over a network device.
377 +
378 +config CRASH_DUMP_MEMDEV
379 +       bool "Crash dump staged memory driver"
380 +       depends on CRASH_DUMP
381 +       help
382 +         Say Y to allow intermediate saving crash dumps in spare
383 +         memory pages which would then be written out to disk
384 +         later.
385 +
386 +config CRASH_DUMP_SOFTBOOT
387 +       bool "Save crash dump across a soft reboot"
388 +       depends on CRASH_DUMP_MEMDEV
389 +       help
390 +         Say Y to allow a crash dump to be preserved in memory
391 +         pages across a soft reboot and written out to disk
392 +         thereafter. For this to work, CRASH_DUMP must be
393 +         configured as part of the kernel (not as a module).
394 +
395 +config CRASH_DUMP_COMPRESS_RLE
396 +       tristate "Crash dump RLE compression"
397 +       depends on CRASH_DUMP
398 +       help
399 +         Say Y to allow saving dumps with Run Length Encoding compression.
400 +
401 +config CRASH_DUMP_COMPRESS_GZIP
402 +       tristate "Crash dump GZIP compression"
403 +       select ZLIB_INFLATE
404 +       select ZLIB_DEFLATE
405 +       depends on CRASH_DUMP
406 +       help
407 +         Say Y to allow saving dumps with Gnu Zip compression.
408 +
409 +
410 +
411  choice
412         prompt "Physical memory granularity"
413         default IA64_GRANULE_64MB
414 Index: linux-2.6.10/arch/ia64/kernel/traps.c
415 ===================================================================
416 --- linux-2.6.10.orig/arch/ia64/kernel/traps.c  2004-12-25 05:35:39.000000000 +0800
417 +++ linux-2.6.10/arch/ia64/kernel/traps.c       2005-04-05 16:47:53.918208904 +0800
418 @@ -21,6 +21,8 @@
419  #include <asm/intrinsics.h>
420  #include <asm/processor.h>
421  #include <asm/uaccess.h>
422 +#include <asm/nmi.h>
423 +#include <linux/dump.h>
424  
425  extern spinlock_t timerlist_lock;
426  
427 @@ -89,6 +91,7 @@
428                 printk("%s[%d]: %s %ld [%d]\n",
429                         current->comm, current->pid, str, err, ++die_counter);
430                 show_regs(regs);
431 +               dump((char *)str, regs);
432         } else
433                 printk(KERN_ERR "Recursive die() failure, output suppressed\n");
434  
435 Index: linux-2.6.10/arch/ia64/kernel/ia64_ksyms.c
436 ===================================================================
437 --- linux-2.6.10.orig/arch/ia64/kernel/ia64_ksyms.c     2005-04-05 16:29:27.954340968 +0800
438 +++ linux-2.6.10/arch/ia64/kernel/ia64_ksyms.c  2005-04-05 16:47:53.917209056 +0800
439 @@ -7,7 +7,6 @@
440  
441  #include <linux/config.h>
442  #include <linux/module.h>
443 -
444  #include <linux/string.h>
445  EXPORT_SYMBOL(memset);
446  EXPORT_SYMBOL(memchr);
447 @@ -28,6 +27,9 @@
448  EXPORT_SYMBOL(strstr);
449  EXPORT_SYMBOL(strpbrk);
450  
451 +#include <linux/syscalls.h>
452 +EXPORT_SYMBOL(sys_ioctl);
453 +
454  #include <asm/checksum.h>
455  EXPORT_SYMBOL(ip_fast_csum);           /* hand-coded assembly */
456  
457 @@ -125,3 +127,21 @@
458  #  endif
459  # endif
460  #endif
461 +
462 +#include <asm/hw_irq.h>
463 +
464 +#ifdef CONFIG_CRASH_DUMP_MODULE
465 +#ifdef CONFIG_SMP
466 +extern irq_desc_t _irq_desc[NR_IRQS];
467 +extern cpumask_t irq_affinity[NR_IRQS];
468 +extern void stop_this_cpu(void *);
469 +extern int (*dump_ipi_function_ptr)(struct pt_regs *);
470 +extern void dump_send_ipi(void);
471 +EXPORT_SYMBOL(_irq_desc);
472 +EXPORT_SYMBOL(irq_affinity);
473 +EXPORT_SYMBOL(stop_this_cpu);
474 +EXPORT_SYMBOL(dump_send_ipi);
475 +EXPORT_SYMBOL(dump_ipi_function_ptr);
476 +#endif
477 +#endif
478 +
479 Index: linux-2.6.10/arch/ia64/kernel/irq.c
480 ===================================================================
481 --- linux-2.6.10.orig/arch/ia64/kernel/irq.c    2004-12-25 05:35:27.000000000 +0800
482 +++ linux-2.6.10/arch/ia64/kernel/irq.c 2005-04-05 16:47:53.919208752 +0800
483 @@ -933,7 +933,11 @@
484  
485  static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
486  
487 +#if defined(CONFIG_CRASH_DUMP) || defined (CONFIG_CRASH_DUMP_MODULE)
488 +cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
489 +#else
490  static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
491 +#endif
492  
493  static char irq_redir [NR_IRQS]; // = { [0 ... NR_IRQS-1] = 1 };
494  
495 Index: linux-2.6.10/arch/ia64/kernel/smp.c
496 ===================================================================
497 --- linux-2.6.10.orig/arch/ia64/kernel/smp.c    2004-12-25 05:35:40.000000000 +0800
498 +++ linux-2.6.10/arch/ia64/kernel/smp.c 2005-04-05 16:47:53.920208600 +0800
499 @@ -31,6 +31,10 @@
500  #include <linux/efi.h>
501  #include <linux/bitops.h>
502  
503 +#if defined(CONFIG_CRASH_DUMP) || defined(CONFIG_CRASH_DUMP_MODULE)
504 +#include <linux/dump.h>
505 +#endif
506 +
507  #include <asm/atomic.h>
508  #include <asm/current.h>
509  #include <asm/delay.h>
510 @@ -67,6 +71,11 @@
511  #define IPI_CALL_FUNC          0
512  #define IPI_CPU_STOP           1
513  
514 +#if defined(CONFIG_CRASH_DUMP) || defined(CONFIG_CRASH_DUMP_MODULE)
515 +#define IPI_DUMP_INTERRUPT      4
516 +       int (*dump_ipi_function_ptr)(struct pt_regs *) = NULL;
517 +#endif
518 +
519  /* This needs to be cacheline aligned because it is written to by *other* CPUs.  */
520  static DEFINE_PER_CPU(u64, ipi_operation) ____cacheline_aligned;
521  
522 @@ -84,7 +93,9 @@
523         spin_unlock_irq(&call_lock);
524  }
525  
526 -static void
527 +
528 +/*changed static void stop_this_cpu -> void stop_this_cpu */
529 +void
530  stop_this_cpu (void)
531  {
532         /*
533 @@ -155,6 +166,15 @@
534                               case IPI_CPU_STOP:
535                                 stop_this_cpu();
536                                 break;
537 +#if defined(CONFIG_CRASH_DUMP) || defined(CONFIG_CRASH_DUMP_MODULE)
538 +                       case IPI_DUMP_INTERRUPT:
539 +                        if( dump_ipi_function_ptr != NULL ) {
540 +                                if (!dump_ipi_function_ptr(regs)) {
541 +                                         printk(KERN_ERR "(*dump_ipi_function_ptr)(): rejected IPI_DUMP_INTERRUPT\n");
542 +                                }
543 +                        }
544 +                        break;
545 +#endif
546  
547                               default:
548                                 printk(KERN_CRIT "Unknown IPI on CPU %d: %lu\n", this_cpu, which);
549 @@ -369,9 +389,17 @@
550  {
551         send_IPI_allbutself(IPI_CPU_STOP);
552  }
553 +EXPORT_SYMBOL(smp_send_stop);
554  
555  int __init
556  setup_profiling_timer (unsigned int multiplier)
557  {
558         return -EINVAL;
559  }
560 +
561 +#if defined(CONFIG_CRASH_DUMP) || defined(CONFIG_CRASH_DUMP_MODULE)
562 +void dump_send_ipi(void)
563 +{
564 +        send_IPI_allbutself(IPI_DUMP_INTERRUPT);
565 +}
566 +#endif
567 Index: linux-2.6.10/arch/ppc64/Kconfig.debug
568 ===================================================================
569 --- linux-2.6.10.orig/arch/ppc64/Kconfig.debug  2004-12-25 05:35:27.000000000 +0800
570 +++ linux-2.6.10/arch/ppc64/Kconfig.debug       2005-04-05 16:47:53.922208296 +0800
571 @@ -2,6 +2,64 @@
572  
573  source "lib/Kconfig.debug"
574  
575 +config KERNTYPES
576 +       bool
577 +       depends on CRASH_DUMP
578 +       default y
579 +
580 +config CRASH_DUMP
581 +       tristate "Crash dump support"
582 +       default n
583 +       ---help---
584 +          Say Y here to enable saving an image of system memory when a panic
585 +          or other error occurs. Dumps can also be forced with the SysRq+d
586 +          key if MAGIC_SYSRQ is enabled.
587 +
588 +config CRASH_DUMP_BLOCKDEV
589 +       tristate "Crash dump block device driver"
590 +       depends on CRASH_DUMP
591 +       help
592 +         Say Y to allow saving crash dumps directly to a disk device.
593 +       
594 +config CRASH_DUMP_NETDEV
595 +       tristate "Crash dump network device driver"
596 +       depends on CRASH_DUMP
597 +       help
598 +         Say Y to allow saving crash dumps over a network device.
599 +
600 +config CRASH_DUMP_MEMDEV
601 +       bool "Crash dump staged memory driver"
602 +       depends on CRASH_DUMP
603 +       help
604 +         Say Y to allow intermediate saving crash dumps in spare
605 +         memory pages which would then be written out to disk
606 +         later. Need 'kexec' support for this to work.
607 +            **** Not supported at present ****
608 +
609 +config CRASH_DUMP_SOFTBOOT
610 +       bool "Save crash dump across a soft reboot"
611 +       help
612 +         Say Y to allow a crash dump to be preserved in memory
613 +         pages across a soft reboot and written out to disk
614 +         thereafter. For this to work, CRASH_DUMP must be
615 +         configured as part of the kernel (not as a module).
616 +         Need 'kexec' support to use this option.
617 +           **** Not supported at present ****
618 +
619 +config CRASH_DUMP_COMPRESS_RLE
620 +       tristate "Crash dump RLE compression"
621 +       depends on CRASH_DUMP
622 +       help
623 +         Say Y to allow saving dumps with Run Length Encoding compression.
624 +
625 +config CRASH_DUMP_COMPRESS_GZIP
626 +       tristate "Crash dump GZIP compression"
627 +       select ZLIB_INFLATE
628 +       select ZLIB_DEFLATE
629 +       depends on CRASH_DUMP
630 +       help
631 +         Say Y to allow saving dumps with Gnu Zip compression.
632 +
633  config DEBUG_STACKOVERFLOW
634         bool "Check for stack overflows"
635         depends on DEBUG_KERNEL
636 Index: linux-2.6.10/arch/ppc64/kernel/traps.c
637 ===================================================================
638 --- linux-2.6.10.orig/arch/ppc64/kernel/traps.c 2004-12-25 05:34:47.000000000 +0800
639 +++ linux-2.6.10/arch/ppc64/kernel/traps.c      2005-04-05 16:47:53.923208144 +0800
640 @@ -29,6 +29,7 @@
641  #include <linux/interrupt.h>
642  #include <linux/init.h>
643  #include <linux/module.h>
644 +#include <linux/dump.h>
645  
646  #include <asm/pgtable.h>
647  #include <asm/uaccess.h>
648 @@ -116,6 +117,7 @@
649         if (nl)
650                 printk("\n");
651         show_regs(regs);
652 +       dump((char *)str, regs);
653         bust_spinlocks(0);
654         spin_unlock_irq(&die_lock);
655  
656 Index: linux-2.6.10/arch/ppc64/kernel/ppc_ksyms.c
657 ===================================================================
658 --- linux-2.6.10.orig/arch/ppc64/kernel/ppc_ksyms.c     2004-12-25 05:34:26.000000000 +0800
659 +++ linux-2.6.10/arch/ppc64/kernel/ppc_ksyms.c  2005-04-05 16:47:53.925207840 +0800
660 @@ -159,6 +159,17 @@
661  EXPORT_SYMBOL(get_wchan);
662  EXPORT_SYMBOL(console_drivers);
663  
664 +#ifdef CONFIG_CRASH_DUMP_MODULE
665 +extern int dump_page_is_ram(unsigned long);
666 +EXPORT_SYMBOL(dump_page_is_ram);
667 +#ifdef CONFIG_SMP
668 +EXPORT_SYMBOL(irq_affinity);
669 +extern void stop_this_cpu(void *);
670 +EXPORT_SYMBOL(stop_this_cpu);
671 +EXPORT_SYMBOL(dump_send_ipi);
672 +#endif
673 +#endif
674 +
675  EXPORT_SYMBOL(tb_ticks_per_usec);
676  EXPORT_SYMBOL(paca);
677  EXPORT_SYMBOL(cur_cpu_spec);
678 Index: linux-2.6.10/arch/ppc64/kernel/lmb.c
679 ===================================================================
680 --- linux-2.6.10.orig/arch/ppc64/kernel/lmb.c   2004-12-25 05:34:58.000000000 +0800
681 +++ linux-2.6.10/arch/ppc64/kernel/lmb.c        2005-04-05 16:47:53.924207992 +0800
682 @@ -344,3 +344,31 @@
683  
684         return pa;
685  }
686 +
687 +
688 +/*
689 + * This is the copy of page_is_ram (mm/init.c). The difference is 
690 + * it identifies all memory holes.
691 + */
692 +int dump_page_is_ram(unsigned long pfn)
693 +{
694 +        int i;
695 +       unsigned long paddr = (pfn << PAGE_SHIFT);
696 +
697 +       for (i=0; i < lmb.memory.cnt ;i++) {
698 +               unsigned long base;
699 +
700 +#ifdef CONFIG_MSCHUNKS
701 +               base = lmb.memory.region[i].physbase;
702 +#else
703 +               base = lmb.memory.region[i].base;
704 +#endif
705 +               if ((paddr >= base) &&
706 +                       (paddr < (base + lmb.memory.region[i].size))) {
707 +                       return 1;
708 +               }
709 +       }
710 +
711 +       return 0;
712 +}
713 +
714 Index: linux-2.6.10/arch/ppc64/kernel/xics.c
715 ===================================================================
716 --- linux-2.6.10.orig/arch/ppc64/kernel/xics.c  2004-12-25 05:34:58.000000000 +0800
717 +++ linux-2.6.10/arch/ppc64/kernel/xics.c       2005-04-05 16:47:53.925207840 +0800
718 @@ -421,7 +421,8 @@
719                         smp_message_recv(PPC_MSG_MIGRATE_TASK, regs);
720                 }
721  #endif
722 -#ifdef CONFIG_DEBUGGER
723 +#if defined(CONFIG_DEBUGGER) || defined(CONFIG_CRASH_DUMP) \
724 +       || defined(CONFIG_CRASH_DUMP_MODULE)
725                 if (test_and_clear_bit(PPC_MSG_DEBUGGER_BREAK,
726                                        &xics_ipi_message[cpu].value)) {
727                         mb();
728 Index: linux-2.6.10/arch/ppc64/kernel/smp.c
729 ===================================================================
730 --- linux-2.6.10.orig/arch/ppc64/kernel/smp.c   2004-12-25 05:35:23.000000000 +0800
731 +++ linux-2.6.10/arch/ppc64/kernel/smp.c        2005-04-05 16:47:53.926207688 +0800
732 @@ -30,6 +30,7 @@
733  #include <linux/spinlock.h>
734  #include <linux/cache.h>
735  #include <linux/err.h>
736 +#include <linux/dump.h>
737  #include <linux/sysdev.h>
738  #include <linux/cpu.h>
739  
740 @@ -71,6 +72,7 @@
741  struct smp_ops_t *smp_ops;
742  
743  static volatile unsigned int cpu_callin_map[NR_CPUS];
744 +static int (*dump_ipi_function_ptr)(struct pt_regs *) = NULL;
745  
746  extern unsigned char stab_array[];
747  
748 @@ -177,9 +179,16 @@
749                 /* spare */
750                 break;
751  #endif
752 -#ifdef CONFIG_DEBUGGER
753 +#if defined(CONFIG_DEBUGGER) || defined(CONFIG_CRASH_DUMP) \
754 +       || defined(CONFIG_CRASH_DUMP_MODULE)
755         case PPC_MSG_DEBUGGER_BREAK:
756 -               debugger_ipi(regs);
757 +               if (dump_ipi_function_ptr) {
758 +                       dump_ipi_function_ptr(regs);
759 +               }
760 +#ifdef CONFIG_DEBUGGER
761 +               else
762 +                       debugger_ipi(regs);
763 +#endif
764                 break;
765  #endif
766         default:
767 @@ -201,7 +210,16 @@
768  }
769  #endif
770  
771 -static void stop_this_cpu(void *dummy)
772 +void dump_send_ipi(int (*dump_ipi_callback)(struct pt_regs *))
773 +{
774 +       dump_ipi_function_ptr = dump_ipi_callback;
775 +       if (dump_ipi_callback) {
776 +               mb();
777 +               smp_ops->message_pass(MSG_ALL_BUT_SELF, PPC_MSG_DEBUGGER_BREAK);
778 +       }
779 +}
780 +
781 +void stop_this_cpu(void *dummy)
782  {
783         local_irq_disable();
784         while (1)
785 Index: linux-2.6.10/arch/x86_64/Kconfig.debug
786 ===================================================================
787 --- linux-2.6.10.orig/arch/x86_64/Kconfig.debug 2004-12-25 05:34:01.000000000 +0800
788 +++ linux-2.6.10/arch/x86_64/Kconfig.debug      2005-04-05 16:47:53.909210272 +0800
789 @@ -2,6 +2,66 @@
790  
791  source "lib/Kconfig.debug"
792  
793 +config CRASH_DUMP
794 +       tristate "Crash dump support (EXPERIMENTAL)"
795 +       depends on EXPERIMENTAL
796 +       default n
797 +       ---help---
798 +         Say Y here to enable saving an image of system memory when a panic
799 +         or other error occurs. Dumps can also be forced with the SysRq+d
800 +         key if MAGIC_SYSRQ is enabled.
801 +
802 +config KERNTYPES
803 +       bool
804 +       depends on CRASH_DUMP
805 +       default y
806 +
807 +config CRASH_DUMP_BLOCKDEV
808 +       tristate "Crash dump block device driver"
809 +       depends on CRASH_DUMP
810 +       help
811 +         Say Y to allow saving crash dumps directly to a disk device.
812 +
813 +config CRASH_DUMP_NETDEV
814 +       tristate "Crash dump network device driver"
815 +       depends on CRASH_DUMP
816 +       help
817 +         Say Y to allow saving crash dumps over a network device.
818 +
819 +config CRASH_DUMP_MEMDEV
820 +       bool "Crash dump staged memory driver"
821 +       depends on CRASH_DUMP
822 +       help
823 +         Say Y to allow intermediate saving crash dumps in spare
824 +         memory pages which would then be written out to disk
825 +         later.
826 +
827 +config CRASH_DUMP_SOFTBOOT
828 +       bool "Save crash dump across a soft reboot"
829 +       depends on CRASH_DUMP_MEMDEV
830 +       help
831 +         Say Y to allow a crash dump to be preserved in memory
832 +        lkcd-kernpages across a soft reboot and written out to disk
833 +         thereafter. For this to work, CRASH_DUMP must be
834 +         configured as part of the kernel (not as a module).
835 +
836 +config CRASH_DUMP_COMPRESS_RLE
837 +       tristate "Crash dump RLE compression"
838 +       depends on CRASH_DUMP
839 +       help
840 +         Say Y to allow saving dumps with Run Length Encoding compression.
841 +
842 +
843 +config CRASH_DUMP_COMPRESS_GZIP
844 +       tristate "Crash dump GZIP compression"
845 +       select ZLIB_INFLATE
846 +       select ZLIB_DEFLATE
847 +       depends on CRASH_DUMP
848 +       help
849 +         Say Y to allow saving dumps with Gnu Zip compression.
850 +
851 +
852 +
853  # !SMP for now because the context switch early causes GPF in segment reloading
854  # and the GS base checking does the wrong thing then, causing a hang.
855  config CHECKING
856 Index: linux-2.6.10/arch/x86_64/mm/init.c
857 ===================================================================
858 --- linux-2.6.10.orig/arch/x86_64/mm/init.c     2005-04-05 16:29:30.040023896 +0800
859 +++ linux-2.6.10/arch/x86_64/mm/init.c  2005-04-05 16:47:53.916209208 +0800
860 @@ -378,7 +378,7 @@
861         __flush_tlb_all();
862  } 
863  
864 -static inline int page_is_ram (unsigned long pagenr)
865 +inline int page_is_ram (unsigned long pagenr)
866  {
867         int i;
868  
869 Index: linux-2.6.10/arch/x86_64/kernel/traps.c
870 ===================================================================
871 --- linux-2.6.10.orig/arch/x86_64/kernel/traps.c        2004-12-25 05:33:49.000000000 +0800
872 +++ linux-2.6.10/arch/x86_64/kernel/traps.c     2005-04-05 16:47:53.915209360 +0800
873 @@ -27,6 +27,7 @@
874  #include <linux/spinlock.h>
875  #include <linux/interrupt.h>
876  #include <linux/module.h>
877 +#include <linux/dump.h>
878  #include <linux/moduleparam.h>
879  
880  #include <asm/system.h>
881 @@ -369,6 +370,7 @@
882         printk("\n");
883         notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV);
884         show_registers(regs);
885 +       dump((char *)str, regs); 
886         /* Executive summary in case the oops scrolled away */
887         printk(KERN_ALERT "RIP ");
888         printk_address(regs->rip); 
889 Index: linux-2.6.10/arch/x86_64/kernel/setup.c
890 ===================================================================
891 --- linux-2.6.10.orig/arch/x86_64/kernel/setup.c        2004-12-25 05:33:50.000000000 +0800
892 +++ linux-2.6.10/arch/x86_64/kernel/setup.c     2005-04-05 16:47:53.911209968 +0800
893 @@ -221,6 +221,8 @@
894         }
895  }
896  
897 +unsigned long crashdump_addr = 0xdeadbeef;
898 +
899  static __init void parse_cmdline_early (char ** cmdline_p)
900  {
901         char c = ' ', *to = command_line, *from = COMMAND_LINE;
902 @@ -311,6 +313,9 @@
903  
904                 if (!memcmp(from,"oops=panic", 10))
905                         panic_on_oops = 1;
906 +               
907 +               if (c == ' ' && !memcmp(from, "crashdump=", 10))
908 +                       crashdump_addr = memparse(from+10, &from);
909  
910         next_char:
911                 c = *(from++);
912 @@ -441,6 +446,10 @@
913                 reserve_bootmem_generic(addr, PAGE_SIZE);
914  }
915  
916 +#ifdef CONFIG_CRASH_DUMP_SOFTBOOT
917 +extern void crashdump_reserve(void);
918 +#endif
919 +
920  void __init setup_arch(char **cmdline_p)
921  {
922         unsigned long low_mem_size;
923 @@ -550,6 +559,9 @@
924         }
925  #endif
926         paging_init();
927 +#ifdef CONFIG_CRASH_DUMP_SOFTBOOT
928 +       crashdump_reserve(); /* Preserve crash dump state from prev boot */
929 +#endif
930  
931                 check_ioapic();
932  #ifdef CONFIG_ACPI_BOOT
933 Index: linux-2.6.10/arch/x86_64/kernel/smp.c
934 ===================================================================
935 --- linux-2.6.10.orig/arch/x86_64/kernel/smp.c  2004-12-25 05:35:50.000000000 +0800
936 +++ linux-2.6.10/arch/x86_64/kernel/smp.c       2005-04-05 16:47:53.915209360 +0800
937 @@ -20,6 +20,7 @@
938  #include <linux/kernel_stat.h>
939  #include <linux/mc146818rtc.h>
940  #include <linux/interrupt.h>
941 +#include <linux/dump.h>
942  
943  #include <asm/mtrr.h>
944  #include <asm/pgalloc.h>
945 @@ -151,6 +152,13 @@
946         if (!mm)
947                 BUG();
948  
949 +        if (vector == DUMP_VECTOR) {
950 +                /*
951 +                 * Setup DUMP IPI to be delivered as an NMI
952 +                 */
953 +                cfg = (cfg&~APIC_VECTOR_MASK)|APIC_DM_NMI;
954 +        }
955 +
956         /*
957          * I'm not happy about this global shared spinlock in the
958          * MM hot path, but we'll see how contended it is.
959 @@ -253,6 +261,13 @@
960         send_IPI_allbutself(KDB_VECTOR);
961  }
962  
963 +
964 +/* void dump_send_ipi(int (*dump_ipi_handler)(struct pt_regs *)); */
965 +void dump_send_ipi(void)
966 +{
967 +       send_IPI_allbutself(DUMP_VECTOR);
968 +}
969 +
970  /*
971   * this function sends a 'reschedule' IPI to another CPU.
972   * it goes straight through and wastes no time serializing
973 @@ -340,6 +355,18 @@
974         return 0;
975  }
976  
977 +void stop_this_cpu(void* dummy)
978 +{
979 +       /*
980 +        * Remove this CPU:
981 +        */
982 +       cpu_clear(smp_processor_id(), cpu_online_map);
983 +       local_irq_disable();
984 +       disable_local_APIC();
985 +       for (;;) 
986 +               asm("hlt"); 
987 +}
988 +
989  void smp_stop_cpu(void)
990  {
991         /*
992 Index: linux-2.6.10/arch/x86_64/kernel/x8664_ksyms.c
993 ===================================================================
994 --- linux-2.6.10.orig/arch/x86_64/kernel/x8664_ksyms.c  2004-12-25 05:34:01.000000000 +0800
995 +++ linux-2.6.10/arch/x86_64/kernel/x8664_ksyms.c       2005-04-05 16:47:53.914209512 +0800
996 @@ -32,6 +32,7 @@
997  #include <asm/unistd.h>
998  #include <asm/delay.h>
999  #include <asm/tlbflush.h>
1000 +#include <asm/e820.h>
1001  #include <asm/kdebug.h>
1002  
1003  extern spinlock_t rtc_lock;
1004 @@ -216,6 +217,20 @@
1005  extern unsigned long __supported_pte_mask;
1006  EXPORT_SYMBOL(__supported_pte_mask);
1007  
1008 +#ifdef CONFIG_CRASH_DUMP_MODULE
1009 +#ifdef CONFIG_SMP
1010 +extern irq_desc_t irq_desc[NR_IRQS];
1011 +extern cpumask_t irq_affinity[NR_IRQS];
1012 +extern void stop_this_cpu(void *);
1013 +EXPORT_SYMBOL(irq_desc);
1014 +EXPORT_SYMBOL(irq_affinity);
1015 +EXPORT_SYMBOL(dump_send_ipi);
1016 +EXPORT_SYMBOL(stop_this_cpu);
1017 +#endif
1018 +extern int page_is_ram(unsigned long);
1019 +EXPORT_SYMBOL(page_is_ram);
1020 +#endif
1021 +
1022  #ifdef CONFIG_SMP
1023  EXPORT_SYMBOL(flush_tlb_page);
1024  EXPORT_SYMBOL_GPL(flush_tlb_all);
1025 Index: linux-2.6.10/arch/x86_64/kernel/pci-gart.c
1026 ===================================================================
1027 --- linux-2.6.10.orig/arch/x86_64/kernel/pci-gart.c     2004-12-25 05:34:32.000000000 +0800
1028 +++ linux-2.6.10/arch/x86_64/kernel/pci-gart.c  2005-04-05 16:47:53.913209664 +0800
1029 @@ -34,7 +34,7 @@
1030  dma_addr_t bad_dma_address;
1031  
1032  unsigned long iommu_bus_base;  /* GART remapping area (physical) */
1033 -static unsigned long iommu_size;       /* size of remapping area bytes */
1034 +unsigned long iommu_size;      /* size of remapping area bytes */
1035  static unsigned long iommu_pages;      /* .. and in pages */
1036  
1037  u32 *iommu_gatt_base;          /* Remapping table */
1038 Index: linux-2.6.10/init/version.c
1039 ===================================================================
1040 --- linux-2.6.10.orig/init/version.c    2004-12-25 05:34:45.000000000 +0800
1041 +++ linux-2.6.10/init/version.c 2005-04-05 16:47:53.896212248 +0800
1042 @@ -11,6 +11,7 @@
1043  #include <linux/uts.h>
1044  #include <linux/utsname.h>
1045  #include <linux/version.h>
1046 +#include <linux/stringify.h>
1047  
1048  #define version(a) Version_ ## a
1049  #define version_string(a) version(a)
1050 @@ -31,3 +32,6 @@
1051  const char *linux_banner = 
1052         "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
1053         LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
1054 +
1055 +const char *LINUX_COMPILE_VERSION_ID = __stringify(LINUX_COMPILE_VERSION_ID);
1056 +LINUX_COMPILE_VERSION_ID_TYPE;
1057 Index: linux-2.6.10/init/kerntypes.c
1058 ===================================================================
1059 --- linux-2.6.10.orig/init/kerntypes.c  2005-04-05 19:01:49.158500672 +0800
1060 +++ linux-2.6.10/init/kerntypes.c       2005-04-05 16:47:53.895212400 +0800
1061 @@ -0,0 +1,40 @@
1062 +/*
1063 + * kerntypes.c
1064 + *
1065 + * Copyright (C) 2000 Tom Morano (tjm@sgi.com) and
1066 + *                    Matt D. Robinson (yakker@alacritech.com)
1067 + *
1068 + * Dummy module that includes headers for all kernel types of interest. 
1069 + * The kernel type information is used by the lcrash utility when 
1070 + * analyzing system crash dumps or the live system. Using the type 
1071 + * information for the running system, rather than kernel header files,
1072 + * makes for a more flexible and robust analysis tool.
1073 + *
1074 + * This source code is released under version 2 of the GNU GPL.
1075 + */
1076 +
1077 +#include <linux/compile.h>
1078 +#include <linux/module.h>
1079 +#include <linux/mm.h>
1080 +#include <linux/vmalloc.h>
1081 +#include <linux/config.h>
1082 +#include <linux/utsname.h>
1083 +#include <linux/kernel_stat.h>
1084 +#include <linux/dump.h>
1085 +
1086 +#include <asm/kerntypes.h>
1087 +
1088 +#ifdef LINUX_COMPILE_VERSION_ID_TYPE
1089 +/* Define version type for version validation of dump and kerntypes */
1090 +LINUX_COMPILE_VERSION_ID_TYPE;
1091 +#endif
1092 +#if defined(CONFIG_SMP) && defined(CONFIG_CRASH_DUMP)
1093 +extern struct runqueue runqueues;
1094 +struct runqueue rn;
1095 +#endif
1096 +
1097 +struct new_utsname *p;
1098 +void
1099 +kerntypes_dummy(void)
1100 +{
1101 +}
1102 Index: linux-2.6.10/init/main.c
1103 ===================================================================
1104 --- linux-2.6.10.orig/init/main.c       2005-04-05 16:29:30.028025720 +0800
1105 +++ linux-2.6.10/init/main.c    2005-04-05 16:47:53.897212096 +0800
1106 @@ -109,6 +109,16 @@
1107  EXPORT_SYMBOL(system_state);
1108  
1109  /*
1110 + * The kernel_magic value represents the address of _end, which allows
1111 + * namelist tools to "match" each other respectively.  That way a tool
1112 + * that looks at /dev/mem can verify that it is using the right System.map
1113 + * file -- if kernel_magic doesn't equal the namelist value of _end,
1114 + * something's wrong.
1115 + */
1116 +extern unsigned long _end;
1117 +unsigned long *kernel_magic = &_end;
1118 +
1119 +/*
1120   * Boot command-line arguments
1121   */
1122  #define MAX_INIT_ARGS 32
1123 Index: linux-2.6.10/init/Makefile
1124 ===================================================================
1125 --- linux-2.6.10.orig/init/Makefile     2004-12-25 05:34:32.000000000 +0800
1126 +++ linux-2.6.10/init/Makefile  2005-04-05 16:47:53.897212096 +0800
1127 @@ -9,12 +9,20 @@
1128  mounts-$(CONFIG_BLK_DEV_INITRD)        += do_mounts_initrd.o
1129  mounts-$(CONFIG_BLK_DEV_MD)    += do_mounts_md.o
1130  
1131 +extra-$(CONFIG_KERNTYPES)      += kerntypes.o
1132 +#For IA64, compile kerntypes in dwarf-2 format.
1133 +ifeq ($(CONFIG_IA64),y)
1134 +CFLAGS_kerntypes.o             := -gdwarf-2
1135 +else
1136 +CFLAGS_kerntypes.o             := -gstabs
1137 +endif
1138 +
1139  # files to be removed upon make clean
1140  clean-files := ../include/linux/compile.h
1141  
1142  # dependencies on generated files need to be listed explicitly
1143  
1144 -$(obj)/version.o: include/linux/compile.h
1145 +$(obj)/version.o $(obj)/kerntypes.o: include/linux/compile.h
1146  
1147  # compile.h changes depending on hostname, generation number, etc,
1148  # so we regenerate it always.
1149 @@ -24,3 +32,4 @@
1150  include/linux/compile.h: FORCE
1151         @echo '  CHK     $@'
1152         @$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CC) $(CFLAGS)"
1153 +
1154 Index: linux-2.6.10/include/asm-um/kerntypes.h
1155 ===================================================================
1156 --- linux-2.6.10.orig/include/asm-um/kerntypes.h        2005-04-05 19:01:49.158500672 +0800
1157 +++ linux-2.6.10/include/asm-um/kerntypes.h     2005-04-05 16:47:53.864217112 +0800
1158 @@ -0,0 +1,21 @@
1159 +/*
1160 + * asm-um/kerntypes.h
1161 + *
1162 + * Arch-dependent header file that includes headers for all arch-specific 
1163 + * types of interest.
1164 + * The kernel type information is used by the lcrash utility when
1165 + * analyzing system crash dumps or the live system. Using the type
1166 + * information for the running system, rather than kernel header files,
1167 + * makes for a more flexible and robust analysis tool.
1168 + *
1169 + * This source code is released under the GNU GPL.
1170 + */
1171 +
1172 +/* Usermode-Linux-specific header files */
1173 +#ifndef _UM_KERNTYPES_H
1174 +#define _UM_KERNTYPES_H
1175 +
1176 +/* Use the default */
1177 +#include <asm-generic/kerntypes.h>
1178 +
1179 +#endif /* _UM_KERNTYPES_H */
1180 Index: linux-2.6.10/include/linux/sysctl.h
1181 ===================================================================
1182 --- linux-2.6.10.orig/include/linux/sysctl.h    2005-04-05 16:29:27.969338688 +0800
1183 +++ linux-2.6.10/include/linux/sysctl.h 2005-04-05 16:47:53.894212552 +0800
1184 @@ -135,6 +135,7 @@
1185         KERN_HZ_TIMER=65,       /* int: hz timer on or off */
1186         KERN_UNKNOWN_NMI_PANIC=66, /* int: unknown nmi panic flag */
1187         KERN_SETUID_DUMPABLE=67, /* int: behaviour of dumps for setuid core */
1188 +       KERN_DUMP=68,           /* directory: dump parameters */
1189  };
1190  
1191  
1192 Index: linux-2.6.10/include/linux/sched.h
1193 ===================================================================
1194 --- linux-2.6.10.orig/include/linux/sched.h     2005-04-05 16:47:05.178618448 +0800
1195 +++ linux-2.6.10/include/linux/sched.h  2005-04-05 16:47:53.891213008 +0800
1196 @@ -94,6 +94,7 @@
1197  extern int nr_threads;
1198  extern int last_pid;
1199  DECLARE_PER_CPU(unsigned long, process_counts);
1200 +DECLARE_PER_CPU(struct runqueue, runqueues);
1201  extern int nr_processes(void);
1202  extern unsigned long nr_running(void);
1203  extern unsigned long nr_uninterruptible(void);
1204 @@ -760,6 +761,110 @@
1205  void yield(void);
1206  
1207  /*
1208 + * These are the runqueue data structures:
1209 + */
1210 +
1211 +#define BITMAP_SIZE ((((MAX_PRIO+1+7)/8)+sizeof(long)-1)/sizeof(long))
1212 +
1213 +typedef struct runqueue runqueue_t;
1214 +
1215 +struct prio_array {
1216 +       unsigned int nr_active;
1217 +       unsigned long bitmap[BITMAP_SIZE];
1218 +       struct list_head queue[MAX_PRIO];
1219 +};
1220 +
1221 +/*
1222 + * This is the main, per-CPU runqueue data structure.
1223 + *
1224 + * Locking rule: those places that want to lock multiple runqueues
1225 + * (such as the load balancing or the thread migration code), lock
1226 + * acquire operations must be ordered by ascending &runqueue.
1227 + */
1228 +struct runqueue {
1229 +       spinlock_t lock;
1230 +
1231 +       /*
1232 +        * nr_running and cpu_load should be in the same cacheline because
1233 +        * remote CPUs use both these fields when doing load calculation.
1234 +        */
1235 +       unsigned long nr_running;
1236 +#ifdef CONFIG_SMP
1237 +       unsigned long cpu_load;
1238 +#endif
1239 +       unsigned long long nr_switches;
1240 +
1241 +       /*
1242 +        * This is part of a global counter where only the total sum
1243 +        * over all CPUs matters. A task can increase this counter on
1244 +        * one CPU and if it got migrated afterwards it may decrease
1245 +        * it on another CPU. Always updated under the runqueue lock:
1246 +        */
1247 +       unsigned long nr_uninterruptible;
1248 +
1249 +       unsigned long expired_timestamp;
1250 +       unsigned long long timestamp_last_tick;
1251 +       task_t *curr, *idle;
1252 +       struct mm_struct *prev_mm;
1253 +       prio_array_t *active, *expired, arrays[2];
1254 +       int best_expired_prio;
1255 +       atomic_t nr_iowait;
1256 +
1257 +#ifdef CONFIG_SMP
1258 +       struct sched_domain *sd;
1259 +
1260 +       /* For active balancing */
1261 +       int active_balance;
1262 +       int push_cpu;
1263 +
1264 +       task_t *migration_thread;
1265 +       struct list_head migration_queue;
1266 +#endif
1267 +
1268 +#ifdef CONFIG_SCHEDSTATS
1269 +       /* latency stats */
1270 +       struct sched_info rq_sched_info;
1271 +
1272 +       /* sys_sched_yield() stats */
1273 +       unsigned long yld_exp_empty;
1274 +       unsigned long yld_act_empty;
1275 +       unsigned long yld_both_empty;
1276 +       unsigned long yld_cnt;
1277 +
1278 +       /* schedule() stats */
1279 +       unsigned long sched_noswitch;
1280 +       unsigned long sched_switch;
1281 +       unsigned long sched_cnt;
1282 +       unsigned long sched_goidle;
1283 +
1284 +       /* pull_task() stats */
1285 +       unsigned long pt_gained[MAX_IDLE_TYPES];
1286 +       unsigned long pt_lost[MAX_IDLE_TYPES];
1287 +
1288 +       /* active_load_balance() stats */
1289 +       unsigned long alb_cnt;
1290 +       unsigned long alb_lost;
1291 +       unsigned long alb_gained;
1292 +       unsigned long alb_failed;
1293 +
1294 +       /* try_to_wake_up() stats */
1295 +       unsigned long ttwu_cnt;
1296 +       unsigned long ttwu_attempts;
1297 +       unsigned long ttwu_moved;
1298 +
1299 +       /* wake_up_new_task() stats */
1300 +       unsigned long wunt_cnt;
1301 +       unsigned long wunt_moved;
1302 +
1303 +       /* sched_migrate_task() stats */
1304 +       unsigned long smt_cnt;
1305 +
1306 +       /* sched_balance_exec() stats */
1307 +       unsigned long sbe_cnt;
1308 +#endif
1309 +};
1310 +
1311 +/*
1312   * The default (Linux) execution domain.
1313   */
1314  extern struct exec_domain      default_exec_domain;
1315 Index: linux-2.6.10/include/linux/miscdevice.h
1316 ===================================================================
1317 --- linux-2.6.10.orig/include/linux/miscdevice.h        2004-12-25 05:34:58.000000000 +0800
1318 +++ linux-2.6.10/include/linux/miscdevice.h     2005-04-05 16:47:53.893212704 +0800
1319 @@ -25,6 +25,7 @@
1320  #define MICROCODE_MINOR                184
1321  #define MWAVE_MINOR    219             /* ACP/Mwave Modem */
1322  #define MPT_MINOR      220
1323 +#define CRASH_DUMP_MINOR   230         /* LKCD */
1324  #define MISC_DYNAMIC_MINOR 255
1325  
1326  #define TUN_MINOR           200
1327 Index: linux-2.6.10/include/linux/dump.h
1328 ===================================================================
1329 --- linux-2.6.10.orig/include/linux/dump.h      2005-04-05 19:01:49.158500672 +0800
1330 +++ linux-2.6.10/include/linux/dump.h   2005-04-05 16:47:53.893212704 +0800
1331 @@ -0,0 +1,406 @@
1332 +/*
1333 + * Kernel header file for Linux crash dumps.
1334 + *
1335 + * Created by: Matt Robinson (yakker@sgi.com)
1336 + * Copyright 1999 - 2002 Silicon Graphics, Inc. All rights reserved.
1337 + *
1338 + * vmdump.h to dump.h by: Matt D. Robinson (yakker@sourceforge.net)
1339 + * Copyright 2001 - 2002 Matt D. Robinson.  All rights reserved.
1340 + * Copyright (C) 2002 Free Software Foundation, Inc. All rights reserved.
1341 + *
1342 + * Most of this is the same old stuff from vmdump.h, except now we're
1343 + * actually a stand-alone driver plugged into the block layer interface,
1344 + * with the exception that we now allow for compression modes externally
1345 + * loaded (e.g., someone can come up with their own).
1346 + *
1347 + * This code is released under version 2 of the GNU GPL.
1348 + */
1349 +
1350 +/* This header file includes all structure definitions for crash dumps. */
1351 +#ifndef _DUMP_H
1352 +#define _DUMP_H
1353 +
1354 +#if defined(CONFIG_CRASH_DUMP) || defined (CONFIG_CRASH_DUMP_MODULE)
1355 +
1356 +#include <linux/list.h>
1357 +#include <linux/notifier.h>
1358 +#include <linux/dumpdev.h>
1359 +#include <asm/ioctl.h>
1360 +
1361 +/* 
1362 + * Predefine default DUMP_PAGE constants, asm header may override.
1363 + *
1364 + * On ia64 discontinuous memory systems it's possible for the memory
1365 + * banks to stop at 2**12 page alignments, the smallest possible page
1366 + * size. But the system page size, PAGE_SIZE, is in fact larger.
1367 + */
1368 +#define DUMP_PAGE_SHIFT        PAGE_SHIFT
1369 +#define DUMP_PAGE_MASK         PAGE_MASK
1370 +#define DUMP_PAGE_ALIGN(addr)  PAGE_ALIGN(addr)
1371 +
1372 +/*
1373 + * Dump offset changed from 4Kb to 64Kb to support multiple PAGE_SIZE 
1374 + * (kernel page size). Assumption goes that 64K is the highest page size 
1375 + * supported 
1376 + */
1377 +
1378 +#define DUMP_HEADER_OFFSET     (1ULL << 16)
1379 +
1380 +#define OLDMINORBITS   8
1381 +#define OLDMINORMASK   ((1U << OLDMINORBITS) -1)
1382 +
1383 +/* Making DUMP_PAGE_SIZE = PAGE_SIZE, to support dumping on architectures 
1384 + * which support page sizes (PAGE_SIZE) greater than 4KB.
1385 + * Will it affect ia64 discontinuous memory systems ????
1386 + */
1387 +#define DUMP_PAGE_SIZE         PAGE_SIZE
1388 +
1389 +/* thread_info lies at the bottom of stack, (Except IA64). */
1390 +#define STACK_START_POSITION(tsk)               (tsk->thread_info)
1391 +/* 
1392 + * Predefined default memcpy() to use when copying memory to the dump buffer.
1393 + *
1394 + * On ia64 there is a heads up function that can be called to let the prom
1395 + * machine check monitor know that the current activity is risky and it should
1396 + * ignore the fault (nofault). In this case the ia64 header will redefine this
1397 + * macro to __dump_memcpy() and use it's arch specific version.
1398 + */
1399 +#define DUMP_memcpy            memcpy
1400 +#define bzero(a,b)              memset(a, 0, b)
1401 +
1402 +/* necessary header files */
1403 +#include <asm/dump.h>                  /* for architecture-specific header */
1404 +
1405 +/* 
1406 + * Size of the buffer that's used to hold:
1407 + *
1408 + *     1. the dump header (padded to fill the complete buffer)
1409 + *     2. the possibly compressed page headers and data
1410 + *   
1411 + *  = 256k for page size >= 64k
1412 + *  = 64k  for page size < 64k
1413 + */
1414 +#if (PAGE_SHIFT >= 16)
1415 +#define DUMP_BUFFER_SIZE       (256 * 1024)  /* size of dump buffer         */
1416 +#else
1417 +#define DUMP_BUFFER_SIZE       (64 * 1024)  /* size of dump buffer         */
1418 +#endif
1419 +
1420 +#define DUMP_HEADER_SIZE       DUMP_BUFFER_SIZE
1421 +
1422 +/* standard header definitions */
1423 +#define DUMP_MAGIC_NUMBER      0xa8190173618f23edULL  /* dump magic number */
1424 +#define DUMP_MAGIC_LIVE                0xa8190173618f23cdULL  /* live magic number */
1425 +#define DUMP_VERSION_NUMBER    0x8     /* dump version number              */
1426 +#define DUMP_PANIC_LEN         0x100   /* dump panic string length         */
1427 +
1428 +/* dump levels - type specific stuff added later -- add as necessary */
1429 +#define DUMP_LEVEL_NONE                0x0     /* no dumping at all -- just bail   */
1430 +#define DUMP_LEVEL_HEADER      0x1     /* kernel dump header only          */
1431 +#define DUMP_LEVEL_KERN                0x2     /* dump header and kernel pages     */
1432 +#define DUMP_LEVEL_USED                0x4     /* dump header, kernel/user pages   */
1433 +#define DUMP_LEVEL_ALL_RAM     0x8     /* dump header, all RAM pages       */
1434 +#define DUMP_LEVEL_ALL         0x10    /* dump all memory RAM and firmware */
1435 +
1436 +
1437 +/* dump compression options -- add as necessary */
1438 +#define DUMP_COMPRESS_NONE     0x0     /* don't compress this dump         */
1439 +#define DUMP_COMPRESS_RLE      0x1     /* use RLE compression              */
1440 +#define DUMP_COMPRESS_GZIP     0x2     /* use GZIP compression             */
1441 +
1442 +/* dump flags - any dump-type specific flags -- add as necessary */
1443 +#define DUMP_FLAGS_NONE                0x0     /* no flags are set for this dump   */
1444 +#define DUMP_FLAGS_SOFTBOOT    0x2     /* 2 stage soft-boot based dump     */
1445 +#define DUMP_FLAGS_NONDISRUPT   0X1    /* non-disruptive dumping           */
1446 +
1447 +#define DUMP_FLAGS_TARGETMASK  0xf0000000 /* handle special case targets   */
1448 +#define DUMP_FLAGS_DISKDUMP    0x80000000 /* dump to local disk            */
1449 +#define DUMP_FLAGS_NETDUMP     0x40000000 /* dump over the network         */
1450 +
1451 +/* dump header flags -- add as necessary */
1452 +#define DUMP_DH_FLAGS_NONE     0x0     /* no flags set (error condition!)  */
1453 +#define DUMP_DH_RAW            0x1     /* raw page (no compression)        */
1454 +#define DUMP_DH_COMPRESSED     0x2     /* page is compressed               */
1455 +#define DUMP_DH_END            0x4     /* end marker on a full dump        */
1456 +#define DUMP_DH_TRUNCATED      0x8     /* dump is incomplete               */
1457 +#define DUMP_DH_TEST_PATTERN   0x10    /* dump page is a test pattern      */
1458 +#define DUMP_DH_NOT_USED       0x20    /* 1st bit not used in flags        */
1459 +
1460 +/* names for various dump parameters in /proc/kernel */
1461 +#define DUMP_ROOT_NAME         "sys/dump"
1462 +#define DUMP_DEVICE_NAME       "device"
1463 +#define DUMP_COMPRESS_NAME     "compress"
1464 +#define DUMP_LEVEL_NAME                "level"
1465 +#define DUMP_FLAGS_NAME                "flags"
1466 +#define DUMP_ADDR_NAME         "addr"
1467 +
1468 +#define DUMP_SYSRQ_KEY         'd'     /* key to use for MAGIC_SYSRQ key   */
1469 +
1470 +/* CTL_DUMP names: */
1471 +enum
1472 +{
1473 +       CTL_DUMP_DEVICE=1,
1474 +       CTL_DUMP_COMPRESS=3,
1475 +       CTL_DUMP_LEVEL=3,
1476 +       CTL_DUMP_FLAGS=4,
1477 +       CTL_DUMP_ADDR=5,
1478 +       CTL_DUMP_TEST=6,
1479 +};
1480 +
1481 +
1482 +/* page size for gzip compression -- buffered slightly beyond hardware PAGE_SIZE used by DUMP */
1483 +#define DUMP_DPC_PAGE_SIZE     (DUMP_PAGE_SIZE + 512)
1484 +
1485 +/* dump ioctl() control options */
1486 +#define DIOSDUMPDEV     _IOW('p', 0xA0, unsigned int)  /* set the dump device              */
1487 +#define DIOGDUMPDEV     _IOR('p', 0xA1, unsigned int)  /* get the dump device              */
1488 +#define DIOSDUMPLEVEL   _IOW('p', 0xA2, unsigned int)  /* set the dump level               */
1489 +#define DIOGDUMPLEVEL   _IOR('p', 0xA3, unsigned int)  /* get the dump level               */
1490 +#define DIOSDUMPFLAGS   _IOW('p', 0xA4, unsigned int)  /* set the dump flag parameters     */
1491 +#define DIOGDUMPFLAGS   _IOR('p', 0xA5, unsigned int)  /* get the dump flag parameters     */
1492 +#define DIOSDUMPCOMPRESS _IOW('p', 0xA6, unsigned int) /* set the dump compress level      */
1493 +#define DIOGDUMPCOMPRESS _IOR('p', 0xA7, unsigned int) /* get the dump compress level      */
1494 +
1495 +/* these ioctls are used only by netdump module */
1496 +#define DIOSTARGETIP    _IOW('p', 0xA8, unsigned int)  /* set the target m/c's ip           */
1497 +#define DIOGTARGETIP    _IOR('p', 0xA9, unsigned int)  /* get the target m/c's ip           */
1498 +#define DIOSTARGETPORT  _IOW('p', 0xAA, unsigned int) /* set the target m/c's port          */
1499 +#define DIOGTARGETPORT  _IOR('p', 0xAB, unsigned int) /* get the target m/c's port          */
1500 +#define DIOSSOURCEPORT  _IOW('p', 0xAC, unsigned int) /* set the source m/c's port          */
1501 +#define DIOGSOURCEPORT  _IOR('p', 0xAD, unsigned int) /* get the source m/c's port          */
1502 +#define DIOSETHADDR     _IOW('p', 0xAE, unsigned int) /* set ethernet address      */
1503 +#define DIOGETHADDR     _IOR('p', 0xAF, unsigned int) /* get ethernet address       */
1504 +#define DIOGDUMPOKAY   _IOR('p', 0xB0, unsigned int) /* check if dump is configured      */
1505 +#define DIOSDUMPTAKE    _IOW('p', 0xB1, unsigned int) /* Take a manual dump               */
1506 +
1507 +/*
1508 + * Structure: __dump_header
1509 + *  Function: This is the header dumped at the top of every valid crash
1510 + *            dump.  
1511 + */
1512 +struct __dump_header {
1513 +       /* the dump magic number -- unique to verify dump is valid */
1514 +       u64     dh_magic_number;
1515 +
1516 +       /* the version number of this dump */
1517 +       u32     dh_version;
1518 +
1519 +       /* the size of this header (in case we can't read it) */
1520 +       u32     dh_header_size;
1521 +
1522 +       /* the level of this dump (just a header?) */
1523 +       u32     dh_dump_level;
1524 +
1525 +       /* 
1526 +        * We assume dump_page_size to be 4K in every case.
1527 +        * Store here the configurable system page size (4K, 8K, 16K, etc.) 
1528 +        */
1529 +       u32     dh_page_size;
1530 +
1531 +       /* the size of all physical memory */
1532 +       u64     dh_memory_size;
1533 +
1534 +       /* the start of physical memory */
1535 +       u64     dh_memory_start;
1536 +
1537 +       /* the end of physical memory */
1538 +       u64     dh_memory_end;
1539 +
1540 +       /* the number of hardware/physical pages in this dump specifically */
1541 +       u32     dh_num_dump_pages;
1542 +
1543 +       /* the panic string, if available */
1544 +       char    dh_panic_string[DUMP_PANIC_LEN];
1545 +
1546 +       /* timeval depends on architecture, two long values */
1547 +       struct {
1548 +               u64 tv_sec;
1549 +               u64 tv_usec;
1550 +       } dh_time; /* the time of the system crash */
1551 +
1552 +       /* the NEW utsname (uname) information -- in character form */
1553 +       /* we do this so we don't have to include utsname.h         */
1554 +       /* plus it helps us be more architecture independent        */
1555 +       /* now maybe one day soon they'll make the [65] a #define!  */
1556 +       char    dh_utsname_sysname[65];
1557 +       char    dh_utsname_nodename[65];
1558 +       char    dh_utsname_release[65];
1559 +       char    dh_utsname_version[65];
1560 +       char    dh_utsname_machine[65];
1561 +       char    dh_utsname_domainname[65];
1562 +
1563 +       /* the address of current task (OLD = void *, NEW = u64) */
1564 +       u64     dh_current_task;
1565 +
1566 +       /* what type of compression we're using in this dump (if any) */
1567 +       u32     dh_dump_compress;
1568 +
1569 +       /* any additional flags */
1570 +       u32     dh_dump_flags;
1571 +
1572 +       /* any additional flags */
1573 +       u32     dh_dump_device;
1574 +} __attribute__((packed));
1575 +
1576 +/*
1577 + * Structure: __dump_page
1578 + *  Function: To act as the header associated to each physical page of
1579 + *            memory saved in the system crash dump.  This allows for
1580 + *            easy reassembly of each crash dump page.  The address bits
1581 + *            are split to make things easier for 64-bit/32-bit system
1582 + *            conversions.
1583 + *
1584 + * dp_byte_offset and dp_page_index are landmarks that are helpful when
1585 + * looking at a hex dump of /dev/vmdump,
1586 + */
1587 +struct __dump_page {
1588 +       /* the address of this dump page */
1589 +       u64     dp_address;
1590 +
1591 +       /* the size of this dump page */
1592 +       u32     dp_size;
1593 +
1594 +       /* flags (currently DUMP_COMPRESSED, DUMP_RAW or DUMP_END) */
1595 +       u32     dp_flags;
1596 +} __attribute__((packed));
1597 +
1598 +/*
1599 + * Structure: __lkcdinfo
1600 + * Function:  This structure contains information needed for the lkcdutils
1601 + *            package (particularly lcrash) to determine what information is
1602 + *            associated to this kernel, specifically.
1603 + */
1604 +struct __lkcdinfo {
1605 +       int     arch;
1606 +       int     ptrsz;
1607 +       int     byte_order;
1608 +       int     linux_release;
1609 +       int     page_shift;
1610 +       int     page_size;
1611 +       u64     page_mask;
1612 +       u64     page_offset;
1613 +       int     stack_offset;
1614 +};
1615 +
1616 +#ifdef __KERNEL__
1617 +
1618 +/*
1619 + * Structure: __dump_compress
1620 + *  Function: This is what an individual compression mechanism can use
1621 + *            to plug in their own compression techniques.  It's always
1622 + *            best to build these as individual modules so that people
1623 + *            can put in whatever they want.
1624 + */
1625 +struct __dump_compress {
1626 +       /* the list_head structure for list storage */
1627 +       struct list_head list;
1628 +
1629 +       /* the type of compression to use (DUMP_COMPRESS_XXX) */
1630 +       int compress_type;
1631 +       const char *compress_name;
1632 +
1633 +       /* the compression function to call */
1634 +       u32 (*compress_func)(const u8 *, u32, u8 *, u32, unsigned long);
1635 +};
1636 +
1637 +/* functions for dump compression registration */
1638 +extern void dump_register_compression(struct __dump_compress *);
1639 +extern void dump_unregister_compression(int);
1640 +
1641 +/*
1642 + * Structure dump_mbank[]:
1643 + *
1644 + * For CONFIG_DISCONTIGMEM systems this array specifies the
1645 + * memory banks/chunks that need to be dumped after a panic.
1646 + *
1647 + * For classic systems it specifies a single set of pages from
1648 + * 0 to max_mapnr.
1649 + */
1650 +struct __dump_mbank {
1651 +       u64     start;
1652 +       u64     end;
1653 +       int     type;
1654 +       int     pad1;
1655 +       long    pad2;
1656 +};
1657 +
1658 +#define DUMP_MBANK_TYPE_CONVENTIONAL_MEMORY            1
1659 +#define DUMP_MBANK_TYPE_OTHER                          2
1660 +
1661 +#define MAXCHUNKS 256
1662 +extern int dump_mbanks;
1663 +extern struct __dump_mbank dump_mbank[MAXCHUNKS];
1664 +
1665 +/* notification event codes */
1666 +#define DUMP_BEGIN             0x0001  /* dump beginning */
1667 +#define DUMP_END               0x0002  /* dump ending */
1668 +
1669 +/* Scheduler soft spin control.
1670 + *
1671 + * 0 - no dump in progress
1672 + * 1 - cpu0 is dumping, ...
1673 + */
1674 +extern unsigned long dump_oncpu;
1675 +extern void dump_execute(const char *, const struct pt_regs *);
1676 +
1677 +/*
1678 + *     Notifier list for kernel code which wants to be called
1679 + *     at kernel dump. 
1680 + */
1681 +extern struct notifier_block *dump_notifier_list;
1682 +static inline int register_dump_notifier(struct notifier_block *nb)
1683 +{
1684 +       return notifier_chain_register(&dump_notifier_list, nb);
1685 +}
1686 +static inline int unregister_dump_notifier(struct notifier_block * nb)
1687 +{
1688 +       return notifier_chain_unregister(&dump_notifier_list, nb);
1689 +}
1690 +
1691 +extern void (*dump_function_ptr)(const char *, const struct pt_regs *);
1692 +static inline void dump(char * str, struct pt_regs * regs)
1693 +{
1694 +       if (dump_function_ptr)
1695 +               dump_function_ptr(str, regs);
1696 +}
1697 +
1698 +/*
1699 + * Common Arch Specific Functions should be declared here.
1700 + * This allows the C compiler to detect discrepancies.
1701 + */
1702 +extern void    __dump_open(void);
1703 +extern void    __dump_cleanup(void);
1704 +extern void    __dump_clean_irq_state(void);
1705 +extern void    __dump_init(u64);
1706 +extern void    __dump_save_regs(struct pt_regs *, const struct pt_regs *);
1707 +extern void    __dump_save_context(int cpu, const struct pt_regs *, struct task_struct *tsk);
1708 +extern int     __dump_configure_header(const struct pt_regs *);
1709 +extern int     __dump_irq_enable(void);
1710 +extern void    __dump_irq_restore(void);
1711 +extern int     __dump_page_valid(unsigned long index);
1712 +#ifdef CONFIG_SMP
1713 +extern void    __dump_save_other_cpus(void);
1714 +#else
1715 +#define        __dump_save_other_cpus()
1716 +#endif
1717 +
1718 +extern int manual_handle_crashdump(void);
1719 +
1720 +/* to track all used (compound + zero order) pages */
1721 +#define PageInuse(p)   (PageCompound(p) || page_count(p))
1722 +
1723 +#endif /* __KERNEL__ */
1724 +
1725 +#else  /* !CONFIG_CRASH_DUMP */
1726 +
1727 +/* If not configured then make code disappear! */
1728 +#define register_dump_watchdog(x)      do { } while(0)
1729 +#define unregister_dump_watchdog(x)    do { } while(0)
1730 +#define register_dump_notifier(x)      do { } while(0)
1731 +#define unregister_dump_notifier(x)    do { } while(0)
1732 +#define dump_in_progress()             0
1733 +#define dump(x, y)                     do { } while(0)
1734 +
1735 +#endif /* !CONFIG_CRASH_DUMP */
1736 +
1737 +#endif /* _DUMP_H */
1738 Index: linux-2.6.10/include/linux/dumpdev.h
1739 ===================================================================
1740 --- linux-2.6.10.orig/include/linux/dumpdev.h   2005-04-05 19:01:49.158500672 +0800
1741 +++ linux-2.6.10/include/linux/dumpdev.h        2005-04-05 16:47:53.890213160 +0800
1742 @@ -0,0 +1,163 @@
1743 +/*
1744 + * Generic dump device interfaces for flexible system dump 
1745 + * (Enables variation of dump target types e.g disk, network, memory)
1746 + *
1747 + * These interfaces have evolved based on discussions on lkcd-devel. 
1748 + * Eventually the intent is to support primary and secondary or 
1749 + * alternate targets registered at the same time, with scope for 
1750 + * situation based failover or multiple dump devices used for parallel 
1751 + * dump i/o.
1752 + *
1753 + * Started: Oct 2002 - Suparna Bhattacharya (suparna@in.ibm.com)
1754 + *
1755 + * Copyright (C) 2001 - 2002 Matt D. Robinson.  All rights reserved.
1756 + * Copyright (C) 2002 International Business Machines Corp. 
1757 + *
1758 + * This code is released under version 2 of the GNU GPL.
1759 + */
1760 +
1761 +#ifndef _LINUX_DUMPDEV_H
1762 +#define _LINUX_DUMPDEV_H
1763 +
1764 +#include <linux/kernel.h>
1765 +#include <linux/wait.h>
1766 +#include <linux/netpoll.h>
1767 +#include <linux/bio.h>
1768 +
1769 +/* Determined by the dump target (device) type */
1770 +
1771 +struct dump_dev;
1772 +
1773 +struct dump_dev_ops {
1774 +       int (*open)(struct dump_dev *, unsigned long); /* configure */
1775 +       int (*release)(struct dump_dev *); /* unconfigure */
1776 +       int (*silence)(struct dump_dev *); /* when dump starts */
1777 +       int (*resume)(struct dump_dev *); /* when dump is over */
1778 +       int (*seek)(struct dump_dev *, loff_t);
1779 +       /* trigger a write (async in nature typically) */
1780 +       int (*write)(struct dump_dev *, void *, unsigned long);
1781 +       /* not usually used during dump, but option available */
1782 +       int (*read)(struct dump_dev *, void *, unsigned long);
1783 +       /* use to poll for completion */
1784 +       int (*ready)(struct dump_dev *, void *); 
1785 +       int (*ioctl)(struct dump_dev *, unsigned int, unsigned long);
1786 +};
1787 +
1788 +struct dump_dev {
1789 +       char type_name[32]; /* block, net-poll etc */
1790 +       unsigned long device_id; /* interpreted differently for various types */
1791 +       struct dump_dev_ops *ops;
1792 +       struct list_head list;
1793 +       loff_t curr_offset;
1794 +       struct netpoll np;
1795 +};
1796 +
1797 +/*
1798 + * dump_dev type variations: 
1799 + */
1800 +
1801 +/* block */
1802 +struct dump_blockdev {
1803 +       struct dump_dev ddev;
1804 +       dev_t dev_id;
1805 +       struct block_device *bdev;
1806 +       struct bio *bio;
1807 +       loff_t start_offset;
1808 +       loff_t limit;
1809 +       int err;
1810 +};
1811 +
1812 +static inline struct dump_blockdev *DUMP_BDEV(struct dump_dev *dev)
1813 +{
1814 +       return container_of(dev, struct dump_blockdev, ddev);
1815 +}
1816 +
1817 +
1818 +/* mem  - for internal use by soft-boot based dumper */
1819 +struct dump_memdev {
1820 +       struct dump_dev ddev;
1821 +       unsigned long indirect_map_root;
1822 +       unsigned long nr_free;
1823 +       struct page *curr_page;
1824 +       unsigned long *curr_map;
1825 +       unsigned long curr_map_offset;
1826 +       unsigned long last_offset;
1827 +       unsigned long last_used_offset;
1828 +       unsigned long last_bs_offset;
1829 +};     
1830 +
1831 +static inline struct dump_memdev *DUMP_MDEV(struct dump_dev *dev)
1832 +{
1833 +       return container_of(dev, struct dump_memdev, ddev);
1834 +}
1835 +
1836 +/* Todo/future - meant for raw dedicated interfaces e.g. mini-ide driver */
1837 +struct dump_rdev {
1838 +       struct dump_dev ddev;
1839 +       char name[32];
1840 +       int (*reset)(struct dump_rdev *, unsigned int, 
1841 +               unsigned long);
1842 +       /* ... to do ... */
1843 +};
1844 +
1845 +/* just to get the size right when saving config across a soft-reboot */
1846 +struct dump_anydev {
1847 +       union {
1848 +               struct dump_blockdev bddev;
1849 +               /* .. add other types here .. */
1850 +       };
1851 +};
1852 +
1853 +
1854 +
1855 +/* Dump device / target operation wrappers */
1856 +/* These assume that dump_dev is initiatized to dump_config.dumper->dev */
1857 +
1858 +extern struct dump_dev *dump_dev;
1859 +
1860 +static inline int dump_dev_open(unsigned long arg)
1861 +{
1862 +       return dump_dev->ops->open(dump_dev, arg);
1863 +}
1864 +
1865 +static inline int dump_dev_release(void)
1866 +{
1867 +       return dump_dev->ops->release(dump_dev);
1868 +}
1869 +
1870 +static inline int dump_dev_silence(void)
1871 +{
1872 +       return dump_dev->ops->silence(dump_dev);
1873 +}
1874 +
1875 +static inline int dump_dev_resume(void)
1876 +{
1877 +       return dump_dev->ops->resume(dump_dev);
1878 +}
1879 +
1880 +static inline int dump_dev_seek(loff_t offset)
1881 +{
1882 +       return dump_dev->ops->seek(dump_dev, offset);
1883 +}
1884 +
1885 +static inline int dump_dev_write(void *buf, unsigned long len)
1886 +{
1887 +       return dump_dev->ops->write(dump_dev, buf, len);
1888 +}
1889 +
1890 +static inline int dump_dev_ready(void *buf)
1891 +{
1892 +       return dump_dev->ops->ready(dump_dev, buf);
1893 +}
1894 +
1895 +static inline int dump_dev_ioctl(unsigned int cmd, unsigned long arg)
1896 +{
1897 +       if (!dump_dev || !dump_dev->ops->ioctl)
1898 +               return -EINVAL;
1899 +       return dump_dev->ops->ioctl(dump_dev, cmd, arg);
1900 +}
1901 +
1902 +extern int dump_register_device(struct dump_dev *);
1903 +extern void dump_unregister_device(struct dump_dev *);
1904 +
1905 +#endif /*  _LINUX_DUMPDEV_H */
1906 Index: linux-2.6.10/include/linux/dump_netdev.h
1907 ===================================================================
1908 --- linux-2.6.10.orig/include/linux/dump_netdev.h       2005-04-05 19:01:49.158500672 +0800
1909 +++ linux-2.6.10/include/linux/dump_netdev.h    2005-04-05 16:47:53.889213312 +0800
1910 @@ -0,0 +1,80 @@
1911 +/*
1912 + *  linux/drivers/net/netconsole.h
1913 + *
1914 + *  Copyright (C) 2001  Ingo Molnar <mingo@redhat.com>
1915 + *
1916 + *  This file contains the implementation of an IRQ-safe, crash-safe
1917 + *  kernel console implementation that outputs kernel messages to the
1918 + *  network.
1919 + *
1920 + * Modification history:
1921 + *
1922 + * 2001-09-17    started by Ingo Molnar.
1923 + */
1924 +
1925 +/****************************************************************
1926 + *      This program is free software; you can redistribute it and/or modify
1927 + *      it under the terms of the GNU General Public License as published by
1928 + *      the Free Software Foundation; either version 2, or (at your option)
1929 + *      any later version.
1930 + *
1931 + *      This program is distributed in the hope that it will be useful,
1932 + *      but WITHOUT ANY WARRANTY; without even the implied warranty of
1933 + *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1934 + *      GNU General Public License for more details.
1935 + *
1936 + *      You should have received a copy of the GNU General Public License
1937 + *      along with this program; if not, write to the Free Software
1938 + *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
1939 + *
1940 + ****************************************************************/
1941 +
1942 +#define NETCONSOLE_VERSION 0x03
1943 +
1944 +enum netdump_commands {
1945 +       COMM_NONE = 0,
1946 +       COMM_SEND_MEM = 1,
1947 +       COMM_EXIT = 2,
1948 +       COMM_REBOOT = 3,
1949 +       COMM_HELLO = 4,
1950 +       COMM_GET_NR_PAGES = 5,
1951 +       COMM_GET_PAGE_SIZE = 6,
1952 +       COMM_START_NETDUMP_ACK = 7,
1953 +       COMM_GET_REGS = 8,
1954 +       COMM_GET_MAGIC = 9,
1955 +       COMM_START_WRITE_NETDUMP_ACK = 10,
1956 +};
1957 +
1958 +typedef struct netdump_req_s {
1959 +       u64 magic;
1960 +       u32 nr;
1961 +       u32 command;
1962 +       u32 from;
1963 +       u32 to;
1964 +} req_t;
1965 +
1966 +enum netdump_replies {
1967 +       REPLY_NONE = 0,
1968 +       REPLY_ERROR = 1,
1969 +       REPLY_LOG = 2,
1970 +       REPLY_MEM = 3,
1971 +       REPLY_RESERVED = 4,
1972 +       REPLY_HELLO = 5,
1973 +       REPLY_NR_PAGES = 6,
1974 +       REPLY_PAGE_SIZE = 7,
1975 +       REPLY_START_NETDUMP = 8,
1976 +       REPLY_END_NETDUMP = 9,
1977 +       REPLY_REGS = 10,
1978 +       REPLY_MAGIC = 11,
1979 +       REPLY_START_WRITE_NETDUMP = 12,
1980 +};
1981 +
1982 +typedef struct netdump_reply_s {
1983 +       u32 nr;
1984 +       u32 code;
1985 +       u32 info;
1986 +} reply_t;
1987 +
1988 +#define HEADER_LEN (1 + sizeof(reply_t))
1989 +
1990 +
1991 Index: linux-2.6.10/include/asm-parisc/kerntypes.h
1992 ===================================================================
1993 --- linux-2.6.10.orig/include/asm-parisc/kerntypes.h    2005-04-05 19:01:49.158500672 +0800
1994 +++ linux-2.6.10/include/asm-parisc/kerntypes.h 2005-04-05 16:47:53.870216200 +0800
1995 @@ -0,0 +1,21 @@
1996 +/*
1997 + * asm-parisc/kerntypes.h
1998 + *
1999 + * Arch-dependent header file that includes headers for all arch-specific 
2000 + * types of interest.
2001 + * The kernel type information is used by the lcrash utility when
2002 + * analyzing system crash dumps or the live system. Using the type
2003 + * information for the running system, rather than kernel header files,
2004 + * makes for a more flexible and robust analysis tool.
2005 + *
2006 + * This source code is released under the GNU GPL.
2007 + */
2008 +
2009 +/* PA-RISC-specific header files */
2010 +#ifndef _PARISC_KERNTYPES_H
2011 +#define _PARISC_KERNTYPES_H
2012 +
2013 +/* Use the default */
2014 +#include <asm-generic/kerntypes.h>
2015 +
2016 +#endif /* _PARISC_KERNTYPES_H */
2017 Index: linux-2.6.10/include/asm-h8300/kerntypes.h
2018 ===================================================================
2019 --- linux-2.6.10.orig/include/asm-h8300/kerntypes.h     2005-04-05 19:01:49.158500672 +0800
2020 +++ linux-2.6.10/include/asm-h8300/kerntypes.h  2005-04-05 16:47:53.880214680 +0800
2021 @@ -0,0 +1,21 @@
2022 +/*
2023 + * asm-h8300/kerntypes.h
2024 + *
2025 + * Arch-dependent header file that includes headers for all arch-specific 
2026 + * types of interest.
2027 + * The kernel type information is used by the lcrash utility when
2028 + * analyzing system crash dumps or the live system. Using the type
2029 + * information for the running system, rather than kernel header files,
2030 + * makes for a more flexible and robust analysis tool.
2031 + *
2032 + * This source code is released under the GNU GPL.
2033 + */
2034 +
2035 +/* H8300-specific header files */
2036 +#ifndef _H8300_KERNTYPES_H
2037 +#define _H8300_KERNTYPES_H
2038 +
2039 +/* Use the default */
2040 +#include <asm-generic/kerntypes.h>
2041 +
2042 +#endif /* _H8300_KERNTYPES_H */
2043 Index: linux-2.6.10/include/asm-ppc/kerntypes.h
2044 ===================================================================
2045 --- linux-2.6.10.orig/include/asm-ppc/kerntypes.h       2005-04-05 19:01:49.158500672 +0800
2046 +++ linux-2.6.10/include/asm-ppc/kerntypes.h    2005-04-05 16:47:53.882214376 +0800
2047 @@ -0,0 +1,21 @@
2048 +/*
2049 + * asm-ppc/kerntypes.h
2050 + *
2051 + * Arch-dependent header file that includes headers for all arch-specific 
2052 + * types of interest.
2053 + * The kernel type information is used by the lcrash utility when
2054 + * analyzing system crash dumps or the live system. Using the type
2055 + * information for the running system, rather than kernel header files,
2056 + * makes for a more flexible and robust analysis tool.
2057 + *
2058 + * This source code is released under the GNU GPL.
2059 + */
2060 +
2061 +/* PowerPC-specific header files */
2062 +#ifndef _PPC_KERNTYPES_H
2063 +#define _PPC_KERNTYPES_H
2064 +
2065 +/* Use the default */
2066 +#include <asm-generic/kerntypes.h>
2067 +
2068 +#endif /* _PPC_KERNTYPES_H */
2069 Index: linux-2.6.10/include/asm-alpha/kerntypes.h
2070 ===================================================================
2071 --- linux-2.6.10.orig/include/asm-alpha/kerntypes.h     2005-04-05 19:01:49.158500672 +0800
2072 +++ linux-2.6.10/include/asm-alpha/kerntypes.h  2005-04-05 16:47:53.876215288 +0800
2073 @@ -0,0 +1,21 @@
2074 +/*
2075 + * asm-alpha/kerntypes.h
2076 + *
2077 + * Arch-dependent header file that includes headers for all arch-specific 
2078 + * types of interest.
2079 + * The kernel type information is used by the lcrash utility when
2080 + * analyzing system crash dumps or the live system. Using the type
2081 + * information for the running system, rather than kernel header files,
2082 + * makes for a more flexible and robust analysis tool.
2083 + *
2084 + * This source code is released under the GNU GPL.
2085 + */
2086 +
2087 +/* Alpha-specific header files */
2088 +#ifndef _ALPHA_KERNTYPES_H
2089 +#define _ALPHA_KERNTYPES_H
2090 +
2091 +/* Use the default */
2092 +#include <asm-generic/kerntypes.h>
2093 +
2094 +#endif /* _ALPHA_KERNTYPES_H */
2095 Index: linux-2.6.10/include/asm-arm26/kerntypes.h
2096 ===================================================================
2097 --- linux-2.6.10.orig/include/asm-arm26/kerntypes.h     2005-04-05 19:01:49.158500672 +0800
2098 +++ linux-2.6.10/include/asm-arm26/kerntypes.h  2005-04-05 16:47:53.865216960 +0800
2099 @@ -0,0 +1,21 @@
2100 +/*
2101 + * asm-arm26/kerntypes.h
2102 + *
2103 + * Arch-dependent header file that includes headers for all arch-specific 
2104 + * types of interest.
2105 + * The kernel type information is used by the lcrash utility when
2106 + * analyzing system crash dumps or the live system. Using the type
2107 + * information for the running system, rather than kernel header files,
2108 + * makes for a more flexible and robust analysis tool.
2109 + *
2110 + * This source code is released under the GNU GPL.
2111 + */
2112 +
2113 +/* ARM26-specific header files */
2114 +#ifndef _ARM26_KERNTYPES_H
2115 +#define _ARM26_KERNTYPES_H
2116 +
2117 +/* Use the default */
2118 +#include <asm-generic/kerntypes.h>
2119 +
2120 +#endif /* _ARM26_KERNTYPES_H */
2121 Index: linux-2.6.10/include/asm-sh/kerntypes.h
2122 ===================================================================
2123 --- linux-2.6.10.orig/include/asm-sh/kerntypes.h        2005-04-05 19:01:49.158500672 +0800
2124 +++ linux-2.6.10/include/asm-sh/kerntypes.h     2005-04-05 16:47:53.877215136 +0800
2125 @@ -0,0 +1,21 @@
2126 +/*
2127 + * asm-sh/kerntypes.h
2128 + *
2129 + * Arch-dependent header file that includes headers for all arch-specific 
2130 + * types of interest.
2131 + * The kernel type information is used by the lcrash utility when
2132 + * analyzing system crash dumps or the live system. Using the type
2133 + * information for the running system, rather than kernel header files,
2134 + * makes for a more flexible and robust analysis tool.
2135 + *
2136 + * This source code is released under the GNU GPL.
2137 + */
2138 +
2139 +/* Super-H-specific header files */
2140 +#ifndef _SH_KERNTYPES_H
2141 +#define _SH_KERNTYPES_H
2142 +
2143 +/* Use the default */
2144 +#include <asm-generic/kerntypes.h>
2145 +
2146 +#endif /* _SH_KERNTYPES_H */
2147 Index: linux-2.6.10/include/asm-ia64/nmi.h
2148 ===================================================================
2149 --- linux-2.6.10.orig/include/asm-ia64/nmi.h    2005-04-05 19:01:49.158500672 +0800
2150 +++ linux-2.6.10/include/asm-ia64/nmi.h 2005-04-05 16:47:53.883214224 +0800
2151 @@ -0,0 +1,28 @@
2152 +/*
2153 + *  linux/include/asm-ia64/nmi.h
2154 + */
2155 +#ifndef ASM_NMI_H
2156 +#define ASM_NMI_H
2157 +
2158 +#include <linux/pm.h>
2159 +
2160 +struct pt_regs;
2161
2162 +typedef int (*nmi_callback_t)(struct pt_regs * regs, int cpu);
2163
2164 +/** 
2165 + * set_nmi_callback
2166 + *
2167 + * Set a handler for an NMI. Only one handler may be
2168 + * set. Return 1 if the NMI was handled.
2169 + */
2170 +void set_nmi_callback(nmi_callback_t callback);
2171
2172 +/** 
2173 + * unset_nmi_callback
2174 + *
2175 + * Remove the handler previously set.
2176 + */
2177 +void unset_nmi_callback(void);
2178
2179 +#endif /* ASM_NMI_H */
2180 Index: linux-2.6.10/include/asm-ia64/dump.h
2181 ===================================================================
2182 --- linux-2.6.10.orig/include/asm-ia64/dump.h   2005-04-05 19:01:49.158500672 +0800
2183 +++ linux-2.6.10/include/asm-ia64/dump.h        2005-04-05 16:47:53.884214072 +0800
2184 @@ -0,0 +1,201 @@
2185 +/*
2186 + * Kernel header file for Linux crash dumps.
2187 + *
2188 + * Created by: Matt Robinson (yakker@sgi.com)
2189 + *
2190 + * Copyright 1999 - 2002 Silicon Graphics, Inc. All rights reserved.
2191 + *
2192 + * This code is released under version 2 of the GNU GPL.
2193 + */
2194 +
2195 +/* This header file holds the architecture specific crash dump header */
2196 +#ifndef _ASM_DUMP_H
2197 +#define _ASM_DUMP_H
2198 +
2199 +/* definitions */
2200 +#define DUMP_ASM_MAGIC_NUMBER     0xdeaddeadULL  /* magic number            */
2201 +#define DUMP_ASM_VERSION_NUMBER   0x4            /* version number          */
2202 +
2203 +#ifdef __KERNEL__
2204 +#include <linux/efi.h>
2205 +#include <asm/pal.h>
2206 +#include <asm/ptrace.h>
2207 +
2208 +#ifdef CONFIG_SMP
2209 +extern cpumask_t irq_affinity[];
2210 +extern int (*dump_ipi_function_ptr)(struct pt_regs *);
2211 +extern void dump_send_ipi(void);
2212 +#else /* !CONFIG_SMP */
2213 +#define dump_send_ipi() do { } while(0)
2214 +#endif
2215 +
2216 +#else  /* !__KERNEL__ */
2217 +/* necessary header files */
2218 +#include <asm/ptrace.h>                          /* for pt_regs             */
2219 +#include <linux/threads.h>
2220 +#endif /* __KERNEL__ */
2221 +
2222 +/* 
2223 + * mkswap.c calls getpagesize() to get the system page size,
2224 + * which is not  necessarily the same as the hardware page size.
2225 + *
2226 + * For ia64 the kernel PAGE_SIZE can be configured from 4KB ... 16KB.
2227 + *
2228 + * The physical memory is layed out out in the hardware/minimal pages.
2229 + * This is the size we need to use for dumping physical pages.
2230 + *
2231 + * Note ths hardware/minimal page size being use in;
2232 + *      arch/ia64/kernel/efi.c`efi_memmap_walk():
2233 + *         curr.end   = curr.start + (md->num_pages << 12);
2234 + *
2235 + * Since the system page size could change between the kernel we boot
2236 + * on the the kernel that cause the core dume we may want to have something
2237 + * more constant like the maximum system page size (See include/asm-ia64/page.h).
2238 + */
2239 +/* IA64 manages the stack in differnt manner as compared to other architectures.
2240 + * task_struct lies at the bottom of stack.
2241 + */
2242 +#undef STACK_START_POSITION
2243 +#define STACK_START_POSITION(tsk)              (tsk)
2244 +#define DUMP_MIN_PAGE_SHIFT                    12
2245 +#define DUMP_MIN_PAGE_SIZE                     (1UL << DUMP_MIN_PAGE_SHIFT)
2246 +#define DUMP_MIN_PAGE_MASK                     (~(DUMP_MIN_PAGE_SIZE - 1))
2247 +#define DUMP_MIN_PAGE_ALIGN(addr)              (((addr) + DUMP_MIN_PAGE_SIZE - 1) & DUMP_MIN_PAGE_MASK)
2248 +
2249 +#define DUMP_MAX_PAGE_SHIFT                    16
2250 +#define DUMP_MAX_PAGE_SIZE                     (1UL << DUMP_MAX_PAGE_SHIFT)
2251 +#define DUMP_MAX_PAGE_MASK                     (~(DUMP_MAX_PAGE_SIZE - 1))
2252 +#define DUMP_MAX_PAGE_ALIGN(addr)              (((addr) + DUMP_MAX_PAGE_SIZE - 1) & DUMP_MAX_PAGE_MASK)
2253 +
2254 +#define DUMP_EF_PAGE_SHIFT                     DUMP_MIN_PAGE_SHIFT
2255 +
2256 +extern int _end,_start;
2257 +
2258 +/*
2259 + * Structure: dump_header_asm_t
2260 + *  Function: This is the header for architecture-specific stuff.  It
2261 + *            follows right after the dump header.
2262 + */
2263 +/*typedef struct _dump_header_asm {*/
2264 +
2265 +typedef struct __dump_header_asm {
2266 +
2267 +        /* the dump magic number -- unique to verify dump is valid */
2268 +        uint64_t             dha_magic_number;
2269 +
2270 +        /* the version number of this dump */
2271 +        uint32_t             dha_version;
2272 +
2273 +        /* the size of this header (in case we can't read it) */
2274 +        uint32_t             dha_header_size;
2275 +
2276 +        /* pointer to pt_regs, (OLD: (struct pt_regs *, NEW: (uint64_t)) */
2277 +       uint64_t             dha_pt_regs;
2278 +
2279 +       /* the dump registers */
2280 +       struct pt_regs       dha_regs;
2281 +
2282 +        /* the rnat register saved after flushrs */
2283 +        uint64_t             dha_rnat;
2284 +
2285 +       /* the pfs register saved after flushrs */
2286 +       uint64_t             dha_pfs;
2287 +
2288 +       /* the bspstore register saved after flushrs */
2289 +       uint64_t             dha_bspstore;
2290 +
2291 +       /* smp specific */
2292 +       uint32_t             dha_smp_num_cpus;
2293 +       uint32_t             dha_dumping_cpu;   
2294 +       struct pt_regs       dha_smp_regs[NR_CPUS];
2295 +       uint64_t             dha_smp_current_task[NR_CPUS];
2296 +       uint64_t             dha_stack[NR_CPUS];
2297 +       uint64_t             dha_stack_ptr[NR_CPUS];
2298 +
2299 +} __attribute__((packed)) dump_header_asm_t;
2300 +
2301 +
2302 +extern struct __dump_header_asm dump_header_asm;
2303 +
2304 +#ifdef __KERNEL__
2305 +static inline void get_current_regs(struct pt_regs *regs)
2306 +{
2307 +       /* 
2308 +        * REMIND: Looking at functions/Macros like:
2309 +        *               DO_SAVE_SWITCH_STACK
2310 +        *               ia64_switch_to()
2311 +        *               ia64_save_extra()
2312 +        *               switch_to()
2313 +        *         to implement this new feature that Matt seem to have added
2314 +        *         to panic.c; seems all platforms are now expected to provide
2315 +        *         this function to dump the current registers into the pt_regs
2316 +        *         structure.
2317 +        */
2318 +       volatile unsigned long rsc_value;/*for storing the rsc value*/
2319 +       volatile unsigned long ic_value;
2320 +
2321 +       __asm__ __volatile__("mov %0=b6;;":"=r"(regs->b6));
2322 +       __asm__ __volatile__("mov %0=b7;;":"=r"(regs->b7));
2323 +       
2324 +        __asm__ __volatile__("mov %0=ar.csd;;":"=r"(regs->ar_csd));
2325 +       __asm__ __volatile__("mov %0=ar.ssd;;":"=r"(regs->ar_ssd));
2326 +       __asm__ __volatile__("mov %0=psr;;":"=r"(ic_value));
2327 +       if(ic_value & 0x1000)/*Within an interrupt*/
2328 +       {
2329 +               __asm__ __volatile__("mov %0=cr.ipsr;;":"=r"(regs->cr_ipsr));
2330 +               __asm__ __volatile__("mov %0=cr.iip;;":"=r"(regs->cr_iip));
2331 +               __asm__ __volatile__("mov %0=cr.ifs;;":"=r"(regs->cr_ifs));
2332 +       }
2333 +       else
2334 +       {
2335 +               regs->cr_ipsr=regs->cr_iip=regs->cr_ifs=(unsigned long)-1;
2336 +       }
2337 +       __asm__ __volatile__("mov %0=ar.unat;;":"=r"(regs->ar_unat));
2338 +       __asm__ __volatile__("mov %0=ar.pfs;;":"=r"(regs->ar_pfs));
2339 +       __asm__ __volatile__("mov %0=ar.rsc;;":"=r"(rsc_value));
2340 +       regs->ar_rsc = rsc_value;
2341 +       /*loadrs is from 16th bit to 29th bit of rsc*/
2342 +       regs->loadrs =  rsc_value >> 16 & (unsigned long)0x3fff;
2343 +       /*setting the rsc.mode value to 0 (rsc.mode is the last two bits of rsc)*/
2344 +       __asm__ __volatile__("mov ar.rsc=%0;;"::"r"(rsc_value & (unsigned long)(~3)));
2345 +       __asm__ __volatile__("mov %0=ar.rnat;;":"=r"(regs->ar_rnat));
2346 +       __asm__ __volatile__("mov %0=ar.bspstore;;":"=r"(regs->ar_bspstore));
2347 +       /*copying the original value back*/
2348 +       __asm__ __volatile__("mov ar.rsc=%0;;"::"r"(rsc_value));
2349 +       __asm__ __volatile__("mov %0=pr;;":"=r"(regs->pr));
2350 +       __asm__ __volatile__("mov %0=ar.fpsr;;":"=r"(regs->ar_fpsr));
2351 +       __asm__ __volatile__("mov %0=ar.ccv;;":"=r"(regs->ar_ccv));
2352 +
2353 +       __asm__ __volatile__("mov %0=r2;;":"=r"(regs->r2));
2354 +        __asm__ __volatile__("mov %0=r3;;":"=r"(regs->r3));
2355 +        __asm__ __volatile__("mov %0=r8;;":"=r"(regs->r8));
2356 +        __asm__ __volatile__("mov %0=r9;;":"=r"(regs->r9));
2357 +        __asm__ __volatile__("mov %0=r10;;":"=r"(regs->r10));
2358 +       __asm__ __volatile__("mov %0=r11;;":"=r"(regs->r11));
2359 +        __asm__ __volatile__("mov %0=r12;;":"=r"(regs->r12));
2360 +       __asm__ __volatile__("mov %0=r13;;":"=r"(regs->r13));
2361 +       __asm__ __volatile__("mov %0=r14;;":"=r"(regs->r14));
2362 +       __asm__ __volatile__("mov %0=r15;;":"=r"(regs->r15));
2363 +       __asm__ __volatile__("mov %0=r16;;":"=r"(regs->r16));
2364 +       __asm__ __volatile__("mov %0=r17;;":"=r"(regs->r17));
2365 +       __asm__ __volatile__("mov %0=r18;;":"=r"(regs->r18));
2366 +       __asm__ __volatile__("mov %0=r19;;":"=r"(regs->r19));
2367 +       __asm__ __volatile__("mov %0=r20;;":"=r"(regs->r20));
2368 +       __asm__ __volatile__("mov %0=r21;;":"=r"(regs->r21));
2369 +       __asm__ __volatile__("mov %0=r22;;":"=r"(regs->r22));
2370 +       __asm__ __volatile__("mov %0=r23;;":"=r"(regs->r23));
2371 +       __asm__ __volatile__("mov %0=r24;;":"=r"(regs->r24));
2372 +       __asm__ __volatile__("mov %0=r25;;":"=r"(regs->r25));
2373 +       __asm__ __volatile__("mov %0=r26;;":"=r"(regs->r26));
2374 +       __asm__ __volatile__("mov %0=r27;;":"=r"(regs->r27));
2375 +       __asm__ __volatile__("mov %0=r28;;":"=r"(regs->r28));
2376 +       __asm__ __volatile__("mov %0=r29;;":"=r"(regs->r29));
2377 +       __asm__ __volatile__("mov %0=r30;;":"=r"(regs->r30));
2378 +       __asm__ __volatile__("mov %0=r31;;":"=r"(regs->r31));
2379 +}
2380 +
2381 +/* Perhaps added to Common Arch Specific Functions and moved to dump.h some day */
2382 +extern void * __dump_memcpy(void *, const void *, size_t);
2383 +#endif /* __KERNEL__ */
2384 +
2385 +#endif /* _ASM_DUMP_H */
2386 Index: linux-2.6.10/include/asm-ia64/kerntypes.h
2387 ===================================================================
2388 --- linux-2.6.10.orig/include/asm-ia64/kerntypes.h      2005-04-05 19:01:49.158500672 +0800
2389 +++ linux-2.6.10/include/asm-ia64/kerntypes.h   2005-04-05 16:47:53.884214072 +0800
2390 @@ -0,0 +1,21 @@
2391 +/*
2392 + * asm-ia64/kerntypes.h
2393 + *
2394 + * Arch-dependent header file that includes headers for all arch-specific 
2395 + * types of interest.
2396 + * The kernel type information is used by the lcrash utility when
2397 + * analyzing system crash dumps or the live system. Using the type
2398 + * information for the running system, rather than kernel header files,
2399 + * makes for a more flexible and robust analysis tool.
2400 + *
2401 + * This source code is released under the GNU GPL.
2402 + */
2403 +
2404 +/* IA64-specific header files */
2405 +#ifndef _IA64_KERNTYPES_H
2406 +#define _IA64_KERNTYPES_H
2407 +
2408 +/* Use the default */
2409 +#include <asm-generic/kerntypes.h>
2410 +
2411 +#endif /* _IA64_KERNTYPES_H */
2412 Index: linux-2.6.10/include/asm-ppc64/dump.h
2413 ===================================================================
2414 --- linux-2.6.10.orig/include/asm-ppc64/dump.h  2005-04-05 19:01:49.158500672 +0800
2415 +++ linux-2.6.10/include/asm-ppc64/dump.h       2005-04-05 16:47:53.878214984 +0800
2416 @@ -0,0 +1,115 @@
2417 +/*
2418 + * Kernel header file for Linux crash dumps.
2419 + *
2420 + * Created by: Todd Inglett <tinglett@vnet.ibm.com>
2421 + *
2422 + * Copyright 2002 - 2004 International Business Machines
2423 + *
2424 + * This code is released under version 2 of the GNU GPL.
2425 + */
2426 +
2427 +/* This header file holds the architecture specific crash dump header */
2428 +#ifndef _ASM_DUMP_H
2429 +#define _ASM_DUMP_H
2430 +
2431 +/* necessary header files */
2432 +#include <asm/ptrace.h>                          /* for pt_regs             */
2433 +#include <asm/kmap_types.h>
2434 +#include <linux/threads.h>
2435 +
2436 +/* definitions */
2437 +#define DUMP_ASM_MAGIC_NUMBER     0xdeaddeadULL  /* magic number            */
2438 +#define DUMP_ASM_VERSION_NUMBER   0x5            /* version number          */
2439 +
2440 +/*
2441 + * Structure: __dump_header_asm
2442 + *  Function: This is the header for architecture-specific stuff.  It
2443 + *            follows right after the dump header.
2444 + */
2445 +struct __dump_header_asm {
2446 +
2447 +        /* the dump magic number -- unique to verify dump is valid */
2448 +        uint64_t             dha_magic_number;
2449 +
2450 +        /* the version number of this dump */
2451 +        uint32_t             dha_version;
2452 +
2453 +        /* the size of this header (in case we can't read it) */
2454 +        uint32_t             dha_header_size;
2455 +
2456 +       /* the dump registers */
2457 +       struct pt_regs       dha_regs;
2458 +
2459 +       /* smp specific */
2460 +       uint32_t             dha_smp_num_cpus;
2461 +       int                  dha_dumping_cpu;   
2462 +       struct pt_regs       dha_smp_regs[NR_CPUS];
2463 +       uint64_t             dha_smp_current_task[NR_CPUS];
2464 +       uint64_t             dha_stack[NR_CPUS];
2465 +       uint64_t             dha_stack_ptr[NR_CPUS];
2466 +} __attribute__((packed));
2467 +
2468 +#ifdef __KERNEL__
2469 +static inline void get_current_regs(struct pt_regs *regs)
2470 +{
2471 +       unsigned long tmp1, tmp2;
2472 +
2473 +       __asm__ __volatile__ (
2474 +               "std    0,0(%2)\n"
2475 +               "std    1,8(%2)\n"
2476 +               "std    2,16(%2)\n"
2477 +               "std    3,24(%2)\n"
2478 +               "std    4,32(%2)\n"
2479 +               "std    5,40(%2)\n"
2480 +               "std    6,48(%2)\n"
2481 +               "std    7,56(%2)\n"
2482 +               "std    8,64(%2)\n"
2483 +               "std    9,72(%2)\n"
2484 +               "std    10,80(%2)\n"
2485 +               "std    11,88(%2)\n"
2486 +               "std    12,96(%2)\n"
2487 +               "std    13,104(%2)\n"
2488 +               "std    14,112(%2)\n"
2489 +               "std    15,120(%2)\n"
2490 +               "std    16,128(%2)\n"
2491 +               "std    17,136(%2)\n"
2492 +               "std    18,144(%2)\n"
2493 +               "std    19,152(%2)\n"
2494 +               "std    20,160(%2)\n"
2495 +               "std    21,168(%2)\n"
2496 +               "std    22,176(%2)\n"
2497 +               "std    23,184(%2)\n"
2498 +               "std    24,192(%2)\n"
2499 +               "std    25,200(%2)\n"
2500 +               "std    26,208(%2)\n"
2501 +               "std    27,216(%2)\n"
2502 +               "std    28,224(%2)\n"
2503 +               "std    29,232(%2)\n"
2504 +               "std    30,240(%2)\n"
2505 +               "std    31,248(%2)\n"
2506 +               "mfmsr  %0\n"
2507 +               "std    %0, 264(%2)\n"
2508 +               "mfctr  %0\n"
2509 +               "std    %0, 280(%2)\n"
2510 +               "mflr   %0\n"
2511 +               "std    %0, 288(%2)\n"
2512 +               "bl     1f\n"
2513 +       "1:      mflr   %1\n"
2514 +               "std    %1, 256(%2)\n"
2515 +               "mtlr   %0\n"
2516 +               "mfxer  %0\n"
2517 +               "std    %0, 296(%2)\n"
2518 +               : "=&r" (tmp1), "=&r" (tmp2)
2519 +               : "b" (regs));
2520 +}
2521 +
2522 +extern struct __dump_header_asm dump_header_asm;
2523 +
2524 +#ifdef CONFIG_SMP
2525 +extern void dump_send_ipi(int (*dump_ipi_callback)(struct pt_regs *));
2526 +#else
2527 +#define dump_send_ipi() do { } while(0)
2528 +#endif
2529 +#endif /* __KERNEL__ */
2530 +
2531 +#endif /* _ASM_DUMP_H */
2532 Index: linux-2.6.10/include/asm-ppc64/kerntypes.h
2533 ===================================================================
2534 --- linux-2.6.10.orig/include/asm-ppc64/kerntypes.h     2005-04-05 19:01:49.158500672 +0800
2535 +++ linux-2.6.10/include/asm-ppc64/kerntypes.h  2005-04-05 16:47:53.879214832 +0800
2536 @@ -0,0 +1,21 @@
2537 +/*
2538 + * asm-ppc64/kerntypes.h
2539 + *
2540 + * Arch-dependent header file that includes headers for all arch-specific 
2541 + * types of interest.
2542 + * The kernel type information is used by the lcrash utility when
2543 + * analyzing system crash dumps or the live system. Using the type
2544 + * information for the running system, rather than kernel header files,
2545 + * makes for a more flexible and robust analysis tool.
2546 + *
2547 + * This source code is released under the GNU GPL.
2548 + */
2549 +
2550 +/* PPC64-specific header files */
2551 +#ifndef _PPC64_KERNTYPES_H
2552 +#define _PPC64_KERNTYPES_H
2553 +
2554 +/* Use the default */
2555 +#include <asm-generic/kerntypes.h>
2556 +
2557 +#endif /* _PPC64_KERNTYPES_H */
2558 Index: linux-2.6.10/include/asm-ppc64/kmap_types.h
2559 ===================================================================
2560 --- linux-2.6.10.orig/include/asm-ppc64/kmap_types.h    2004-12-25 05:34:45.000000000 +0800
2561 +++ linux-2.6.10/include/asm-ppc64/kmap_types.h 2005-04-05 16:47:53.878214984 +0800
2562 @@ -16,7 +16,8 @@
2563         KM_IRQ1,
2564         KM_SOFTIRQ0,
2565         KM_SOFTIRQ1,    
2566 -       KM_TYPE_NR
2567 +       KM_TYPE_NR,
2568 +       KM_DUMP
2569  };
2570  
2571  #endif
2572 Index: linux-2.6.10/include/asm-ppc64/smp.h
2573 ===================================================================
2574 --- linux-2.6.10.orig/include/asm-ppc64/smp.h   2004-12-25 05:33:47.000000000 +0800
2575 +++ linux-2.6.10/include/asm-ppc64/smp.h        2005-04-05 16:47:53.877215136 +0800
2576 @@ -36,7 +36,7 @@
2577  extern void smp_send_debugger_break(int cpu);
2578  struct pt_regs;
2579  extern void smp_message_recv(int, struct pt_regs *);
2580 -
2581 +extern void dump_send_ipi(int (*dump_ipi_callback)(struct pt_regs *));
2582  
2583  #define smp_processor_id() (get_paca()->paca_index)
2584  #define hard_smp_processor_id() (get_paca()->hw_cpu_id)
2585 Index: linux-2.6.10/include/asm-cris/kerntypes.h
2586 ===================================================================
2587 --- linux-2.6.10.orig/include/asm-cris/kerntypes.h      2005-04-05 19:01:49.158500672 +0800
2588 +++ linux-2.6.10/include/asm-cris/kerntypes.h   2005-04-05 16:47:53.874215592 +0800
2589 @@ -0,0 +1,21 @@
2590 +/*
2591 + * asm-cris/kerntypes.h
2592 + *
2593 + * Arch-dependent header file that includes headers for all arch-specific 
2594 + * types of interest.
2595 + * The kernel type information is used by the lcrash utility when
2596 + * analyzing system crash dumps or the live system. Using the type
2597 + * information for the running system, rather than kernel header files,
2598 + * makes for a more flexible and robust analysis tool.
2599 + *
2600 + * This source code is released under the GNU GPL.
2601 + */
2602 +
2603 +/* CRIS-specific header files */
2604 +#ifndef _CRIS_KERNTYPES_H
2605 +#define _CRIS_KERNTYPES_H
2606 +
2607 +/* Use the default */
2608 +#include <asm-generic/kerntypes.h>
2609 +
2610 +#endif /* _CRIS_KERNTYPES_H */
2611 Index: linux-2.6.10/include/asm-m68knommu/kerntypes.h
2612 ===================================================================
2613 --- linux-2.6.10.orig/include/asm-m68knommu/kerntypes.h 2005-04-05 19:01:49.158500672 +0800
2614 +++ linux-2.6.10/include/asm-m68knommu/kerntypes.h      2005-04-05 16:47:53.870216200 +0800
2615 @@ -0,0 +1,21 @@
2616 +/*
2617 + * asm-m68knommu/kerntypes.h
2618 + *
2619 + * Arch-dependent header file that includes headers for all arch-specific 
2620 + * types of interest.
2621 + * The kernel type information is used by the lcrash utility when
2622 + * analyzing system crash dumps or the live system. Using the type
2623 + * information for the running system, rather than kernel header files,
2624 + * makes for a more flexible and robust analysis tool.
2625 + *
2626 + * This source code is released under the GNU GPL.
2627 + */
2628 +
2629 +/* m68k/no-MMU-specific header files */
2630 +#ifndef _M68KNOMMU_KERNTYPES_H
2631 +#define _M68KNOMMU_KERNTYPES_H
2632 +
2633 +/* Use the default */
2634 +#include <asm-generic/kerntypes.h>
2635 +
2636 +#endif /* _M68KNOMMU_KERNTYPES_H */
2637 Index: linux-2.6.10/include/asm-v850/kerntypes.h
2638 ===================================================================
2639 --- linux-2.6.10.orig/include/asm-v850/kerntypes.h      2005-04-05 19:01:49.158500672 +0800
2640 +++ linux-2.6.10/include/asm-v850/kerntypes.h   2005-04-05 16:47:53.888213464 +0800
2641 @@ -0,0 +1,21 @@
2642 +/*
2643 + * asm-v850/kerntypes.h
2644 + *
2645 + * Arch-dependent header file that includes headers for all arch-specific 
2646 + * types of interest.
2647 + * The kernel type information is used by the lcrash utility when
2648 + * analyzing system crash dumps or the live system. Using the type
2649 + * information for the running system, rather than kernel header files,
2650 + * makes for a more flexible and robust analysis tool.
2651 + *
2652 + * This source code is released under the GNU GPL.
2653 + */
2654 +
2655 +/* V850-specific header files */
2656 +#ifndef _V850_KERNTYPES_H
2657 +#define _V850_KERNTYPES_H
2658 +
2659 +/* Use the default */
2660 +#include <asm-generic/kerntypes.h>
2661 +
2662 +#endif /* _V850_KERNTYPES_H */
2663 Index: linux-2.6.10/include/asm-x86_64/dump.h
2664 ===================================================================
2665 --- linux-2.6.10.orig/include/asm-x86_64/dump.h 2005-04-05 19:01:49.158500672 +0800
2666 +++ linux-2.6.10/include/asm-x86_64/dump.h      2005-04-05 16:47:53.868216504 +0800
2667 @@ -0,0 +1,93 @@
2668 +/*
2669 + * Kernel header file for Linux crash dumps.
2670 + *
2671 + * Created by: Matt Robinson (yakker@sgi.com)
2672 + *
2673 + * Copyright 1999 Silicon Graphics, Inc. All rights reserved.
2674 + * x86_64 lkcd port Sachin Sant ( sachinp@in.ibm.com)
2675 + * This code is released under version 2 of the GNU GPL.
2676 + */
2677 +
2678 +/* This header file holds the architecture specific crash dump header */
2679 +#ifndef _ASM_DUMP_H
2680 +#define _ASM_DUMP_H
2681 +
2682 +/* necessary header files */
2683 +#include <asm/ptrace.h>                          /* for pt_regs             */
2684 +#include <linux/threads.h>
2685 +
2686 +/* definitions */
2687 +#define DUMP_ASM_MAGIC_NUMBER     0xdeaddeadULL  /* magic number            */
2688 +#define DUMP_ASM_VERSION_NUMBER   0x2            /* version number          */
2689 +
2690 +
2691 +/*
2692 + * Structure: dump_header_asm_t
2693 + *  Function: This is the header for architecture-specific stuff.  It
2694 + *            follows right after the dump header.
2695 + */
2696 +struct __dump_header_asm {
2697 +
2698 +        /* the dump magic number -- unique to verify dump is valid */
2699 +        uint64_t             dha_magic_number;
2700 +
2701 +        /* the version number of this dump */
2702 +        uint32_t             dha_version;
2703 +
2704 +        /* the size of this header (in case we can't read it) */
2705 +        uint32_t             dha_header_size;
2706 +
2707 +       /* the dump registers */
2708 +       struct pt_regs       dha_regs;
2709 +
2710 +       /* smp specific */
2711 +       uint32_t             dha_smp_num_cpus;
2712 +       int                  dha_dumping_cpu;   
2713 +       struct pt_regs       dha_smp_regs[NR_CPUS];
2714 +       uint64_t             dha_smp_current_task[NR_CPUS];
2715 +       uint64_t             dha_stack[NR_CPUS];
2716 +       uint64_t             dha_stack_ptr[NR_CPUS];
2717 +} __attribute__((packed));
2718 +
2719 +#ifdef __KERNEL__
2720 +static inline void get_current_regs(struct pt_regs *regs)
2721 +{
2722 +       unsigned seg;
2723 +       __asm__ __volatile__("movq %%r15,%0" : "=m"(regs->r15));
2724 +       __asm__ __volatile__("movq %%r14,%0" : "=m"(regs->r14));
2725 +       __asm__ __volatile__("movq %%r13,%0" : "=m"(regs->r13));
2726 +       __asm__ __volatile__("movq %%r12,%0" : "=m"(regs->r12));
2727 +       __asm__ __volatile__("movq %%r11,%0" : "=m"(regs->r11));
2728 +       __asm__ __volatile__("movq %%r10,%0" : "=m"(regs->r10));
2729 +       __asm__ __volatile__("movq %%r9,%0" : "=m"(regs->r9));
2730 +       __asm__ __volatile__("movq %%r8,%0" : "=m"(regs->r8));
2731 +       __asm__ __volatile__("movq %%rbx,%0" : "=m"(regs->rbx));
2732 +       __asm__ __volatile__("movq %%rcx,%0" : "=m"(regs->rcx));
2733 +       __asm__ __volatile__("movq %%rdx,%0" : "=m"(regs->rdx));
2734 +       __asm__ __volatile__("movq %%rsi,%0" : "=m"(regs->rsi));
2735 +       __asm__ __volatile__("movq %%rdi,%0" : "=m"(regs->rdi));
2736 +       __asm__ __volatile__("movq %%rbp,%0" : "=m"(regs->rbp));
2737 +       __asm__ __volatile__("movq %%rax,%0" : "=m"(regs->rax));
2738 +       __asm__ __volatile__("movq %%rsp,%0" : "=m"(regs->rsp));
2739 +       __asm__ __volatile__("movl %%ss, %0" :"=r"(seg)); 
2740 +       regs->ss = (unsigned long)seg;
2741 +       __asm__ __volatile__("movl %%cs, %0" :"=r"(seg));
2742 +       regs->cs = (unsigned long)seg;
2743 +       __asm__ __volatile__("pushfq; popq %0" :"=m"(regs->eflags));
2744 +       regs->rip = (unsigned long)current_text_addr();
2745 +       
2746 +}
2747 +
2748 +extern volatile int dump_in_progress;
2749 +extern struct __dump_header_asm dump_header_asm;
2750 +
2751 +#ifdef CONFIG_SMP
2752 +
2753 +
2754 +extern void dump_send_ipi(void);
2755 +#else
2756 +#define dump_send_ipi() do { } while(0)
2757 +#endif
2758 +#endif /* __KERNEL__ */
2759 +
2760 +#endif /* _ASM_DUMP_H */
2761 Index: linux-2.6.10/include/asm-x86_64/kerntypes.h
2762 ===================================================================
2763 --- linux-2.6.10.orig/include/asm-x86_64/kerntypes.h    2005-04-05 19:01:49.158500672 +0800
2764 +++ linux-2.6.10/include/asm-x86_64/kerntypes.h 2005-04-05 16:47:53.869216352 +0800
2765 @@ -0,0 +1,21 @@
2766 +/*
2767 + * asm-x86_64/kerntypes.h
2768 + *
2769 + * Arch-dependent header file that includes headers for all arch-specific 
2770 + * types of interest.
2771 + * The kernel type information is used by the lcrash utility when
2772 + * analyzing system crash dumps or the live system. Using the type
2773 + * information for the running system, rather than kernel header files,
2774 + * makes for a more flexible and robust analysis tool.
2775 + *
2776 + * This source code is released under the GNU GPL.
2777 + */
2778 +
2779 +/* x86_64-specific header files */
2780 +#ifndef _X86_64_KERNTYPES_H
2781 +#define _X86_64_KERNTYPES_H
2782 +
2783 +/* Use the default */
2784 +#include <asm-generic/kerntypes.h>
2785 +
2786 +#endif /* _X86_64_KERNTYPES_H */
2787 Index: linux-2.6.10/include/asm-x86_64/hw_irq.h
2788 ===================================================================
2789 --- linux-2.6.10.orig/include/asm-x86_64/hw_irq.h       2004-12-25 05:35:39.000000000 +0800
2790 +++ linux-2.6.10/include/asm-x86_64/hw_irq.h    2005-04-05 16:47:53.869216352 +0800
2791 @@ -34,7 +34,6 @@
2792  
2793  #define IA32_SYSCALL_VECTOR    0x80
2794  
2795 -
2796  /*
2797   * Vectors 0x20-0x2f are used for ISA interrupts.
2798   */
2799 @@ -55,6 +54,7 @@
2800  #define TASK_MIGRATION_VECTOR  0xfb
2801  #define CALL_FUNCTION_VECTOR   0xfa
2802  #define KDB_VECTOR     0xf9
2803 +#define DUMP_VECTOR    0xf8
2804  
2805  #define THERMAL_APIC_VECTOR    0xf0
2806  
2807 Index: linux-2.6.10/include/asm-x86_64/kmap_types.h
2808 ===================================================================
2809 --- linux-2.6.10.orig/include/asm-x86_64/kmap_types.h   2004-12-25 05:35:23.000000000 +0800
2810 +++ linux-2.6.10/include/asm-x86_64/kmap_types.h        2005-04-05 16:47:53.868216504 +0800
2811 @@ -13,7 +13,8 @@
2812         KM_IRQ1,
2813         KM_SOFTIRQ0,
2814         KM_SOFTIRQ1,
2815 -       KM_TYPE_NR
2816 +       KM_DUMP,
2817 +       KM_TYPE_NR,
2818  };
2819  
2820  #endif
2821 Index: linux-2.6.10/include/asm-x86_64/smp.h
2822 ===================================================================
2823 --- linux-2.6.10.orig/include/asm-x86_64/smp.h  2004-12-25 05:33:48.000000000 +0800
2824 +++ linux-2.6.10/include/asm-x86_64/smp.h       2005-04-05 16:47:53.867216656 +0800
2825 @@ -41,6 +41,7 @@
2826  extern int pic_mode;
2827  extern int smp_num_siblings;
2828  extern void smp_flush_tlb(void);
2829 +extern void dump_send_ipi(void);
2830  extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
2831  extern void smp_send_reschedule(int cpu);
2832  extern void smp_invalidate_rcv(void);          /* Process an NMI */
2833 Index: linux-2.6.10/include/asm-s390/dump.h
2834 ===================================================================
2835 --- linux-2.6.10.orig/include/asm-s390/dump.h   2005-04-05 19:01:49.158500672 +0800
2836 +++ linux-2.6.10/include/asm-s390/dump.h        2005-04-05 16:47:53.865216960 +0800
2837 @@ -0,0 +1,10 @@
2838 +/*
2839 + * Kernel header file for Linux crash dumps.
2840 + */
2841 +
2842 +/* Nothing to be done here, we have proper hardware support */
2843 +#ifndef _ASM_DUMP_H
2844 +#define _ASM_DUMP_H
2845 +
2846 +#endif
2847 +
2848 Index: linux-2.6.10/include/asm-s390/kerntypes.h
2849 ===================================================================
2850 --- linux-2.6.10.orig/include/asm-s390/kerntypes.h      2005-04-05 19:01:49.158500672 +0800
2851 +++ linux-2.6.10/include/asm-s390/kerntypes.h   2005-04-05 16:47:53.866216808 +0800
2852 @@ -0,0 +1,46 @@
2853 +/*
2854 + * asm-s390/kerntypes.h
2855 + *
2856 + * Arch-dependent header file that includes headers for all arch-specific 
2857 + * types of interest.
2858 + * The kernel type information is used by the lcrash utility when
2859 + * analyzing system crash dumps or the live system. Using the type
2860 + * information for the running system, rather than kernel header files,
2861 + * makes for a more flexible and robust analysis tool.
2862 + *
2863 + * This source code is released under the GNU GPL.
2864 + */
2865 +
2866 +/* S/390 specific header files */
2867 +#ifndef _S390_KERNTYPES_H
2868 +#define _S390_KERNTYPES_H
2869 +
2870 +#include <asm/lowcore.h>
2871 +#include <asm/debug.h>
2872 +#include <asm/ccwdev.h>
2873 +#include <asm/ccwgroup.h>
2874 +#include <asm/qdio.h>
2875 +
2876 +/* channel subsystem driver */
2877 +#include "../../drivers/s390/cio/cio.h"
2878 +#include "../../drivers/s390/cio/chsc.h"
2879 +#include "../../drivers/s390/cio/css.h"
2880 +#include "../../drivers/s390/cio/device.h"
2881 +#include "../../drivers/s390/cio/qdio.h"
2882 +
2883 +/* dasd device driver */
2884 +#include "../../drivers/s390/block/dasd_int.h"
2885 +#include "../../drivers/s390/block/dasd_diag.h"
2886 +#include "../../drivers/s390/block/dasd_eckd.h"
2887 +#include "../../drivers/s390/block/dasd_fba.h"
2888 +
2889 +/* networking drivers */
2890 +#include "../../drivers/s390/net/fsm.h"
2891 +#include "../../drivers/s390/net/iucv.h"
2892 +#include "../../drivers/s390/net/lcs.h"
2893 +
2894 +/* zfcp device driver */
2895 +#include "../../drivers/s390/scsi/zfcp_def.h"
2896 +#include "../../drivers/s390/scsi/zfcp_fsf.h"
2897 +
2898 +#endif /* _S390_KERNTYPES_H */
2899 Index: linux-2.6.10/include/asm-sparc64/kerntypes.h
2900 ===================================================================
2901 --- linux-2.6.10.orig/include/asm-sparc64/kerntypes.h   2005-04-05 19:01:49.158500672 +0800
2902 +++ linux-2.6.10/include/asm-sparc64/kerntypes.h        2005-04-05 16:47:53.872215896 +0800
2903 @@ -0,0 +1,21 @@
2904 +/*
2905 + * asm-sparc64/kerntypes.h
2906 + *
2907 + * Arch-dependent header file that includes headers for all arch-specific 
2908 + * types of interest.
2909 + * The kernel type information is used by the lcrash utility when
2910 + * analyzing system crash dumps or the live system. Using the type
2911 + * information for the running system, rather than kernel header files,
2912 + * makes for a more flexible and robust analysis tool.
2913 + *
2914 + * This source code is released under the GNU GPL.
2915 + */
2916 +
2917 +/* SPARC64-specific header files */
2918 +#ifndef _SPARC64_KERNTYPES_H
2919 +#define _SPARC64_KERNTYPES_H
2920 +
2921 +/* Use the default */
2922 +#include <asm-generic/kerntypes.h>
2923 +
2924 +#endif /* _SPARC64_KERNTYPES_H */
2925 Index: linux-2.6.10/include/asm-mips/kerntypes.h
2926 ===================================================================
2927 --- linux-2.6.10.orig/include/asm-mips/kerntypes.h      2005-04-05 19:01:49.158500672 +0800
2928 +++ linux-2.6.10/include/asm-mips/kerntypes.h   2005-04-05 16:47:53.881214528 +0800
2929 @@ -0,0 +1,21 @@
2930 +/*
2931 + * asm-mips/kerntypes.h
2932 + *
2933 + * Arch-dependent header file that includes headers for all arch-specific 
2934 + * types of interest.
2935 + * The kernel type information is used by the lcrash utility when
2936 + * analyzing system crash dumps or the live system. Using the type
2937 + * information for the running system, rather than kernel header files,
2938 + * makes for a more flexible and robust analysis tool.
2939 + *
2940 + * This source code is released under the GNU GPL.
2941 + */
2942 +
2943 +/* MIPS-specific header files */
2944 +#ifndef _MIPS_KERNTYPES_H
2945 +#define _MIPS_KERNTYPES_H
2946 +
2947 +/* Use the default */
2948 +#include <asm-generic/kerntypes.h>
2949 +
2950 +#endif /* _MIPS_KERNTYPES_H */
2951 Index: linux-2.6.10/include/asm-m68k/kerntypes.h
2952 ===================================================================
2953 --- linux-2.6.10.orig/include/asm-m68k/kerntypes.h      2005-04-05 19:01:49.158500672 +0800
2954 +++ linux-2.6.10/include/asm-m68k/kerntypes.h   2005-04-05 16:47:53.875215440 +0800
2955 @@ -0,0 +1,21 @@
2956 +/*
2957 + * asm-m68k/kerntypes.h
2958 + *
2959 + * Arch-dependent header file that includes headers for all arch-specific 
2960 + * types of interest.
2961 + * The kernel type information is used by the lcrash utility when
2962 + * analyzing system crash dumps or the live system. Using the type
2963 + * information for the running system, rather than kernel header files,
2964 + * makes for a more flexible and robust analysis tool.
2965 + *
2966 + * This source code is released under the GNU GPL.
2967 + */
2968 +
2969 +/* m68k-specific header files */
2970 +#ifndef _M68K_KERNTYPES_H
2971 +#define _M68K_KERNTYPES_H
2972 +
2973 +/* Use the default */
2974 +#include <asm-generic/kerntypes.h>
2975 +
2976 +#endif /* _M68K_KERNTYPES_H */
2977 Index: linux-2.6.10/include/asm-generic/kerntypes.h
2978 ===================================================================
2979 --- linux-2.6.10.orig/include/asm-generic/kerntypes.h   2005-04-05 19:01:49.158500672 +0800
2980 +++ linux-2.6.10/include/asm-generic/kerntypes.h        2005-04-05 16:47:53.871216048 +0800
2981 @@ -0,0 +1,20 @@
2982 +/*
2983 + * asm-generic/kerntypes.h
2984 + *
2985 + * Arch-dependent header file that includes headers for all arch-specific 
2986 + * types of interest.
2987 + * The kernel type information is used by the lcrash utility when
2988 + * analyzing system crash dumps or the live system. Using the type
2989 + * information for the running system, rather than kernel header files,
2990 + * makes for a more flexible and robust analysis tool.
2991 + *
2992 + * This source code is released under the GNU GPL.
2993 + */
2994 +
2995 +/* Arch-independent header files */
2996 +#ifndef _GENERIC_KERNTYPES_H
2997 +#define _GENERIC_KERNTYPES_H
2998 +
2999 +#include <linux/pci.h>
3000 +
3001 +#endif /* _GENERIC_KERNTYPES_H */
3002 Index: linux-2.6.10/include/asm-i386/dump.h
3003 ===================================================================
3004 --- linux-2.6.10.orig/include/asm-i386/dump.h   2005-04-05 19:01:49.158500672 +0800
3005 +++ linux-2.6.10/include/asm-i386/dump.h        2005-04-05 16:47:53.886213768 +0800
3006 @@ -0,0 +1,90 @@
3007 +/*
3008 + * Kernel header file for Linux crash dumps.
3009 + *
3010 + * Created by: Matt Robinson (yakker@sgi.com)
3011 + *
3012 + * Copyright 1999 Silicon Graphics, Inc. All rights reserved.
3013 + *
3014 + * This code is released under version 2 of the GNU GPL.
3015 + */
3016 +
3017 +/* This header file holds the architecture specific crash dump header */
3018 +#ifndef _ASM_DUMP_H
3019 +#define _ASM_DUMP_H
3020 +
3021 +/* necessary header files */
3022 +#include <asm/ptrace.h>
3023 +#include <asm/page.h>
3024 +#include <linux/threads.h>
3025 +#include <linux/mm.h>
3026 +
3027 +/* definitions */
3028 +#define DUMP_ASM_MAGIC_NUMBER  0xdeaddeadULL   /* magic number            */
3029 +#define DUMP_ASM_VERSION_NUMBER        0x3     /* version number          */
3030 +
3031 +/*
3032 + * Structure: __dump_header_asm
3033 + *  Function: This is the header for architecture-specific stuff.  It
3034 + *            follows right after the dump header.
3035 + */
3036 +struct __dump_header_asm {
3037 +       /* the dump magic number -- unique to verify dump is valid */
3038 +       u64             dha_magic_number;
3039 +
3040 +       /* the version number of this dump */
3041 +       u32             dha_version;
3042 +
3043 +       /* the size of this header (in case we can't read it) */
3044 +       u32             dha_header_size;
3045 +
3046 +       /* the esp for i386 systems */
3047 +       u32             dha_esp;
3048 +
3049 +       /* the eip for i386 systems */
3050 +       u32             dha_eip;
3051 +
3052 +       /* the dump registers */
3053 +       struct pt_regs  dha_regs;
3054 +
3055 +       /* smp specific */
3056 +       u32             dha_smp_num_cpus;
3057 +       u32             dha_dumping_cpu;
3058 +       struct pt_regs  dha_smp_regs[NR_CPUS];
3059 +       u32             dha_smp_current_task[NR_CPUS];
3060 +       u32             dha_stack[NR_CPUS];
3061 +       u32             dha_stack_ptr[NR_CPUS];
3062 +} __attribute__((packed));
3063 +
3064 +#ifdef __KERNEL__
3065 +
3066 +extern struct __dump_header_asm dump_header_asm;
3067 +
3068 +#ifdef CONFIG_SMP
3069 +extern cpumask_t irq_affinity[];
3070 +extern int (*dump_ipi_function_ptr)(struct pt_regs *);
3071 +extern void dump_send_ipi(void);
3072 +#else
3073 +#define dump_send_ipi() do { } while(0)
3074 +#endif
3075 +
3076 +static inline void get_current_regs(struct pt_regs *regs)
3077 +{
3078 +       __asm__ __volatile__("movl %%ebx,%0" : "=m"(regs->ebx));
3079 +       __asm__ __volatile__("movl %%ecx,%0" : "=m"(regs->ecx));
3080 +       __asm__ __volatile__("movl %%edx,%0" : "=m"(regs->edx));
3081 +       __asm__ __volatile__("movl %%esi,%0" : "=m"(regs->esi));
3082 +       __asm__ __volatile__("movl %%edi,%0" : "=m"(regs->edi));
3083 +       __asm__ __volatile__("movl %%ebp,%0" : "=m"(regs->ebp));
3084 +       __asm__ __volatile__("movl %%eax,%0" : "=m"(regs->eax));
3085 +       __asm__ __volatile__("movl %%esp,%0" : "=m"(regs->esp));
3086 +       __asm__ __volatile__("movw %%ss, %%ax;" :"=a"(regs->xss));
3087 +       __asm__ __volatile__("movw %%cs, %%ax;" :"=a"(regs->xcs));
3088 +       __asm__ __volatile__("movw %%ds, %%ax;" :"=a"(regs->xds));
3089 +       __asm__ __volatile__("movw %%es, %%ax;" :"=a"(regs->xes));
3090 +       __asm__ __volatile__("pushfl; popl %0" :"=m"(regs->eflags));
3091 +       regs->eip = (unsigned long)current_text_addr();
3092 +}
3093 +
3094 +#endif /* __KERNEL__ */
3095 +
3096 +#endif /* _ASM_DUMP_H */
3097 Index: linux-2.6.10/include/asm-i386/kerntypes.h
3098 ===================================================================
3099 --- linux-2.6.10.orig/include/asm-i386/kerntypes.h      2005-04-05 19:01:49.158500672 +0800
3100 +++ linux-2.6.10/include/asm-i386/kerntypes.h   2005-04-05 16:47:53.887213616 +0800
3101 @@ -0,0 +1,21 @@
3102 +/*
3103 + * asm-i386/kerntypes.h
3104 + *
3105 + * Arch-dependent header file that includes headers for all arch-specific 
3106 + * types of interest.
3107 + * The kernel type information is used by the lcrash utility when
3108 + * analyzing system crash dumps or the live system. Using the type
3109 + * information for the running system, rather than kernel header files,
3110 + * makes for a more flexible and robust analysis tool.
3111 + *
3112 + * This source code is released under the GNU GPL.
3113 + */
3114 +
3115 +/* ix86-specific header files */
3116 +#ifndef _I386_KERNTYPES_H
3117 +#define _I386_KERNTYPES_H
3118 +
3119 +/* Use the default */
3120 +#include <asm-generic/kerntypes.h>
3121 +
3122 +#endif /* _I386_KERNTYPES_H */
3123 Index: linux-2.6.10/include/asm-i386/kmap_types.h
3124 ===================================================================
3125 --- linux-2.6.10.orig/include/asm-i386/kmap_types.h     2004-12-25 05:35:23.000000000 +0800
3126 +++ linux-2.6.10/include/asm-i386/kmap_types.h  2005-04-05 16:47:53.886213768 +0800
3127 @@ -23,7 +23,8 @@
3128  D(10)  KM_IRQ1,
3129  D(11)  KM_SOFTIRQ0,
3130  D(12)  KM_SOFTIRQ1,
3131 -D(13)  KM_TYPE_NR
3132 +D(13)  KM_DUMP,
3133 +D(14)  KM_TYPE_NR
3134  };
3135  
3136  #undef D
3137 Index: linux-2.6.10/include/asm-i386/smp.h
3138 ===================================================================
3139 --- linux-2.6.10.orig/include/asm-i386/smp.h    2004-12-25 05:35:50.000000000 +0800
3140 +++ linux-2.6.10/include/asm-i386/smp.h 2005-04-05 16:47:53.885213920 +0800
3141 @@ -37,6 +37,7 @@
3142  extern cpumask_t cpu_sibling_map[];
3143  
3144  extern void smp_flush_tlb(void);
3145 +extern void dump_send_ipi(void);
3146  extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
3147  extern void smp_invalidate_rcv(void);          /* Process an NMI */
3148  extern void (*mtrr_hook) (void);
3149 Index: linux-2.6.10/include/asm-i386/mach-default/irq_vectors.h
3150 ===================================================================
3151 --- linux-2.6.10.orig/include/asm-i386/mach-default/irq_vectors.h       2004-12-25 05:34:26.000000000 +0800
3152 +++ linux-2.6.10/include/asm-i386/mach-default/irq_vectors.h    2005-04-05 16:47:53.887213616 +0800
3153 @@ -48,6 +48,7 @@
3154  #define INVALIDATE_TLB_VECTOR  0xfd
3155  #define RESCHEDULE_VECTOR      0xfc
3156  #define CALL_FUNCTION_VECTOR   0xfb
3157 +#define DUMP_VECTOR            0xfa
3158  
3159  #define THERMAL_APIC_VECTOR    0xf0
3160  /*
3161 Index: linux-2.6.10/include/asm-arm/kerntypes.h
3162 ===================================================================
3163 --- linux-2.6.10.orig/include/asm-arm/kerntypes.h       2005-04-05 19:01:49.158500672 +0800
3164 +++ linux-2.6.10/include/asm-arm/kerntypes.h    2005-04-05 16:47:53.873215744 +0800
3165 @@ -0,0 +1,21 @@
3166 +/*
3167 + * asm-arm/kerntypes.h
3168 + *
3169 + * Arch-dependent header file that includes headers for all arch-specific 
3170 + * types of interest.
3171 + * The kernel type information is used by the lcrash utility when
3172 + * analyzing system crash dumps or the live system. Using the type
3173 + * information for the running system, rather than kernel header files,
3174 + * makes for a more flexible and robust analysis tool.
3175 + *
3176 + * This source code is released under the GNU GPL.
3177 + */
3178 +
3179 +/* ARM-specific header files */
3180 +#ifndef _ARM_KERNTYPES_H
3181 +#define _ARM_KERNTYPES_H
3182 +
3183 +/* Use the default */
3184 +#include <asm-generic/kerntypes.h>
3185 +
3186 +#endif /* _ARM_KERNTYPES_H */
3187 Index: linux-2.6.10/include/asm-sparc/kerntypes.h
3188 ===================================================================
3189 --- linux-2.6.10.orig/include/asm-sparc/kerntypes.h     2005-04-05 19:01:49.158500672 +0800
3190 +++ linux-2.6.10/include/asm-sparc/kerntypes.h  2005-04-05 16:47:53.874215592 +0800
3191 @@ -0,0 +1,21 @@
3192 +/*
3193 + * asm-sparc/kerntypes.h
3194 + *
3195 + * Arch-dependent header file that includes headers for all arch-specific 
3196 + * types of interest.
3197 + * The kernel type information is used by the lcrash utility when
3198 + * analyzing system crash dumps or the live system. Using the type
3199 + * information for the running system, rather than kernel header files,
3200 + * makes for a more flexible and robust analysis tool.
3201 + *
3202 + * This source code is released under the GNU GPL.
3203 + */
3204 +
3205 +/* SPARC-specific header files */
3206 +#ifndef _SPARC_KERNTYPES_H
3207 +#define _SPARC_KERNTYPES_H
3208 +
3209 +/* Use the default */
3210 +#include <asm-generic/kerntypes.h>
3211 +
3212 +#endif /* _SPARC_KERNTYPES_H */
3213 Index: linux-2.6.10/include/asm-mips64/kerntypes.h
3214 ===================================================================
3215 --- linux-2.6.10.orig/include/asm-mips64/kerntypes.h    2005-04-05 19:01:49.158500672 +0800
3216 +++ linux-2.6.10/include/asm-mips64/kerntypes.h 2005-04-05 16:47:53.881214528 +0800
3217 @@ -0,0 +1,21 @@
3218 +/*
3219 + * asm-mips64/kerntypes.h
3220 + *
3221 + * Arch-dependent header file that includes headers for all arch-specific 
3222 + * types of interest.
3223 + * The kernel type information is used by the lcrash utility when
3224 + * analyzing system crash dumps or the live system. Using the type
3225 + * information for the running system, rather than kernel header files,
3226 + * makes for a more flexible and robust analysis tool.
3227 + *
3228 + * This source code is released under the GNU GPL.
3229 + */
3230 +
3231 +/* MIPS64-specific header files */
3232 +#ifndef _MIPS64_KERNTYPES_H
3233 +#define _MIPS64_KERNTYPES_H
3234 +
3235 +/* Use the default */
3236 +#include <asm-generic/kerntypes.h>
3237 +
3238 +#endif /* _MIPS64_KERNTYPES_H */
3239 Index: linux-2.6.10/net/Kconfig
3240 ===================================================================
3241 --- linux-2.6.10.orig/net/Kconfig       2005-04-05 16:29:27.896349784 +0800
3242 +++ linux-2.6.10/net/Kconfig    2005-04-05 16:47:53.895212400 +0800
3243 @@ -632,7 +632,7 @@
3244  endmenu