mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 20:40:54 +07:00
[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: Hongjie Yang <hongjie@us.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
efa06708fe
commit
dd401e2b92
@ -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:
|
|||||||
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:
|
|||||||
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:
|
|||||||
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:
|
||||||
|
Loading…
Reference in New Issue
Block a user