diff options
Diffstat (limited to 'arch/s390/kernel')
-rw-r--r-- | arch/s390/kernel/asm-offsets.c | 1 | ||||
-rw-r--r-- | arch/s390/kernel/early.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/entry.S | 24 | ||||
-rw-r--r-- | arch/s390/kernel/entry64.S | 24 | ||||
-rw-r--r-- | arch/s390/kernel/irq.c | 10 | ||||
-rw-r--r-- | arch/s390/kernel/perf_cpum_cf.c | 6 | ||||
-rw-r--r-- | arch/s390/kernel/perf_cpum_sf.c | 6 | ||||
-rw-r--r-- | arch/s390/kernel/runtime_instr.c | 3 | ||||
-rw-r--r-- | arch/s390/kernel/sclp.S | 5 | ||||
-rw-r--r-- | arch/s390/kernel/smp.c | 10 | ||||
-rw-r--r-- | arch/s390/kernel/time.c | 6 |
11 files changed, 76 insertions, 21 deletions
diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c index e4c99a183651..cc10cdd4d6a2 100644 --- a/arch/s390/kernel/asm-offsets.c +++ b/arch/s390/kernel/asm-offsets.c | |||
@@ -136,6 +136,7 @@ int main(void) | |||
136 | DEFINE(__LC_RESTART_FN, offsetof(struct _lowcore, restart_fn)); | 136 | DEFINE(__LC_RESTART_FN, offsetof(struct _lowcore, restart_fn)); |
137 | DEFINE(__LC_RESTART_DATA, offsetof(struct _lowcore, restart_data)); | 137 | DEFINE(__LC_RESTART_DATA, offsetof(struct _lowcore, restart_data)); |
138 | DEFINE(__LC_RESTART_SOURCE, offsetof(struct _lowcore, restart_source)); | 138 | DEFINE(__LC_RESTART_SOURCE, offsetof(struct _lowcore, restart_source)); |
139 | DEFINE(__LC_KERNEL_ASCE, offsetof(struct _lowcore, kernel_asce)); | ||
139 | DEFINE(__LC_USER_ASCE, offsetof(struct _lowcore, user_asce)); | 140 | DEFINE(__LC_USER_ASCE, offsetof(struct _lowcore, user_asce)); |
140 | DEFINE(__LC_INT_CLOCK, offsetof(struct _lowcore, int_clock)); | 141 | DEFINE(__LC_INT_CLOCK, offsetof(struct _lowcore, int_clock)); |
141 | DEFINE(__LC_MCCK_CLOCK, offsetof(struct _lowcore, mcck_clock)); | 142 | DEFINE(__LC_MCCK_CLOCK, offsetof(struct _lowcore, mcck_clock)); |
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c index 6b594439cca5..a734f3585ceb 100644 --- a/arch/s390/kernel/early.c +++ b/arch/s390/kernel/early.c | |||
@@ -386,6 +386,8 @@ static __init void detect_machine_facilities(void) | |||
386 | S390_lowcore.machine_flags |= MACHINE_FLAG_TE; | 386 | S390_lowcore.machine_flags |= MACHINE_FLAG_TE; |
387 | if (test_facility(66)) | 387 | if (test_facility(66)) |
388 | S390_lowcore.machine_flags |= MACHINE_FLAG_RRBM; | 388 | S390_lowcore.machine_flags |= MACHINE_FLAG_RRBM; |
389 | if (test_facility(51)) | ||
390 | S390_lowcore.machine_flags |= MACHINE_FLAG_TLB_LC; | ||
389 | #endif | 391 | #endif |
390 | } | 392 | } |
391 | 393 | ||
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 526d3735ed29..1662038516c0 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S | |||
@@ -38,9 +38,9 @@ __PT_R14 = __PT_GPRS + 56 | |||
38 | __PT_R15 = __PT_GPRS + 60 | 38 | __PT_R15 = __PT_GPRS + 60 |
39 | 39 | ||
40 | _TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ | 40 | _TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ |
41 | _TIF_MCCK_PENDING | _TIF_PER_TRAP ) | 41 | _TIF_MCCK_PENDING | _TIF_PER_TRAP | _TIF_ASCE) |
42 | _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ | 42 | _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ |
43 | _TIF_MCCK_PENDING) | 43 | _TIF_MCCK_PENDING | _TIF_ASCE) |
44 | _TIF_TRACE = (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | \ | 44 | _TIF_TRACE = (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | \ |
45 | _TIF_SYSCALL_TRACEPOINT) | 45 | _TIF_SYSCALL_TRACEPOINT) |
46 | _TIF_TRANSFER = (_TIF_MCCK_PENDING | _TIF_TLB_WAIT) | 46 | _TIF_TRANSFER = (_TIF_MCCK_PENDING | _TIF_TLB_WAIT) |
@@ -241,6 +241,8 @@ sysc_work: | |||
241 | jo sysc_sigpending | 241 | jo sysc_sigpending |
242 | tm __TI_flags+3(%r12),_TIF_NOTIFY_RESUME | 242 | tm __TI_flags+3(%r12),_TIF_NOTIFY_RESUME |
243 | jo sysc_notify_resume | 243 | jo sysc_notify_resume |
244 | tm __TI_flags+3(%r12),_TIF_ASCE | ||
245 | jo sysc_uaccess | ||
244 | j sysc_return # beware of critical section cleanup | 246 | j sysc_return # beware of critical section cleanup |
245 | 247 | ||
246 | # | 248 | # |
@@ -260,6 +262,14 @@ sysc_mcck_pending: | |||
260 | br %r1 # TIF bit will be cleared by handler | 262 | br %r1 # TIF bit will be cleared by handler |
261 | 263 | ||
262 | # | 264 | # |
265 | # _TIF_ASCE is set, load user space asce | ||
266 | # | ||
267 | sysc_uaccess: | ||
268 | ni __TI_flags+3(%r12),255-_TIF_ASCE | ||
269 | lctl %c1,%c1,__LC_USER_ASCE # load primary asce | ||
270 | j sysc_return | ||
271 | |||
272 | # | ||
263 | # _TIF_SIGPENDING is set, call do_signal | 273 | # _TIF_SIGPENDING is set, call do_signal |
264 | # | 274 | # |
265 | sysc_sigpending: | 275 | sysc_sigpending: |
@@ -522,6 +532,8 @@ io_work_tif: | |||
522 | jo io_sigpending | 532 | jo io_sigpending |
523 | tm __TI_flags+3(%r12),_TIF_NOTIFY_RESUME | 533 | tm __TI_flags+3(%r12),_TIF_NOTIFY_RESUME |
524 | jo io_notify_resume | 534 | jo io_notify_resume |
535 | tm __TI_flags+3(%r12),_TIF_ASCE | ||
536 | jo io_uaccess | ||
525 | j io_return # beware of critical section cleanup | 537 | j io_return # beware of critical section cleanup |
526 | 538 | ||
527 | # | 539 | # |
@@ -535,6 +547,14 @@ io_mcck_pending: | |||
535 | j io_return | 547 | j io_return |
536 | 548 | ||
537 | # | 549 | # |
550 | # _TIF_ASCE is set, load user space asce | ||
551 | # | ||
552 | io_uaccess: | ||
553 | ni __TI_flags+3(%r12),255-_TIF_ASCE | ||
554 | lctl %c1,%c1,__LC_USER_ASCE # load primary asce | ||
555 | j io_return | ||
556 | |||
557 | # | ||
538 | # _TIF_NEED_RESCHED is set, call schedule | 558 | # _TIF_NEED_RESCHED is set, call schedule |
539 | # | 559 | # |
540 | io_reschedule: | 560 | io_reschedule: |
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index e09dbe5f2901..5963e43618bb 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
@@ -43,9 +43,9 @@ STACK_SIZE = 1 << STACK_SHIFT | |||
43 | STACK_INIT = STACK_SIZE - STACK_FRAME_OVERHEAD - __PT_SIZE | 43 | STACK_INIT = STACK_SIZE - STACK_FRAME_OVERHEAD - __PT_SIZE |
44 | 44 | ||
45 | _TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ | 45 | _TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ |
46 | _TIF_MCCK_PENDING | _TIF_PER_TRAP ) | 46 | _TIF_MCCK_PENDING | _TIF_PER_TRAP | _TIF_ASCE) |
47 | _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ | 47 | _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ |
48 | _TIF_MCCK_PENDING) | 48 | _TIF_MCCK_PENDING | _TIF_ASCE) |
49 | _TIF_TRACE = (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | \ | 49 | _TIF_TRACE = (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | \ |
50 | _TIF_SYSCALL_TRACEPOINT) | 50 | _TIF_SYSCALL_TRACEPOINT) |
51 | _TIF_TRANSFER = (_TIF_MCCK_PENDING | _TIF_TLB_WAIT) | 51 | _TIF_TRANSFER = (_TIF_MCCK_PENDING | _TIF_TLB_WAIT) |
@@ -275,6 +275,8 @@ sysc_work: | |||
275 | jo sysc_sigpending | 275 | jo sysc_sigpending |
276 | tm __TI_flags+7(%r12),_TIF_NOTIFY_RESUME | 276 | tm __TI_flags+7(%r12),_TIF_NOTIFY_RESUME |
277 | jo sysc_notify_resume | 277 | jo sysc_notify_resume |
278 | tm __TI_flags+7(%r12),_TIF_ASCE | ||
279 | jo sysc_uaccess | ||
278 | j sysc_return # beware of critical section cleanup | 280 | j sysc_return # beware of critical section cleanup |
279 | 281 | ||
280 | # | 282 | # |
@@ -292,6 +294,14 @@ sysc_mcck_pending: | |||
292 | jg s390_handle_mcck # TIF bit will be cleared by handler | 294 | jg s390_handle_mcck # TIF bit will be cleared by handler |
293 | 295 | ||
294 | # | 296 | # |
297 | # _TIF_ASCE is set, load user space asce | ||
298 | # | ||
299 | sysc_uaccess: | ||
300 | ni __TI_flags+7(%r12),255-_TIF_ASCE | ||
301 | lctlg %c1,%c1,__LC_USER_ASCE # load primary asce | ||
302 | j sysc_return | ||
303 | |||
304 | # | ||
295 | # _TIF_SIGPENDING is set, call do_signal | 305 | # _TIF_SIGPENDING is set, call do_signal |
296 | # | 306 | # |
297 | sysc_sigpending: | 307 | sysc_sigpending: |
@@ -559,6 +569,8 @@ io_work_tif: | |||
559 | jo io_sigpending | 569 | jo io_sigpending |
560 | tm __TI_flags+7(%r12),_TIF_NOTIFY_RESUME | 570 | tm __TI_flags+7(%r12),_TIF_NOTIFY_RESUME |
561 | jo io_notify_resume | 571 | jo io_notify_resume |
572 | tm __TI_flags+7(%r12),_TIF_ASCE | ||
573 | jo io_uaccess | ||
562 | j io_return # beware of critical section cleanup | 574 | j io_return # beware of critical section cleanup |
563 | 575 | ||
564 | # | 576 | # |
@@ -571,6 +583,14 @@ io_mcck_pending: | |||
571 | j io_return | 583 | j io_return |
572 | 584 | ||
573 | # | 585 | # |
586 | # _TIF_ASCE is set, load user space asce | ||
587 | # | ||
588 | io_uaccess: | ||
589 | ni __TI_flags+7(%r12),255-_TIF_ASCE | ||
590 | lctlg %c1,%c1,__LC_USER_ASCE # load primary asce | ||
591 | j io_return | ||
592 | |||
593 | # | ||
574 | # _TIF_NEED_RESCHED is set, call schedule | 594 | # _TIF_NEED_RESCHED is set, call schedule |
575 | # | 595 | # |
576 | io_reschedule: | 596 | io_reschedule: |
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c index d42b14cc72a4..c7463aa0014b 100644 --- a/arch/s390/kernel/irq.c +++ b/arch/s390/kernel/irq.c | |||
@@ -207,7 +207,7 @@ static inline int ext_hash(u16 code) | |||
207 | return (code + (code >> 9)) & (ARRAY_SIZE(ext_int_hash) - 1); | 207 | return (code + (code >> 9)) & (ARRAY_SIZE(ext_int_hash) - 1); |
208 | } | 208 | } |
209 | 209 | ||
210 | int register_external_interrupt(u16 code, ext_int_handler_t handler) | 210 | int register_external_irq(u16 code, ext_int_handler_t handler) |
211 | { | 211 | { |
212 | struct ext_int_info *p; | 212 | struct ext_int_info *p; |
213 | unsigned long flags; | 213 | unsigned long flags; |
@@ -225,9 +225,9 @@ int register_external_interrupt(u16 code, ext_int_handler_t handler) | |||
225 | spin_unlock_irqrestore(&ext_int_hash_lock, flags); | 225 | spin_unlock_irqrestore(&ext_int_hash_lock, flags); |
226 | return 0; | 226 | return 0; |
227 | } | 227 | } |
228 | EXPORT_SYMBOL(register_external_interrupt); | 228 | EXPORT_SYMBOL(register_external_irq); |
229 | 229 | ||
230 | int unregister_external_interrupt(u16 code, ext_int_handler_t handler) | 230 | int unregister_external_irq(u16 code, ext_int_handler_t handler) |
231 | { | 231 | { |
232 | struct ext_int_info *p; | 232 | struct ext_int_info *p; |
233 | unsigned long flags; | 233 | unsigned long flags; |
@@ -243,7 +243,7 @@ int unregister_external_interrupt(u16 code, ext_int_handler_t handler) | |||
243 | spin_unlock_irqrestore(&ext_int_hash_lock, flags); | 243 | spin_unlock_irqrestore(&ext_int_hash_lock, flags); |
244 | return 0; | 244 | return 0; |
245 | } | 245 | } |
246 | EXPORT_SYMBOL(unregister_external_interrupt); | 246 | EXPORT_SYMBOL(unregister_external_irq); |
247 | 247 | ||
248 | static irqreturn_t do_ext_interrupt(int irq, void *dummy) | 248 | static irqreturn_t do_ext_interrupt(int irq, void *dummy) |
249 | { | 249 | { |
@@ -253,7 +253,7 @@ static irqreturn_t do_ext_interrupt(int irq, void *dummy) | |||
253 | int index; | 253 | int index; |
254 | 254 | ||
255 | ext_code = *(struct ext_code *) ®s->int_code; | 255 | ext_code = *(struct ext_code *) ®s->int_code; |
256 | if (ext_code.code != 0x1004) | 256 | if (ext_code.code != EXT_IRQ_CLK_COMP) |
257 | __get_cpu_var(s390_idle).nohz_delay = 1; | 257 | __get_cpu_var(s390_idle).nohz_delay = 1; |
258 | 258 | ||
259 | index = ext_hash(ext_code.code); | 259 | index = ext_hash(ext_code.code); |
diff --git a/arch/s390/kernel/perf_cpum_cf.c b/arch/s390/kernel/perf_cpum_cf.c index f51214c04858..ea75d011a6fc 100644 --- a/arch/s390/kernel/perf_cpum_cf.c +++ b/arch/s390/kernel/perf_cpum_cf.c | |||
@@ -673,7 +673,8 @@ static int __init cpumf_pmu_init(void) | |||
673 | ctl_clear_bit(0, 48); | 673 | ctl_clear_bit(0, 48); |
674 | 674 | ||
675 | /* register handler for measurement-alert interruptions */ | 675 | /* register handler for measurement-alert interruptions */ |
676 | rc = register_external_interrupt(0x1407, cpumf_measurement_alert); | 676 | rc = register_external_irq(EXT_IRQ_MEASURE_ALERT, |
677 | cpumf_measurement_alert); | ||
677 | if (rc) { | 678 | if (rc) { |
678 | pr_err("Registering for CPU-measurement alerts " | 679 | pr_err("Registering for CPU-measurement alerts " |
679 | "failed with rc=%i\n", rc); | 680 | "failed with rc=%i\n", rc); |
@@ -684,7 +685,8 @@ static int __init cpumf_pmu_init(void) | |||
684 | rc = perf_pmu_register(&cpumf_pmu, "cpum_cf", PERF_TYPE_RAW); | 685 | rc = perf_pmu_register(&cpumf_pmu, "cpum_cf", PERF_TYPE_RAW); |
685 | if (rc) { | 686 | if (rc) { |
686 | pr_err("Registering the cpum_cf PMU failed with rc=%i\n", rc); | 687 | pr_err("Registering the cpum_cf PMU failed with rc=%i\n", rc); |
687 | unregister_external_interrupt(0x1407, cpumf_measurement_alert); | 688 | unregister_external_irq(EXT_IRQ_MEASURE_ALERT, |
689 | cpumf_measurement_alert); | ||
688 | goto out; | 690 | goto out; |
689 | } | 691 | } |
690 | perf_cpu_notifier(cpumf_pmu_notifier); | 692 | perf_cpu_notifier(cpumf_pmu_notifier); |
diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c index 6c0d29827cb6..ea0c7b2ef030 100644 --- a/arch/s390/kernel/perf_cpum_sf.c +++ b/arch/s390/kernel/perf_cpum_sf.c | |||
@@ -1621,7 +1621,8 @@ static int __init init_cpum_sampling_pmu(void) | |||
1621 | pr_err("Registering for s390dbf failed\n"); | 1621 | pr_err("Registering for s390dbf failed\n"); |
1622 | debug_register_view(sfdbg, &debug_sprintf_view); | 1622 | debug_register_view(sfdbg, &debug_sprintf_view); |
1623 | 1623 | ||
1624 | err = register_external_interrupt(0x1407, cpumf_measurement_alert); | 1624 | err = register_external_irq(EXT_IRQ_MEASURE_ALERT, |
1625 | cpumf_measurement_alert); | ||
1625 | if (err) { | 1626 | if (err) { |
1626 | pr_cpumsf_err(RS_INIT_FAILURE_ALRT); | 1627 | pr_cpumsf_err(RS_INIT_FAILURE_ALRT); |
1627 | goto out; | 1628 | goto out; |
@@ -1630,7 +1631,8 @@ static int __init init_cpum_sampling_pmu(void) | |||
1630 | err = perf_pmu_register(&cpumf_sampling, "cpum_sf", PERF_TYPE_RAW); | 1631 | err = perf_pmu_register(&cpumf_sampling, "cpum_sf", PERF_TYPE_RAW); |
1631 | if (err) { | 1632 | if (err) { |
1632 | pr_cpumsf_err(RS_INIT_FAILURE_PERF); | 1633 | pr_cpumsf_err(RS_INIT_FAILURE_PERF); |
1633 | unregister_external_interrupt(0x1407, cpumf_measurement_alert); | 1634 | unregister_external_irq(EXT_IRQ_MEASURE_ALERT, |
1635 | cpumf_measurement_alert); | ||
1634 | goto out; | 1636 | goto out; |
1635 | } | 1637 | } |
1636 | perf_cpu_notifier(cpumf_pmu_notifier); | 1638 | perf_cpu_notifier(cpumf_pmu_notifier); |
diff --git a/arch/s390/kernel/runtime_instr.c b/arch/s390/kernel/runtime_instr.c index d817cce7e72d..26b4ae96fdd7 100644 --- a/arch/s390/kernel/runtime_instr.c +++ b/arch/s390/kernel/runtime_instr.c | |||
@@ -138,7 +138,8 @@ static int __init runtime_instr_init(void) | |||
138 | return 0; | 138 | return 0; |
139 | 139 | ||
140 | irq_subclass_register(IRQ_SUBCLASS_MEASUREMENT_ALERT); | 140 | irq_subclass_register(IRQ_SUBCLASS_MEASUREMENT_ALERT); |
141 | rc = register_external_interrupt(0x1407, runtime_instr_int_handler); | 141 | rc = register_external_irq(EXT_IRQ_MEASURE_ALERT, |
142 | runtime_instr_int_handler); | ||
142 | if (rc) | 143 | if (rc) |
143 | irq_subclass_unregister(IRQ_SUBCLASS_MEASUREMENT_ALERT); | 144 | irq_subclass_unregister(IRQ_SUBCLASS_MEASUREMENT_ALERT); |
144 | else | 145 | else |
diff --git a/arch/s390/kernel/sclp.S b/arch/s390/kernel/sclp.S index 29bd7bec4176..a41f2c99dcc8 100644 --- a/arch/s390/kernel/sclp.S +++ b/arch/s390/kernel/sclp.S | |||
@@ -9,6 +9,7 @@ | |||
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/linkage.h> | 11 | #include <linux/linkage.h> |
12 | #include <asm/irq.h> | ||
12 | 13 | ||
13 | LC_EXT_NEW_PSW = 0x58 # addr of ext int handler | 14 | LC_EXT_NEW_PSW = 0x58 # addr of ext int handler |
14 | LC_EXT_NEW_PSW_64 = 0x1b0 # addr of ext int handler 64 bit | 15 | LC_EXT_NEW_PSW_64 = 0x1b0 # addr of ext int handler 64 bit |
@@ -73,9 +74,9 @@ _sclp_wait_int: | |||
73 | lpsw .LwaitpswS1-.LbaseS1(%r13) # wait until interrupt | 74 | lpsw .LwaitpswS1-.LbaseS1(%r13) # wait until interrupt |
74 | .LwaitS1: | 75 | .LwaitS1: |
75 | lh %r7,LC_EXT_INT_CODE | 76 | lh %r7,LC_EXT_INT_CODE |
76 | chi %r7,0x1004 # timeout? | 77 | chi %r7,EXT_IRQ_CLK_COMP # timeout? |
77 | je .LtimeoutS1 | 78 | je .LtimeoutS1 |
78 | chi %r7,0x2401 # service int? | 79 | chi %r7,EXT_IRQ_SERVICE_SIG # service int? |
79 | jne .LloopS1 | 80 | jne .LloopS1 |
80 | sr %r2,%r2 | 81 | sr %r2,%r2 |
81 | l %r3,LC_EXT_INT_PARAM | 82 | l %r3,LC_EXT_INT_PARAM |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 5a640b395bd4..512ce1cde2a4 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -236,6 +236,9 @@ static void pcpu_prepare_secondary(struct pcpu *pcpu, int cpu) | |||
236 | { | 236 | { |
237 | struct _lowcore *lc = pcpu->lowcore; | 237 | struct _lowcore *lc = pcpu->lowcore; |
238 | 238 | ||
239 | if (MACHINE_HAS_TLB_LC) | ||
240 | cpumask_set_cpu(cpu, &init_mm.context.cpu_attach_mask); | ||
241 | cpumask_set_cpu(cpu, mm_cpumask(&init_mm)); | ||
239 | atomic_inc(&init_mm.context.attach_count); | 242 | atomic_inc(&init_mm.context.attach_count); |
240 | lc->cpu_nr = cpu; | 243 | lc->cpu_nr = cpu; |
241 | lc->percpu_offset = __per_cpu_offset[cpu]; | 244 | lc->percpu_offset = __per_cpu_offset[cpu]; |
@@ -760,6 +763,9 @@ void __cpu_die(unsigned int cpu) | |||
760 | cpu_relax(); | 763 | cpu_relax(); |
761 | pcpu_free_lowcore(pcpu); | 764 | pcpu_free_lowcore(pcpu); |
762 | atomic_dec(&init_mm.context.attach_count); | 765 | atomic_dec(&init_mm.context.attach_count); |
766 | cpumask_clear_cpu(cpu, mm_cpumask(&init_mm)); | ||
767 | if (MACHINE_HAS_TLB_LC) | ||
768 | cpumask_clear_cpu(cpu, &init_mm.context.cpu_attach_mask); | ||
763 | } | 769 | } |
764 | 770 | ||
765 | void __noreturn cpu_die(void) | 771 | void __noreturn cpu_die(void) |
@@ -785,10 +791,10 @@ void __init smp_fill_possible_mask(void) | |||
785 | void __init smp_prepare_cpus(unsigned int max_cpus) | 791 | void __init smp_prepare_cpus(unsigned int max_cpus) |
786 | { | 792 | { |
787 | /* request the 0x1201 emergency signal external interrupt */ | 793 | /* request the 0x1201 emergency signal external interrupt */ |
788 | if (register_external_interrupt(0x1201, do_ext_call_interrupt) != 0) | 794 | if (register_external_irq(EXT_IRQ_EMERGENCY_SIG, do_ext_call_interrupt)) |
789 | panic("Couldn't request external interrupt 0x1201"); | 795 | panic("Couldn't request external interrupt 0x1201"); |
790 | /* request the 0x1202 external call external interrupt */ | 796 | /* request the 0x1202 external call external interrupt */ |
791 | if (register_external_interrupt(0x1202, do_ext_call_interrupt) != 0) | 797 | if (register_external_irq(EXT_IRQ_EXTERNAL_CALL, do_ext_call_interrupt)) |
792 | panic("Couldn't request external interrupt 0x1202"); | 798 | panic("Couldn't request external interrupt 0x1202"); |
793 | smp_detect_cpus(); | 799 | smp_detect_cpus(); |
794 | } | 800 | } |
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index dd95f1631621..386d37a228bb 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -262,11 +262,11 @@ void __init time_init(void) | |||
262 | stp_reset(); | 262 | stp_reset(); |
263 | 263 | ||
264 | /* request the clock comparator external interrupt */ | 264 | /* request the clock comparator external interrupt */ |
265 | if (register_external_interrupt(0x1004, clock_comparator_interrupt)) | 265 | if (register_external_irq(EXT_IRQ_CLK_COMP, clock_comparator_interrupt)) |
266 | panic("Couldn't request external interrupt 0x1004"); | 266 | panic("Couldn't request external interrupt 0x1004"); |
267 | 267 | ||
268 | /* request the timing alert external interrupt */ | 268 | /* request the timing alert external interrupt */ |
269 | if (register_external_interrupt(0x1406, timing_alert_interrupt)) | 269 | if (register_external_irq(EXT_IRQ_TIMING_ALERT, timing_alert_interrupt)) |
270 | panic("Couldn't request external interrupt 0x1406"); | 270 | panic("Couldn't request external interrupt 0x1406"); |
271 | 271 | ||
272 | if (clocksource_register(&clocksource_tod) != 0) | 272 | if (clocksource_register(&clocksource_tod) != 0) |