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

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