diff options
author | Hongjie Yang <hongjie@us.ibm.com> | 2007-01-09 04:18:36 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2007-01-09 04:18:36 -0500 |
commit | dd401e2b9250e3bb07ef388ddccbbf80aa106fc7 (patch) | |
tree | 3043c1d699d3d5f31bf6a47985fdf24760a38990 /arch/s390/kernel/head31.S | |
parent | efa06708fe77190f31bed5c3cb5da49e211240f5 (diff) |
[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>
Diffstat (limited to 'arch/s390/kernel/head31.S')
-rw-r--r-- | arch/s390/kernel/head31.S | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/s390/kernel/head31.S b/arch/s390/kernel/head31.S index 4388b3309e0c..eca507050e47 100644 --- a/arch/s390/kernel/head31.S +++ b/arch/s390/kernel/head31.S | |||
@@ -164,11 +164,14 @@ startup_continue: | |||
164 | srl %r7,28 | 164 | srl %r7,28 |
165 | clr %r6,%r7 # compare cc with last access code | 165 | clr %r6,%r7 # compare cc with last access code |
166 | be .Lsame-.LPG1(%r13) | 166 | be .Lsame-.LPG1(%r13) |
167 | b .Lchkmem-.LPG1(%r13) | 167 | lhi %r8,0 # no program checks |
168 | b .Lsavchk-.LPG1(%r13) | ||
168 | .Lsame: | 169 | .Lsame: |
169 | ar %r5,%r1 # add 128KB to end of chunk | 170 | ar %r5,%r1 # add 128KB to end of chunk |
170 | bno .Lloop-.LPG1(%r13) # r1 < 0x80000000 -> loop | 171 | bno .Lloop-.LPG1(%r13) # r1 < 0x80000000 -> loop |
171 | .Lchkmem: # > 2GB or tprot got a program check | 172 | .Lchkmem: # > 2GB or tprot got a program check |
173 | lhi %r8,1 # set program check flag | ||
174 | .Lsavchk: | ||
172 | clr %r4,%r5 # chunk size > 0? | 175 | clr %r4,%r5 # chunk size > 0? |
173 | be .Lchkloop-.LPG1(%r13) | 176 | be .Lchkloop-.LPG1(%r13) |
174 | st %r4,0(%r3) # store start address of chunk | 177 | st %r4,0(%r3) # store start address of chunk |
@@ -190,8 +193,15 @@ startup_continue: | |||
190 | je .Ldonemem # if not, leave | 193 | je .Ldonemem # if not, leave |
191 | chi %r10,0 # do we have chunks left? | 194 | chi %r10,0 # do we have chunks left? |
192 | je .Ldonemem | 195 | je .Ldonemem |
196 | chi %r8,1 # program check ? | ||
197 | je .Lpgmchk | ||
198 | lr %r4,%r5 # potential new chunk | ||
199 | alr %r5,%r1 # add 128KB to end of chunk | ||
200 | j .Llpcnt | ||
201 | .Lpgmchk: | ||
193 | alr %r5,%r1 # add 128KB to end of chunk | 202 | alr %r5,%r1 # add 128KB to end of chunk |
194 | lr %r4,%r5 # potential new chunk | 203 | lr %r4,%r5 # potential new chunk |
204 | .Llpcnt: | ||
195 | clr %r5,%r9 # should we go on? | 205 | clr %r5,%r9 # should we go on? |
196 | jl .Lloop | 206 | jl .Lloop |
197 | .Ldonemem: | 207 | .Ldonemem: |