[S390] cleanup system call parameter setup
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 25 Oct 2010 14:10:40 +0000 (16:10 +0200)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Mon, 25 Oct 2010 14:10:19 +0000 (16:10 +0200)
Do the setup of the stack overflow argument for the sixth system
call parameter right before the branch to the system call function.
That simplifies the system call parameter access code.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/syscall.h
arch/s390/kernel/entry.S
arch/s390/kernel/entry64.S

index 8429686951f94f7ffeff1fafdb9ea2f5bba6a7d6..5c0246b955d80e411250623c400c3387f23568b7 100644 (file)
@@ -65,8 +65,6 @@ static inline void syscall_get_arguments(struct task_struct *task,
        if (test_tsk_thread_flag(task, TIF_31BIT))
                mask = 0xffffffff;
 #endif
-       if (i + n == 6)
-               args[--n] = regs->args[0] & mask;
        while (n-- > 0)
                if (i + n > 0)
                        args[n] = regs->gprs[2 + i + n] & mask;
@@ -80,8 +78,6 @@ static inline void syscall_set_arguments(struct task_struct *task,
                                         const unsigned long *args)
 {
        BUG_ON(i + n > 6);
-       if (i + n == 6)
-               regs->args[0] = args[--n];
        while (n-- > 0)
                if (i + n > 0)
                        regs->gprs[2 + i + n] = args[n];
index 736d7010629e0a3d9a301d046e0905c92613886b..5efce7202984ad969031922a21a39531014782de 100644 (file)
@@ -254,12 +254,11 @@ sysc_do_svc:
        bnl     BASED(sysc_nr_ok)
        lr      %r7,%r1           # copy svc number to %r7
 sysc_nr_ok:
-       mvc     SP_ARGS(4,%r15),SP_R7(%r15)
-sysc_do_restart:
        sth     %r7,SP_SVCNR(%r15)
        sll     %r7,2             # svc number *4
        l       %r8,BASED(.Lsysc_table)
        tm      __TI_flags+2(%r9),_TIF_SYSCALL
+       mvc     SP_ARGS(4,%r15),SP_R7(%r15)
        l       %r8,0(%r7,%r8)    # get system call addr.
        bnz     BASED(sysc_tracesys)
        basr    %r14,%r8          # call sys_xxxx
@@ -347,7 +346,7 @@ sysc_restart:
        l       %r7,SP_R2(%r15)         # load new svc number
        mvc     SP_R2(4,%r15),SP_ORIG_R2(%r15) # restore first argument
        lm      %r2,%r6,SP_R2(%r15)     # load svc arguments
-       b       BASED(sysc_do_restart)  # restart svc
+       b       BASED(sysc_nr_ok)       # restart svc
 
 #
 # _TIF_SINGLE_STEP is set, call do_single_step
@@ -380,6 +379,7 @@ sysc_tracesys:
        l       %r8,0(%r7,%r8)
 sysc_tracego:
        lm      %r3,%r6,SP_R3(%r15)
+       mvc     SP_ARGS(4,%r15),SP_R7(%r15)
        l       %r2,SP_ORIG_R2(%r15)
        basr    %r14,%r8                # call sys_xxx
        st      %r2,SP_R2(%r15)         # store return value
index e4038ea4dc57da1010309a4cb4fcaa28b19f7e3c..a2be23922f4339849b97551e67f1c67fc0cbfbe7 100644 (file)
@@ -246,7 +246,6 @@ sysc_saveall:
        CREATE_STACK_FRAME __LC_SAVE_AREA
        mvc     SP_PSW(16,%r15),__LC_SVC_OLD_PSW
        mvc     SP_ILC(4,%r15),__LC_SVC_ILC
-       stg     %r7,SP_ARGS(%r15)
        lg      %r12,__LC_THREAD_INFO   # load pointer to thread_info struct
 sysc_vtime:
        UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER
@@ -274,6 +273,7 @@ sysc_nr_ok:
 sysc_noemu:
 #endif
        tm      __TI_flags+6(%r12),_TIF_SYSCALL
+       mvc     SP_ARGS(8,%r15),SP_R7(%r15)
        lgf     %r8,0(%r7,%r10) # load address of system call routine
        jnz     sysc_tracesys
        basr    %r14,%r8        # call sys_xxxx
@@ -387,6 +387,7 @@ sysc_tracesys:
        lgf     %r8,0(%r7,%r10)
 sysc_tracego:
        lmg     %r3,%r6,SP_R3(%r15)
+       mvc     SP_ARGS(8,%r15),SP_R7(%r15)
        lg      %r2,SP_ORIG_R2(%r15)
        basr    %r14,%r8                # call sys_xxx
        stg     %r2,SP_R2(%r15)         # store return value
@@ -953,7 +954,6 @@ cleanup_system_call:
        CREATE_STACK_FRAME __LC_SAVE_AREA
        mvc     SP_PSW(16,%r15),__LC_SVC_OLD_PSW
        mvc     SP_ILC(4,%r15),__LC_SVC_ILC
-       stg     %r7,SP_ARGS(%r15)
        mvc     8(8,%r12),__LC_THREAD_INFO
 cleanup_vtime:
        clc     __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+24)