Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=987ad70a4d90cf0e70dba43ece02c2e2219e092c
Commit:     987ad70a4d90cf0e70dba43ece02c2e2219e092c
Parent:     3d62149f025134cd69c2fef2a2ccfac3c3c2054f
Author:     Martin Schwidefsky <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 10 11:24:18 2007 +0200
Committer:  Martin Schwidefsky <[EMAIL PROTECTED]>
CommitDate: Tue Jul 10 11:24:51 2007 +0200

    [S390] system call optimization.
    
    After the in-kernel system call has been remove the system call path
    can be optimized. The problem state bit of the old psw is always set
    between system_call and sysc_do_svc. SAVE_ALL_SVC uses this information
    to avoid two instructions.
    
    Signed-off-by: Martin Schwidefsky <[EMAIL PROTECTED]>
---
 arch/s390/kernel/entry.S   |    7 ++++++-
 arch/s390/kernel/entry64.S |    7 ++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index 6234c69..bc7ff36 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -107,6 +107,11 @@ STACK_SIZE  = 1 << STACK_SHIFT
        l       %r13,__LC_SVC_NEW_PSW+4 # load &system_call to %r13
        .endm
 
+       .macro  SAVE_ALL_SVC psworg,savearea
+       la      %r12,\psworg
+       l       %r15,__LC_KERNEL_STACK  # problem state -> load ksp
+       .endm
+
        .macro  SAVE_ALL_SYNC psworg,savearea
        la      %r12,\psworg
        tm      \psworg+1,0x01          # test problem state bit
@@ -218,7 +223,7 @@ system_call:
        STORE_TIMER __LC_SYNC_ENTER_TIMER
 sysc_saveall:
        SAVE_ALL_BASE __LC_SAVE_AREA
-       SAVE_ALL_SYNC __LC_SVC_OLD_PSW,__LC_SAVE_AREA
+       SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA
        CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA
        lh      %r7,0x8a          # get svc number from lowcore
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S
index 685f11f..2a7b130 100644
--- a/arch/s390/kernel/entry64.S
+++ b/arch/s390/kernel/entry64.S
@@ -99,6 +99,11 @@ _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | 
_TIF_NEED_RESCHED | \
        larl    %r13,system_call
        .endm
 
+       .macro  SAVE_ALL_SVC psworg,savearea
+       la      %r12,\psworg
+       lg      %r15,__LC_KERNEL_STACK  # problem state -> load ksp
+       .endm
+
        .macro  SAVE_ALL_SYNC psworg,savearea
        la      %r12,\psworg
        tm      \psworg+1,0x01          # test problem state bit
@@ -207,7 +212,7 @@ system_call:
        STORE_TIMER __LC_SYNC_ENTER_TIMER
 sysc_saveall:
        SAVE_ALL_BASE __LC_SAVE_AREA
-       SAVE_ALL_SYNC __LC_SVC_OLD_PSW,__LC_SAVE_AREA
+       SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA
        CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA
        llgh    %r7,__LC_SVC_INT_CODE   # get svc number from lowcore
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to