1
0
Fork 0

s390/kernel: convert SYSCALL and PGM_CHECK handlers to .quad

With a relocatable kernel that could reside at any place in memory, the
storage size for the SYSCALL and PGM_CHECK handlers needs to be
increased from .long to .quad.

Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Reviewed-by: Philipp Rudo <prudo@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
hifive-unleashed-5.2
Gerald Schaefer 2019-02-03 21:36:13 +01:00 committed by Martin Schwidefsky
parent 805bc0bc23
commit ff4a742dde
3 changed files with 12 additions and 17 deletions

View File

@ -14,13 +14,8 @@
#include <linux/err.h> #include <linux/err.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
/* extern const unsigned long sys_call_table[];
* The syscall table always contains 32 bit pointers since we know that the extern const unsigned long sys_call_table_emu[];
* address of the function to be called is (way) below 4GB. So the "int"
* type here is what we want [need] for both 32 bit and 64 bit systems.
*/
extern const unsigned int sys_call_table[];
extern const unsigned int sys_call_table_emu[];
static inline long syscall_get_nr(struct task_struct *task, static inline long syscall_get_nr(struct task_struct *task,
struct pt_regs *regs) struct pt_regs *regs)

View File

@ -358,19 +358,19 @@ ENTRY(system_call)
# load address of system call table # load address of system call table
lg %r10,__THREAD_sysc_table(%r13,%r12) lg %r10,__THREAD_sysc_table(%r13,%r12)
llgh %r8,__PT_INT_CODE+2(%r11) llgh %r8,__PT_INT_CODE+2(%r11)
slag %r8,%r8,2 # shift and test for svc 0 slag %r8,%r8,3 # shift and test for svc 0
jnz .Lsysc_nr_ok jnz .Lsysc_nr_ok
# svc 0: system call number in %r1 # svc 0: system call number in %r1
llgfr %r1,%r1 # clear high word in r1 llgfr %r1,%r1 # clear high word in r1
cghi %r1,NR_syscalls cghi %r1,NR_syscalls
jnl .Lsysc_nr_ok jnl .Lsysc_nr_ok
sth %r1,__PT_INT_CODE+2(%r11) sth %r1,__PT_INT_CODE+2(%r11)
slag %r8,%r1,2 slag %r8,%r1,3
.Lsysc_nr_ok: .Lsysc_nr_ok:
xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
stg %r2,__PT_ORIG_GPR2(%r11) stg %r2,__PT_ORIG_GPR2(%r11)
stg %r7,STACK_FRAME_OVERHEAD(%r15) stg %r7,STACK_FRAME_OVERHEAD(%r15)
lgf %r9,0(%r8,%r10) # get system call add. lg %r9,0(%r8,%r10) # get system call add.
TSTMSK __TI_flags(%r12),_TIF_TRACE TSTMSK __TI_flags(%r12),_TIF_TRACE
jnz .Lsysc_tracesys jnz .Lsysc_tracesys
BASR_EX %r14,%r9 # call sys_xxxx BASR_EX %r14,%r9 # call sys_xxxx
@ -556,8 +556,8 @@ ENTRY(system_call)
lghi %r0,NR_syscalls lghi %r0,NR_syscalls
clgr %r0,%r2 clgr %r0,%r2
jnh .Lsysc_tracenogo jnh .Lsysc_tracenogo
sllg %r8,%r2,2 sllg %r8,%r2,3
lgf %r9,0(%r8,%r10) lg %r9,0(%r8,%r10)
.Lsysc_tracego: .Lsysc_tracego:
lmg %r3,%r7,__PT_R3(%r11) lmg %r3,%r7,__PT_R3(%r11)
stg %r7,STACK_FRAME_OVERHEAD(%r15) stg %r7,STACK_FRAME_OVERHEAD(%r15)
@ -665,9 +665,9 @@ ENTRY(pgm_check_handler)
larl %r1,pgm_check_table larl %r1,pgm_check_table
llgh %r10,__PT_INT_CODE+2(%r11) llgh %r10,__PT_INT_CODE+2(%r11)
nill %r10,0x007f nill %r10,0x007f
sll %r10,2 sll %r10,3
je .Lpgm_return je .Lpgm_return
lgf %r9,0(%r10,%r1) # load address of handler routine lg %r9,0(%r10,%r1) # load address of handler routine
lgr %r2,%r11 # pass pointer to pt_regs lgr %r2,%r11 # pass pointer to pt_regs
BASR_EX %r14,%r9 # branch to interrupt-handler BASR_EX %r14,%r9 # branch to interrupt-handler
.Lpgm_return: .Lpgm_return:
@ -1512,7 +1512,7 @@ cleanup_critical:
.quad .Lsie_skip - .Lsie_entry .quad .Lsie_skip - .Lsie_entry
#endif #endif
.section .rodata, "a" .section .rodata, "a"
#define SYSCALL(esame,emu) .long __s390x_ ## esame #define SYSCALL(esame,emu) .quad __s390x_ ## esame
.globl sys_call_table .globl sys_call_table
sys_call_table: sys_call_table:
#include "asm/syscall_table.h" #include "asm/syscall_table.h"
@ -1520,7 +1520,7 @@ sys_call_table:
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
#define SYSCALL(esame,emu) .long __s390_ ## emu #define SYSCALL(esame,emu) .quad __s390_ ## emu
.globl sys_call_table_emu .globl sys_call_table_emu
sys_call_table_emu: sys_call_table_emu:
#include "asm/syscall_table.h" #include "asm/syscall_table.h"

View File

@ -7,7 +7,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#define PGM_CHECK(handler) .long handler #define PGM_CHECK(handler) .quad handler
#define PGM_CHECK_DEFAULT PGM_CHECK(default_trap_handler) #define PGM_CHECK_DEFAULT PGM_CHECK(default_trap_handler)
/* /*