aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/entry64.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/kernel/entry64.S')
-rw-r--r--arch/s390/kernel/entry64.S27
1 files changed, 13 insertions, 14 deletions
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S
index 73845a9e587c..412a7b8783d7 100644
--- a/arch/s390/kernel/entry64.S
+++ b/arch/s390/kernel/entry64.S
@@ -1,4 +1,3 @@
1
2/* 1/*
3 * arch/s390/kernel/entry64.S 2 * arch/s390/kernel/entry64.S
4 * S390 low-level entry points. 3 * S390 low-level entry points.
@@ -200,17 +199,17 @@ sysc_vtime:
200 stmg %r0,%r7,__PT_R0(%r11) 199 stmg %r0,%r7,__PT_R0(%r11)
201 mvc __PT_R8(64,%r11),__LC_SAVE_AREA_SYNC 200 mvc __PT_R8(64,%r11),__LC_SAVE_AREA_SYNC
202 mvc __PT_PSW(16,%r11),__LC_SVC_OLD_PSW 201 mvc __PT_PSW(16,%r11),__LC_SVC_OLD_PSW
203 mvc __PT_SVC_CODE(4,%r11),__LC_SVC_ILC 202 mvc __PT_INT_CODE(4,%r11),__LC_SVC_ILC
204sysc_do_svc: 203sysc_do_svc:
205 oi __TI_flags+7(%r12),_TIF_SYSCALL 204 oi __TI_flags+7(%r12),_TIF_SYSCALL
206 llgh %r8,__PT_SVC_CODE+2(%r11) 205 llgh %r8,__PT_INT_CODE+2(%r11)
207 slag %r8,%r8,2 # shift and test for svc 0 206 slag %r8,%r8,2 # shift and test for svc 0
208 jnz sysc_nr_ok 207 jnz sysc_nr_ok
209 # svc 0: system call number in %r1 208 # svc 0: system call number in %r1
210 llgfr %r1,%r1 # clear high word in r1 209 llgfr %r1,%r1 # clear high word in r1
211 cghi %r1,NR_syscalls 210 cghi %r1,NR_syscalls
212 jnl sysc_nr_ok 211 jnl sysc_nr_ok
213 sth %r1,__PT_SVC_CODE+2(%r11) 212 sth %r1,__PT_INT_CODE+2(%r11)
214 slag %r8,%r1,2 213 slag %r8,%r1,2
215sysc_nr_ok: 214sysc_nr_ok:
216 larl %r10,sys_call_table # 64 bit system call table 215 larl %r10,sys_call_table # 64 bit system call table
@@ -288,7 +287,7 @@ sysc_sigpending:
288 jno sysc_return 287 jno sysc_return
289 lmg %r2,%r7,__PT_R2(%r11) # load svc arguments 288 lmg %r2,%r7,__PT_R2(%r11) # load svc arguments
290 lghi %r8,0 # svc 0 returns -ENOSYS 289 lghi %r8,0 # svc 0 returns -ENOSYS
291 lh %r1,__PT_SVC_CODE+2(%r11) # load new svc number 290 lh %r1,__PT_INT_CODE+2(%r11) # load new svc number
292 cghi %r1,NR_syscalls 291 cghi %r1,NR_syscalls
293 jnl sysc_nr_ok # invalid svc number -> do svc 0 292 jnl sysc_nr_ok # invalid svc number -> do svc 0
294 slag %r8,%r1,2 293 slag %r8,%r1,2
@@ -318,7 +317,7 @@ sysc_singlestep:
318sysc_tracesys: 317sysc_tracesys:
319 lgr %r2,%r11 # pass pointer to pt_regs 318 lgr %r2,%r11 # pass pointer to pt_regs
320 la %r3,0 319 la %r3,0
321 llgh %r0,__PT_SVC_CODE+2(%r11) 320 llgh %r0,__PT_INT_CODE+2(%r11)
322 stg %r0,__PT_R2(%r11) 321 stg %r0,__PT_R2(%r11)
323 brasl %r14,do_syscall_trace_enter 322 brasl %r14,do_syscall_trace_enter
324 lghi %r0,NR_syscalls 323 lghi %r0,NR_syscalls
@@ -411,6 +410,8 @@ ENTRY(pgm_check_handler)
411 stmg %r0,%r7,__PT_R0(%r11) 410 stmg %r0,%r7,__PT_R0(%r11)
412 mvc __PT_R8(64,%r11),__LC_SAVE_AREA_SYNC 411 mvc __PT_R8(64,%r11),__LC_SAVE_AREA_SYNC
413 stmg %r8,%r9,__PT_PSW(%r11) 412 stmg %r8,%r9,__PT_PSW(%r11)
413 mvc __PT_INT_CODE(4,%r11),__LC_PGM_ILC
414 mvc __PT_INT_PARM_LONG(8,%r11),__LC_TRANS_EXC_CODE
414 stg %r10,__PT_ARGS(%r11) 415 stg %r10,__PT_ARGS(%r11)
415 tm __LC_PGM_ILC+3,0x80 # check for per exception 416 tm __LC_PGM_ILC+3,0x80 # check for per exception
416 jz 0f 417 jz 0f
@@ -421,15 +422,13 @@ ENTRY(pgm_check_handler)
421 mvc __THREAD_per_address(8,%r1),__LC_PER_ADDRESS 422 mvc __THREAD_per_address(8,%r1),__LC_PER_ADDRESS
422 mvc __THREAD_per_cause(2,%r1),__LC_PER_CAUSE 423 mvc __THREAD_per_cause(2,%r1),__LC_PER_CAUSE
423 mvc __THREAD_per_paid(1,%r1),__LC_PER_PAID 424 mvc __THREAD_per_paid(1,%r1),__LC_PER_PAID
4240: lgf %r3,__LC_PGM_ILC # load program interruption code 4250: REENABLE_IRQS
425 lg %r4,__LC_TRANS_EXC_CODE
426 REENABLE_IRQS
427 xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) 426 xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
428 lghi %r10,0x7f
429 ngr %r10,%r3
430 je sysc_return
431 sll %r10,3
432 larl %r1,pgm_check_table 427 larl %r1,pgm_check_table
428 llgh %r10,__PT_INT_CODE+2(%r11)
429 nill %r10,0x007f
430 sll %r10,3
431 je sysc_return
433 lg %r1,0(%r10,%r1) # load address of handler routine 432 lg %r1,0(%r10,%r1) # load address of handler routine
434 lgr %r2,%r11 # pass pointer to pt_regs 433 lgr %r2,%r11 # pass pointer to pt_regs
435 basr %r14,%r1 # branch to interrupt-handler 434 basr %r14,%r1 # branch to interrupt-handler
@@ -877,7 +876,7 @@ cleanup_system_call:
877 mvc __PT_R8(64,%r15),__LC_SAVE_AREA_SYNC 876 mvc __PT_R8(64,%r15),__LC_SAVE_AREA_SYNC
878 stmg %r0,%r7,__PT_R0(%r15) 877 stmg %r0,%r7,__PT_R0(%r15)
879 mvc __PT_PSW(16,%r15),__LC_SVC_OLD_PSW 878 mvc __PT_PSW(16,%r15),__LC_SVC_OLD_PSW
880 mvc __PT_SVC_CODE(4,%r15),__LC_SVC_ILC 879 mvc __PT_INT_CODE(4,%r15),__LC_SVC_ILC
881 # setup saved register r15 880 # setup saved register r15
882 aghi %r15,-STACK_FRAME_OVERHEAD 881 aghi %r15,-STACK_FRAME_OVERHEAD
883 stg %r15,56(%r11) # r15 stack pointer 882 stg %r15,56(%r11) # r15 stack pointer