s390/nohz: use a per-cpu flag for arch_needs_cpu
[firefly-linux-kernel-4.4.55.git] / arch / s390 / kernel / smp.c
1 /*
2  *  SMP related functions
3  *
4  *    Copyright IBM Corp. 1999, 2012
5  *    Author(s): Denis Joseph Barrow,
6  *               Martin Schwidefsky <schwidefsky@de.ibm.com>,
7  *               Heiko Carstens <heiko.carstens@de.ibm.com>,
8  *
9  *  based on other smp stuff by
10  *    (c) 1995 Alan Cox, CymruNET Ltd  <alan@cymru.net>
11  *    (c) 1998 Ingo Molnar
12  *
13  * The code outside of smp.c uses logical cpu numbers, only smp.c does
14  * the translation of logical to physical cpu ids. All new code that
15  * operates on physical cpu numbers needs to go into smp.c.
16  */
17
18 #define KMSG_COMPONENT "cpu"
19 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
20
21 #include <linux/workqueue.h>
22 #include <linux/module.h>
23 #include <linux/init.h>
24 #include <linux/mm.h>
25 #include <linux/err.h>
26 #include <linux/spinlock.h>
27 #include <linux/kernel_stat.h>
28 #include <linux/delay.h>
29 #include <linux/interrupt.h>
30 #include <linux/irqflags.h>
31 #include <linux/cpu.h>
32 #include <linux/slab.h>
33 #include <linux/crash_dump.h>
34 #include <asm/asm-offsets.h>
35 #include <asm/switch_to.h>
36 #include <asm/facility.h>
37 #include <asm/ipl.h>
38 #include <asm/setup.h>
39 #include <asm/irq.h>
40 #include <asm/tlbflush.h>
41 #include <asm/vtimer.h>
42 #include <asm/lowcore.h>
43 #include <asm/sclp.h>
44 #include <asm/vdso.h>
45 #include <asm/debug.h>
46 #include <asm/os_info.h>
47 #include <asm/sigp.h>
48 #include "entry.h"
49
50 enum {
51         ec_schedule = 0,
52         ec_call_function_single,
53         ec_stop_cpu,
54 };
55
56 enum {
57         CPU_STATE_STANDBY,
58         CPU_STATE_CONFIGURED,
59 };
60
61 struct pcpu {
62         struct cpu *cpu;
63         struct _lowcore *lowcore;       /* lowcore page(s) for the cpu */
64         unsigned long async_stack;      /* async stack for the cpu */
65         unsigned long panic_stack;      /* panic stack for the cpu */
66         unsigned long ec_mask;          /* bit mask for ec_xxx functions */
67         int state;                      /* physical cpu state */
68         int polarization;               /* physical polarization */
69         u16 address;                    /* physical cpu address */
70 };
71
72 static u8 boot_cpu_type;
73 static u16 boot_cpu_address;
74 static struct pcpu pcpu_devices[NR_CPUS];
75
76 /*
77  * The smp_cpu_state_mutex must be held when changing the state or polarization
78  * member of a pcpu data structure within the pcpu_devices arreay.
79  */
80 DEFINE_MUTEX(smp_cpu_state_mutex);
81
82 /*
83  * Signal processor helper functions.
84  */
85 static inline int __pcpu_sigp_relax(u16 addr, u8 order, u32 parm, u32 *status)
86 {
87         int cc;
88
89         while (1) {
90                 cc = __pcpu_sigp(addr, order, parm, NULL);
91                 if (cc != SIGP_CC_BUSY)
92                         return cc;
93                 cpu_relax();
94         }
95 }
96
97 static int pcpu_sigp_retry(struct pcpu *pcpu, u8 order, u32 parm)
98 {
99         int cc, retry;
100
101         for (retry = 0; ; retry++) {
102                 cc = __pcpu_sigp(pcpu->address, order, parm, NULL);
103                 if (cc != SIGP_CC_BUSY)
104                         break;
105                 if (retry >= 3)
106                         udelay(10);
107         }
108         return cc;
109 }
110
111 static inline int pcpu_stopped(struct pcpu *pcpu)
112 {
113         u32 uninitialized_var(status);
114
115         if (__pcpu_sigp(pcpu->address, SIGP_SENSE,
116                         0, &status) != SIGP_CC_STATUS_STORED)
117                 return 0;
118         return !!(status & (SIGP_STATUS_CHECK_STOP|SIGP_STATUS_STOPPED));
119 }
120
121 static inline int pcpu_running(struct pcpu *pcpu)
122 {
123         if (__pcpu_sigp(pcpu->address, SIGP_SENSE_RUNNING,
124                         0, NULL) != SIGP_CC_STATUS_STORED)
125                 return 1;
126         /* Status stored condition code is equivalent to cpu not running. */
127         return 0;
128 }
129
130 /*
131  * Find struct pcpu by cpu address.
132  */
133 static struct pcpu *pcpu_find_address(const struct cpumask *mask, int address)
134 {
135         int cpu;
136
137         for_each_cpu(cpu, mask)
138                 if (pcpu_devices[cpu].address == address)
139                         return pcpu_devices + cpu;
140         return NULL;
141 }
142
143 static void pcpu_ec_call(struct pcpu *pcpu, int ec_bit)
144 {
145         int order;
146
147         if (test_and_set_bit(ec_bit, &pcpu->ec_mask))
148                 return;
149         order = pcpu_running(pcpu) ? SIGP_EXTERNAL_CALL : SIGP_EMERGENCY_SIGNAL;
150         pcpu_sigp_retry(pcpu, order, 0);
151 }
152
153 static int pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu)
154 {
155         struct _lowcore *lc;
156
157         if (pcpu != &pcpu_devices[0]) {
158                 pcpu->lowcore = (struct _lowcore *)
159                         __get_free_pages(GFP_KERNEL | GFP_DMA, LC_ORDER);
160                 pcpu->async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER);
161                 pcpu->panic_stack = __get_free_page(GFP_KERNEL);
162                 if (!pcpu->lowcore || !pcpu->panic_stack || !pcpu->async_stack)
163                         goto out;
164         }
165         lc = pcpu->lowcore;
166         memcpy(lc, &S390_lowcore, 512);
167         memset((char *) lc + 512, 0, sizeof(*lc) - 512);
168         lc->async_stack = pcpu->async_stack + ASYNC_SIZE
169                 - STACK_FRAME_OVERHEAD - sizeof(struct pt_regs);
170         lc->panic_stack = pcpu->panic_stack + PAGE_SIZE
171                 - STACK_FRAME_OVERHEAD - sizeof(struct pt_regs);
172         lc->cpu_nr = cpu;
173         lc->spinlock_lockval = arch_spin_lockval(cpu);
174 #ifndef CONFIG_64BIT
175         if (MACHINE_HAS_IEEE) {
176                 lc->extended_save_area_addr = get_zeroed_page(GFP_KERNEL);
177                 if (!lc->extended_save_area_addr)
178                         goto out;
179         }
180 #else
181         if (vdso_alloc_per_cpu(lc))
182                 goto out;
183 #endif
184         lowcore_ptr[cpu] = lc;
185         pcpu_sigp_retry(pcpu, SIGP_SET_PREFIX, (u32)(unsigned long) lc);
186         return 0;
187 out:
188         if (pcpu != &pcpu_devices[0]) {
189                 free_page(pcpu->panic_stack);
190                 free_pages(pcpu->async_stack, ASYNC_ORDER);
191                 free_pages((unsigned long) pcpu->lowcore, LC_ORDER);
192         }
193         return -ENOMEM;
194 }
195
196 #ifdef CONFIG_HOTPLUG_CPU
197
198 static void pcpu_free_lowcore(struct pcpu *pcpu)
199 {
200         pcpu_sigp_retry(pcpu, SIGP_SET_PREFIX, 0);
201         lowcore_ptr[pcpu - pcpu_devices] = NULL;
202 #ifndef CONFIG_64BIT
203         if (MACHINE_HAS_IEEE) {
204                 struct _lowcore *lc = pcpu->lowcore;
205
206                 free_page((unsigned long) lc->extended_save_area_addr);
207                 lc->extended_save_area_addr = 0;
208         }
209 #else
210         vdso_free_per_cpu(pcpu->lowcore);
211 #endif
212         if (pcpu != &pcpu_devices[0]) {
213                 free_page(pcpu->panic_stack);
214                 free_pages(pcpu->async_stack, ASYNC_ORDER);
215                 free_pages((unsigned long) pcpu->lowcore, LC_ORDER);
216         }
217 }
218
219 #endif /* CONFIG_HOTPLUG_CPU */
220
221 static void pcpu_prepare_secondary(struct pcpu *pcpu, int cpu)
222 {
223         struct _lowcore *lc = pcpu->lowcore;
224
225         if (MACHINE_HAS_TLB_LC)
226                 cpumask_set_cpu(cpu, &init_mm.context.cpu_attach_mask);
227         cpumask_set_cpu(cpu, mm_cpumask(&init_mm));
228         atomic_inc(&init_mm.context.attach_count);
229         lc->cpu_nr = cpu;
230         lc->spinlock_lockval = arch_spin_lockval(cpu);
231         lc->percpu_offset = __per_cpu_offset[cpu];
232         lc->kernel_asce = S390_lowcore.kernel_asce;
233         lc->machine_flags = S390_lowcore.machine_flags;
234         lc->ftrace_func = S390_lowcore.ftrace_func;
235         lc->user_timer = lc->system_timer = lc->steal_timer = 0;
236         __ctl_store(lc->cregs_save_area, 0, 15);
237         save_access_regs((unsigned int *) lc->access_regs_save_area);
238         memcpy(lc->stfle_fac_list, S390_lowcore.stfle_fac_list,
239                MAX_FACILITY_BIT/8);
240 }
241
242 static void pcpu_attach_task(struct pcpu *pcpu, struct task_struct *tsk)
243 {
244         struct _lowcore *lc = pcpu->lowcore;
245         struct thread_info *ti = task_thread_info(tsk);
246
247         lc->kernel_stack = (unsigned long) task_stack_page(tsk)
248                 + THREAD_SIZE - STACK_FRAME_OVERHEAD - sizeof(struct pt_regs);
249         lc->thread_info = (unsigned long) task_thread_info(tsk);
250         lc->current_task = (unsigned long) tsk;
251         lc->user_timer = ti->user_timer;
252         lc->system_timer = ti->system_timer;
253         lc->steal_timer = 0;
254 }
255
256 static void pcpu_start_fn(struct pcpu *pcpu, void (*func)(void *), void *data)
257 {
258         struct _lowcore *lc = pcpu->lowcore;
259
260         lc->restart_stack = lc->kernel_stack;
261         lc->restart_fn = (unsigned long) func;
262         lc->restart_data = (unsigned long) data;
263         lc->restart_source = -1UL;
264         pcpu_sigp_retry(pcpu, SIGP_RESTART, 0);
265 }
266
267 /*
268  * Call function via PSW restart on pcpu and stop the current cpu.
269  */
270 static void pcpu_delegate(struct pcpu *pcpu, void (*func)(void *),
271                           void *data, unsigned long stack)
272 {
273         struct _lowcore *lc = lowcore_ptr[pcpu - pcpu_devices];
274         unsigned long source_cpu = stap();
275
276         __load_psw_mask(PSW_KERNEL_BITS);
277         if (pcpu->address == source_cpu)
278                 func(data);     /* should not return */
279         /* Stop target cpu (if func returns this stops the current cpu). */
280         pcpu_sigp_retry(pcpu, SIGP_STOP, 0);
281         /* Restart func on the target cpu and stop the current cpu. */
282         mem_assign_absolute(lc->restart_stack, stack);
283         mem_assign_absolute(lc->restart_fn, (unsigned long) func);
284         mem_assign_absolute(lc->restart_data, (unsigned long) data);
285         mem_assign_absolute(lc->restart_source, source_cpu);
286         asm volatile(
287                 "0:     sigp    0,%0,%2 # sigp restart to target cpu\n"
288                 "       brc     2,0b    # busy, try again\n"
289                 "1:     sigp    0,%1,%3 # sigp stop to current cpu\n"
290                 "       brc     2,1b    # busy, try again\n"
291                 : : "d" (pcpu->address), "d" (source_cpu),
292                     "K" (SIGP_RESTART), "K" (SIGP_STOP)
293                 : "0", "1", "cc");
294         for (;;) ;
295 }
296
297 /*
298  * Call function on an online CPU.
299  */
300 void smp_call_online_cpu(void (*func)(void *), void *data)
301 {
302         struct pcpu *pcpu;
303
304         /* Use the current cpu if it is online. */
305         pcpu = pcpu_find_address(cpu_online_mask, stap());
306         if (!pcpu)
307                 /* Use the first online cpu. */
308                 pcpu = pcpu_devices + cpumask_first(cpu_online_mask);
309         pcpu_delegate(pcpu, func, data, (unsigned long) restart_stack);
310 }
311
312 /*
313  * Call function on the ipl CPU.
314  */
315 void smp_call_ipl_cpu(void (*func)(void *), void *data)
316 {
317         pcpu_delegate(&pcpu_devices[0], func, data,
318                       pcpu_devices->panic_stack + PAGE_SIZE);
319 }
320
321 int smp_find_processor_id(u16 address)
322 {
323         int cpu;
324
325         for_each_present_cpu(cpu)
326                 if (pcpu_devices[cpu].address == address)
327                         return cpu;
328         return -1;
329 }
330
331 int smp_vcpu_scheduled(int cpu)
332 {
333         return pcpu_running(pcpu_devices + cpu);
334 }
335
336 void smp_yield_cpu(int cpu)
337 {
338         if (MACHINE_HAS_DIAG9C)
339                 asm volatile("diag %0,0,0x9c"
340                              : : "d" (pcpu_devices[cpu].address));
341         else if (MACHINE_HAS_DIAG44)
342                 asm volatile("diag 0,0,0x44");
343 }
344
345 /*
346  * Send cpus emergency shutdown signal. This gives the cpus the
347  * opportunity to complete outstanding interrupts.
348  */
349 static void smp_emergency_stop(cpumask_t *cpumask)
350 {
351         u64 end;
352         int cpu;
353
354         end = get_tod_clock() + (1000000UL << 12);
355         for_each_cpu(cpu, cpumask) {
356                 struct pcpu *pcpu = pcpu_devices + cpu;
357                 set_bit(ec_stop_cpu, &pcpu->ec_mask);
358                 while (__pcpu_sigp(pcpu->address, SIGP_EMERGENCY_SIGNAL,
359                                    0, NULL) == SIGP_CC_BUSY &&
360                        get_tod_clock() < end)
361                         cpu_relax();
362         }
363         while (get_tod_clock() < end) {
364                 for_each_cpu(cpu, cpumask)
365                         if (pcpu_stopped(pcpu_devices + cpu))
366                                 cpumask_clear_cpu(cpu, cpumask);
367                 if (cpumask_empty(cpumask))
368                         break;
369                 cpu_relax();
370         }
371 }
372
373 /*
374  * Stop all cpus but the current one.
375  */
376 void smp_send_stop(void)
377 {
378         cpumask_t cpumask;
379         int cpu;
380
381         /* Disable all interrupts/machine checks */
382         __load_psw_mask(PSW_KERNEL_BITS | PSW_MASK_DAT);
383         trace_hardirqs_off();
384
385         debug_set_critical();
386         cpumask_copy(&cpumask, cpu_online_mask);
387         cpumask_clear_cpu(smp_processor_id(), &cpumask);
388
389         if (oops_in_progress)
390                 smp_emergency_stop(&cpumask);
391
392         /* stop all processors */
393         for_each_cpu(cpu, &cpumask) {
394                 struct pcpu *pcpu = pcpu_devices + cpu;
395                 pcpu_sigp_retry(pcpu, SIGP_STOP, 0);
396                 while (!pcpu_stopped(pcpu))
397                         cpu_relax();
398         }
399 }
400
401 /*
402  * This is the main routine where commands issued by other
403  * cpus are handled.
404  */
405 static void smp_handle_ext_call(void)
406 {
407         unsigned long bits;
408
409         /* handle bit signal external calls */
410         bits = xchg(&pcpu_devices[smp_processor_id()].ec_mask, 0);
411         if (test_bit(ec_stop_cpu, &bits))
412                 smp_stop_cpu();
413         if (test_bit(ec_schedule, &bits))
414                 scheduler_ipi();
415         if (test_bit(ec_call_function_single, &bits))
416                 generic_smp_call_function_single_interrupt();
417 }
418
419 static void do_ext_call_interrupt(struct ext_code ext_code,
420                                   unsigned int param32, unsigned long param64)
421 {
422         inc_irq_stat(ext_code.code == 0x1202 ? IRQEXT_EXC : IRQEXT_EMS);
423         smp_handle_ext_call();
424 }
425
426 void arch_send_call_function_ipi_mask(const struct cpumask *mask)
427 {
428         int cpu;
429
430         for_each_cpu(cpu, mask)
431                 pcpu_ec_call(pcpu_devices + cpu, ec_call_function_single);
432 }
433
434 void arch_send_call_function_single_ipi(int cpu)
435 {
436         pcpu_ec_call(pcpu_devices + cpu, ec_call_function_single);
437 }
438
439 #ifndef CONFIG_64BIT
440 /*
441  * this function sends a 'purge tlb' signal to another CPU.
442  */
443 static void smp_ptlb_callback(void *info)
444 {
445         __tlb_flush_local();
446 }
447
448 void smp_ptlb_all(void)
449 {
450         on_each_cpu(smp_ptlb_callback, NULL, 1);
451 }
452 EXPORT_SYMBOL(smp_ptlb_all);
453 #endif /* ! CONFIG_64BIT */
454
455 /*
456  * this function sends a 'reschedule' IPI to another CPU.
457  * it goes straight through and wastes no time serializing
458  * anything. Worst case is that we lose a reschedule ...
459  */
460 void smp_send_reschedule(int cpu)
461 {
462         pcpu_ec_call(pcpu_devices + cpu, ec_schedule);
463 }
464
465 /*
466  * parameter area for the set/clear control bit callbacks
467  */
468 struct ec_creg_mask_parms {
469         unsigned long orval;
470         unsigned long andval;
471         int cr;
472 };
473
474 /*
475  * callback for setting/clearing control bits
476  */
477 static void smp_ctl_bit_callback(void *info)
478 {
479         struct ec_creg_mask_parms *pp = info;
480         unsigned long cregs[16];
481
482         __ctl_store(cregs, 0, 15);
483         cregs[pp->cr] = (cregs[pp->cr] & pp->andval) | pp->orval;
484         __ctl_load(cregs, 0, 15);
485 }
486
487 /*
488  * Set a bit in a control register of all cpus
489  */
490 void smp_ctl_set_bit(int cr, int bit)
491 {
492         struct ec_creg_mask_parms parms = { 1UL << bit, -1UL, cr };
493
494         on_each_cpu(smp_ctl_bit_callback, &parms, 1);
495 }
496 EXPORT_SYMBOL(smp_ctl_set_bit);
497
498 /*
499  * Clear a bit in a control register of all cpus
500  */
501 void smp_ctl_clear_bit(int cr, int bit)
502 {
503         struct ec_creg_mask_parms parms = { 0, ~(1UL << bit), cr };
504
505         on_each_cpu(smp_ctl_bit_callback, &parms, 1);
506 }
507 EXPORT_SYMBOL(smp_ctl_clear_bit);
508
509 #ifdef CONFIG_CRASH_DUMP
510
511 static void __init smp_get_save_area(int cpu, u16 address)
512 {
513         void *lc = pcpu_devices[0].lowcore;
514         struct save_area *save_area;
515
516         if (is_kdump_kernel())
517                 return;
518         if (!OLDMEM_BASE && (address == boot_cpu_address ||
519                              ipl_info.type != IPL_TYPE_FCP_DUMP))
520                 return;
521         save_area = dump_save_area_create(cpu);
522         if (!save_area)
523                 panic("could not allocate memory for save area\n");
524         if (address == boot_cpu_address) {
525                 /* Copy the registers of the boot cpu. */
526                 copy_oldmem_page(1, (void *) save_area, sizeof(*save_area),
527                                  SAVE_AREA_BASE - PAGE_SIZE, 0);
528                 return;
529         }
530         /* Get the registers of a non-boot cpu. */
531         __pcpu_sigp_relax(address, SIGP_STOP_AND_STORE_STATUS, 0, NULL);
532         memcpy_real(save_area, lc + SAVE_AREA_BASE, sizeof(*save_area));
533 }
534
535 int smp_store_status(int cpu)
536 {
537         struct pcpu *pcpu;
538
539         pcpu = pcpu_devices + cpu;
540         if (__pcpu_sigp_relax(pcpu->address, SIGP_STOP_AND_STORE_STATUS,
541                               0, NULL) != SIGP_CC_ORDER_CODE_ACCEPTED)
542                 return -EIO;
543         return 0;
544 }
545
546 #else /* CONFIG_CRASH_DUMP */
547
548 static inline void smp_get_save_area(int cpu, u16 address) { }
549
550 #endif /* CONFIG_CRASH_DUMP */
551
552 void smp_cpu_set_polarization(int cpu, int val)
553 {
554         pcpu_devices[cpu].polarization = val;
555 }
556
557 int smp_cpu_get_polarization(int cpu)
558 {
559         return pcpu_devices[cpu].polarization;
560 }
561
562 static struct sclp_cpu_info *smp_get_cpu_info(void)
563 {
564         static int use_sigp_detection;
565         struct sclp_cpu_info *info;
566         int address;
567
568         info = kzalloc(sizeof(*info), GFP_KERNEL);
569         if (info && (use_sigp_detection || sclp_get_cpu_info(info))) {
570                 use_sigp_detection = 1;
571                 for (address = 0; address <= MAX_CPU_ADDRESS; address++) {
572                         if (__pcpu_sigp_relax(address, SIGP_SENSE, 0, NULL) ==
573                             SIGP_CC_NOT_OPERATIONAL)
574                                 continue;
575                         info->cpu[info->configured].address = address;
576                         info->configured++;
577                 }
578                 info->combined = info->configured;
579         }
580         return info;
581 }
582
583 static int smp_add_present_cpu(int cpu);
584
585 static int __smp_rescan_cpus(struct sclp_cpu_info *info, int sysfs_add)
586 {
587         struct pcpu *pcpu;
588         cpumask_t avail;
589         int cpu, nr, i;
590
591         nr = 0;
592         cpumask_xor(&avail, cpu_possible_mask, cpu_present_mask);
593         cpu = cpumask_first(&avail);
594         for (i = 0; (i < info->combined) && (cpu < nr_cpu_ids); i++) {
595                 if (info->has_cpu_type && info->cpu[i].type != boot_cpu_type)
596                         continue;
597                 if (pcpu_find_address(cpu_present_mask, info->cpu[i].address))
598                         continue;
599                 pcpu = pcpu_devices + cpu;
600                 pcpu->address = info->cpu[i].address;
601                 pcpu->state = (i >= info->configured) ?
602                         CPU_STATE_STANDBY : CPU_STATE_CONFIGURED;
603                 smp_cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
604                 set_cpu_present(cpu, true);
605                 if (sysfs_add && smp_add_present_cpu(cpu) != 0)
606                         set_cpu_present(cpu, false);
607                 else
608                         nr++;
609                 cpu = cpumask_next(cpu, &avail);
610         }
611         return nr;
612 }
613
614 static void __init smp_detect_cpus(void)
615 {
616         unsigned int cpu, c_cpus, s_cpus;
617         struct sclp_cpu_info *info;
618
619         info = smp_get_cpu_info();
620         if (!info)
621                 panic("smp_detect_cpus failed to allocate memory\n");
622         if (info->has_cpu_type) {
623                 for (cpu = 0; cpu < info->combined; cpu++) {
624                         if (info->cpu[cpu].address != boot_cpu_address)
625                                 continue;
626                         /* The boot cpu dictates the cpu type. */
627                         boot_cpu_type = info->cpu[cpu].type;
628                         break;
629                 }
630         }
631         c_cpus = s_cpus = 0;
632         for (cpu = 0; cpu < info->combined; cpu++) {
633                 if (info->has_cpu_type && info->cpu[cpu].type != boot_cpu_type)
634                         continue;
635                 if (cpu < info->configured) {
636                         smp_get_save_area(c_cpus, info->cpu[cpu].address);
637                         c_cpus++;
638                 } else
639                         s_cpus++;
640         }
641         pr_info("%d configured CPUs, %d standby CPUs\n", c_cpus, s_cpus);
642         get_online_cpus();
643         __smp_rescan_cpus(info, 0);
644         put_online_cpus();
645         kfree(info);
646 }
647
648 /*
649  *      Activate a secondary processor.
650  */
651 static void smp_start_secondary(void *cpuvoid)
652 {
653         S390_lowcore.last_update_clock = get_tod_clock();
654         S390_lowcore.restart_stack = (unsigned long) restart_stack;
655         S390_lowcore.restart_fn = (unsigned long) do_restart;
656         S390_lowcore.restart_data = 0;
657         S390_lowcore.restart_source = -1UL;
658         restore_access_regs(S390_lowcore.access_regs_save_area);
659         __ctl_load(S390_lowcore.cregs_save_area, 0, 15);
660         __load_psw_mask(PSW_KERNEL_BITS | PSW_MASK_DAT);
661         cpu_init();
662         preempt_disable();
663         init_cpu_timer();
664         init_cpu_vtimer();
665         pfault_init();
666         notify_cpu_starting(smp_processor_id());
667         set_cpu_online(smp_processor_id(), true);
668         inc_irq_stat(CPU_RST);
669         local_irq_enable();
670         cpu_startup_entry(CPUHP_ONLINE);
671 }
672
673 /* Upping and downing of CPUs */
674 int __cpu_up(unsigned int cpu, struct task_struct *tidle)
675 {
676         struct pcpu *pcpu;
677         int rc;
678
679         pcpu = pcpu_devices + cpu;
680         if (pcpu->state != CPU_STATE_CONFIGURED)
681                 return -EIO;
682         if (pcpu_sigp_retry(pcpu, SIGP_INITIAL_CPU_RESET, 0) !=
683             SIGP_CC_ORDER_CODE_ACCEPTED)
684                 return -EIO;
685
686         rc = pcpu_alloc_lowcore(pcpu, cpu);
687         if (rc)
688                 return rc;
689         pcpu_prepare_secondary(pcpu, cpu);
690         pcpu_attach_task(pcpu, tidle);
691         pcpu_start_fn(pcpu, smp_start_secondary, NULL);
692         while (!cpu_online(cpu))
693                 cpu_relax();
694         return 0;
695 }
696
697 static unsigned int setup_possible_cpus __initdata;
698
699 static int __init _setup_possible_cpus(char *s)
700 {
701         get_option(&s, &setup_possible_cpus);
702         return 0;
703 }
704 early_param("possible_cpus", _setup_possible_cpus);
705
706 #ifdef CONFIG_HOTPLUG_CPU
707
708 int __cpu_disable(void)
709 {
710         unsigned long cregs[16];
711
712         /* Handle possible pending IPIs */
713         smp_handle_ext_call();
714         set_cpu_online(smp_processor_id(), false);
715         /* Disable pseudo page faults on this cpu. */
716         pfault_fini();
717         /* Disable interrupt sources via control register. */
718         __ctl_store(cregs, 0, 15);
719         cregs[0]  &= ~0x0000ee70UL;     /* disable all external interrupts */
720         cregs[6]  &= ~0xff000000UL;     /* disable all I/O interrupts */
721         cregs[14] &= ~0x1f000000UL;     /* disable most machine checks */
722         __ctl_load(cregs, 0, 15);
723         clear_cpu_flag(CIF_NOHZ_DELAY);
724         return 0;
725 }
726
727 void __cpu_die(unsigned int cpu)
728 {
729         struct pcpu *pcpu;
730
731         /* Wait until target cpu is down */
732         pcpu = pcpu_devices + cpu;
733         while (!pcpu_stopped(pcpu))
734                 cpu_relax();
735         pcpu_free_lowcore(pcpu);
736         atomic_dec(&init_mm.context.attach_count);
737         cpumask_clear_cpu(cpu, mm_cpumask(&init_mm));
738         if (MACHINE_HAS_TLB_LC)
739                 cpumask_clear_cpu(cpu, &init_mm.context.cpu_attach_mask);
740 }
741
742 void __noreturn cpu_die(void)
743 {
744         idle_task_exit();
745         pcpu_sigp_retry(pcpu_devices + smp_processor_id(), SIGP_STOP, 0);
746         for (;;) ;
747 }
748
749 #endif /* CONFIG_HOTPLUG_CPU */
750
751 void __init smp_fill_possible_mask(void)
752 {
753         unsigned int possible, sclp, cpu;
754
755         sclp = sclp_get_max_cpu() ?: nr_cpu_ids;
756         possible = setup_possible_cpus ?: nr_cpu_ids;
757         possible = min(possible, sclp);
758         for (cpu = 0; cpu < possible && cpu < nr_cpu_ids; cpu++)
759                 set_cpu_possible(cpu, true);
760 }
761
762 void __init smp_prepare_cpus(unsigned int max_cpus)
763 {
764         /* request the 0x1201 emergency signal external interrupt */
765         if (register_external_irq(EXT_IRQ_EMERGENCY_SIG, do_ext_call_interrupt))
766                 panic("Couldn't request external interrupt 0x1201");
767         /* request the 0x1202 external call external interrupt */
768         if (register_external_irq(EXT_IRQ_EXTERNAL_CALL, do_ext_call_interrupt))
769                 panic("Couldn't request external interrupt 0x1202");
770         smp_detect_cpus();
771 }
772
773 void __init smp_prepare_boot_cpu(void)
774 {
775         struct pcpu *pcpu = pcpu_devices;
776
777         boot_cpu_address = stap();
778         pcpu->state = CPU_STATE_CONFIGURED;
779         pcpu->address = boot_cpu_address;
780         pcpu->lowcore = (struct _lowcore *)(unsigned long) store_prefix();
781         pcpu->async_stack = S390_lowcore.async_stack - ASYNC_SIZE
782                 + STACK_FRAME_OVERHEAD + sizeof(struct pt_regs);
783         pcpu->panic_stack = S390_lowcore.panic_stack - PAGE_SIZE
784                 + STACK_FRAME_OVERHEAD + sizeof(struct pt_regs);
785         S390_lowcore.percpu_offset = __per_cpu_offset[0];
786         smp_cpu_set_polarization(0, POLARIZATION_UNKNOWN);
787         set_cpu_present(0, true);
788         set_cpu_online(0, true);
789 }
790
791 void __init smp_cpus_done(unsigned int max_cpus)
792 {
793 }
794
795 void __init smp_setup_processor_id(void)
796 {
797         S390_lowcore.cpu_nr = 0;
798         S390_lowcore.spinlock_lockval = arch_spin_lockval(0);
799 }
800
801 /*
802  * the frequency of the profiling timer can be changed
803  * by writing a multiplier value into /proc/profile.
804  *
805  * usually you want to run this on all CPUs ;)
806  */
807 int setup_profiling_timer(unsigned int multiplier)
808 {
809         return 0;
810 }
811
812 #ifdef CONFIG_HOTPLUG_CPU
813 static ssize_t cpu_configure_show(struct device *dev,
814                                   struct device_attribute *attr, char *buf)
815 {
816         ssize_t count;
817
818         mutex_lock(&smp_cpu_state_mutex);
819         count = sprintf(buf, "%d\n", pcpu_devices[dev->id].state);
820         mutex_unlock(&smp_cpu_state_mutex);
821         return count;
822 }
823
824 static ssize_t cpu_configure_store(struct device *dev,
825                                    struct device_attribute *attr,
826                                    const char *buf, size_t count)
827 {
828         struct pcpu *pcpu;
829         int cpu, val, rc;
830         char delim;
831
832         if (sscanf(buf, "%d %c", &val, &delim) != 1)
833                 return -EINVAL;
834         if (val != 0 && val != 1)
835                 return -EINVAL;
836         get_online_cpus();
837         mutex_lock(&smp_cpu_state_mutex);
838         rc = -EBUSY;
839         /* disallow configuration changes of online cpus and cpu 0 */
840         cpu = dev->id;
841         if (cpu_online(cpu) || cpu == 0)
842                 goto out;
843         pcpu = pcpu_devices + cpu;
844         rc = 0;
845         switch (val) {
846         case 0:
847                 if (pcpu->state != CPU_STATE_CONFIGURED)
848                         break;
849                 rc = sclp_cpu_deconfigure(pcpu->address);
850                 if (rc)
851                         break;
852                 pcpu->state = CPU_STATE_STANDBY;
853                 smp_cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
854                 topology_expect_change();
855                 break;
856         case 1:
857                 if (pcpu->state != CPU_STATE_STANDBY)
858                         break;
859                 rc = sclp_cpu_configure(pcpu->address);
860                 if (rc)
861                         break;
862                 pcpu->state = CPU_STATE_CONFIGURED;
863                 smp_cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
864                 topology_expect_change();
865                 break;
866         default:
867                 break;
868         }
869 out:
870         mutex_unlock(&smp_cpu_state_mutex);
871         put_online_cpus();
872         return rc ? rc : count;
873 }
874 static DEVICE_ATTR(configure, 0644, cpu_configure_show, cpu_configure_store);
875 #endif /* CONFIG_HOTPLUG_CPU */
876
877 static ssize_t show_cpu_address(struct device *dev,
878                                 struct device_attribute *attr, char *buf)
879 {
880         return sprintf(buf, "%d\n", pcpu_devices[dev->id].address);
881 }
882 static DEVICE_ATTR(address, 0444, show_cpu_address, NULL);
883
884 static struct attribute *cpu_common_attrs[] = {
885 #ifdef CONFIG_HOTPLUG_CPU
886         &dev_attr_configure.attr,
887 #endif
888         &dev_attr_address.attr,
889         NULL,
890 };
891
892 static struct attribute_group cpu_common_attr_group = {
893         .attrs = cpu_common_attrs,
894 };
895
896 static ssize_t show_idle_count(struct device *dev,
897                                 struct device_attribute *attr, char *buf)
898 {
899         struct s390_idle_data *idle = &per_cpu(s390_idle, dev->id);
900         unsigned long long idle_count;
901         unsigned int sequence;
902
903         do {
904                 sequence = ACCESS_ONCE(idle->sequence);
905                 idle_count = ACCESS_ONCE(idle->idle_count);
906                 if (ACCESS_ONCE(idle->clock_idle_enter))
907                         idle_count++;
908         } while ((sequence & 1) || (ACCESS_ONCE(idle->sequence) != sequence));
909         return sprintf(buf, "%llu\n", idle_count);
910 }
911 static DEVICE_ATTR(idle_count, 0444, show_idle_count, NULL);
912
913 static ssize_t show_idle_time(struct device *dev,
914                                 struct device_attribute *attr, char *buf)
915 {
916         struct s390_idle_data *idle = &per_cpu(s390_idle, dev->id);
917         unsigned long long now, idle_time, idle_enter, idle_exit;
918         unsigned int sequence;
919
920         do {
921                 now = get_tod_clock();
922                 sequence = ACCESS_ONCE(idle->sequence);
923                 idle_time = ACCESS_ONCE(idle->idle_time);
924                 idle_enter = ACCESS_ONCE(idle->clock_idle_enter);
925                 idle_exit = ACCESS_ONCE(idle->clock_idle_exit);
926         } while ((sequence & 1) || (ACCESS_ONCE(idle->sequence) != sequence));
927         idle_time += idle_enter ? ((idle_exit ? : now) - idle_enter) : 0;
928         return sprintf(buf, "%llu\n", idle_time >> 12);
929 }
930 static DEVICE_ATTR(idle_time_us, 0444, show_idle_time, NULL);
931
932 static struct attribute *cpu_online_attrs[] = {
933         &dev_attr_idle_count.attr,
934         &dev_attr_idle_time_us.attr,
935         NULL,
936 };
937
938 static struct attribute_group cpu_online_attr_group = {
939         .attrs = cpu_online_attrs,
940 };
941
942 static int smp_cpu_notify(struct notifier_block *self, unsigned long action,
943                           void *hcpu)
944 {
945         unsigned int cpu = (unsigned int)(long)hcpu;
946         struct cpu *c = pcpu_devices[cpu].cpu;
947         struct device *s = &c->dev;
948         int err = 0;
949
950         switch (action & ~CPU_TASKS_FROZEN) {
951         case CPU_ONLINE:
952                 err = sysfs_create_group(&s->kobj, &cpu_online_attr_group);
953                 break;
954         case CPU_DEAD:
955                 sysfs_remove_group(&s->kobj, &cpu_online_attr_group);
956                 break;
957         }
958         return notifier_from_errno(err);
959 }
960
961 static int smp_add_present_cpu(int cpu)
962 {
963         struct device *s;
964         struct cpu *c;
965         int rc;
966
967         c = kzalloc(sizeof(*c), GFP_KERNEL);
968         if (!c)
969                 return -ENOMEM;
970         pcpu_devices[cpu].cpu = c;
971         s = &c->dev;
972         c->hotpluggable = 1;
973         rc = register_cpu(c, cpu);
974         if (rc)
975                 goto out;
976         rc = sysfs_create_group(&s->kobj, &cpu_common_attr_group);
977         if (rc)
978                 goto out_cpu;
979         if (cpu_online(cpu)) {
980                 rc = sysfs_create_group(&s->kobj, &cpu_online_attr_group);
981                 if (rc)
982                         goto out_online;
983         }
984         rc = topology_cpu_init(c);
985         if (rc)
986                 goto out_topology;
987         return 0;
988
989 out_topology:
990         if (cpu_online(cpu))
991                 sysfs_remove_group(&s->kobj, &cpu_online_attr_group);
992 out_online:
993         sysfs_remove_group(&s->kobj, &cpu_common_attr_group);
994 out_cpu:
995 #ifdef CONFIG_HOTPLUG_CPU
996         unregister_cpu(c);
997 #endif
998 out:
999         return rc;
1000 }
1001
1002 #ifdef CONFIG_HOTPLUG_CPU
1003
1004 int __ref smp_rescan_cpus(void)
1005 {
1006         struct sclp_cpu_info *info;
1007         int nr;
1008
1009         info = smp_get_cpu_info();
1010         if (!info)
1011                 return -ENOMEM;
1012         get_online_cpus();
1013         mutex_lock(&smp_cpu_state_mutex);
1014         nr = __smp_rescan_cpus(info, 1);
1015         mutex_unlock(&smp_cpu_state_mutex);
1016         put_online_cpus();
1017         kfree(info);
1018         if (nr)
1019                 topology_schedule_update();
1020         return 0;
1021 }
1022
1023 static ssize_t __ref rescan_store(struct device *dev,
1024                                   struct device_attribute *attr,
1025                                   const char *buf,
1026                                   size_t count)
1027 {
1028         int rc;
1029
1030         rc = smp_rescan_cpus();
1031         return rc ? rc : count;
1032 }
1033 static DEVICE_ATTR(rescan, 0200, NULL, rescan_store);
1034 #endif /* CONFIG_HOTPLUG_CPU */
1035
1036 static int __init s390_smp_init(void)
1037 {
1038         int cpu, rc = 0;
1039
1040 #ifdef CONFIG_HOTPLUG_CPU
1041         rc = device_create_file(cpu_subsys.dev_root, &dev_attr_rescan);
1042         if (rc)
1043                 return rc;
1044 #endif
1045         cpu_notifier_register_begin();
1046         for_each_present_cpu(cpu) {
1047                 rc = smp_add_present_cpu(cpu);
1048                 if (rc)
1049                         goto out;
1050         }
1051
1052         __hotcpu_notifier(smp_cpu_notify, 0);
1053
1054 out:
1055         cpu_notifier_register_done();
1056         return rc;
1057 }
1058 subsys_initcall(s390_smp_init);