diff options
26 files changed, 130 insertions, 135 deletions
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index c696ad7d3439..fb2723e8ba65 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -62,6 +62,7 @@ config S390 | |||
62 | def_bool y | 62 | def_bool y |
63 | select ARCH_DISCARD_MEMBLOCK | 63 | select ARCH_DISCARD_MEMBLOCK |
64 | select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE | 64 | select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE |
65 | select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS | ||
65 | select ARCH_HAVE_NMI_SAFE_CMPXCHG | 66 | select ARCH_HAVE_NMI_SAFE_CMPXCHG |
66 | select ARCH_INLINE_READ_LOCK | 67 | select ARCH_INLINE_READ_LOCK |
67 | select ARCH_INLINE_READ_LOCK_BH | 68 | select ARCH_INLINE_READ_LOCK_BH |
@@ -91,7 +92,6 @@ config S390 | |||
91 | select ARCH_INLINE_WRITE_UNLOCK_BH | 92 | select ARCH_INLINE_WRITE_UNLOCK_BH |
92 | select ARCH_INLINE_WRITE_UNLOCK_IRQ | 93 | select ARCH_INLINE_WRITE_UNLOCK_IRQ |
93 | select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE | 94 | select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE |
94 | select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS | ||
95 | select ARCH_SAVE_PAGE_KEYS if HIBERNATION | 95 | select ARCH_SAVE_PAGE_KEYS if HIBERNATION |
96 | select ARCH_WANT_IPC_PARSE_VERSION | 96 | select ARCH_WANT_IPC_PARSE_VERSION |
97 | select BUILDTIME_EXTABLE_SORT | 97 | select BUILDTIME_EXTABLE_SORT |
@@ -135,15 +135,15 @@ config S390 | |||
135 | select HAVE_SYSCALL_TRACEPOINTS | 135 | select HAVE_SYSCALL_TRACEPOINTS |
136 | select HAVE_UID16 if 32BIT | 136 | select HAVE_UID16 if 32BIT |
137 | select HAVE_VIRT_CPU_ACCOUNTING | 137 | select HAVE_VIRT_CPU_ACCOUNTING |
138 | select VIRT_TO_BUS | ||
139 | select INIT_ALL_POSSIBLE | 138 | select INIT_ALL_POSSIBLE |
140 | select KTIME_SCALAR if 32BIT | 139 | select KTIME_SCALAR if 32BIT |
141 | select MODULES_USE_ELF_RELA | 140 | select MODULES_USE_ELF_RELA |
142 | select OLD_SIGSUSPEND3 | ||
143 | select OLD_SIGACTION | 141 | select OLD_SIGACTION |
142 | select OLD_SIGSUSPEND3 | ||
144 | select SYSCTL_EXCEPTION_TRACE | 143 | select SYSCTL_EXCEPTION_TRACE |
145 | select USE_GENERIC_SMP_HELPERS if SMP | 144 | select USE_GENERIC_SMP_HELPERS if SMP |
146 | select VIRT_CPU_ACCOUNTING | 145 | select VIRT_CPU_ACCOUNTING |
146 | select VIRT_TO_BUS | ||
147 | 147 | ||
148 | config SCHED_OMIT_FRAME_POINTER | 148 | config SCHED_OMIT_FRAME_POINTER |
149 | def_bool y | 149 | def_bool y |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index b74400e3e035..d204c65bf722 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
@@ -1,14 +1,13 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | ||
2 | CONFIG_SYSVIPC=y | 1 | CONFIG_SYSVIPC=y |
3 | CONFIG_POSIX_MQUEUE=y | 2 | CONFIG_POSIX_MQUEUE=y |
4 | CONFIG_FHANDLE=y | 3 | CONFIG_FHANDLE=y |
4 | CONFIG_AUDIT=y | ||
5 | CONFIG_NO_HZ=y | ||
6 | CONFIG_HIGH_RES_TIMERS=y | ||
5 | CONFIG_TASKSTATS=y | 7 | CONFIG_TASKSTATS=y |
6 | CONFIG_TASK_DELAY_ACCT=y | 8 | CONFIG_TASK_DELAY_ACCT=y |
7 | CONFIG_TASK_XACCT=y | 9 | CONFIG_TASK_XACCT=y |
8 | CONFIG_TASK_IO_ACCOUNTING=y | 10 | CONFIG_TASK_IO_ACCOUNTING=y |
9 | CONFIG_AUDIT=y | ||
10 | CONFIG_NO_HZ=y | ||
11 | CONFIG_HIGH_RES_TIMERS=y | ||
12 | CONFIG_RCU_FAST_NO_HZ=y | 11 | CONFIG_RCU_FAST_NO_HZ=y |
13 | CONFIG_IKCONFIG=y | 12 | CONFIG_IKCONFIG=y |
14 | CONFIG_IKCONFIG_PROC=y | 13 | CONFIG_IKCONFIG_PROC=y |
@@ -27,6 +26,7 @@ CONFIG_RD_BZIP2=y | |||
27 | CONFIG_RD_LZMA=y | 26 | CONFIG_RD_LZMA=y |
28 | CONFIG_RD_XZ=y | 27 | CONFIG_RD_XZ=y |
29 | CONFIG_RD_LZO=y | 28 | CONFIG_RD_LZO=y |
29 | CONFIG_RD_LZ4=y | ||
30 | CONFIG_EXPERT=y | 30 | CONFIG_EXPERT=y |
31 | # CONFIG_COMPAT_BRK is not set | 31 | # CONFIG_COMPAT_BRK is not set |
32 | CONFIG_PROFILING=y | 32 | CONFIG_PROFILING=y |
@@ -38,11 +38,13 @@ CONFIG_MODULE_UNLOAD=y | |||
38 | CONFIG_MODVERSIONS=y | 38 | CONFIG_MODVERSIONS=y |
39 | CONFIG_PARTITION_ADVANCED=y | 39 | CONFIG_PARTITION_ADVANCED=y |
40 | CONFIG_IBM_PARTITION=y | 40 | CONFIG_IBM_PARTITION=y |
41 | # CONFIG_EFI_PARTITION is not set | ||
41 | CONFIG_DEFAULT_DEADLINE=y | 42 | CONFIG_DEFAULT_DEADLINE=y |
42 | CONFIG_HZ_100=y | 43 | CONFIG_HZ_100=y |
43 | CONFIG_MEMORY_HOTPLUG=y | 44 | CONFIG_MEMORY_HOTPLUG=y |
44 | CONFIG_MEMORY_HOTREMOVE=y | 45 | CONFIG_MEMORY_HOTREMOVE=y |
45 | CONFIG_KSM=y | 46 | CONFIG_KSM=y |
47 | CONFIG_TRANSPARENT_HUGEPAGE=y | ||
46 | CONFIG_CRASH_DUMP=y | 48 | CONFIG_CRASH_DUMP=y |
47 | CONFIG_BINFMT_MISC=m | 49 | CONFIG_BINFMT_MISC=m |
48 | CONFIG_HIBERNATION=y | 50 | CONFIG_HIBERNATION=y |
@@ -92,40 +94,49 @@ CONFIG_SCSI_CONSTANTS=y | |||
92 | CONFIG_SCSI_LOGGING=y | 94 | CONFIG_SCSI_LOGGING=y |
93 | CONFIG_SCSI_SCAN_ASYNC=y | 95 | CONFIG_SCSI_SCAN_ASYNC=y |
94 | CONFIG_ZFCP=y | 96 | CONFIG_ZFCP=y |
97 | CONFIG_SCSI_VIRTIO=y | ||
95 | CONFIG_NETDEVICES=y | 98 | CONFIG_NETDEVICES=y |
96 | CONFIG_BONDING=m | 99 | CONFIG_BONDING=m |
97 | CONFIG_DUMMY=m | 100 | CONFIG_DUMMY=m |
98 | CONFIG_EQUALIZER=m | 101 | CONFIG_EQUALIZER=m |
99 | CONFIG_TUN=m | 102 | CONFIG_TUN=m |
100 | CONFIG_VIRTIO_NET=y | 103 | CONFIG_VIRTIO_NET=y |
104 | # CONFIG_INPUT is not set | ||
105 | # CONFIG_SERIO is not set | ||
101 | CONFIG_RAW_DRIVER=m | 106 | CONFIG_RAW_DRIVER=m |
102 | CONFIG_VIRTIO_BALLOON=y | 107 | CONFIG_VIRTIO_BALLOON=y |
103 | CONFIG_EXT2_FS=y | ||
104 | CONFIG_EXT3_FS=y | ||
105 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
106 | CONFIG_EXT4_FS=y | 108 | CONFIG_EXT4_FS=y |
107 | CONFIG_EXT4_FS_POSIX_ACL=y | 109 | CONFIG_EXT4_FS_POSIX_ACL=y |
108 | CONFIG_EXT4_FS_SECURITY=y | 110 | CONFIG_EXT4_FS_SECURITY=y |
111 | CONFIG_XFS_FS=y | ||
112 | CONFIG_XFS_QUOTA=y | ||
113 | CONFIG_XFS_POSIX_ACL=y | ||
114 | CONFIG_XFS_RT=y | ||
115 | CONFIG_BTRFS_FS=y | ||
116 | CONFIG_BTRFS_FS_POSIX_ACL=y | ||
117 | CONFIG_FANOTIFY=y | ||
118 | CONFIG_FUSE_FS=y | ||
109 | CONFIG_PROC_KCORE=y | 119 | CONFIG_PROC_KCORE=y |
110 | CONFIG_TMPFS=y | 120 | CONFIG_TMPFS=y |
111 | CONFIG_TMPFS_POSIX_ACL=y | 121 | CONFIG_TMPFS_POSIX_ACL=y |
122 | CONFIG_HUGETLBFS=y | ||
112 | # CONFIG_NETWORK_FILESYSTEMS is not set | 123 | # CONFIG_NETWORK_FILESYSTEMS is not set |
124 | CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y | ||
113 | CONFIG_MAGIC_SYSRQ=y | 125 | CONFIG_MAGIC_SYSRQ=y |
126 | CONFIG_DEBUG_PAGEALLOC=y | ||
114 | CONFIG_TIMER_STATS=y | 127 | CONFIG_TIMER_STATS=y |
115 | CONFIG_PROVE_LOCKING=y | 128 | CONFIG_PROVE_LOCKING=y |
116 | CONFIG_PROVE_RCU=y | ||
117 | CONFIG_LOCK_STAT=y | 129 | CONFIG_LOCK_STAT=y |
118 | CONFIG_DEBUG_LOCKDEP=y | 130 | CONFIG_DEBUG_LOCKDEP=y |
119 | CONFIG_DEBUG_LIST=y | 131 | CONFIG_DEBUG_LIST=y |
120 | CONFIG_DEBUG_NOTIFIERS=y | 132 | CONFIG_DEBUG_NOTIFIERS=y |
133 | CONFIG_PROVE_RCU=y | ||
134 | CONFIG_RCU_CPU_STALL_TIMEOUT=60 | ||
121 | CONFIG_RCU_TRACE=y | 135 | CONFIG_RCU_TRACE=y |
122 | CONFIG_KPROBES_SANITY_TEST=y | ||
123 | CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y | ||
124 | CONFIG_LATENCYTOP=y | 136 | CONFIG_LATENCYTOP=y |
125 | CONFIG_DEBUG_PAGEALLOC=y | ||
126 | CONFIG_BLK_DEV_IO_TRACE=y | 137 | CONFIG_BLK_DEV_IO_TRACE=y |
138 | CONFIG_KPROBES_SANITY_TEST=y | ||
127 | # CONFIG_STRICT_DEVMEM is not set | 139 | # CONFIG_STRICT_DEVMEM is not set |
128 | CONFIG_CRYPTO_NULL=m | ||
129 | CONFIG_CRYPTO_CRYPTD=m | 140 | CONFIG_CRYPTO_CRYPTD=m |
130 | CONFIG_CRYPTO_AUTHENC=m | 141 | CONFIG_CRYPTO_AUTHENC=m |
131 | CONFIG_CRYPTO_TEST=m | 142 | CONFIG_CRYPTO_TEST=m |
@@ -137,8 +148,10 @@ CONFIG_CRYPTO_ECB=m | |||
137 | CONFIG_CRYPTO_LRW=m | 148 | CONFIG_CRYPTO_LRW=m |
138 | CONFIG_CRYPTO_PCBC=m | 149 | CONFIG_CRYPTO_PCBC=m |
139 | CONFIG_CRYPTO_XTS=m | 150 | CONFIG_CRYPTO_XTS=m |
151 | CONFIG_CRYPTO_CMAC=m | ||
140 | CONFIG_CRYPTO_XCBC=m | 152 | CONFIG_CRYPTO_XCBC=m |
141 | CONFIG_CRYPTO_VMAC=m | 153 | CONFIG_CRYPTO_VMAC=m |
154 | CONFIG_CRYPTO_CRC32=m | ||
142 | CONFIG_CRYPTO_MD4=m | 155 | CONFIG_CRYPTO_MD4=m |
143 | CONFIG_CRYPTO_MICHAEL_MIC=m | 156 | CONFIG_CRYPTO_MICHAEL_MIC=m |
144 | CONFIG_CRYPTO_RMD128=m | 157 | CONFIG_CRYPTO_RMD128=m |
@@ -165,6 +178,8 @@ CONFIG_CRYPTO_TWOFISH=m | |||
165 | CONFIG_CRYPTO_DEFLATE=m | 178 | CONFIG_CRYPTO_DEFLATE=m |
166 | CONFIG_CRYPTO_ZLIB=m | 179 | CONFIG_CRYPTO_ZLIB=m |
167 | CONFIG_CRYPTO_LZO=m | 180 | CONFIG_CRYPTO_LZO=m |
181 | CONFIG_CRYPTO_LZ4=m | ||
182 | CONFIG_CRYPTO_LZ4HC=m | ||
168 | CONFIG_ZCRYPT=m | 183 | CONFIG_ZCRYPT=m |
169 | CONFIG_CRYPTO_SHA1_S390=m | 184 | CONFIG_CRYPTO_SHA1_S390=m |
170 | CONFIG_CRYPTO_SHA256_S390=m | 185 | CONFIG_CRYPTO_SHA256_S390=m |
diff --git a/arch/s390/include/asm/irq.h b/arch/s390/include/asm/irq.h index 1eaa3625803c..5f8bcc5fe423 100644 --- a/arch/s390/include/asm/irq.h +++ b/arch/s390/include/asm/irq.h | |||
@@ -78,10 +78,14 @@ typedef void (*ext_int_handler_t)(struct ext_code, unsigned int, unsigned long); | |||
78 | 78 | ||
79 | int register_external_interrupt(u16 code, ext_int_handler_t handler); | 79 | int register_external_interrupt(u16 code, ext_int_handler_t handler); |
80 | int unregister_external_interrupt(u16 code, ext_int_handler_t handler); | 80 | int unregister_external_interrupt(u16 code, ext_int_handler_t handler); |
81 | void service_subclass_irq_register(void); | 81 | |
82 | void service_subclass_irq_unregister(void); | 82 | enum irq_subclass { |
83 | void measurement_alert_subclass_register(void); | 83 | IRQ_SUBCLASS_MEASUREMENT_ALERT = 5, |
84 | void measurement_alert_subclass_unregister(void); | 84 | IRQ_SUBCLASS_SERVICE_SIGNAL = 9, |
85 | }; | ||
86 | |||
87 | void irq_subclass_register(enum irq_subclass subclass); | ||
88 | void irq_subclass_unregister(enum irq_subclass subclass); | ||
85 | 89 | ||
86 | #define irq_canonicalize(irq) (irq) | 90 | #define irq_canonicalize(irq) (irq) |
87 | 91 | ||
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index 8b6e4f5288a2..1f1b8c70ab97 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
@@ -221,25 +221,26 @@ static int groups16_from_user(struct group_info *group_info, u16 __user *groupli | |||
221 | 221 | ||
222 | asmlinkage long sys32_getgroups16(int gidsetsize, u16 __user *grouplist) | 222 | asmlinkage long sys32_getgroups16(int gidsetsize, u16 __user *grouplist) |
223 | { | 223 | { |
224 | const struct cred *cred = current_cred(); | ||
224 | int i; | 225 | int i; |
225 | 226 | ||
226 | if (gidsetsize < 0) | 227 | if (gidsetsize < 0) |
227 | return -EINVAL; | 228 | return -EINVAL; |
228 | 229 | ||
229 | get_group_info(current->cred->group_info); | 230 | get_group_info(cred->group_info); |
230 | i = current->cred->group_info->ngroups; | 231 | i = cred->group_info->ngroups; |
231 | if (gidsetsize) { | 232 | if (gidsetsize) { |
232 | if (i > gidsetsize) { | 233 | if (i > gidsetsize) { |
233 | i = -EINVAL; | 234 | i = -EINVAL; |
234 | goto out; | 235 | goto out; |
235 | } | 236 | } |
236 | if (groups16_to_user(grouplist, current->cred->group_info)) { | 237 | if (groups16_to_user(grouplist, cred->group_info)) { |
237 | i = -EFAULT; | 238 | i = -EFAULT; |
238 | goto out; | 239 | goto out; |
239 | } | 240 | } |
240 | } | 241 | } |
241 | out: | 242 | out: |
242 | put_group_info(current->cred->group_info); | 243 | put_group_info(cred->group_info); |
243 | return i; | 244 | return i; |
244 | } | 245 | } |
245 | 246 | ||
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c index c439ac9ced09..1389b637dae5 100644 --- a/arch/s390/kernel/compat_signal.c +++ b/arch/s390/kernel/compat_signal.c | |||
@@ -332,9 +332,9 @@ static int setup_frame32(int sig, struct k_sigaction *ka, | |||
332 | /* Set up to return from userspace. If provided, use a stub | 332 | /* Set up to return from userspace. If provided, use a stub |
333 | already in userspace. */ | 333 | already in userspace. */ |
334 | if (ka->sa.sa_flags & SA_RESTORER) { | 334 | if (ka->sa.sa_flags & SA_RESTORER) { |
335 | regs->gprs[14] = (__u64) ka->sa.sa_restorer | PSW32_ADDR_AMODE; | 335 | regs->gprs[14] = (__u64 __force) ka->sa.sa_restorer | PSW32_ADDR_AMODE; |
336 | } else { | 336 | } else { |
337 | regs->gprs[14] = (__u64) frame->retcode | PSW32_ADDR_AMODE; | 337 | regs->gprs[14] = (__u64 __force) frame->retcode | PSW32_ADDR_AMODE; |
338 | if (__put_user(S390_SYSCALL_OPCODE | __NR_sigreturn, | 338 | if (__put_user(S390_SYSCALL_OPCODE | __NR_sigreturn, |
339 | (u16 __force __user *)(frame->retcode))) | 339 | (u16 __force __user *)(frame->retcode))) |
340 | goto give_sigsegv; | 340 | goto give_sigsegv; |
@@ -400,9 +400,9 @@ static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
400 | /* Set up to return from userspace. If provided, use a stub | 400 | /* Set up to return from userspace. If provided, use a stub |
401 | already in userspace. */ | 401 | already in userspace. */ |
402 | if (ka->sa.sa_flags & SA_RESTORER) { | 402 | if (ka->sa.sa_flags & SA_RESTORER) { |
403 | regs->gprs[14] = (__u64) ka->sa.sa_restorer | PSW32_ADDR_AMODE; | 403 | regs->gprs[14] = (__u64 __force) ka->sa.sa_restorer | PSW32_ADDR_AMODE; |
404 | } else { | 404 | } else { |
405 | regs->gprs[14] = (__u64) frame->retcode | PSW32_ADDR_AMODE; | 405 | regs->gprs[14] = (__u64 __force) frame->retcode | PSW32_ADDR_AMODE; |
406 | err |= __put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn, | 406 | err |= __put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn, |
407 | (u16 __force __user *)(frame->retcode)); | 407 | (u16 __force __user *)(frame->retcode)); |
408 | } | 408 | } |
@@ -417,7 +417,7 @@ static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
417 | regs->psw.mask = PSW_MASK_BA | | 417 | regs->psw.mask = PSW_MASK_BA | |
418 | (psw_user_bits & PSW_MASK_ASC) | | 418 | (psw_user_bits & PSW_MASK_ASC) | |
419 | (regs->psw.mask & ~PSW_MASK_ASC); | 419 | (regs->psw.mask & ~PSW_MASK_ASC); |
420 | regs->psw.addr = (__u64) ka->sa.sa_handler; | 420 | regs->psw.addr = (__u64 __force) ka->sa.sa_handler; |
421 | 421 | ||
422 | regs->gprs[2] = map_signal(sig); | 422 | regs->gprs[2] = map_signal(sig); |
423 | regs->gprs[3] = (__force __u64) &frame->info; | 423 | regs->gprs[3] = (__force __u64) &frame->info; |
diff --git a/arch/s390/kernel/dumpstack.c b/arch/s390/kernel/dumpstack.c index 87acc38f73c6..99e7f6035895 100644 --- a/arch/s390/kernel/dumpstack.c +++ b/arch/s390/kernel/dumpstack.c | |||
@@ -40,14 +40,15 @@ __show_trace(unsigned long sp, unsigned long low, unsigned long high) | |||
40 | { | 40 | { |
41 | struct stack_frame *sf; | 41 | struct stack_frame *sf; |
42 | struct pt_regs *regs; | 42 | struct pt_regs *regs; |
43 | unsigned long addr; | ||
43 | 44 | ||
44 | while (1) { | 45 | while (1) { |
45 | sp = sp & PSW_ADDR_INSN; | 46 | sp = sp & PSW_ADDR_INSN; |
46 | if (sp < low || sp > high - sizeof(*sf)) | 47 | if (sp < low || sp > high - sizeof(*sf)) |
47 | return sp; | 48 | return sp; |
48 | sf = (struct stack_frame *) sp; | 49 | sf = (struct stack_frame *) sp; |
49 | printk("([<%016lx>] ", sf->gprs[8] & PSW_ADDR_INSN); | 50 | addr = sf->gprs[8] & PSW_ADDR_INSN; |
50 | print_symbol("%s)\n", sf->gprs[8] & PSW_ADDR_INSN); | 51 | printk("([<%016lx>] %pSR)\n", addr, (void *)addr); |
51 | /* Follow the backchain. */ | 52 | /* Follow the backchain. */ |
52 | while (1) { | 53 | while (1) { |
53 | low = sp; | 54 | low = sp; |
@@ -57,16 +58,16 @@ __show_trace(unsigned long sp, unsigned long low, unsigned long high) | |||
57 | if (sp <= low || sp > high - sizeof(*sf)) | 58 | if (sp <= low || sp > high - sizeof(*sf)) |
58 | return sp; | 59 | return sp; |
59 | sf = (struct stack_frame *) sp; | 60 | sf = (struct stack_frame *) sp; |
60 | printk(" [<%016lx>] ", sf->gprs[8] & PSW_ADDR_INSN); | 61 | addr = sf->gprs[8] & PSW_ADDR_INSN; |
61 | print_symbol("%s\n", sf->gprs[8] & PSW_ADDR_INSN); | 62 | printk(" [<%016lx>] %pSR\n", addr, (void *)addr); |
62 | } | 63 | } |
63 | /* Zero backchain detected, check for interrupt frame. */ | 64 | /* Zero backchain detected, check for interrupt frame. */ |
64 | sp = (unsigned long) (sf + 1); | 65 | sp = (unsigned long) (sf + 1); |
65 | if (sp <= low || sp > high - sizeof(*regs)) | 66 | if (sp <= low || sp > high - sizeof(*regs)) |
66 | return sp; | 67 | return sp; |
67 | regs = (struct pt_regs *) sp; | 68 | regs = (struct pt_regs *) sp; |
68 | printk(" [<%016lx>] ", regs->psw.addr & PSW_ADDR_INSN); | 69 | addr = regs->psw.addr & PSW_ADDR_INSN; |
69 | print_symbol("%s\n", regs->psw.addr & PSW_ADDR_INSN); | 70 | printk(" [<%016lx>] %pSR\n", addr, (void *)addr); |
70 | low = sp; | 71 | low = sp; |
71 | sp = regs->gprs[15]; | 72 | sp = regs->gprs[15]; |
72 | } | 73 | } |
@@ -128,8 +129,7 @@ static void show_last_breaking_event(struct pt_regs *regs) | |||
128 | { | 129 | { |
129 | #ifdef CONFIG_64BIT | 130 | #ifdef CONFIG_64BIT |
130 | printk("Last Breaking-Event-Address:\n"); | 131 | printk("Last Breaking-Event-Address:\n"); |
131 | printk(" [<%016lx>] ", regs->args[0] & PSW_ADDR_INSN); | 132 | printk(" [<%016lx>] %pSR\n", regs->args[0], (void *)regs->args[0]); |
132 | print_symbol("%s\n", regs->args[0] & PSW_ADDR_INSN); | ||
133 | #endif | 133 | #endif |
134 | } | 134 | } |
135 | 135 | ||
@@ -143,10 +143,10 @@ void show_registers(struct pt_regs *regs) | |||
143 | char *mode; | 143 | char *mode; |
144 | 144 | ||
145 | mode = user_mode(regs) ? "User" : "Krnl"; | 145 | mode = user_mode(regs) ? "User" : "Krnl"; |
146 | printk("%s PSW : %p %p", | 146 | printk("%s PSW : %p %p (%pSR)\n", |
147 | mode, (void *) regs->psw.mask, | 147 | mode, (void *) regs->psw.mask, |
148 | (void *) regs->psw.addr, | ||
148 | (void *) regs->psw.addr); | 149 | (void *) regs->psw.addr); |
149 | print_symbol(" (%s)\n", regs->psw.addr & PSW_ADDR_INSN); | ||
150 | printk(" R:%x T:%x IO:%x EX:%x Key:%x M:%x W:%x " | 150 | printk(" R:%x T:%x IO:%x EX:%x Key:%x M:%x W:%x " |
151 | "P:%x AS:%x CC:%x PM:%x", mask_bits(regs, PSW_MASK_PER), | 151 | "P:%x AS:%x CC:%x PM:%x", mask_bits(regs, PSW_MASK_PER), |
152 | mask_bits(regs, PSW_MASK_DAT), mask_bits(regs, PSW_MASK_IO), | 152 | mask_bits(regs, PSW_MASK_DAT), mask_bits(regs, PSW_MASK_IO), |
diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h index 3ddbc26d246e..e9b04c33d383 100644 --- a/arch/s390/kernel/entry.h +++ b/arch/s390/kernel/entry.h | |||
@@ -53,27 +53,21 @@ void handle_signal32(unsigned long sig, struct k_sigaction *ka, | |||
53 | siginfo_t *info, sigset_t *oldset, struct pt_regs *regs); | 53 | siginfo_t *info, sigset_t *oldset, struct pt_regs *regs); |
54 | void do_notify_resume(struct pt_regs *regs); | 54 | void do_notify_resume(struct pt_regs *regs); |
55 | 55 | ||
56 | struct ext_code; | 56 | void __init init_IRQ(void); |
57 | void do_extint(struct pt_regs *regs); | 57 | void do_IRQ(struct pt_regs *regs, int irq); |
58 | void do_restart(void); | 58 | void do_restart(void); |
59 | void __init startup_init(void); | 59 | void __init startup_init(void); |
60 | void die(struct pt_regs *regs, const char *str); | 60 | void die(struct pt_regs *regs, const char *str); |
61 | 61 | int setup_profiling_timer(unsigned int multiplier); | |
62 | void __init time_init(void); | 62 | void __init time_init(void); |
63 | int pfn_is_nosave(unsigned long); | ||
64 | void s390_early_resume(void); | ||
65 | unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip); | ||
63 | 66 | ||
64 | struct s390_mmap_arg_struct; | 67 | struct s390_mmap_arg_struct; |
65 | struct fadvise64_64_args; | 68 | struct fadvise64_64_args; |
66 | struct old_sigaction; | 69 | struct old_sigaction; |
67 | 70 | ||
68 | long sys_mmap2(struct s390_mmap_arg_struct __user *arg); | ||
69 | long sys_s390_ipc(uint call, int first, unsigned long second, | ||
70 | unsigned long third, void __user *ptr); | ||
71 | long sys_s390_personality(unsigned int personality); | ||
72 | long sys_s390_fadvise64(int fd, u32 offset_high, u32 offset_low, | ||
73 | size_t len, int advice); | ||
74 | long sys_s390_fadvise64_64(struct fadvise64_64_args __user *args); | ||
75 | long sys_s390_fallocate(int fd, int mode, loff_t offset, u32 len_high, | ||
76 | u32 len_low); | ||
77 | long sys_sigreturn(void); | 71 | long sys_sigreturn(void); |
78 | long sys_rt_sigreturn(void); | 72 | long sys_rt_sigreturn(void); |
79 | long sys32_sigreturn(void); | 73 | long sys32_sigreturn(void); |
diff --git a/arch/s390/kernel/ftrace.c b/arch/s390/kernel/ftrace.c index e3043aef87a9..1014ad5f7693 100644 --- a/arch/s390/kernel/ftrace.c +++ b/arch/s390/kernel/ftrace.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/kprobes.h> | 15 | #include <linux/kprobes.h> |
16 | #include <trace/syscall.h> | 16 | #include <trace/syscall.h> |
17 | #include <asm/asm-offsets.h> | 17 | #include <asm/asm-offsets.h> |
18 | #include "entry.h" | ||
18 | 19 | ||
19 | #ifdef CONFIG_DYNAMIC_FTRACE | 20 | #ifdef CONFIG_DYNAMIC_FTRACE |
20 | 21 | ||
@@ -177,7 +178,7 @@ int ftrace_enable_ftrace_graph_caller(void) | |||
177 | 178 | ||
178 | offset = ((void *) prepare_ftrace_return - | 179 | offset = ((void *) prepare_ftrace_return - |
179 | (void *) ftrace_graph_caller) / 2; | 180 | (void *) ftrace_graph_caller) / 2; |
180 | return probe_kernel_write(ftrace_graph_caller + 2, | 181 | return probe_kernel_write((void *) ftrace_graph_caller + 2, |
181 | &offset, sizeof(offset)); | 182 | &offset, sizeof(offset)); |
182 | } | 183 | } |
183 | 184 | ||
@@ -185,7 +186,7 @@ int ftrace_disable_ftrace_graph_caller(void) | |||
185 | { | 186 | { |
186 | static unsigned short offset = 0x0002; | 187 | static unsigned short offset = 0x0002; |
187 | 188 | ||
188 | return probe_kernel_write(ftrace_graph_caller + 2, | 189 | return probe_kernel_write((void *) ftrace_graph_caller + 2, |
189 | &offset, sizeof(offset)); | 190 | &offset, sizeof(offset)); |
190 | } | 191 | } |
191 | 192 | ||
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c index b34ba0ea96a9..8ac2097f13d4 100644 --- a/arch/s390/kernel/irq.c +++ b/arch/s390/kernel/irq.c | |||
@@ -196,21 +196,23 @@ asmlinkage void do_softirq(void) | |||
196 | * ext_int_hash[index] is the list head for all external interrupts that hash | 196 | * ext_int_hash[index] is the list head for all external interrupts that hash |
197 | * to this index. | 197 | * to this index. |
198 | */ | 198 | */ |
199 | static struct list_head ext_int_hash[256]; | 199 | static struct hlist_head ext_int_hash[32] ____cacheline_aligned; |
200 | 200 | ||
201 | struct ext_int_info { | 201 | struct ext_int_info { |
202 | ext_int_handler_t handler; | 202 | ext_int_handler_t handler; |
203 | u16 code; | 203 | struct hlist_node entry; |
204 | struct list_head entry; | ||
205 | struct rcu_head rcu; | 204 | struct rcu_head rcu; |
205 | u16 code; | ||
206 | }; | 206 | }; |
207 | 207 | ||
208 | /* ext_int_hash_lock protects the handler lists for external interrupts */ | 208 | /* ext_int_hash_lock protects the handler lists for external interrupts */ |
209 | DEFINE_SPINLOCK(ext_int_hash_lock); | 209 | static DEFINE_SPINLOCK(ext_int_hash_lock); |
210 | 210 | ||
211 | static inline int ext_hash(u16 code) | 211 | static inline int ext_hash(u16 code) |
212 | { | 212 | { |
213 | return (code + (code >> 9)) & 0xff; | 213 | BUILD_BUG_ON(!is_power_of_2(ARRAY_SIZE(ext_int_hash))); |
214 | |||
215 | return (code + (code >> 9)) & (ARRAY_SIZE(ext_int_hash) - 1); | ||
214 | } | 216 | } |
215 | 217 | ||
216 | int register_external_interrupt(u16 code, ext_int_handler_t handler) | 218 | int register_external_interrupt(u16 code, ext_int_handler_t handler) |
@@ -227,7 +229,7 @@ int register_external_interrupt(u16 code, ext_int_handler_t handler) | |||
227 | index = ext_hash(code); | 229 | index = ext_hash(code); |
228 | 230 | ||
229 | spin_lock_irqsave(&ext_int_hash_lock, flags); | 231 | spin_lock_irqsave(&ext_int_hash_lock, flags); |
230 | list_add_rcu(&p->entry, &ext_int_hash[index]); | 232 | hlist_add_head_rcu(&p->entry, &ext_int_hash[index]); |
231 | spin_unlock_irqrestore(&ext_int_hash_lock, flags); | 233 | spin_unlock_irqrestore(&ext_int_hash_lock, flags); |
232 | return 0; | 234 | return 0; |
233 | } | 235 | } |
@@ -240,9 +242,9 @@ int unregister_external_interrupt(u16 code, ext_int_handler_t handler) | |||
240 | int index = ext_hash(code); | 242 | int index = ext_hash(code); |
241 | 243 | ||
242 | spin_lock_irqsave(&ext_int_hash_lock, flags); | 244 | spin_lock_irqsave(&ext_int_hash_lock, flags); |
243 | list_for_each_entry_rcu(p, &ext_int_hash[index], entry) { | 245 | hlist_for_each_entry_rcu(p, &ext_int_hash[index], entry) { |
244 | if (p->code == code && p->handler == handler) { | 246 | if (p->code == code && p->handler == handler) { |
245 | list_del_rcu(&p->entry); | 247 | hlist_del_rcu(&p->entry); |
246 | kfree_rcu(p, rcu); | 248 | kfree_rcu(p, rcu); |
247 | } | 249 | } |
248 | } | 250 | } |
@@ -264,12 +266,12 @@ static irqreturn_t do_ext_interrupt(int irq, void *dummy) | |||
264 | 266 | ||
265 | index = ext_hash(ext_code.code); | 267 | index = ext_hash(ext_code.code); |
266 | rcu_read_lock(); | 268 | rcu_read_lock(); |
267 | list_for_each_entry_rcu(p, &ext_int_hash[index], entry) | 269 | hlist_for_each_entry_rcu(p, &ext_int_hash[index], entry) { |
268 | if (likely(p->code == ext_code.code)) | 270 | if (unlikely(p->code != ext_code.code)) |
269 | p->handler(ext_code, regs->int_parm, | 271 | continue; |
270 | regs->int_parm_long); | 272 | p->handler(ext_code, regs->int_parm, regs->int_parm_long); |
273 | } | ||
271 | rcu_read_unlock(); | 274 | rcu_read_unlock(); |
272 | |||
273 | return IRQ_HANDLED; | 275 | return IRQ_HANDLED; |
274 | } | 276 | } |
275 | 277 | ||
@@ -283,55 +285,32 @@ void __init init_ext_interrupts(void) | |||
283 | int idx; | 285 | int idx; |
284 | 286 | ||
285 | for (idx = 0; idx < ARRAY_SIZE(ext_int_hash); idx++) | 287 | for (idx = 0; idx < ARRAY_SIZE(ext_int_hash); idx++) |
286 | INIT_LIST_HEAD(&ext_int_hash[idx]); | 288 | INIT_HLIST_HEAD(&ext_int_hash[idx]); |
287 | 289 | ||
288 | irq_set_chip_and_handler(EXT_INTERRUPT, | 290 | irq_set_chip_and_handler(EXT_INTERRUPT, |
289 | &dummy_irq_chip, handle_percpu_irq); | 291 | &dummy_irq_chip, handle_percpu_irq); |
290 | setup_irq(EXT_INTERRUPT, &external_interrupt); | 292 | setup_irq(EXT_INTERRUPT, &external_interrupt); |
291 | } | 293 | } |
292 | 294 | ||
293 | static DEFINE_SPINLOCK(sc_irq_lock); | 295 | static DEFINE_SPINLOCK(irq_subclass_lock); |
294 | static int sc_irq_refcount; | 296 | static unsigned char irq_subclass_refcount[64]; |
295 | |||
296 | void service_subclass_irq_register(void) | ||
297 | { | ||
298 | spin_lock(&sc_irq_lock); | ||
299 | if (!sc_irq_refcount) | ||
300 | ctl_set_bit(0, 9); | ||
301 | sc_irq_refcount++; | ||
302 | spin_unlock(&sc_irq_lock); | ||
303 | } | ||
304 | EXPORT_SYMBOL(service_subclass_irq_register); | ||
305 | |||
306 | void service_subclass_irq_unregister(void) | ||
307 | { | ||
308 | spin_lock(&sc_irq_lock); | ||
309 | sc_irq_refcount--; | ||
310 | if (!sc_irq_refcount) | ||
311 | ctl_clear_bit(0, 9); | ||
312 | spin_unlock(&sc_irq_lock); | ||
313 | } | ||
314 | EXPORT_SYMBOL(service_subclass_irq_unregister); | ||
315 | |||
316 | static DEFINE_SPINLOCK(ma_subclass_lock); | ||
317 | static int ma_subclass_refcount; | ||
318 | 297 | ||
319 | void measurement_alert_subclass_register(void) | 298 | void irq_subclass_register(enum irq_subclass subclass) |
320 | { | 299 | { |
321 | spin_lock(&ma_subclass_lock); | 300 | spin_lock(&irq_subclass_lock); |
322 | if (!ma_subclass_refcount) | 301 | if (!irq_subclass_refcount[subclass]) |
323 | ctl_set_bit(0, 5); | 302 | ctl_set_bit(0, subclass); |
324 | ma_subclass_refcount++; | 303 | irq_subclass_refcount[subclass]++; |
325 | spin_unlock(&ma_subclass_lock); | 304 | spin_unlock(&irq_subclass_lock); |
326 | } | 305 | } |
327 | EXPORT_SYMBOL(measurement_alert_subclass_register); | 306 | EXPORT_SYMBOL(irq_subclass_register); |
328 | 307 | ||
329 | void measurement_alert_subclass_unregister(void) | 308 | void irq_subclass_unregister(enum irq_subclass subclass) |
330 | { | 309 | { |
331 | spin_lock(&ma_subclass_lock); | 310 | spin_lock(&irq_subclass_lock); |
332 | ma_subclass_refcount--; | 311 | irq_subclass_refcount[subclass]--; |
333 | if (!ma_subclass_refcount) | 312 | if (!irq_subclass_refcount[subclass]) |
334 | ctl_clear_bit(0, 5); | 313 | ctl_clear_bit(0, subclass); |
335 | spin_unlock(&ma_subclass_lock); | 314 | spin_unlock(&irq_subclass_lock); |
336 | } | 315 | } |
337 | EXPORT_SYMBOL(measurement_alert_subclass_unregister); | 316 | EXPORT_SYMBOL(irq_subclass_unregister); |
diff --git a/arch/s390/kernel/machine_kexec.c b/arch/s390/kernel/machine_kexec.c index ac2178161ec3..719e27b2cf22 100644 --- a/arch/s390/kernel/machine_kexec.c +++ b/arch/s390/kernel/machine_kexec.c | |||
@@ -50,7 +50,7 @@ static void add_elf_notes(int cpu) | |||
50 | /* | 50 | /* |
51 | * Initialize CPU ELF notes | 51 | * Initialize CPU ELF notes |
52 | */ | 52 | */ |
53 | void setup_regs(void) | 53 | static void setup_regs(void) |
54 | { | 54 | { |
55 | unsigned long sa = S390_lowcore.prefixreg_save_area + SAVE_AREA_BASE; | 55 | unsigned long sa = S390_lowcore.prefixreg_save_area + SAVE_AREA_BASE; |
56 | int cpu, this_cpu; | 56 | int cpu, this_cpu; |
diff --git a/arch/s390/kernel/perf_cpum_cf.c b/arch/s390/kernel/perf_cpum_cf.c index fb99c2057b85..1105502bf6e9 100644 --- a/arch/s390/kernel/perf_cpum_cf.c +++ b/arch/s390/kernel/perf_cpum_cf.c | |||
@@ -274,7 +274,7 @@ static int reserve_pmc_hardware(void) | |||
274 | int flags = PMC_INIT; | 274 | int flags = PMC_INIT; |
275 | 275 | ||
276 | on_each_cpu(setup_pmc_cpu, &flags, 1); | 276 | on_each_cpu(setup_pmc_cpu, &flags, 1); |
277 | measurement_alert_subclass_register(); | 277 | irq_subclass_register(IRQ_SUBCLASS_MEASUREMENT_ALERT); |
278 | 278 | ||
279 | return 0; | 279 | return 0; |
280 | } | 280 | } |
@@ -285,7 +285,7 @@ static void release_pmc_hardware(void) | |||
285 | int flags = PMC_RELEASE; | 285 | int flags = PMC_RELEASE; |
286 | 286 | ||
287 | on_each_cpu(setup_pmc_cpu, &flags, 1); | 287 | on_each_cpu(setup_pmc_cpu, &flags, 1); |
288 | measurement_alert_subclass_unregister(); | 288 | irq_subclass_unregister(IRQ_SUBCLASS_MEASUREMENT_ALERT); |
289 | } | 289 | } |
290 | 290 | ||
291 | /* Release the PMU if event is the last perf event */ | 291 | /* Release the PMU if event is the last perf event */ |
diff --git a/arch/s390/kernel/perf_event.c b/arch/s390/kernel/perf_event.c index 500aa1029bcb..2343c218b8f9 100644 --- a/arch/s390/kernel/perf_event.c +++ b/arch/s390/kernel/perf_event.c | |||
@@ -105,13 +105,10 @@ void perf_event_print_debug(void) | |||
105 | 105 | ||
106 | cpu = smp_processor_id(); | 106 | cpu = smp_processor_id(); |
107 | memset(&cf_info, 0, sizeof(cf_info)); | 107 | memset(&cf_info, 0, sizeof(cf_info)); |
108 | if (!qctri(&cf_info)) { | 108 | if (!qctri(&cf_info)) |
109 | pr_info("CPU[%i] CPUM_CF: ver=%u.%u A=%04x E=%04x C=%04x\n", | 109 | pr_info("CPU[%i] CPUM_CF: ver=%u.%u A=%04x E=%04x C=%04x\n", |
110 | cpu, cf_info.cfvn, cf_info.csvn, | 110 | cpu, cf_info.cfvn, cf_info.csvn, |
111 | cf_info.auth_ctl, cf_info.enable_ctl, cf_info.act_ctl); | 111 | cf_info.auth_ctl, cf_info.enable_ctl, cf_info.act_ctl); |
112 | print_hex_dump_bytes("CPUMF Query: ", DUMP_PREFIX_OFFSET, | ||
113 | &cf_info, sizeof(cf_info)); | ||
114 | } | ||
115 | 112 | ||
116 | local_irq_restore(flags); | 113 | local_irq_restore(flags); |
117 | } | 114 | } |
diff --git a/arch/s390/kernel/runtime_instr.c b/arch/s390/kernel/runtime_instr.c index 077a99389b07..e1c9d1c292fa 100644 --- a/arch/s390/kernel/runtime_instr.c +++ b/arch/s390/kernel/runtime_instr.c | |||
@@ -139,10 +139,10 @@ static int __init runtime_instr_init(void) | |||
139 | if (!runtime_instr_avail()) | 139 | if (!runtime_instr_avail()) |
140 | return 0; | 140 | return 0; |
141 | 141 | ||
142 | measurement_alert_subclass_register(); | 142 | irq_subclass_register(IRQ_SUBCLASS_MEASUREMENT_ALERT); |
143 | rc = register_external_interrupt(0x1407, runtime_instr_int_handler); | 143 | rc = register_external_interrupt(0x1407, runtime_instr_int_handler); |
144 | if (rc) | 144 | if (rc) |
145 | measurement_alert_subclass_unregister(); | 145 | irq_subclass_unregister(IRQ_SUBCLASS_MEASUREMENT_ALERT); |
146 | else | 146 | else |
147 | pr_info("Runtime instrumentation facility initialized\n"); | 147 | pr_info("Runtime instrumentation facility initialized\n"); |
148 | return rc; | 148 | return rc; |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index d386c4e9d2e5..1a4313a1b60f 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -362,7 +362,7 @@ void smp_yield_cpu(int cpu) | |||
362 | * Send cpus emergency shutdown signal. This gives the cpus the | 362 | * Send cpus emergency shutdown signal. This gives the cpus the |
363 | * opportunity to complete outstanding interrupts. | 363 | * opportunity to complete outstanding interrupts. |
364 | */ | 364 | */ |
365 | void smp_emergency_stop(cpumask_t *cpumask) | 365 | static void smp_emergency_stop(cpumask_t *cpumask) |
366 | { | 366 | { |
367 | u64 end; | 367 | u64 end; |
368 | int cpu; | 368 | int cpu; |
diff --git a/arch/s390/kernel/suspend.c b/arch/s390/kernel/suspend.c index 737bff38e3ee..a7a7537ce1e7 100644 --- a/arch/s390/kernel/suspend.c +++ b/arch/s390/kernel/suspend.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <asm/ipl.h> | 13 | #include <asm/ipl.h> |
14 | #include <asm/cio.h> | 14 | #include <asm/cio.h> |
15 | #include <asm/pci.h> | 15 | #include <asm/pci.h> |
16 | #include "entry.h" | ||
16 | 17 | ||
17 | /* | 18 | /* |
18 | * References to section boundaries | 19 | * References to section boundaries |
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index f00aefb66a4e..7de4469915f0 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
@@ -673,7 +673,7 @@ static int __init pfault_irq_init(void) | |||
673 | rc = pfault_init() == 0 ? 0 : -EOPNOTSUPP; | 673 | rc = pfault_init() == 0 ? 0 : -EOPNOTSUPP; |
674 | if (rc) | 674 | if (rc) |
675 | goto out_pfault; | 675 | goto out_pfault; |
676 | service_subclass_irq_register(); | 676 | irq_subclass_register(IRQ_SUBCLASS_SERVICE_SIGNAL); |
677 | hotcpu_notifier(pfault_cpu_notify, 0); | 677 | hotcpu_notifier(pfault_cpu_notify, 0); |
678 | return 0; | 678 | return 0; |
679 | 679 | ||
diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c index 921fa541dc04..d1e0e0c7a7e2 100644 --- a/arch/s390/mm/maccess.c +++ b/arch/s390/mm/maccess.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/gfp.h> | 14 | #include <linux/gfp.h> |
15 | #include <linux/cpu.h> | 15 | #include <linux/cpu.h> |
16 | #include <asm/ctl_reg.h> | 16 | #include <asm/ctl_reg.h> |
17 | #include <asm/io.h> | ||
17 | 18 | ||
18 | /* | 19 | /* |
19 | * This function writes to kernel memory bypassing DAT and possible | 20 | * This function writes to kernel memory bypassing DAT and possible |
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c index bf7c0dc64a76..de8cbc30dcd1 100644 --- a/arch/s390/mm/pgtable.c +++ b/arch/s390/mm/pgtable.c | |||
@@ -245,7 +245,9 @@ EXPORT_SYMBOL_GPL(gmap_disable); | |||
245 | * gmap_alloc_table is assumed to be called with mmap_sem held | 245 | * gmap_alloc_table is assumed to be called with mmap_sem held |
246 | */ | 246 | */ |
247 | static int gmap_alloc_table(struct gmap *gmap, | 247 | static int gmap_alloc_table(struct gmap *gmap, |
248 | unsigned long *table, unsigned long init) | 248 | unsigned long *table, unsigned long init) |
249 | __releases(&gmap->mm->page_table_lock) | ||
250 | __acquires(&gmap->mm->page_table_lock) | ||
249 | { | 251 | { |
250 | struct page *page; | 252 | struct page *page; |
251 | unsigned long *new; | 253 | unsigned long *new; |
@@ -966,7 +968,7 @@ void page_table_free_rcu(struct mmu_gather *tlb, unsigned long *table) | |||
966 | tlb_remove_table(tlb, table); | 968 | tlb_remove_table(tlb, table); |
967 | } | 969 | } |
968 | 970 | ||
969 | void __tlb_remove_table(void *_table) | 971 | static void __tlb_remove_table(void *_table) |
970 | { | 972 | { |
971 | const unsigned long mask = (FRAG_MASK << 4) | FRAG_MASK; | 973 | const unsigned long mask = (FRAG_MASK << 4) | FRAG_MASK; |
972 | void *table = (void *)((unsigned long) _table & ~mask); | 974 | void *table = (void *)((unsigned long) _table & ~mask); |
diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index d5f10a43a58f..709239285869 100644 --- a/arch/s390/net/bpf_jit_comp.c +++ b/arch/s390/net/bpf_jit_comp.c | |||
@@ -805,7 +805,7 @@ static struct bpf_binary_header *bpf_alloc_binary(unsigned int bpfsize, | |||
805 | return NULL; | 805 | return NULL; |
806 | memset(header, 0, sz); | 806 | memset(header, 0, sz); |
807 | header->pages = sz / PAGE_SIZE; | 807 | header->pages = sz / PAGE_SIZE; |
808 | hole = sz - bpfsize + sizeof(*header); | 808 | hole = sz - (bpfsize + sizeof(*header)); |
809 | /* Insert random number of illegal instructions before BPF code | 809 | /* Insert random number of illegal instructions before BPF code |
810 | * and make sure the first instruction starts at an even address. | 810 | * and make sure the first instruction starts at an even address. |
811 | */ | 811 | */ |
diff --git a/arch/s390/oprofile/hwsampler.c b/arch/s390/oprofile/hwsampler.c index b5b2916895e0..231cecafc2f1 100644 --- a/arch/s390/oprofile/hwsampler.c +++ b/arch/s390/oprofile/hwsampler.c | |||
@@ -1001,7 +1001,7 @@ int hwsampler_deallocate(void) | |||
1001 | if (hws_state != HWS_STOPPED) | 1001 | if (hws_state != HWS_STOPPED) |
1002 | goto deallocate_exit; | 1002 | goto deallocate_exit; |
1003 | 1003 | ||
1004 | measurement_alert_subclass_unregister(); | 1004 | irq_subclass_unregister(IRQ_SUBCLASS_MEASUREMENT_ALERT); |
1005 | deallocate_sdbt(); | 1005 | deallocate_sdbt(); |
1006 | 1006 | ||
1007 | hws_state = HWS_DEALLOCATED; | 1007 | hws_state = HWS_DEALLOCATED; |
@@ -1115,7 +1115,7 @@ int hwsampler_shutdown(void) | |||
1115 | mutex_lock(&hws_sem); | 1115 | mutex_lock(&hws_sem); |
1116 | 1116 | ||
1117 | if (hws_state == HWS_STOPPED) { | 1117 | if (hws_state == HWS_STOPPED) { |
1118 | measurement_alert_subclass_unregister(); | 1118 | irq_subclass_unregister(IRQ_SUBCLASS_MEASUREMENT_ALERT); |
1119 | deallocate_sdbt(); | 1119 | deallocate_sdbt(); |
1120 | } | 1120 | } |
1121 | if (hws_wq) { | 1121 | if (hws_wq) { |
@@ -1190,7 +1190,7 @@ start_all_exit: | |||
1190 | hws_oom = 1; | 1190 | hws_oom = 1; |
1191 | hws_flush_all = 0; | 1191 | hws_flush_all = 0; |
1192 | /* now let them in, 1407 CPUMF external interrupts */ | 1192 | /* now let them in, 1407 CPUMF external interrupts */ |
1193 | measurement_alert_subclass_register(); | 1193 | irq_subclass_register(IRQ_SUBCLASS_MEASUREMENT_ALERT); |
1194 | 1194 | ||
1195 | return 0; | 1195 | return 0; |
1196 | } | 1196 | } |
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c index feca317b33de..92bd22ce6760 100644 --- a/drivers/s390/block/dasd_diag.c +++ b/drivers/s390/block/dasd_diag.c | |||
@@ -645,7 +645,7 @@ dasd_diag_init(void) | |||
645 | } | 645 | } |
646 | ASCEBC(dasd_diag_discipline.ebcname, 4); | 646 | ASCEBC(dasd_diag_discipline.ebcname, 4); |
647 | 647 | ||
648 | service_subclass_irq_register(); | 648 | irq_subclass_register(IRQ_SUBCLASS_SERVICE_SIGNAL); |
649 | register_external_interrupt(0x2603, dasd_ext_handler); | 649 | register_external_interrupt(0x2603, dasd_ext_handler); |
650 | dasd_diag_discipline_pointer = &dasd_diag_discipline; | 650 | dasd_diag_discipline_pointer = &dasd_diag_discipline; |
651 | return 0; | 651 | return 0; |
@@ -655,7 +655,7 @@ static void __exit | |||
655 | dasd_diag_cleanup(void) | 655 | dasd_diag_cleanup(void) |
656 | { | 656 | { |
657 | unregister_external_interrupt(0x2603, dasd_ext_handler); | 657 | unregister_external_interrupt(0x2603, dasd_ext_handler); |
658 | service_subclass_irq_unregister(); | 658 | irq_subclass_unregister(IRQ_SUBCLASS_SERVICE_SIGNAL); |
659 | dasd_diag_discipline_pointer = NULL; | 659 | dasd_diag_discipline_pointer = NULL; |
660 | } | 660 | } |
661 | 661 | ||
diff --git a/drivers/s390/char/fs3270.c b/drivers/s390/char/fs3270.c index 96e52bf75930..f93cc32eb818 100644 --- a/drivers/s390/char/fs3270.c +++ b/drivers/s390/char/fs3270.c | |||
@@ -524,20 +524,20 @@ static const struct file_operations fs3270_fops = { | |||
524 | .llseek = no_llseek, | 524 | .llseek = no_llseek, |
525 | }; | 525 | }; |
526 | 526 | ||
527 | void fs3270_create_cb(int minor) | 527 | static void fs3270_create_cb(int minor) |
528 | { | 528 | { |
529 | __register_chrdev(IBM_FS3270_MAJOR, minor, 1, "tub", &fs3270_fops); | 529 | __register_chrdev(IBM_FS3270_MAJOR, minor, 1, "tub", &fs3270_fops); |
530 | device_create(class3270, NULL, MKDEV(IBM_FS3270_MAJOR, minor), | 530 | device_create(class3270, NULL, MKDEV(IBM_FS3270_MAJOR, minor), |
531 | NULL, "3270/tub%d", minor); | 531 | NULL, "3270/tub%d", minor); |
532 | } | 532 | } |
533 | 533 | ||
534 | void fs3270_destroy_cb(int minor) | 534 | static void fs3270_destroy_cb(int minor) |
535 | { | 535 | { |
536 | device_destroy(class3270, MKDEV(IBM_FS3270_MAJOR, minor)); | 536 | device_destroy(class3270, MKDEV(IBM_FS3270_MAJOR, minor)); |
537 | __unregister_chrdev(IBM_FS3270_MAJOR, minor, 1, "tub"); | 537 | __unregister_chrdev(IBM_FS3270_MAJOR, minor, 1, "tub"); |
538 | } | 538 | } |
539 | 539 | ||
540 | struct raw3270_notifier fs3270_notifier = | 540 | static struct raw3270_notifier fs3270_notifier = |
541 | { | 541 | { |
542 | .create = fs3270_create_cb, | 542 | .create = fs3270_create_cb, |
543 | .destroy = fs3270_destroy_cb, | 543 | .destroy = fs3270_destroy_cb, |
diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c index 3e4fb4e858da..a3aa374799dc 100644 --- a/drivers/s390/char/sclp.c +++ b/drivers/s390/char/sclp.c | |||
@@ -910,12 +910,12 @@ sclp_check_interface(void) | |||
910 | spin_unlock_irqrestore(&sclp_lock, flags); | 910 | spin_unlock_irqrestore(&sclp_lock, flags); |
911 | /* Enable service-signal interruption - needs to happen | 911 | /* Enable service-signal interruption - needs to happen |
912 | * with IRQs enabled. */ | 912 | * with IRQs enabled. */ |
913 | service_subclass_irq_register(); | 913 | irq_subclass_register(IRQ_SUBCLASS_SERVICE_SIGNAL); |
914 | /* Wait for signal from interrupt or timeout */ | 914 | /* Wait for signal from interrupt or timeout */ |
915 | sclp_sync_wait(); | 915 | sclp_sync_wait(); |
916 | /* Disable service-signal interruption - needs to happen | 916 | /* Disable service-signal interruption - needs to happen |
917 | * with IRQs enabled. */ | 917 | * with IRQs enabled. */ |
918 | service_subclass_irq_unregister(); | 918 | irq_subclass_unregister(IRQ_SUBCLASS_SERVICE_SIGNAL); |
919 | spin_lock_irqsave(&sclp_lock, flags); | 919 | spin_lock_irqsave(&sclp_lock, flags); |
920 | del_timer(&sclp_request_timer); | 920 | del_timer(&sclp_request_timer); |
921 | if (sclp_init_req.status == SCLP_REQ_DONE && | 921 | if (sclp_init_req.status == SCLP_REQ_DONE && |
@@ -1131,7 +1131,7 @@ sclp_init(void) | |||
1131 | spin_unlock_irqrestore(&sclp_lock, flags); | 1131 | spin_unlock_irqrestore(&sclp_lock, flags); |
1132 | /* Enable service-signal external interruption - needs to happen with | 1132 | /* Enable service-signal external interruption - needs to happen with |
1133 | * IRQs enabled. */ | 1133 | * IRQs enabled. */ |
1134 | service_subclass_irq_register(); | 1134 | irq_subclass_register(IRQ_SUBCLASS_SERVICE_SIGNAL); |
1135 | sclp_init_mask(1); | 1135 | sclp_init_mask(1); |
1136 | return 0; | 1136 | return 0; |
1137 | 1137 | ||
diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c index cee69dac3e18..a0f47c83fd62 100644 --- a/drivers/s390/char/tty3270.c +++ b/drivers/s390/char/tty3270.c | |||
@@ -1845,17 +1845,17 @@ static const struct tty_operations tty3270_ops = { | |||
1845 | .set_termios = tty3270_set_termios | 1845 | .set_termios = tty3270_set_termios |
1846 | }; | 1846 | }; |
1847 | 1847 | ||
1848 | void tty3270_create_cb(int minor) | 1848 | static void tty3270_create_cb(int minor) |
1849 | { | 1849 | { |
1850 | tty_register_device(tty3270_driver, minor - RAW3270_FIRSTMINOR, NULL); | 1850 | tty_register_device(tty3270_driver, minor - RAW3270_FIRSTMINOR, NULL); |
1851 | } | 1851 | } |
1852 | 1852 | ||
1853 | void tty3270_destroy_cb(int minor) | 1853 | static void tty3270_destroy_cb(int minor) |
1854 | { | 1854 | { |
1855 | tty_unregister_device(tty3270_driver, minor - RAW3270_FIRSTMINOR); | 1855 | tty_unregister_device(tty3270_driver, minor - RAW3270_FIRSTMINOR); |
1856 | } | 1856 | } |
1857 | 1857 | ||
1858 | struct raw3270_notifier tty3270_notifier = | 1858 | static struct raw3270_notifier tty3270_notifier = |
1859 | { | 1859 | { |
1860 | .create = tty3270_create_cb, | 1860 | .create = tty3270_create_cb, |
1861 | .destroy = tty3270_destroy_cb, | 1861 | .destroy = tty3270_destroy_cb, |
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index d4174b82a1a9..02300dcfac91 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c | |||
@@ -413,7 +413,7 @@ __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length, | |||
413 | register unsigned long reg2 asm ("2") = (unsigned long) msg; | 413 | register unsigned long reg2 asm ("2") = (unsigned long) msg; |
414 | register unsigned long reg3 asm ("3") = (unsigned long) length; | 414 | register unsigned long reg3 asm ("3") = (unsigned long) length; |
415 | register unsigned long reg4 asm ("4") = (unsigned int) (psmid >> 32); | 415 | register unsigned long reg4 asm ("4") = (unsigned int) (psmid >> 32); |
416 | register unsigned long reg5 asm ("5") = (unsigned int) psmid; | 416 | register unsigned long reg5 asm ("5") = psmid & 0xffffffff; |
417 | 417 | ||
418 | if (special == 1) | 418 | if (special == 1) |
419 | reg0 |= 0x400000UL; | 419 | reg0 |= 0x400000UL; |
diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c index 2ea6165366b6..af2166fa5159 100644 --- a/drivers/s390/kvm/kvm_virtio.c +++ b/drivers/s390/kvm/kvm_virtio.c | |||
@@ -472,7 +472,7 @@ static int __init kvm_devices_init(void) | |||
472 | 472 | ||
473 | INIT_WORK(&hotplug_work, hotplug_devices); | 473 | INIT_WORK(&hotplug_work, hotplug_devices); |
474 | 474 | ||
475 | service_subclass_irq_register(); | 475 | irq_subclass_register(IRQ_SUBCLASS_SERVICE_SIGNAL); |
476 | register_external_interrupt(0x2603, kvm_extint_handler); | 476 | register_external_interrupt(0x2603, kvm_extint_handler); |
477 | 477 | ||
478 | scan_devices(); | 478 | scan_devices(); |