aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/s390/Kconfig6
-rw-r--r--arch/s390/defconfig39
-rw-r--r--arch/s390/include/asm/irq.h12
-rw-r--r--arch/s390/kernel/compat_linux.c9
-rw-r--r--arch/s390/kernel/compat_signal.c10
-rw-r--r--arch/s390/kernel/dumpstack.c20
-rw-r--r--arch/s390/kernel/entry.h18
-rw-r--r--arch/s390/kernel/ftrace.c5
-rw-r--r--arch/s390/kernel/irq.c85
-rw-r--r--arch/s390/kernel/machine_kexec.c2
-rw-r--r--arch/s390/kernel/perf_cpum_cf.c4
-rw-r--r--arch/s390/kernel/perf_event.c5
-rw-r--r--arch/s390/kernel/runtime_instr.c4
-rw-r--r--arch/s390/kernel/smp.c2
-rw-r--r--arch/s390/kernel/suspend.c1
-rw-r--r--arch/s390/mm/fault.c2
-rw-r--r--arch/s390/mm/maccess.c1
-rw-r--r--arch/s390/mm/pgtable.c6
-rw-r--r--arch/s390/net/bpf_jit_comp.c2
-rw-r--r--arch/s390/oprofile/hwsampler.c6
-rw-r--r--drivers/s390/block/dasd_diag.c4
-rw-r--r--drivers/s390/char/fs3270.c6
-rw-r--r--drivers/s390/char/sclp.c6
-rw-r--r--drivers/s390/char/tty3270.c6
-rw-r--r--drivers/s390/crypto/ap_bus.c2
-rw-r--r--drivers/s390/kvm/kvm_virtio.c2
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
148config SCHED_OMIT_FRAME_POINTER 148config 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 @@
1CONFIG_EXPERIMENTAL=y
2CONFIG_SYSVIPC=y 1CONFIG_SYSVIPC=y
3CONFIG_POSIX_MQUEUE=y 2CONFIG_POSIX_MQUEUE=y
4CONFIG_FHANDLE=y 3CONFIG_FHANDLE=y
4CONFIG_AUDIT=y
5CONFIG_NO_HZ=y
6CONFIG_HIGH_RES_TIMERS=y
5CONFIG_TASKSTATS=y 7CONFIG_TASKSTATS=y
6CONFIG_TASK_DELAY_ACCT=y 8CONFIG_TASK_DELAY_ACCT=y
7CONFIG_TASK_XACCT=y 9CONFIG_TASK_XACCT=y
8CONFIG_TASK_IO_ACCOUNTING=y 10CONFIG_TASK_IO_ACCOUNTING=y
9CONFIG_AUDIT=y
10CONFIG_NO_HZ=y
11CONFIG_HIGH_RES_TIMERS=y
12CONFIG_RCU_FAST_NO_HZ=y 11CONFIG_RCU_FAST_NO_HZ=y
13CONFIG_IKCONFIG=y 12CONFIG_IKCONFIG=y
14CONFIG_IKCONFIG_PROC=y 13CONFIG_IKCONFIG_PROC=y
@@ -27,6 +26,7 @@ CONFIG_RD_BZIP2=y
27CONFIG_RD_LZMA=y 26CONFIG_RD_LZMA=y
28CONFIG_RD_XZ=y 27CONFIG_RD_XZ=y
29CONFIG_RD_LZO=y 28CONFIG_RD_LZO=y
29CONFIG_RD_LZ4=y
30CONFIG_EXPERT=y 30CONFIG_EXPERT=y
31# CONFIG_COMPAT_BRK is not set 31# CONFIG_COMPAT_BRK is not set
32CONFIG_PROFILING=y 32CONFIG_PROFILING=y
@@ -38,11 +38,13 @@ CONFIG_MODULE_UNLOAD=y
38CONFIG_MODVERSIONS=y 38CONFIG_MODVERSIONS=y
39CONFIG_PARTITION_ADVANCED=y 39CONFIG_PARTITION_ADVANCED=y
40CONFIG_IBM_PARTITION=y 40CONFIG_IBM_PARTITION=y
41# CONFIG_EFI_PARTITION is not set
41CONFIG_DEFAULT_DEADLINE=y 42CONFIG_DEFAULT_DEADLINE=y
42CONFIG_HZ_100=y 43CONFIG_HZ_100=y
43CONFIG_MEMORY_HOTPLUG=y 44CONFIG_MEMORY_HOTPLUG=y
44CONFIG_MEMORY_HOTREMOVE=y 45CONFIG_MEMORY_HOTREMOVE=y
45CONFIG_KSM=y 46CONFIG_KSM=y
47CONFIG_TRANSPARENT_HUGEPAGE=y
46CONFIG_CRASH_DUMP=y 48CONFIG_CRASH_DUMP=y
47CONFIG_BINFMT_MISC=m 49CONFIG_BINFMT_MISC=m
48CONFIG_HIBERNATION=y 50CONFIG_HIBERNATION=y
@@ -92,40 +94,49 @@ CONFIG_SCSI_CONSTANTS=y
92CONFIG_SCSI_LOGGING=y 94CONFIG_SCSI_LOGGING=y
93CONFIG_SCSI_SCAN_ASYNC=y 95CONFIG_SCSI_SCAN_ASYNC=y
94CONFIG_ZFCP=y 96CONFIG_ZFCP=y
97CONFIG_SCSI_VIRTIO=y
95CONFIG_NETDEVICES=y 98CONFIG_NETDEVICES=y
96CONFIG_BONDING=m 99CONFIG_BONDING=m
97CONFIG_DUMMY=m 100CONFIG_DUMMY=m
98CONFIG_EQUALIZER=m 101CONFIG_EQUALIZER=m
99CONFIG_TUN=m 102CONFIG_TUN=m
100CONFIG_VIRTIO_NET=y 103CONFIG_VIRTIO_NET=y
104# CONFIG_INPUT is not set
105# CONFIG_SERIO is not set
101CONFIG_RAW_DRIVER=m 106CONFIG_RAW_DRIVER=m
102CONFIG_VIRTIO_BALLOON=y 107CONFIG_VIRTIO_BALLOON=y
103CONFIG_EXT2_FS=y
104CONFIG_EXT3_FS=y
105# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
106CONFIG_EXT4_FS=y 108CONFIG_EXT4_FS=y
107CONFIG_EXT4_FS_POSIX_ACL=y 109CONFIG_EXT4_FS_POSIX_ACL=y
108CONFIG_EXT4_FS_SECURITY=y 110CONFIG_EXT4_FS_SECURITY=y
111CONFIG_XFS_FS=y
112CONFIG_XFS_QUOTA=y
113CONFIG_XFS_POSIX_ACL=y
114CONFIG_XFS_RT=y
115CONFIG_BTRFS_FS=y
116CONFIG_BTRFS_FS_POSIX_ACL=y
117CONFIG_FANOTIFY=y
118CONFIG_FUSE_FS=y
109CONFIG_PROC_KCORE=y 119CONFIG_PROC_KCORE=y
110CONFIG_TMPFS=y 120CONFIG_TMPFS=y
111CONFIG_TMPFS_POSIX_ACL=y 121CONFIG_TMPFS_POSIX_ACL=y
122CONFIG_HUGETLBFS=y
112# CONFIG_NETWORK_FILESYSTEMS is not set 123# CONFIG_NETWORK_FILESYSTEMS is not set
124CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
113CONFIG_MAGIC_SYSRQ=y 125CONFIG_MAGIC_SYSRQ=y
126CONFIG_DEBUG_PAGEALLOC=y
114CONFIG_TIMER_STATS=y 127CONFIG_TIMER_STATS=y
115CONFIG_PROVE_LOCKING=y 128CONFIG_PROVE_LOCKING=y
116CONFIG_PROVE_RCU=y
117CONFIG_LOCK_STAT=y 129CONFIG_LOCK_STAT=y
118CONFIG_DEBUG_LOCKDEP=y 130CONFIG_DEBUG_LOCKDEP=y
119CONFIG_DEBUG_LIST=y 131CONFIG_DEBUG_LIST=y
120CONFIG_DEBUG_NOTIFIERS=y 132CONFIG_DEBUG_NOTIFIERS=y
133CONFIG_PROVE_RCU=y
134CONFIG_RCU_CPU_STALL_TIMEOUT=60
121CONFIG_RCU_TRACE=y 135CONFIG_RCU_TRACE=y
122CONFIG_KPROBES_SANITY_TEST=y
123CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
124CONFIG_LATENCYTOP=y 136CONFIG_LATENCYTOP=y
125CONFIG_DEBUG_PAGEALLOC=y
126CONFIG_BLK_DEV_IO_TRACE=y 137CONFIG_BLK_DEV_IO_TRACE=y
138CONFIG_KPROBES_SANITY_TEST=y
127# CONFIG_STRICT_DEVMEM is not set 139# CONFIG_STRICT_DEVMEM is not set
128CONFIG_CRYPTO_NULL=m
129CONFIG_CRYPTO_CRYPTD=m 140CONFIG_CRYPTO_CRYPTD=m
130CONFIG_CRYPTO_AUTHENC=m 141CONFIG_CRYPTO_AUTHENC=m
131CONFIG_CRYPTO_TEST=m 142CONFIG_CRYPTO_TEST=m
@@ -137,8 +148,10 @@ CONFIG_CRYPTO_ECB=m
137CONFIG_CRYPTO_LRW=m 148CONFIG_CRYPTO_LRW=m
138CONFIG_CRYPTO_PCBC=m 149CONFIG_CRYPTO_PCBC=m
139CONFIG_CRYPTO_XTS=m 150CONFIG_CRYPTO_XTS=m
151CONFIG_CRYPTO_CMAC=m
140CONFIG_CRYPTO_XCBC=m 152CONFIG_CRYPTO_XCBC=m
141CONFIG_CRYPTO_VMAC=m 153CONFIG_CRYPTO_VMAC=m
154CONFIG_CRYPTO_CRC32=m
142CONFIG_CRYPTO_MD4=m 155CONFIG_CRYPTO_MD4=m
143CONFIG_CRYPTO_MICHAEL_MIC=m 156CONFIG_CRYPTO_MICHAEL_MIC=m
144CONFIG_CRYPTO_RMD128=m 157CONFIG_CRYPTO_RMD128=m
@@ -165,6 +178,8 @@ CONFIG_CRYPTO_TWOFISH=m
165CONFIG_CRYPTO_DEFLATE=m 178CONFIG_CRYPTO_DEFLATE=m
166CONFIG_CRYPTO_ZLIB=m 179CONFIG_CRYPTO_ZLIB=m
167CONFIG_CRYPTO_LZO=m 180CONFIG_CRYPTO_LZO=m
181CONFIG_CRYPTO_LZ4=m
182CONFIG_CRYPTO_LZ4HC=m
168CONFIG_ZCRYPT=m 183CONFIG_ZCRYPT=m
169CONFIG_CRYPTO_SHA1_S390=m 184CONFIG_CRYPTO_SHA1_S390=m
170CONFIG_CRYPTO_SHA256_S390=m 185CONFIG_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
79int register_external_interrupt(u16 code, ext_int_handler_t handler); 79int register_external_interrupt(u16 code, ext_int_handler_t handler);
80int unregister_external_interrupt(u16 code, ext_int_handler_t handler); 80int unregister_external_interrupt(u16 code, ext_int_handler_t handler);
81void service_subclass_irq_register(void); 81
82void service_subclass_irq_unregister(void); 82enum irq_subclass {
83void measurement_alert_subclass_register(void); 83 IRQ_SUBCLASS_MEASUREMENT_ALERT = 5,
84void measurement_alert_subclass_unregister(void); 84 IRQ_SUBCLASS_SERVICE_SIGNAL = 9,
85};
86
87void irq_subclass_register(enum irq_subclass subclass);
88void 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
222asmlinkage long sys32_getgroups16(int gidsetsize, u16 __user *grouplist) 222asmlinkage 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 }
241out: 242out:
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);
54void do_notify_resume(struct pt_regs *regs); 54void do_notify_resume(struct pt_regs *regs);
55 55
56struct ext_code; 56void __init init_IRQ(void);
57void do_extint(struct pt_regs *regs); 57void do_IRQ(struct pt_regs *regs, int irq);
58void do_restart(void); 58void do_restart(void);
59void __init startup_init(void); 59void __init startup_init(void);
60void die(struct pt_regs *regs, const char *str); 60void die(struct pt_regs *regs, const char *str);
61 61int setup_profiling_timer(unsigned int multiplier);
62void __init time_init(void); 62void __init time_init(void);
63int pfn_is_nosave(unsigned long);
64void s390_early_resume(void);
65unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip);
63 66
64struct s390_mmap_arg_struct; 67struct s390_mmap_arg_struct;
65struct fadvise64_64_args; 68struct fadvise64_64_args;
66struct old_sigaction; 69struct old_sigaction;
67 70
68long sys_mmap2(struct s390_mmap_arg_struct __user *arg);
69long sys_s390_ipc(uint call, int first, unsigned long second,
70 unsigned long third, void __user *ptr);
71long sys_s390_personality(unsigned int personality);
72long sys_s390_fadvise64(int fd, u32 offset_high, u32 offset_low,
73 size_t len, int advice);
74long sys_s390_fadvise64_64(struct fadvise64_64_args __user *args);
75long sys_s390_fallocate(int fd, int mode, loff_t offset, u32 len_high,
76 u32 len_low);
77long sys_sigreturn(void); 71long sys_sigreturn(void);
78long sys_rt_sigreturn(void); 72long sys_rt_sigreturn(void);
79long sys32_sigreturn(void); 73long 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 */
199static struct list_head ext_int_hash[256]; 199static struct hlist_head ext_int_hash[32] ____cacheline_aligned;
200 200
201struct ext_int_info { 201struct 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 */
209DEFINE_SPINLOCK(ext_int_hash_lock); 209static DEFINE_SPINLOCK(ext_int_hash_lock);
210 210
211static inline int ext_hash(u16 code) 211static 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
216int register_external_interrupt(u16 code, ext_int_handler_t handler) 218int 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
293static DEFINE_SPINLOCK(sc_irq_lock); 295static DEFINE_SPINLOCK(irq_subclass_lock);
294static int sc_irq_refcount; 296static unsigned char irq_subclass_refcount[64];
295
296void 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}
304EXPORT_SYMBOL(service_subclass_irq_register);
305
306void 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}
314EXPORT_SYMBOL(service_subclass_irq_unregister);
315
316static DEFINE_SPINLOCK(ma_subclass_lock);
317static int ma_subclass_refcount;
318 297
319void measurement_alert_subclass_register(void) 298void 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}
327EXPORT_SYMBOL(measurement_alert_subclass_register); 306EXPORT_SYMBOL(irq_subclass_register);
328 307
329void measurement_alert_subclass_unregister(void) 308void 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}
337EXPORT_SYMBOL(measurement_alert_subclass_unregister); 316EXPORT_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 */
53void setup_regs(void) 53static 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 */
365void smp_emergency_stop(cpumask_t *cpumask) 365static 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 */
247static int gmap_alloc_table(struct gmap *gmap, 247static 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
969void __tlb_remove_table(void *_table) 971static 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
655dasd_diag_cleanup(void) 655dasd_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
527void fs3270_create_cb(int minor) 527static 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
534void fs3270_destroy_cb(int minor) 534static 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
540struct raw3270_notifier fs3270_notifier = 540static 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
1848void tty3270_create_cb(int minor) 1848static 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
1853void tty3270_destroy_cb(int minor) 1853static 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
1858struct raw3270_notifier tty3270_notifier = 1858static 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();