blob: d197086b042e943e2feda115c177ef896a19af31 [file] [log] [blame]
Mike Dodd8cfa7022010-11-17 11:12:26 -08001#ifndef __ASSEMBLY__
2#define __ASSEMBLY__ /* for some 2.2 kernel */
3#endif
4#include <linux/sys.h>
5#include <linux/linkage.h>
6#include <asm/segment.h>
7#define ASSEMBLY
8#include <asm/smp.h>
9
10#define SAVE_ALL \
11 cld; \
12 pushl %es; \
13 pushl %ds; \
14 pushl %eax; \
15 pushl %ebp; \
16 pushl %edi; \
17 pushl %esi; \
18 pushl %edx; \
19 pushl %ecx; \
20 pushl %ebx; \
21 movl $(__KERNEL_DS), %edx; \
22 movl %edx, %ds; \
23 movl %edx, %es;
24
25#define RESTORE_ALL \
26 popl %ebx; \
27 popl %ecx; \
28 popl %edx; \
29 popl %esi; \
30 popl %edi; \
31 popl %ebp; \
32 popl %eax; \
331: popl %ds; \
342: popl %es; \
35 addl $4, %esp; \
363: iret; \
37.section .fixup,"ax"; \
384: movl $0, (%esp); \
39 jmp 1b; \
405: movl $0, (%esp); \
41 jmp 2b; \
426: pushl %ss; \
43 popl %ds; \
44 pushl %ss; \
45 popl %es; \
46 pushl $11; \
47 call my_sys_exit;\
48.previous; \
49.section __ex_table,"a";\
50 .align 4; \
51 .long 1b, 4b; \
52 .long 2b, 5b; \
53 .long 3b, 6b; \
54.previous
55
56ENTRY(op_nmi)
57 pushl %eax
58 SAVE_ALL
59 movl %esp, %edx
60 pushl %edx
61 call op_do_nmi
62 addl $4, %esp
63 RESTORE_ALL