[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 8429686..5c0246b 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 736d701..5efce72 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 e4038ea..a2be239 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)