diff options
Diffstat (limited to 'arch/s390/kernel/smp.c')
-rw-r--r-- | arch/s390/kernel/smp.c | 10 |
1 files changed, 8 insertions, 2 deletions
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 | } |