Commit dd401e2b authored by Hongjie Yang's avatar Hongjie Yang Committed by Martin Schwidefsky
Browse files

[S390] memory detection misses 128k.



Fix a memory leak problem in the memory detection routines.  A memory leak
of 128k occurs when we have a contiguous memory with mixed access-mode
(read or write) ranges.

Signed-off-by: default avatarHongjie Yang <hongjie@us.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent efa06708
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -164,11 +164,14 @@ startup_continue:
	srl	%r7,28
	clr	%r6,%r7			# compare cc with last access code
	be	.Lsame-.LPG1(%r13)
	b	.Lchkmem-.LPG1(%r13)
	lhi	%r8,0			# no program checks
	b	.Lsavchk-.LPG1(%r13)
.Lsame:
	ar	%r5,%r1			# add 128KB to end of chunk
	bno	.Lloop-.LPG1(%r13)	# r1 < 0x80000000 -> loop
.Lchkmem:				# > 2GB or tprot got a program check
	lhi	%r8,1			# set program check flag
.Lsavchk:
	clr	%r4,%r5			# chunk size > 0?
	be	.Lchkloop-.LPG1(%r13)
	st	%r4,0(%r3)		# store start address of chunk
@@ -190,8 +193,15 @@ startup_continue:
	je	.Ldonemem		# if not, leave
	chi	%r10,0			# do we have chunks left?
	je	.Ldonemem
	chi	%r8,1			# program check ?
	je	.Lpgmchk
	lr	%r4,%r5			# potential new chunk
	alr	%r5,%r1			# add 128KB to end of chunk
	j	.Llpcnt
.Lpgmchk:
	alr	%r5,%r1			# add 128KB to end of chunk
	lr	%r4,%r5			# potential new chunk
.Llpcnt:
	clr	%r5,%r9			# should we go on?
	jl	.Lloop
.Ldonemem:
+11 −1
Original line number Diff line number Diff line
@@ -172,12 +172,15 @@ startup_continue:
	srl	%r7,28
	clr	%r6,%r7			# compare cc with last access code
	je	.Lsame
	j	.Lchkmem
	lghi	%r8,0			# no program checks
	j	.Lsavchk
.Lsame:
	algr	%r5,%r1			# add 128KB to end of chunk
					# no need to check here,
	brc	12,.Lloop		# this is the same chunk
.Lchkmem:				# > 16EB or tprot got a program check
	lghi	%r8,1			# set program check flag
.Lsavchk:
	clgr	%r4,%r5			# chunk size > 0?
	je	.Lchkloop
	stg	%r4,0(%r3)		# store start address of chunk
@@ -204,8 +207,15 @@ startup_continue:
	chi	%r10, 0			# do we have chunks left?
	je	.Ldonemem
.Lhsaskip:
	chi	%r8,1			# program check ?
	je	.Lpgmchk
	lgr	%r4,%r5			# potential new chunk
	algr	%r5,%r1			# add 128KB to end of chunk
	j	.Llpcnt
.Lpgmchk:
	algr	%r5,%r1			# add 128KB to end of chunk
	lgr	%r4,%r5			# potential new chunk
.Llpcnt:
	clgr	%r5,%r9			# should we go on?
	jl	.Lloop
.Ldonemem: