memory detection: fix off by one bug.
From: Heiko Carstens <[email protected]>
[S390] memory detection: fix off by one bug.
diag 260 returns the address of the last addressable byte and not the size of memory. Since we want the size we have to add 1 to the return value.
Disable diag 260 for non z/Arch mode since it doesn't work there anyway.
Signed-off-by Heiko Carstens <[email protected]>
Signed-off-by Martin Schwidefsky <[email protected]>
---
arch/s390/kernel/early.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-)
arch/s390/kernel/early.c +8 -2
@@ -141,9 +141,9 @@ static noinline __init void detect_machi machine_flags |=4 ; } +#ifdef CONFIG_64BIT static noinline __init int memory_fast_detect(void) { -unsigned long val0 =0 ;unsigned long val1 =0xc ;int ret = -ENOSYS ;
@@ -161,9 +161,15 @@ static noinline __init int memory_fast_dif (ret || val0 != val1)return -ENOSYS ; - memory_chunk[0 ].size = val0; + memory_chunk[0 ].size = val0 +1 ; return 0; } +#else +static inline int memory_fast_detect (void ) +{ +return -ENOSYS ; +} +#endif #define ADDR2G (1UL << 31)