2 * include/asm-x86_64/crashdump.h
4 * Copyright (C) Hitachi, Ltd. 2004
5 * Written by Satoshi Oshima (oshima@sdl.hitachi.co.jp)
7 * Derived from include/asm-i386/diskdump.h
8 * Copyright (c) 2004 FUJITSU LIMITED
9 * Copyright (c) 2003 Red Hat, Inc. All rights reserved.
13 #ifndef _ASM_X86_64_CRASHDUMP_H
14 #define _ASM_X86_64_CRASHDUMP_H
18 #include <linux/elf.h>
20 extern int page_is_ram(unsigned long);
21 extern unsigned long next_ram_page(unsigned long);
23 #define platform_fix_regs() \
27 rsp = (unsigned long) ((char *)regs + sizeof (struct pt_regs)); \
31 ss = regs->ss & 0xffff; \
35 myregs.ss = (myregs.ss & (~0xffff)) | ss; \
38 #define platform_timestamp(x) rdtscll(x)
40 #define platform_freeze_cpu() \
42 for (;;) local_irq_disable(); \
45 static inline void platform_init_stack(void **stackptr)
49 if ((page = alloc_page(GFP_KERNEL)))
50 *stackptr = (void *)page_address(page);
53 memset(*stackptr, 0, PAGE_SIZE);
56 "crashdump: unable to allocate separate stack\n");
59 #define platform_cleanup_stack(stackptr) \
62 free_page((unsigned long)stackptr); \
65 typedef asmlinkage void (*crashdump_func_t)(struct pt_regs *, void *);
67 static inline void platform_start_crashdump(void *stackptr,
68 crashdump_func_t dumpfunc,
71 static unsigned long old_rsp;
72 unsigned long new_rsp;
75 asm volatile("movq %%rsp,%0" : "=r" (old_rsp));
76 new_rsp = (unsigned long)stackptr + PAGE_SIZE;
77 asm volatile("movq %0,%%rsp" :: "r" (new_rsp));
79 asm volatile("movq %0,%%rsp" :: "r" (old_rsp));
84 #endif /* __KERNEL__ */
86 #endif /* _ASM_X86_64_CRASHDUMP_H */