Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+1 −44
Original line number Diff line number Diff line
@@ -609,42 +609,12 @@ static ssize_t on_panic_store(struct subsystem *subsys, const char *buf,
static struct subsys_attribute on_panic_attr =
		__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)
{
	struct ccw_dev_id devid;
	static char buf[100];
	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) {
	case IPL_METHOD_CCW_CIO:
		devid.devno = reipl_block_ccw->ipl_info.ccw.devno;
@@ -654,6 +624,7 @@ void do_reipl(void)
		reipl_ccw_dev(&devid);
		break;
	case IPL_METHOD_CCW_VM:
		reipl_get_ascii_loadparm(loadparm);
		if (strlen(loadparm) == 0)
			sprintf(buf, "IPL %X",
				reipl_block_ccw->ipl_info.ccw.devno);
@@ -683,7 +654,6 @@ void do_reipl(void)
		diag308(DIAG308_IPL, NULL);
		break;
	}
	printk(KERN_EMERG "reboot failed!\n");
	signal_processor(smp_processor_id(), sigp_stop_and_store_status);
}

@@ -692,19 +662,6 @@ static void do_dump(void)
	struct ccw_dev_id devid;
	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) {
	case IPL_METHOD_CCW_CIO:
		smp_send_stop();