diff options
| author | Michael Holzheu <holzheu@de.ibm.com> | 2006-12-15 11:18:25 -0500 |
|---|---|---|
| committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2006-12-15 11:18:25 -0500 |
| commit | 58be944127be80bd947dd72d69523b3d4b17781f (patch) | |
| tree | e9be270a32a0da283f2cfa7e311447ffc29013a6 | |
| parent | a45e14148fb34175cba042df8979e7982758635f (diff) | |
[S390] Fix reboot hang
We use printks after shutting down all other cpus. This is not allowed
and can lead to deadlocks. Therefore the printks have to be removed.
Signed-off-by: Michael Holzheu <holzheu@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| -rw-r--r-- | arch/s390/kernel/ipl.c | 45 |
1 files changed, 1 insertions, 44 deletions
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c index d2e6a0a56ade..48bfe402052b 100644 --- a/arch/s390/kernel/ipl.c +++ b/arch/s390/kernel/ipl.c | |||
| @@ -609,42 +609,12 @@ static ssize_t on_panic_store(struct subsystem *subsys, const char *buf, | |||
| 609 | static struct subsys_attribute on_panic_attr = | 609 | static struct subsys_attribute on_panic_attr = |
| 610 | __ATTR(on_panic, 0644, on_panic_show, on_panic_store); | 610 | __ATTR(on_panic, 0644, on_panic_show, on_panic_store); |
| 611 | 611 | ||
| 612 | static void print_fcp_block(struct ipl_parameter_block *fcp_block) | ||
| 613 | { | ||
| 614 | printk(KERN_EMERG "wwpn: %016llx\n", | ||
| 615 | (unsigned long long)fcp_block->ipl_info.fcp.wwpn); | ||
| 616 | printk(KERN_EMERG "lun: %016llx\n", | ||
| 617 | (unsigned long long)fcp_block->ipl_info.fcp.lun); | ||
| 618 | printk(KERN_EMERG "bootprog: %lld\n", | ||
| 619 | (unsigned long long)fcp_block->ipl_info.fcp.bootprog); | ||
| 620 | printk(KERN_EMERG "br_lba: %lld\n", | ||
| 621 | (unsigned long long)fcp_block->ipl_info.fcp.br_lba); | ||
| 622 | printk(KERN_EMERG "device: %llx\n", | ||
| 623 | (unsigned long long)fcp_block->ipl_info.fcp.devno); | ||
| 624 | printk(KERN_EMERG "opt: %x\n", fcp_block->ipl_info.fcp.opt); | ||
| 625 | } | ||
| 626 | |||
| 627 | void do_reipl(void) | 612 | void do_reipl(void) |
| 628 | { | 613 | { |
| 629 | struct ccw_dev_id devid; | 614 | struct ccw_dev_id devid; |
| 630 | static char buf[100]; | 615 | static char buf[100]; |
| 631 | char loadparm[LOADPARM_LEN + 1]; | 616 | char loadparm[LOADPARM_LEN + 1]; |
| 632 | 617 | ||
| 633 | switch (reipl_type) { | ||
| 634 | case IPL_TYPE_CCW: | ||
| 635 | reipl_get_ascii_loadparm(loadparm); | ||
| 636 | printk(KERN_EMERG "reboot on ccw device: 0.0.%04x\n", | ||
| 637 | reipl_block_ccw->ipl_info.ccw.devno); | ||
| 638 | printk(KERN_EMERG "loadparm = '%s'\n", loadparm); | ||
| 639 | break; | ||
| 640 | case IPL_TYPE_FCP: | ||
| 641 | printk(KERN_EMERG "reboot on fcp device:\n"); | ||
| 642 | print_fcp_block(reipl_block_fcp); | ||
| 643 | break; | ||
| 644 | default: | ||
| 645 | break; | ||
| 646 | } | ||
| 647 | |||
| 648 | switch (reipl_method) { | 618 | switch (reipl_method) { |
| 649 | case IPL_METHOD_CCW_CIO: | 619 | case IPL_METHOD_CCW_CIO: |
| 650 | devid.devno = reipl_block_ccw->ipl_info.ccw.devno; | 620 | devid.devno = reipl_block_ccw->ipl_info.ccw.devno; |
| @@ -654,6 +624,7 @@ void do_reipl(void) | |||
| 654 | reipl_ccw_dev(&devid); | 624 | reipl_ccw_dev(&devid); |
| 655 | break; | 625 | break; |
| 656 | case IPL_METHOD_CCW_VM: | 626 | case IPL_METHOD_CCW_VM: |
| 627 | reipl_get_ascii_loadparm(loadparm); | ||
| 657 | if (strlen(loadparm) == 0) | 628 | if (strlen(loadparm) == 0) |
| 658 | sprintf(buf, "IPL %X", | 629 | sprintf(buf, "IPL %X", |
| 659 | reipl_block_ccw->ipl_info.ccw.devno); | 630 | reipl_block_ccw->ipl_info.ccw.devno); |
| @@ -683,7 +654,6 @@ void do_reipl(void) | |||
| 683 | diag308(DIAG308_IPL, NULL); | 654 | diag308(DIAG308_IPL, NULL); |
| 684 | break; | 655 | break; |
| 685 | } | 656 | } |
| 686 | printk(KERN_EMERG "reboot failed!\n"); | ||
| 687 | signal_processor(smp_processor_id(), sigp_stop_and_store_status); | 657 | signal_processor(smp_processor_id(), sigp_stop_and_store_status); |
| 688 | } | 658 | } |
| 689 | 659 | ||
| @@ -692,19 +662,6 @@ static void do_dump(void) | |||
| 692 | struct ccw_dev_id devid; | 662 | struct ccw_dev_id devid; |
| 693 | static char buf[100]; | 663 | static char buf[100]; |
| 694 | 664 | ||
| 695 | switch (dump_type) { | ||
| 696 | case IPL_TYPE_CCW: | ||
| 697 | printk(KERN_EMERG "Automatic dump on ccw device: 0.0.%04x\n", | ||
| 698 | dump_block_ccw->ipl_info.ccw.devno); | ||
| 699 | break; | ||
| 700 | case IPL_TYPE_FCP: | ||
| 701 | printk(KERN_EMERG "Automatic dump on fcp device:\n"); | ||
| 702 | print_fcp_block(dump_block_fcp); | ||
| 703 | break; | ||
| 704 | default: | ||
| 705 | return; | ||
| 706 | } | ||
| 707 | |||
| 708 | switch (dump_method) { | 665 | switch (dump_method) { |
| 709 | case IPL_METHOD_CCW_CIO: | 666 | case IPL_METHOD_CCW_CIO: |
| 710 | smp_send_stop(); | 667 | smp_send_stop(); |
