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

Commit 06c0dd72 authored by Martin Schwidefsky's avatar Martin Schwidefsky Committed by Martin Schwidefsky
Browse files

[S390] fix boot failures with compressed kernels



Fix two bugs with the kernel image compression:
1) reset the bss section of the compressed vmlinux
2) clear the high half of the registers for 64 bit early enough
   for the decompression step

Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 7b26d82f
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -24,8 +24,8 @@
/* Symbols defined by linker scripts */
extern char input_data[];
extern int input_len;
extern int _text;
extern int _end;
extern char _text, _end;
extern char _bss, _ebss;

static void error(char *m);

@@ -129,12 +129,12 @@ unsigned long decompress_kernel(void)
	unsigned long output_addr;
	unsigned char *output;

	check_ipl_parmblock((void *) 0, (unsigned long) output + SZ__bss_start);
	memset(&_bss, 0, &_ebss - &_bss);
	free_mem_ptr = (unsigned long)&_end;
	free_mem_end_ptr = free_mem_ptr + HEAP_SIZE;
	output = (unsigned char *) ((free_mem_end_ptr + 4095UL) & -4096UL);

	check_ipl_parmblock((void *) 0, (unsigned long) output + SZ__bss_start);

#ifdef CONFIG_BLK_DEV_INITRD
	/*
	 * Move the initrd right behind the end of the decompressed
+3 −0
Original line number Diff line number Diff line
@@ -517,7 +517,10 @@ startup:
	lhi	%r1,2			# mode 2 = esame (dump)
	sigp	%r1,%r0,0x12		# switch to esame mode
	sam64				# switch to 64 bit mode
	larl	%r13,4f
	lmh	%r0,%r15,0(%r13)	# clear high-order half
	jg	startup_continue
4:	.fill	16,4,0x0
#else
	mvi	__LC_AR_MODE_ID,0	# set ESA flag (mode 0)
	l	%r13,4f-.LPG0(%r13)
+0 −2
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ startup_continue:
	larl	%r1,sched_clock_base_cc
	mvc	0(8,%r1),__LC_LAST_UPDATE_CLOCK
	larl	%r13,.LPG1		# get base
	lmh	%r0,%r15,.Lzero64-.LPG1(%r13)	# clear high-order half
	lctlg	%c0,%c15,.Lctl-.LPG1(%r13)	# load control registers
	lg	%r12,.Lparmaddr-.LPG1(%r13)	# pointer to parameter area
					# move IPL device to lowcore
@@ -67,7 +66,6 @@ startup_continue:
.L4malign:.quad 0xffffffffffc00000
.Lscan2g:.quad	0x80000000 + 0x20000 - 8	# 2GB + 128K - 8
.Lnop:	.long	0x07000700
.Lzero64:.fill	16,4,0x0
.Lparmaddr:
	.quad	PARMAREA
	.align	64