blob: d197086b042e943e2feda115c177ef896a19af31 [file] [log] [blame] [edit]
#ifndef __ASSEMBLY__
#define __ASSEMBLY__ /* for some 2.2 kernel */
#endif
#include <linux/sys.h>
#include <linux/linkage.h>
#include <asm/segment.h>
#define ASSEMBLY
#include <asm/smp.h>
#define SAVE_ALL \
cld; \
pushl %es; \
pushl %ds; \
pushl %eax; \
pushl %ebp; \
pushl %edi; \
pushl %esi; \
pushl %edx; \
pushl %ecx; \
pushl %ebx; \
movl $(__KERNEL_DS), %edx; \
movl %edx, %ds; \
movl %edx, %es;
#define RESTORE_ALL \
popl %ebx; \
popl %ecx; \
popl %edx; \
popl %esi; \
popl %edi; \
popl %ebp; \
popl %eax; \
1: popl %ds; \
2: popl %es; \
addl $4, %esp; \
3: iret; \
.section .fixup,"ax"; \
4: movl $0, (%esp); \
jmp 1b; \
5: movl $0, (%esp); \
jmp 2b; \
6: pushl %ss; \
popl %ds; \
pushl %ss; \
popl %es; \
pushl $11; \
call my_sys_exit;\
.previous; \
.section __ex_table,"a";\
.align 4; \
.long 1b, 4b; \
.long 2b, 5b; \
.long 3b, 6b; \
.previous
ENTRY(op_nmi)
pushl %eax
SAVE_ALL
movl %esp, %edx
pushl %edx
call op_do_nmi
addl $4, %esp
RESTORE_ALL