xref: /openbmc/linux/arch/s390/kernel/smp.c (revision a8a28aff)
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(void)
337 {
338 	if (MACHINE_HAS_DIAG44)
339 		asm volatile("diag 0,0,0x44");
340 }
341 
342 void smp_yield_cpu(int cpu)
343 {
344 	if (MACHINE_HAS_DIAG9C)
345 		asm volatile("diag %0,0,0x9c"
346 			     : : "d" (pcpu_devices[cpu].address));
347 	else if (MACHINE_HAS_DIAG44)
348 		asm volatile("diag 0,0,0x44");
349 }
350 
351 /*
352  * Send cpus emergency shutdown signal. This gives the cpus the
353  * opportunity to complete outstanding interrupts.
354  */
355 static void smp_emergency_stop(cpumask_t *cpumask)
356 {
357 	u64 end;
358 	int cpu;
359 
360 	end = get_tod_clock() + (1000000UL << 12);
361 	for_each_cpu(cpu, cpumask) {
362 		struct pcpu *pcpu = pcpu_devices + cpu;
363 		set_bit(ec_stop_cpu, &pcpu->ec_mask);
364 		while (__pcpu_sigp(pcpu->address, SIGP_EMERGENCY_SIGNAL,
365 				   0, NULL) == SIGP_CC_BUSY &&
366 		       get_tod_clock() < end)
367 			cpu_relax();
368 	}
369 	while (get_tod_clock() < end) {
370 		for_each_cpu(cpu, cpumask)
371 			if (pcpu_stopped(pcpu_devices + cpu))
372 				cpumask_clear_cpu(cpu, cpumask);
373 		if (cpumask_empty(cpumask))
374 			break;
375 		cpu_relax();
376 	}
377 }
378 
379 /*
380  * Stop all cpus but the current one.
381  */
382 void smp_send_stop(void)
383 {
384 	cpumask_t cpumask;
385 	int cpu;
386 
387 	/* Disable all interrupts/machine checks */
388 	__load_psw_mask(PSW_KERNEL_BITS | PSW_MASK_DAT);
389 	trace_hardirqs_off();
390 
391 	debug_set_critical();
392 	cpumask_copy(&cpumask, cpu_online_mask);
393 	cpumask_clear_cpu(smp_processor_id(), &cpumask);
394 
395 	if (oops_in_progress)
396 		smp_emergency_stop(&cpumask);
397 
398 	/* stop all processors */
399 	for_each_cpu(cpu, &cpumask) {
400 		struct pcpu *pcpu = pcpu_devices + cpu;
401 		pcpu_sigp_retry(pcpu, SIGP_STOP, 0);
402 		while (!pcpu_stopped(pcpu))
403 			cpu_relax();
404 	}
405 }
406 
407 /*
408  * This is the main routine where commands issued by other
409  * cpus are handled.
410  */
411 static void smp_handle_ext_call(void)
412 {
413 	unsigned long bits;
414 
415 	/* handle bit signal external calls */
416 	bits = xchg(&pcpu_devices[smp_processor_id()].ec_mask, 0);
417 	if (test_bit(ec_stop_cpu, &bits))
418 		smp_stop_cpu();
419 	if (test_bit(ec_schedule, &bits))
420 		scheduler_ipi();
421 	if (test_bit(ec_call_function_single, &bits))
422 		generic_smp_call_function_single_interrupt();
423 }
424 
425 static void do_ext_call_interrupt(struct ext_code ext_code,
426 				  unsigned int param32, unsigned long param64)
427 {
428 	inc_irq_stat(ext_code.code == 0x1202 ? IRQEXT_EXC : IRQEXT_EMS);
429 	smp_handle_ext_call();
430 }
431 
432 void arch_send_call_function_ipi_mask(const struct cpumask *mask)
433 {
434 	int cpu;
435 
436 	for_each_cpu(cpu, mask)
437 		pcpu_ec_call(pcpu_devices + cpu, ec_call_function_single);
438 }
439 
440 void arch_send_call_function_single_ipi(int cpu)
441 {
442 	pcpu_ec_call(pcpu_devices + cpu, ec_call_function_single);
443 }
444 
445 #ifndef CONFIG_64BIT
446 /*
447  * this function sends a 'purge tlb' signal to another CPU.
448  */
449 static void smp_ptlb_callback(void *info)
450 {
451 	__tlb_flush_local();
452 }
453 
454 void smp_ptlb_all(void)
455 {
456 	on_each_cpu(smp_ptlb_callback, NULL, 1);
457 }
458 EXPORT_SYMBOL(smp_ptlb_all);
459 #endif /* ! CONFIG_64BIT */
460 
461 /*
462  * this function sends a 'reschedule' IPI to another CPU.
463  * it goes straight through and wastes no time serializing
464  * anything. Worst case is that we lose a reschedule ...
465  */
466 void smp_send_reschedule(int cpu)
467 {
468 	pcpu_ec_call(pcpu_devices + cpu, ec_schedule);
469 }
470 
471 /*
472  * parameter area for the set/clear control bit callbacks
473  */
474 struct ec_creg_mask_parms {
475 	unsigned long orval;
476 	unsigned long andval;
477 	int cr;
478 };
479 
480 /*
481  * callback for setting/clearing control bits
482  */
483 static void smp_ctl_bit_callback(void *info)
484 {
485 	struct ec_creg_mask_parms *pp = info;
486 	unsigned long cregs[16];
487 
488 	__ctl_store(cregs, 0, 15);
489 	cregs[pp->cr] = (cregs[pp->cr] & pp->andval) | pp->orval;
490 	__ctl_load(cregs, 0, 15);
491 }
492 
493 /*
494  * Set a bit in a control register of all cpus
495  */
496 void smp_ctl_set_bit(int cr, int bit)
497 {
498 	struct ec_creg_mask_parms parms = { 1UL << bit, -1UL, cr };
499 
500 	on_each_cpu(smp_ctl_bit_callback, &parms, 1);
501 }
502 EXPORT_SYMBOL(smp_ctl_set_bit);
503 
504 /*
505  * Clear a bit in a control register of all cpus
506  */
507 void smp_ctl_clear_bit(int cr, int bit)
508 {
509 	struct ec_creg_mask_parms parms = { 0, ~(1UL << bit), cr };
510 
511 	on_each_cpu(smp_ctl_bit_callback, &parms, 1);
512 }
513 EXPORT_SYMBOL(smp_ctl_clear_bit);
514 
515 #ifdef CONFIG_CRASH_DUMP
516 
517 static void __init smp_get_save_area(int cpu, u16 address)
518 {
519 	void *lc = pcpu_devices[0].lowcore;
520 	struct save_area *save_area;
521 
522 	if (is_kdump_kernel())
523 		return;
524 	if (!OLDMEM_BASE && (address == boot_cpu_address ||
525 			     ipl_info.type != IPL_TYPE_FCP_DUMP))
526 		return;
527 	save_area = dump_save_area_create(cpu);
528 	if (!save_area)
529 		panic("could not allocate memory for save area\n");
530 	if (address == boot_cpu_address) {
531 		/* Copy the registers of the boot cpu. */
532 		copy_oldmem_page(1, (void *) save_area, sizeof(*save_area),
533 				 SAVE_AREA_BASE - PAGE_SIZE, 0);
534 		return;
535 	}
536 	/* Get the registers of a non-boot cpu. */
537 	__pcpu_sigp_relax(address, SIGP_STOP_AND_STORE_STATUS, 0, NULL);
538 	memcpy_real(save_area, lc + SAVE_AREA_BASE, sizeof(*save_area));
539 }
540 
541 int smp_store_status(int cpu)
542 {
543 	struct pcpu *pcpu;
544 
545 	pcpu = pcpu_devices + cpu;
546 	if (__pcpu_sigp_relax(pcpu->address, SIGP_STOP_AND_STORE_STATUS,
547 			      0, NULL) != SIGP_CC_ORDER_CODE_ACCEPTED)
548 		return -EIO;
549 	return 0;
550 }
551 
552 #else /* CONFIG_CRASH_DUMP */
553 
554 static inline void smp_get_save_area(int cpu, u16 address) { }
555 
556 #endif /* CONFIG_CRASH_DUMP */
557 
558 void smp_cpu_set_polarization(int cpu, int val)
559 {
560 	pcpu_devices[cpu].polarization = val;
561 }
562 
563 int smp_cpu_get_polarization(int cpu)
564 {
565 	return pcpu_devices[cpu].polarization;
566 }
567 
568 static struct sclp_cpu_info *smp_get_cpu_info(void)
569 {
570 	static int use_sigp_detection;
571 	struct sclp_cpu_info *info;
572 	int address;
573 
574 	info = kzalloc(sizeof(*info), GFP_KERNEL);
575 	if (info && (use_sigp_detection || sclp_get_cpu_info(info))) {
576 		use_sigp_detection = 1;
577 		for (address = 0; address <= MAX_CPU_ADDRESS; address++) {
578 			if (__pcpu_sigp_relax(address, SIGP_SENSE, 0, NULL) ==
579 			    SIGP_CC_NOT_OPERATIONAL)
580 				continue;
581 			info->cpu[info->configured].address = address;
582 			info->configured++;
583 		}
584 		info->combined = info->configured;
585 	}
586 	return info;
587 }
588 
589 static int smp_add_present_cpu(int cpu);
590 
591 static int __smp_rescan_cpus(struct sclp_cpu_info *info, int sysfs_add)
592 {
593 	struct pcpu *pcpu;
594 	cpumask_t avail;
595 	int cpu, nr, i;
596 
597 	nr = 0;
598 	cpumask_xor(&avail, cpu_possible_mask, cpu_present_mask);
599 	cpu = cpumask_first(&avail);
600 	for (i = 0; (i < info->combined) && (cpu < nr_cpu_ids); i++) {
601 		if (info->has_cpu_type && info->cpu[i].type != boot_cpu_type)
602 			continue;
603 		if (pcpu_find_address(cpu_present_mask, info->cpu[i].address))
604 			continue;
605 		pcpu = pcpu_devices + cpu;
606 		pcpu->address = info->cpu[i].address;
607 		pcpu->state = (i >= info->configured) ?
608 			CPU_STATE_STANDBY : CPU_STATE_CONFIGURED;
609 		smp_cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
610 		set_cpu_present(cpu, true);
611 		if (sysfs_add && smp_add_present_cpu(cpu) != 0)
612 			set_cpu_present(cpu, false);
613 		else
614 			nr++;
615 		cpu = cpumask_next(cpu, &avail);
616 	}
617 	return nr;
618 }
619 
620 static void __init smp_detect_cpus(void)
621 {
622 	unsigned int cpu, c_cpus, s_cpus;
623 	struct sclp_cpu_info *info;
624 
625 	info = smp_get_cpu_info();
626 	if (!info)
627 		panic("smp_detect_cpus failed to allocate memory\n");
628 	if (info->has_cpu_type) {
629 		for (cpu = 0; cpu < info->combined; cpu++) {
630 			if (info->cpu[cpu].address != boot_cpu_address)
631 				continue;
632 			/* The boot cpu dictates the cpu type. */
633 			boot_cpu_type = info->cpu[cpu].type;
634 			break;
635 		}
636 	}
637 	c_cpus = s_cpus = 0;
638 	for (cpu = 0; cpu < info->combined; cpu++) {
639 		if (info->has_cpu_type && info->cpu[cpu].type != boot_cpu_type)
640 			continue;
641 		if (cpu < info->configured) {
642 			smp_get_save_area(c_cpus, info->cpu[cpu].address);
643 			c_cpus++;
644 		} else
645 			s_cpus++;
646 	}
647 	pr_info("%d configured CPUs, %d standby CPUs\n", c_cpus, s_cpus);
648 	get_online_cpus();
649 	__smp_rescan_cpus(info, 0);
650 	put_online_cpus();
651 	kfree(info);
652 }
653 
654 /*
655  *	Activate a secondary processor.
656  */
657 static void smp_start_secondary(void *cpuvoid)
658 {
659 	S390_lowcore.last_update_clock = get_tod_clock();
660 	S390_lowcore.restart_stack = (unsigned long) restart_stack;
661 	S390_lowcore.restart_fn = (unsigned long) do_restart;
662 	S390_lowcore.restart_data = 0;
663 	S390_lowcore.restart_source = -1UL;
664 	restore_access_regs(S390_lowcore.access_regs_save_area);
665 	__ctl_load(S390_lowcore.cregs_save_area, 0, 15);
666 	__load_psw_mask(PSW_KERNEL_BITS | PSW_MASK_DAT);
667 	cpu_init();
668 	preempt_disable();
669 	init_cpu_timer();
670 	init_cpu_vtimer();
671 	pfault_init();
672 	notify_cpu_starting(smp_processor_id());
673 	set_cpu_online(smp_processor_id(), true);
674 	inc_irq_stat(CPU_RST);
675 	local_irq_enable();
676 	cpu_startup_entry(CPUHP_ONLINE);
677 }
678 
679 /* Upping and downing of CPUs */
680 int __cpu_up(unsigned int cpu, struct task_struct *tidle)
681 {
682 	struct pcpu *pcpu;
683 	int rc;
684 
685 	pcpu = pcpu_devices + cpu;
686 	if (pcpu->state != CPU_STATE_CONFIGURED)
687 		return -EIO;
688 	if (pcpu_sigp_retry(pcpu, SIGP_INITIAL_CPU_RESET, 0) !=
689 	    SIGP_CC_ORDER_CODE_ACCEPTED)
690 		return -EIO;
691 
692 	rc = pcpu_alloc_lowcore(pcpu, cpu);
693 	if (rc)
694 		return rc;
695 	pcpu_prepare_secondary(pcpu, cpu);
696 	pcpu_attach_task(pcpu, tidle);
697 	pcpu_start_fn(pcpu, smp_start_secondary, NULL);
698 	while (!cpu_online(cpu))
699 		cpu_relax();
700 	return 0;
701 }
702 
703 static unsigned int setup_possible_cpus __initdata;
704 
705 static int __init _setup_possible_cpus(char *s)
706 {
707 	get_option(&s, &setup_possible_cpus);
708 	return 0;
709 }
710 early_param("possible_cpus", _setup_possible_cpus);
711 
712 #ifdef CONFIG_HOTPLUG_CPU
713 
714 int __cpu_disable(void)
715 {
716 	unsigned long cregs[16];
717 
718 	/* Handle possible pending IPIs */
719 	smp_handle_ext_call();
720 	set_cpu_online(smp_processor_id(), false);
721 	/* Disable pseudo page faults on this cpu. */
722 	pfault_fini();
723 	/* Disable interrupt sources via control register. */
724 	__ctl_store(cregs, 0, 15);
725 	cregs[0]  &= ~0x0000ee70UL;	/* disable all external interrupts */
726 	cregs[6]  &= ~0xff000000UL;	/* disable all I/O interrupts */
727 	cregs[14] &= ~0x1f000000UL;	/* disable most machine checks */
728 	__ctl_load(cregs, 0, 15);
729 	return 0;
730 }
731 
732 void __cpu_die(unsigned int cpu)
733 {
734 	struct pcpu *pcpu;
735 
736 	/* Wait until target cpu is down */
737 	pcpu = pcpu_devices + cpu;
738 	while (!pcpu_stopped(pcpu))
739 		cpu_relax();
740 	pcpu_free_lowcore(pcpu);
741 	atomic_dec(&init_mm.context.attach_count);
742 	cpumask_clear_cpu(cpu, mm_cpumask(&init_mm));
743 	if (MACHINE_HAS_TLB_LC)
744 		cpumask_clear_cpu(cpu, &init_mm.context.cpu_attach_mask);
745 }
746 
747 void __noreturn cpu_die(void)
748 {
749 	idle_task_exit();
750 	pcpu_sigp_retry(pcpu_devices + smp_processor_id(), SIGP_STOP, 0);
751 	for (;;) ;
752 }
753 
754 #endif /* CONFIG_HOTPLUG_CPU */
755 
756 void __init smp_fill_possible_mask(void)
757 {
758 	unsigned int possible, sclp, cpu;
759 
760 	sclp = sclp_get_max_cpu() ?: nr_cpu_ids;
761 	possible = setup_possible_cpus ?: nr_cpu_ids;
762 	possible = min(possible, sclp);
763 	for (cpu = 0; cpu < possible && cpu < nr_cpu_ids; cpu++)
764 		set_cpu_possible(cpu, true);
765 }
766 
767 void __init smp_prepare_cpus(unsigned int max_cpus)
768 {
769 	/* request the 0x1201 emergency signal external interrupt */
770 	if (register_external_irq(EXT_IRQ_EMERGENCY_SIG, do_ext_call_interrupt))
771 		panic("Couldn't request external interrupt 0x1201");
772 	/* request the 0x1202 external call external interrupt */
773 	if (register_external_irq(EXT_IRQ_EXTERNAL_CALL, do_ext_call_interrupt))
774 		panic("Couldn't request external interrupt 0x1202");
775 	smp_detect_cpus();
776 }
777 
778 void __init smp_prepare_boot_cpu(void)
779 {
780 	struct pcpu *pcpu = pcpu_devices;
781 
782 	boot_cpu_address = stap();
783 	pcpu->state = CPU_STATE_CONFIGURED;
784 	pcpu->address = boot_cpu_address;
785 	pcpu->lowcore = (struct _lowcore *)(unsigned long) store_prefix();
786 	pcpu->async_stack = S390_lowcore.async_stack - ASYNC_SIZE
787 		+ STACK_FRAME_OVERHEAD + sizeof(struct pt_regs);
788 	pcpu->panic_stack = S390_lowcore.panic_stack - PAGE_SIZE
789 		+ STACK_FRAME_OVERHEAD + sizeof(struct pt_regs);
790 	S390_lowcore.percpu_offset = __per_cpu_offset[0];
791 	smp_cpu_set_polarization(0, POLARIZATION_UNKNOWN);
792 	set_cpu_present(0, true);
793 	set_cpu_online(0, true);
794 }
795 
796 void __init smp_cpus_done(unsigned int max_cpus)
797 {
798 }
799 
800 void __init smp_setup_processor_id(void)
801 {
802 	S390_lowcore.cpu_nr = 0;
803 	S390_lowcore.spinlock_lockval = arch_spin_lockval(0);
804 }
805 
806 /*
807  * the frequency of the profiling timer can be changed
808  * by writing a multiplier value into /proc/profile.
809  *
810  * usually you want to run this on all CPUs ;)
811  */
812 int setup_profiling_timer(unsigned int multiplier)
813 {
814 	return 0;
815 }
816 
817 #ifdef CONFIG_HOTPLUG_CPU
818 static ssize_t cpu_configure_show(struct device *dev,
819 				  struct device_attribute *attr, char *buf)
820 {
821 	ssize_t count;
822 
823 	mutex_lock(&smp_cpu_state_mutex);
824 	count = sprintf(buf, "%d\n", pcpu_devices[dev->id].state);
825 	mutex_unlock(&smp_cpu_state_mutex);
826 	return count;
827 }
828 
829 static ssize_t cpu_configure_store(struct device *dev,
830 				   struct device_attribute *attr,
831 				   const char *buf, size_t count)
832 {
833 	struct pcpu *pcpu;
834 	int cpu, val, rc;
835 	char delim;
836 
837 	if (sscanf(buf, "%d %c", &val, &delim) != 1)
838 		return -EINVAL;
839 	if (val != 0 && val != 1)
840 		return -EINVAL;
841 	get_online_cpus();
842 	mutex_lock(&smp_cpu_state_mutex);
843 	rc = -EBUSY;
844 	/* disallow configuration changes of online cpus and cpu 0 */
845 	cpu = dev->id;
846 	if (cpu_online(cpu) || cpu == 0)
847 		goto out;
848 	pcpu = pcpu_devices + cpu;
849 	rc = 0;
850 	switch (val) {
851 	case 0:
852 		if (pcpu->state != CPU_STATE_CONFIGURED)
853 			break;
854 		rc = sclp_cpu_deconfigure(pcpu->address);
855 		if (rc)
856 			break;
857 		pcpu->state = CPU_STATE_STANDBY;
858 		smp_cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
859 		topology_expect_change();
860 		break;
861 	case 1:
862 		if (pcpu->state != CPU_STATE_STANDBY)
863 			break;
864 		rc = sclp_cpu_configure(pcpu->address);
865 		if (rc)
866 			break;
867 		pcpu->state = CPU_STATE_CONFIGURED;
868 		smp_cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
869 		topology_expect_change();
870 		break;
871 	default:
872 		break;
873 	}
874 out:
875 	mutex_unlock(&smp_cpu_state_mutex);
876 	put_online_cpus();
877 	return rc ? rc : count;
878 }
879 static DEVICE_ATTR(configure, 0644, cpu_configure_show, cpu_configure_store);
880 #endif /* CONFIG_HOTPLUG_CPU */
881 
882 static ssize_t show_cpu_address(struct device *dev,
883 				struct device_attribute *attr, char *buf)
884 {
885 	return sprintf(buf, "%d\n", pcpu_devices[dev->id].address);
886 }
887 static DEVICE_ATTR(address, 0444, show_cpu_address, NULL);
888 
889 static struct attribute *cpu_common_attrs[] = {
890 #ifdef CONFIG_HOTPLUG_CPU
891 	&dev_attr_configure.attr,
892 #endif
893 	&dev_attr_address.attr,
894 	NULL,
895 };
896 
897 static struct attribute_group cpu_common_attr_group = {
898 	.attrs = cpu_common_attrs,
899 };
900 
901 static ssize_t show_idle_count(struct device *dev,
902 				struct device_attribute *attr, char *buf)
903 {
904 	struct s390_idle_data *idle = &per_cpu(s390_idle, dev->id);
905 	unsigned long long idle_count;
906 	unsigned int sequence;
907 
908 	do {
909 		sequence = ACCESS_ONCE(idle->sequence);
910 		idle_count = ACCESS_ONCE(idle->idle_count);
911 		if (ACCESS_ONCE(idle->clock_idle_enter))
912 			idle_count++;
913 	} while ((sequence & 1) || (ACCESS_ONCE(idle->sequence) != sequence));
914 	return sprintf(buf, "%llu\n", idle_count);
915 }
916 static DEVICE_ATTR(idle_count, 0444, show_idle_count, NULL);
917 
918 static ssize_t show_idle_time(struct device *dev,
919 				struct device_attribute *attr, char *buf)
920 {
921 	struct s390_idle_data *idle = &per_cpu(s390_idle, dev->id);
922 	unsigned long long now, idle_time, idle_enter, idle_exit;
923 	unsigned int sequence;
924 
925 	do {
926 		now = get_tod_clock();
927 		sequence = ACCESS_ONCE(idle->sequence);
928 		idle_time = ACCESS_ONCE(idle->idle_time);
929 		idle_enter = ACCESS_ONCE(idle->clock_idle_enter);
930 		idle_exit = ACCESS_ONCE(idle->clock_idle_exit);
931 	} while ((sequence & 1) || (ACCESS_ONCE(idle->sequence) != sequence));
932 	idle_time += idle_enter ? ((idle_exit ? : now) - idle_enter) : 0;
933 	return sprintf(buf, "%llu\n", idle_time >> 12);
934 }
935 static DEVICE_ATTR(idle_time_us, 0444, show_idle_time, NULL);
936 
937 static struct attribute *cpu_online_attrs[] = {
938 	&dev_attr_idle_count.attr,
939 	&dev_attr_idle_time_us.attr,
940 	NULL,
941 };
942 
943 static struct attribute_group cpu_online_attr_group = {
944 	.attrs = cpu_online_attrs,
945 };
946 
947 static int smp_cpu_notify(struct notifier_block *self, unsigned long action,
948 			  void *hcpu)
949 {
950 	unsigned int cpu = (unsigned int)(long)hcpu;
951 	struct cpu *c = pcpu_devices[cpu].cpu;
952 	struct device *s = &c->dev;
953 	int err = 0;
954 
955 	switch (action & ~CPU_TASKS_FROZEN) {
956 	case CPU_ONLINE:
957 		err = sysfs_create_group(&s->kobj, &cpu_online_attr_group);
958 		break;
959 	case CPU_DEAD:
960 		sysfs_remove_group(&s->kobj, &cpu_online_attr_group);
961 		break;
962 	}
963 	return notifier_from_errno(err);
964 }
965 
966 static int smp_add_present_cpu(int cpu)
967 {
968 	struct device *s;
969 	struct cpu *c;
970 	int rc;
971 
972 	c = kzalloc(sizeof(*c), GFP_KERNEL);
973 	if (!c)
974 		return -ENOMEM;
975 	pcpu_devices[cpu].cpu = c;
976 	s = &c->dev;
977 	c->hotpluggable = 1;
978 	rc = register_cpu(c, cpu);
979 	if (rc)
980 		goto out;
981 	rc = sysfs_create_group(&s->kobj, &cpu_common_attr_group);
982 	if (rc)
983 		goto out_cpu;
984 	if (cpu_online(cpu)) {
985 		rc = sysfs_create_group(&s->kobj, &cpu_online_attr_group);
986 		if (rc)
987 			goto out_online;
988 	}
989 	rc = topology_cpu_init(c);
990 	if (rc)
991 		goto out_topology;
992 	return 0;
993 
994 out_topology:
995 	if (cpu_online(cpu))
996 		sysfs_remove_group(&s->kobj, &cpu_online_attr_group);
997 out_online:
998 	sysfs_remove_group(&s->kobj, &cpu_common_attr_group);
999 out_cpu:
1000 #ifdef CONFIG_HOTPLUG_CPU
1001 	unregister_cpu(c);
1002 #endif
1003 out:
1004 	return rc;
1005 }
1006 
1007 #ifdef CONFIG_HOTPLUG_CPU
1008 
1009 int __ref smp_rescan_cpus(void)
1010 {
1011 	struct sclp_cpu_info *info;
1012 	int nr;
1013 
1014 	info = smp_get_cpu_info();
1015 	if (!info)
1016 		return -ENOMEM;
1017 	get_online_cpus();
1018 	mutex_lock(&smp_cpu_state_mutex);
1019 	nr = __smp_rescan_cpus(info, 1);
1020 	mutex_unlock(&smp_cpu_state_mutex);
1021 	put_online_cpus();
1022 	kfree(info);
1023 	if (nr)
1024 		topology_schedule_update();
1025 	return 0;
1026 }
1027 
1028 static ssize_t __ref rescan_store(struct device *dev,
1029 				  struct device_attribute *attr,
1030 				  const char *buf,
1031 				  size_t count)
1032 {
1033 	int rc;
1034 
1035 	rc = smp_rescan_cpus();
1036 	return rc ? rc : count;
1037 }
1038 static DEVICE_ATTR(rescan, 0200, NULL, rescan_store);
1039 #endif /* CONFIG_HOTPLUG_CPU */
1040 
1041 static int __init s390_smp_init(void)
1042 {
1043 	int cpu, rc = 0;
1044 
1045 #ifdef CONFIG_HOTPLUG_CPU
1046 	rc = device_create_file(cpu_subsys.dev_root, &dev_attr_rescan);
1047 	if (rc)
1048 		return rc;
1049 #endif
1050 	cpu_notifier_register_begin();
1051 	for_each_present_cpu(cpu) {
1052 		rc = smp_add_present_cpu(cpu);
1053 		if (rc)
1054 			goto out;
1055 	}
1056 
1057 	__hotcpu_notifier(smp_cpu_notify, 0);
1058 
1059 out:
1060 	cpu_notifier_register_done();
1061 	return rc;
1062 }
1063 subsys_initcall(s390_smp_init);
1064