mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 15:58:47 +00:00
[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 <schwidefsky@de.ibm.com>
This commit is contained in:
parent
3d62149f02
commit
987ad70a4d
@ -107,6 +107,11 @@ STACK_SIZE = 1 << STACK_SHIFT
|
|||||||
l %r13,__LC_SVC_NEW_PSW+4 # load &system_call to %r13
|
l %r13,__LC_SVC_NEW_PSW+4 # load &system_call to %r13
|
||||||
.endm
|
.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
|
.macro SAVE_ALL_SYNC psworg,savearea
|
||||||
la %r12,\psworg
|
la %r12,\psworg
|
||||||
tm \psworg+1,0x01 # test problem state bit
|
tm \psworg+1,0x01 # test problem state bit
|
||||||
@ -218,7 +223,7 @@ system_call:
|
|||||||
STORE_TIMER __LC_SYNC_ENTER_TIMER
|
STORE_TIMER __LC_SYNC_ENTER_TIMER
|
||||||
sysc_saveall:
|
sysc_saveall:
|
||||||
SAVE_ALL_BASE __LC_SAVE_AREA
|
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
|
CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA
|
||||||
lh %r7,0x8a # get svc number from lowcore
|
lh %r7,0x8a # get svc number from lowcore
|
||||||
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
|
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
|
||||||
|
@ -99,6 +99,11 @@ _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \
|
|||||||
larl %r13,system_call
|
larl %r13,system_call
|
||||||
.endm
|
.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
|
.macro SAVE_ALL_SYNC psworg,savearea
|
||||||
la %r12,\psworg
|
la %r12,\psworg
|
||||||
tm \psworg+1,0x01 # test problem state bit
|
tm \psworg+1,0x01 # test problem state bit
|
||||||
@ -207,7 +212,7 @@ system_call:
|
|||||||
STORE_TIMER __LC_SYNC_ENTER_TIMER
|
STORE_TIMER __LC_SYNC_ENTER_TIMER
|
||||||
sysc_saveall:
|
sysc_saveall:
|
||||||
SAVE_ALL_BASE __LC_SAVE_AREA
|
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
|
CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA
|
||||||
llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore
|
llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore
|
||||||
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
|
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
|
||||||
|
Loading…
x
Reference in New Issue
Block a user