[PATCH] s390: memory detection > 32GB
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Wed, 22 Jun 2005 00:16:30 +0000 (17:16 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Wed, 22 Jun 2005 02:07:34 +0000 (19:07 -0700)
commite9b9a04796eade5241452a913ec6f3433437b4f5
tree9cd181fb9e905245dc07913c3a3e421d17ca6ac9
parent447570cfde680d5bf09c47b9c8d1dcf5bcb18f10
[PATCH] s390: memory detection > 32GB

The kernel takes a very long time to boot if the memory size is bigger then
32767 MB.  The memory size is contained in a structure created by an sclp
call.  The kernel accesses the field with a LH instrution which performs a
sign extension of a 16 bit word.  In the case of a memory size with bit 2^15
set this results in a very large value and the memory detection just loops for
a long time.  In addition if more then 64 GB are used on a 64 bit system the
memory size is read from an incorrect storage location.

Use zero-extention to read the 16 bit memory size and the correct offset to
read the 4 byte memory size on 64 bit.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/s390/kernel/head.S
arch/s390/kernel/head64.S