diff --git a/BLD/build/HEADERS/CUR-92-vmkdrivers-asm-x64/vmkernel64/release/asm/crashdump.h b/BLD/build/HEADERS/CUR-92-vmkdrivers-asm-x64/vmkernel64/release/asm/crashdump.h new file mode 100644 index 0000000000000000000000000000000000000000..16859b2888d6c7c6b743a3c417a36d0ffb72133f --- /dev/null +++ b/BLD/build/HEADERS/CUR-92-vmkdrivers-asm-x64/vmkernel64/release/asm/crashdump.h @@ -0,0 +1,86 @@ +/* + * include/asm-x86_64/crashdump.h + * + * Copyright (C) Hitachi, Ltd. 2004 + * Written by Satoshi Oshima (oshima@sdl.hitachi.co.jp) + * + * Derived from include/asm-i386/diskdump.h + * Copyright (c) 2004 FUJITSU LIMITED + * Copyright (c) 2003 Red Hat, Inc. All rights reserved. + * + */ + +#ifndef _ASM_X86_64_CRASHDUMP_H +#define _ASM_X86_64_CRASHDUMP_H + +#ifdef __KERNEL__ + +#include + +extern int page_is_ram(unsigned long); +extern unsigned long next_ram_page(unsigned long); + +#define platform_fix_regs() \ +{ \ + unsigned long rsp; \ + unsigned short ss; \ + rsp = (unsigned long) ((char *)regs + sizeof (struct pt_regs)); \ + ss = __KERNEL_DS; \ + if (regs->cs & 3) { \ + rsp = regs->rsp; \ + ss = regs->ss & 0xffff; \ + } \ + myregs = *regs; \ + myregs.rsp = rsp; \ + myregs.ss = (myregs.ss & (~0xffff)) | ss; \ +} + +#define platform_timestamp(x) rdtscll(x) + +#define platform_freeze_cpu() \ +{ \ + for (;;) local_irq_disable(); \ +} + +static inline void platform_init_stack(void **stackptr) +{ + struct page *page; + + if ((page = alloc_page(GFP_KERNEL))) + *stackptr = (void *)page_address(page); + + if (*stackptr) + memset(*stackptr, 0, PAGE_SIZE); + else + printk(KERN_WARNING + "crashdump: unable to allocate separate stack\n"); +} + +#define platform_cleanup_stack(stackptr) \ +do { \ + if (stackptr) \ + free_page((unsigned long)stackptr); \ +} while (0) + +typedef asmlinkage void (*crashdump_func_t)(struct pt_regs *, void *); + +static inline void platform_start_crashdump(void *stackptr, + crashdump_func_t dumpfunc, + struct pt_regs *regs) +{ + static unsigned long old_rsp; + unsigned long new_rsp; + + if (stackptr) { + asm volatile("movq %%rsp,%0" : "=r" (old_rsp)); + new_rsp = (unsigned long)stackptr + PAGE_SIZE; + asm volatile("movq %0,%%rsp" :: "r" (new_rsp)); + dumpfunc(regs, NULL); + asm volatile("movq %0,%%rsp" :: "r" (old_rsp)); + } else + dumpfunc(regs, NULL); +} + +#endif /* __KERNEL__ */ + +#endif /* _ASM_X86_64_CRASHDUMP_H */