18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef __ASSEMBLY__ 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define __ASSEMBLY__ /* for some 2.2 kernel */ 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <linux/sys.h> 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <linux/linkage.h> 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <asm/segment.h> 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define ASSEMBLY 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <asm/smp.h> 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define SAVE_ALL \ 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cld; \ 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %es; \ 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %ds; \ 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %eax; \ 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %ebp; \ 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %edi; \ 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %esi; \ 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %edx; \ 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %ecx; \ 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %ebx; \ 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd movl $(__KERNEL_DS), %edx; \ 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd movl %edx, %ds; \ 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd movl %edx, %es; 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define RESTORE_ALL \ 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popl %ebx; \ 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popl %ecx; \ 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popl %edx; \ 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popl %esi; \ 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popl %edi; \ 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popl %ebp; \ 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popl %eax; \ 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd1: popl %ds; \ 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd2: popl %es; \ 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl $4, %esp; \ 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd3: iret; \ 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.section .fixup,"ax"; \ 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd4: movl $0, (%esp); \ 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd jmp 1b; \ 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd5: movl $0, (%esp); \ 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd jmp 2b; \ 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd6: pushl %ss; \ 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popl %ds; \ 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %ss; \ 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popl %es; \ 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl $11; \ 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd call my_sys_exit;\ 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.previous; \ 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.section __ex_table,"a";\ 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .align 4; \ 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .long 1b, 4b; \ 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .long 2b, 5b; \ 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .long 3b, 6b; \ 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.previous 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike DoddENTRY(op_nmi) 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %eax 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SAVE_ALL 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd movl %esp, %edx 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pushl %edx 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd call op_do_nmi 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl $4, %esp 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd RESTORE_ALL 64