Commit 58be9441 authored by Michael Holzheu's avatar Michael Holzheu Committed by Martin Schwidefsky

[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: default avatarMichael Holzheu <holzheu@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent a45e1414
...@@ -609,42 +609,12 @@ static ssize_t on_panic_store(struct subsystem *subsys, const char *buf, ...@@ -609,42 +609,12 @@ static ssize_t on_panic_store(struct subsystem *subsys, const char *buf,
static struct subsys_attribute on_panic_attr = static struct subsys_attribute on_panic_attr =
__ATTR(on_panic, 0644, on_panic_show, on_panic_store); __ATTR(on_panic, 0644, on_panic_show, on_panic_store);
static void print_fcp_block(struct ipl_parameter_block *fcp_block)
{
printk(KERN_EMERG "wwpn: %016llx\n",
(unsigned long long)fcp_block->ipl_info.fcp.wwpn);
printk(KERN_EMERG "lun: %016llx\n",
(unsigned long long)fcp_block->ipl_info.fcp.lun);
printk(KERN_EMERG "bootprog: %lld\n",
(unsigned long long)fcp_block->ipl_info.fcp.bootprog);
printk(KERN_EMERG "br_lba: %lld\n",
(unsigned long long)fcp_block->ipl_info.fcp.br_lba);
printk(KERN_EMERG "device: %llx\n",
(unsigned long long)fcp_block->ipl_info.fcp.devno);
printk(KERN_EMERG "opt: %x\n", fcp_block->ipl_info.fcp.opt);
}
void do_reipl(void) void do_reipl(void)
{ {
struct ccw_dev_id devid; struct ccw_dev_id devid;
static char buf[100]; static char buf[100];
char loadparm[LOADPARM_LEN + 1]; char loadparm[LOADPARM_LEN + 1];
switch (reipl_type) {
case IPL_TYPE_CCW:
reipl_get_ascii_loadparm(loadparm);
printk(KERN_EMERG "reboot on ccw device: 0.0.%04x\n",
reipl_block_ccw->ipl_info.ccw.devno);
printk(KERN_EMERG "loadparm = '%s'\n", loadparm);
break;
case IPL_TYPE_FCP:
printk(KERN_EMERG "reboot on fcp device:\n");
print_fcp_block(reipl_block_fcp);
break;
default:
break;
}
switch (reipl_method) { switch (reipl_method) {
case IPL_METHOD_CCW_CIO: case IPL_METHOD_CCW_CIO:
devid.devno = reipl_block_ccw->ipl_info.ccw.devno; devid.devno = reipl_block_ccw->ipl_info.ccw.devno;
...@@ -654,6 +624,7 @@ void do_reipl(void) ...@@ -654,6 +624,7 @@ void do_reipl(void)
reipl_ccw_dev(&devid); reipl_ccw_dev(&devid);
break; break;
case IPL_METHOD_CCW_VM: case IPL_METHOD_CCW_VM:
reipl_get_ascii_loadparm(loadparm);
if (strlen(loadparm) == 0) if (strlen(loadparm) == 0)
sprintf(buf, "IPL %X", sprintf(buf, "IPL %X",
reipl_block_ccw->ipl_info.ccw.devno); reipl_block_ccw->ipl_info.ccw.devno);
...@@ -683,7 +654,6 @@ void do_reipl(void) ...@@ -683,7 +654,6 @@ void do_reipl(void)
diag308(DIAG308_IPL, NULL); diag308(DIAG308_IPL, NULL);
break; break;
} }
printk(KERN_EMERG "reboot failed!\n");
signal_processor(smp_processor_id(), sigp_stop_and_store_status); signal_processor(smp_processor_id(), sigp_stop_and_store_status);
} }
...@@ -692,19 +662,6 @@ static void do_dump(void) ...@@ -692,19 +662,6 @@ static void do_dump(void)
struct ccw_dev_id devid; struct ccw_dev_id devid;
static char buf[100]; static char buf[100];
switch (dump_type) {
case IPL_TYPE_CCW:
printk(KERN_EMERG "Automatic dump on ccw device: 0.0.%04x\n",
dump_block_ccw->ipl_info.ccw.devno);
break;
case IPL_TYPE_FCP:
printk(KERN_EMERG "Automatic dump on fcp device:\n");
print_fcp_block(dump_block_fcp);
break;
default:
return;
}
switch (dump_method) { switch (dump_method) {
case IPL_METHOD_CCW_CIO: case IPL_METHOD_CCW_CIO:
smp_send_stop(); smp_send_stop();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment