vserver 1.9.5.x5
[linux-2.6.git] / arch / i386 / kernel / entry.S
index 1c230a7..0e7e68b 100644 (file)
@@ -131,7 +131,7 @@ VM_MASK             = 0x00020000
        movl $(__USER_DS), %edx; \
        movl %edx, %ds; \
        movl %edx, %es; \
-       pushl $11;      \
+       movl $11,%eax;  \
        call do_exit;   \
 .previous;             \
 .section __ex_table,"a";\
@@ -140,40 +140,6 @@ VM_MASK            = 0x00020000
 .previous
 
 
-
-ENTRY(lcall7)
-       pushfl                  # We get a different stack layout with call
-                               # gates, which has to be cleaned up later..
-       pushl %eax
-       SAVE_ALL
-       movl %esp, %ebp
-       pushl %ebp
-       pushl $0x7
-do_lcall:
-       movl EIP(%ebp), %eax    # due to call gates, this is eflags, not eip..
-       movl CS(%ebp), %edx     # this is eip..
-       movl EFLAGS(%ebp), %ecx # and this is cs..
-       movl %eax,EFLAGS(%ebp)  #
-       movl %edx,EIP(%ebp)     # Now we move them to their "normal" places
-       movl %ecx,CS(%ebp)      #
-       GET_THREAD_INFO_WITH_ESP(%ebp)  # GET_THREAD_INFO
-       movl TI_exec_domain(%ebp), %edx # Get the execution domain
-       call *EXEC_DOMAIN_handler(%edx) # Call the handler for the domain
-       addl $4, %esp
-       popl %eax
-       jmp resume_userspace
-
-ENTRY(lcall27)
-       pushfl                  # We get a different stack layout with call
-                               # gates, which has to be cleaned up later..
-       pushl %eax
-       SAVE_ALL
-       movl %esp, %ebp
-       pushl %ebp
-       pushl $0x27
-       jmp do_lcall
-
-
 ENTRY(ret_from_fork)
        pushl %eax
        call schedule_tail
@@ -210,6 +176,7 @@ ENTRY(resume_userspace)
 
 #ifdef CONFIG_PREEMPT
 ENTRY(resume_kernel)
+       cli
        cmpl $0,TI_preempt_count(%ebp)  # non-zero preempt_count ?
        jnz restore_all
 need_resched:
@@ -218,11 +185,7 @@ need_resched:
        jz restore_all
        testl $IF_MASK,EFLAGS(%esp)     # interrupts off (exception path) ?
        jz restore_all
-       movl $PREEMPT_ACTIVE,TI_preempt_count(%ebp)
-       sti
-       call schedule
-       movl $0,TI_preempt_count(%ebp)
-       cli
+       call preempt_schedule_irq
        jmp need_resched
 #endif
 
@@ -269,6 +232,7 @@ sysenter_past_esp:
 /* if something modifies registers it must also disable sysexit */
        movl EIP(%esp), %edx
        movl OLDESP(%esp), %ecx
+       xorl %ebp,%ebp
        sti
        sysexit
 
@@ -325,8 +289,8 @@ work_notifysig:                             # deal with pending signals and
 
        ALIGN
 work_notifysig_v86:
-       pushl %ecx
-       call save_v86_state
+       pushl %ecx                      # save ti_flags for do_notify_resume
+       call save_v86_state             # %eax contains pt_regs pointer
        popl %ecx
        movl %eax, %esp
        xorl %edx, %edx
@@ -393,6 +357,7 @@ vector=vector+1
        ALIGN
 common_interrupt:
        SAVE_ALL
+       movl %esp,%eax
        call do_IRQ
        jmp ret_from_intr
 
@@ -400,7 +365,8 @@ common_interrupt:
 ENTRY(name)                            \
        pushl $nr-256;                  \
        SAVE_ALL                        \
-       call smp_/**/name;      \
+       movl %esp,%eax;                 \
+       call smp_/**/name;              \
        jmp ret_from_intr;
 
 /* The include is where all of the SMP etc. interrupts come from */
@@ -423,18 +389,15 @@ error_code:
        pushl %ebx
        cld
        movl %es, %ecx
-       movl ORIG_EAX(%esp), %esi       # get the error code
        movl ES(%esp), %edi             # get the function address
+       movl ORIG_EAX(%esp), %edx       # get the error code
        movl %eax, ORIG_EAX(%esp)
        movl %ecx, ES(%esp)
-       movl %esp, %edx
-       pushl %esi                      # push the error code
-       pushl %edx                      # push the pt_regs pointer
-       movl $(__USER_DS), %edx
-       movl %edx, %ds
-       movl %edx, %es
+       movl $(__USER_DS), %ecx
+       movl %ecx, %ds
+       movl %ecx, %es
+       movl %esp,%eax                  # pt_regs pointer
        call *%edi
-       addl $8, %esp
        jmp ret_from_exception
 
 ENTRY(coprocessor_error)
@@ -491,11 +454,9 @@ ENTRY(debug)
 debug_stack_correct:
        pushl $-1                       # mark this as an int
        SAVE_ALL
-       movl %esp,%edx
-       pushl $0
-       pushl %edx
+       xorl %edx,%edx                  # error code 0
+       movl %esp,%eax                  # pt_regs pointer
        call do_debug
-       addl $8,%esp
        testl %eax,%eax
        jnz restore_all
        jmp ret_from_exception
@@ -525,11 +486,9 @@ ENTRY(nmi)
 nmi_stack_correct:
        pushl %eax
        SAVE_ALL
-       movl %esp, %edx
-       pushl $0
-       pushl %edx
+       xorl %edx,%edx          # zero error code
+       movl %esp,%eax          # pt_regs pointer
        call do_nmi
-       addl $8, %esp
        RESTORE_ALL
 
 nmi_stack_fixup:
@@ -549,11 +508,9 @@ nmi_debug_stack_fixup:
 ENTRY(int3)
        pushl $-1                       # mark this as an int
        SAVE_ALL
-       movl %esp,%edx
-       pushl $0
-       pushl %edx
+       xorl %edx,%edx          # zero error code
+       movl %esp,%eax          # pt_regs pointer
        call do_int3
-       addl $8,%esp
        testl %eax,%eax
        jnz restore_all
        jmp ret_from_exception
@@ -901,5 +858,9 @@ ENTRY(sys_call_table)
        .long sys_mq_getsetattr
        .long sys_ni_syscall            /* reserved for kexec */
        .long sys_waitid
+       .long sys_ni_syscall            /* 285 */ /* available */
+       .long sys_add_key
+       .long sys_request_key
+       .long sys_keyctl
 
 syscall_table_size=(.-sys_call_table)