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

Commit 4130b28f authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky
Browse files

s390/ipl: revert Load Normal semantics for LPAR CCW-type re-IPL



This reverts the two commits

7afbeb6d ("s390/ipl: always use load normal for CCW-type re-IPL")
0f7451ff ("s390/ipl: use load normal for LPAR re-ipl")

The two commits did not take into account that behavior of standby
memory changes fundamentally if the re-IPL method is changed from
Load Clear to Load Normal.

In case of the old re-IPL clear method all memory that was initially
in standby state will be put into standby state again within the
re-IPL process. Or in other words: memory that was brought online
before a re-IPL will be offline again after a reboot.

Given that we use different re-IPL methods depending on the hypervisor
and CCW-type vs SCSI re-IPL it is not easy to tell in advance when and
why memory will stay online or will be offline after a re-IPL.
This does also have other side effects, since memory that is online
from the beginning will be in ZONE_NORMAL by default vs ZONE_MOVABLE
for memory that is offline.

Therefore, before the change, a user could online and offline memory
easily since standby memory was always in ZONE_NORMAL.  After the
change, and a re-IPL, this depended on which memory parts were online
before the re-IPL.

From a usability point of view the current behavior is more than
suboptimal. Therefore revert these changes until we have a better
solution and get back to a consistent behavior. The bad thing about
this is that the time required for a re-IPL will be significantly
increased for configurations with several 100GB or 1TB of memory.

Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 63f700aa
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -564,8 +564,6 @@ static struct kset *ipl_kset;

static void __ipl_run(void *unused)
{
	if (MACHINE_IS_LPAR && ipl_info.type == IPL_TYPE_CCW)
		diag308(DIAG308_LOAD_NORMAL_DUMP, NULL);
	diag308(DIAG308_LOAD_CLEAR, NULL);
	if (MACHINE_IS_VM)
		__cpcmd("IPL", NULL, 0, NULL);
@@ -1088,9 +1086,6 @@ static void __reipl_run(void *unused)
		break;
	case REIPL_METHOD_CCW_DIAG:
		diag308(DIAG308_SET, reipl_block_ccw);
		if (MACHINE_IS_LPAR)
			diag308(DIAG308_LOAD_NORMAL_DUMP, NULL);
		else
		diag308(DIAG308_LOAD_CLEAR, NULL);
		break;
	case REIPL_METHOD_FCP_RW_DIAG: