| #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 |