aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/ipl.c
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2006-12-04 09:40:33 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2006-12-04 09:40:33 -0500
commitc6b5b847a7cf11f131c43fe0041443ec11697fc7 (patch)
treed15fb7302bd446394ab373128be0a77826566e30 /arch/s390/kernel/ipl.c
parent740b5706b9c4b3767f597b3ea76654c6f2a800b2 (diff)
[S390] cpu shutdown rework
Let one master cpu kill all other cpus instead of sending an external interrupt to all other cpus so they can kill themselves. Simplifies reipl/shutdown functions a lot. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/ipl.c')
-rw-r--r--arch/s390/kernel/ipl.c24
1 files changed, 2 insertions, 22 deletions
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index 101b003cfabf..a36bea1188d9 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -576,23 +576,6 @@ static struct subsys_attribute dump_type_attr =
576 576
577static decl_subsys(dump, NULL, NULL); 577static decl_subsys(dump, NULL, NULL);
578 578
579#ifdef CONFIG_SMP
580static void dump_smp_stop_all(void)
581{
582 int cpu;
583 preempt_disable();
584 for_each_online_cpu(cpu) {
585 if (cpu == smp_processor_id())
586 continue;
587 while (signal_processor(cpu, sigp_stop) == sigp_busy)
588 udelay(10);
589 }
590 preempt_enable();
591}
592#else
593#define dump_smp_stop_all() do { } while (0)
594#endif
595
596/* 579/*
597 * Shutdown actions section 580 * Shutdown actions section
598 */ 581 */
@@ -724,13 +707,13 @@ static void do_dump(void)
724 707
725 switch (dump_method) { 708 switch (dump_method) {
726 case IPL_METHOD_CCW_CIO: 709 case IPL_METHOD_CCW_CIO:
727 dump_smp_stop_all(); 710 smp_send_stop();
728 devid.devno = dump_block_ccw->ipl_info.ccw.devno; 711 devid.devno = dump_block_ccw->ipl_info.ccw.devno;
729 devid.ssid = 0; 712 devid.ssid = 0;
730 reipl_ccw_dev(&devid); 713 reipl_ccw_dev(&devid);
731 break; 714 break;
732 case IPL_METHOD_CCW_VM: 715 case IPL_METHOD_CCW_VM:
733 dump_smp_stop_all(); 716 smp_send_stop();
734 sprintf(buf, "STORE STATUS"); 717 sprintf(buf, "STORE STATUS");
735 __cpcmd(buf, NULL, 0, NULL); 718 __cpcmd(buf, NULL, 0, NULL);
736 sprintf(buf, "IPL %X", dump_block_ccw->ipl_info.ccw.devno); 719 sprintf(buf, "IPL %X", dump_block_ccw->ipl_info.ccw.devno);
@@ -1059,9 +1042,6 @@ void s390_reset_system(void)
1059{ 1042{
1060 struct _lowcore *lc; 1043 struct _lowcore *lc;
1061 1044
1062 /* Disable all interrupts/machine checks */
1063 __load_psw_mask(PSW_KERNEL_BITS & ~PSW_MASK_MCHECK);
1064
1065 /* Stack for interrupt/machine check handler */ 1045 /* Stack for interrupt/machine check handler */
1066 lc = (struct _lowcore *)(unsigned long) store_prefix(); 1046 lc = (struct _lowcore *)(unsigned long) store_prefix();
1067 lc->panic_stack = S390_lowcore.panic_stack; 1047 lc->panic_stack = S390_lowcore.panic_stack;