diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2012-10-18 12:10:06 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-11-23 05:14:25 -0500 |
commit | b01a37a749916ef1765e4d65dee8b43fde8407b8 (patch) | |
tree | 421be52e05d061fa356a64b9cbabbfee7ebc68c7 /arch/s390/kernel/entry.h | |
parent | f7817968d03df390d77d3af1b13298efa4f31047 (diff) |
s390/traps: preinitialize program check table
Preinitialize the program check table, so we can put it into the
read-only data section.
Also use only four byte entries for the table, since each program
check handler resides within the first 2GB. Therefore this reduces
the size of the table by 50% on 64 bit builds.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/entry.h')
-rw-r--r-- | arch/s390/kernel/entry.h | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h index d0d3f69a7346..80ebb985f3b9 100644 --- a/arch/s390/kernel/entry.h +++ b/arch/s390/kernel/entry.h | |||
@@ -6,7 +6,6 @@ | |||
6 | #include <asm/ptrace.h> | 6 | #include <asm/ptrace.h> |
7 | #include <asm/cputime.h> | 7 | #include <asm/cputime.h> |
8 | 8 | ||
9 | extern void (*pgm_check_table[128])(struct pt_regs *); | ||
10 | extern void *restart_stack; | 9 | extern void *restart_stack; |
11 | 10 | ||
12 | void system_call(void); | 11 | void system_call(void); |
@@ -25,6 +24,26 @@ void do_protection_exception(struct pt_regs *regs); | |||
25 | void do_dat_exception(struct pt_regs *regs); | 24 | void do_dat_exception(struct pt_regs *regs); |
26 | void do_asce_exception(struct pt_regs *regs); | 25 | void do_asce_exception(struct pt_regs *regs); |
27 | 26 | ||
27 | void addressing_exception(struct pt_regs *regs); | ||
28 | void data_exception(struct pt_regs *regs); | ||
29 | void default_trap_handler(struct pt_regs *regs); | ||
30 | void divide_exception(struct pt_regs *regs); | ||
31 | void execute_exception(struct pt_regs *regs); | ||
32 | void hfp_divide_exception(struct pt_regs *regs); | ||
33 | void hfp_overflow_exception(struct pt_regs *regs); | ||
34 | void hfp_significance_exception(struct pt_regs *regs); | ||
35 | void hfp_sqrt_exception(struct pt_regs *regs); | ||
36 | void hfp_underflow_exception(struct pt_regs *regs); | ||
37 | void illegal_op(struct pt_regs *regs); | ||
38 | void operand_exception(struct pt_regs *regs); | ||
39 | void overflow_exception(struct pt_regs *regs); | ||
40 | void privileged_op(struct pt_regs *regs); | ||
41 | void space_switch_exception(struct pt_regs *regs); | ||
42 | void special_op_exception(struct pt_regs *regs); | ||
43 | void specification_exception(struct pt_regs *regs); | ||
44 | void transaction_exception(struct pt_regs *regs); | ||
45 | void translation_exception(struct pt_regs *regs); | ||
46 | |||
28 | void do_per_trap(struct pt_regs *regs); | 47 | void do_per_trap(struct pt_regs *regs); |
29 | void syscall_trace(struct pt_regs *regs, int entryexit); | 48 | void syscall_trace(struct pt_regs *regs, int entryexit); |
30 | void kernel_stack_overflow(struct pt_regs * regs); | 49 | void kernel_stack_overflow(struct pt_regs * regs); |