1 /* asm-i386/crash_dump.h */
2 #include <linux/bootmem.h>
6 #ifdef CONFIG_CRASH_DUMP
7 extern unsigned int dump_enabled;
8 extern unsigned int crashed;
10 extern void __crash_relocate_mem(unsigned long, unsigned long);
11 extern unsigned long __init find_max_low_pfn(void);
12 extern void __init find_max_pfn(void);
14 extern struct pt_regs crash_smp_regs[NR_CPUS];
15 extern long crash_smp_current_task[NR_CPUS];
16 extern void crash_dump_save_this_cpu(struct pt_regs *, int);
17 extern void __crash_dump_stop_cpus(void);
18 extern void crash_get_current_regs(struct pt_regs *regs);
20 #define CRASH_BACKUP_BASE ((unsigned long)CONFIG_BACKUP_BASE * 0x100000)
21 #define CRASH_BACKUP_SIZE ((unsigned long)CONFIG_BACKUP_SIZE * 0x100000)
22 #define CRASH_RELOCATE_SIZE 0xa0000
24 static inline void crash_relocate_mem(void)
27 __crash_relocate_mem(CRASH_BACKUP_BASE + CRASH_BACKUP_SIZE,
31 static inline void set_saved_max_pfn(void)
34 saved_max_pfn = find_max_low_pfn();
37 static inline void crash_reserve_bootmem(void)
40 reserve_bootmem(CRASH_BACKUP_BASE,
41 CRASH_BACKUP_SIZE + CRASH_RELOCATE_SIZE + PAGE_SIZE);
45 static inline void crash_dump_stop_cpus(void)
52 cpu = smp_processor_id();
54 crash_smp_current_task[cpu] = (long)current;
55 crash_get_current_regs(&crash_smp_regs[cpu]);
57 /* This also captures the register states of the other cpus */
58 __crash_dump_stop_cpus();
59 #if defined(CONFIG_X86_IO_APIC)
62 #if defined(CONFIG_X86_LOCAL_APIC)
63 disconnect_bsp_APIC();
67 static inline void crash_dump_save_registers(void)
71 addr = __va(CRASH_BACKUP_BASE + CRASH_BACKUP_SIZE + CRASH_RELOCATE_SIZE);
72 memcpy(addr, crash_smp_regs, (sizeof(struct pt_regs)*NR_CPUS));
73 addr += sizeof(struct pt_regs)*NR_CPUS;
74 memcpy(addr, crash_smp_current_task, (sizeof(long)*NR_CPUS));
77 #define crash_relocate_mem() do { } while(0)
78 #define set_saved_max_pfn() do { } while(0)
79 #define crash_reserve_bootmem() do { } while(0)
80 #define crash_dump_stop_cpus() do { } while(0)
81 #define crash_dump_save_registers() do { } while(0)