Discussion:
[PATCH v2] kexec: Increase the upper limit for RAM segments
Sameer Goel
2016-11-11 22:21:11 UTC
Permalink
On a newer UEFI based Qualcomm target the number of system ram regions
retrieved from /proc/iomem are ~40. So increasing the current hardcoded
values to 64 from 16.

Signed-off-by: Sameer Goel <***@codeaurora.org>
---
kexec/arch/arm64/kexec-arm64.h | 2 +-
kexec/kexec-syscall.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/kexec/arch/arm64/kexec-arm64.h b/kexec/arch/arm64/kexec-arm64.h
index bac62f8..bd4c20e 100644
--- a/kexec/arch/arm64/kexec-arm64.h
+++ b/kexec/arch/arm64/kexec-arm64.h
@@ -11,7 +11,7 @@
#include "image-header.h"
#include "kexec.h"

-#define KEXEC_SEGMENT_MAX 16
+#define KEXEC_SEGMENT_MAX 64

#define BOOT_BLOCK_VERSION 17
#define BOOT_BLOCK_LAST_COMP_VERSION 16
diff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h
index c0d0bea..f84c937 100644
--- a/kexec/kexec-syscall.h
+++ b/kexec/kexec-syscall.h
@@ -115,7 +115,7 @@ static inline long kexec_file_load(int kernel_fd, int initrd_fd,
#define KEXEC_ARCH_MIPS ( 8 << 16)
#define KEXEC_ARCH_CRIS (76 << 16)

-#define KEXEC_MAX_SEGMENTS 16
+#define KEXEC_MAX_SEGMENTS 64

#ifdef __i386__
#define KEXEC_ARCH_NATIVE KEXEC_ARCH_386
--
Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
Dave Young
2016-11-14 05:50:16 UTC
Permalink
Post by Sameer Goel
On a newer UEFI based Qualcomm target the number of system ram regions
retrieved from /proc/iomem are ~40. So increasing the current hardcoded
values to 64 from 16.
There is below uapi in kernel:
include/uapi/linux/kexec.h:#define KEXEC_SEGMENT_MAX 16

So you should fix it in kernel first and update the kexec-tools to use
the kernel header file instead.

Thanks
Dave
Post by Sameer Goel
---
kexec/arch/arm64/kexec-arm64.h | 2 +-
kexec/kexec-syscall.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/kexec/arch/arm64/kexec-arm64.h b/kexec/arch/arm64/kexec-arm64.h
index bac62f8..bd4c20e 100644
--- a/kexec/arch/arm64/kexec-arm64.h
+++ b/kexec/arch/arm64/kexec-arm64.h
@@ -11,7 +11,7 @@
#include "image-header.h"
#include "kexec.h"
-#define KEXEC_SEGMENT_MAX 16
+#define KEXEC_SEGMENT_MAX 64
#define BOOT_BLOCK_VERSION 17
#define BOOT_BLOCK_LAST_COMP_VERSION 16
diff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h
index c0d0bea..f84c937 100644
--- a/kexec/kexec-syscall.h
+++ b/kexec/kexec-syscall.h
@@ -115,7 +115,7 @@ static inline long kexec_file_load(int kernel_fd, int initrd_fd,
#define KEXEC_ARCH_MIPS ( 8 << 16)
#define KEXEC_ARCH_CRIS (76 << 16)
-#define KEXEC_MAX_SEGMENTS 16
+#define KEXEC_MAX_SEGMENTS 64
#ifdef __i386__
#define KEXEC_ARCH_NATIVE KEXEC_ARCH_386
--
Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
_______________________________________________
kexec mailing list
http://lists.infradead.org/mailman/listinfo/kexec
Xunlei Pang
2016-11-14 10:51:57 UTC
Permalink
Post by Sameer Goel
On a newer UEFI based Qualcomm target the number of system ram regions
retrieved from /proc/iomem are ~40. So increasing the current hardcoded
values to 64 from 16.
I am a little confused, memory regions from /proc/iomem should be MAX_MEMORY_RANGES used
as the elfcorehdr, while KEXEC_SEGMENT_MAX stands for the kexec segments passed to the kexec
syscall, like kernel image, initrd image, purgatory, etc.

Do you mean KEXEC_SEGMENT_MAX or MAX_MEMORY_RANGES?

Regards,
Xunlei
Post by Sameer Goel
---
kexec/arch/arm64/kexec-arm64.h | 2 +-
kexec/kexec-syscall.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/kexec/arch/arm64/kexec-arm64.h b/kexec/arch/arm64/kexec-arm64.h
index bac62f8..bd4c20e 100644
--- a/kexec/arch/arm64/kexec-arm64.h
+++ b/kexec/arch/arm64/kexec-arm64.h
@@ -11,7 +11,7 @@
#include "image-header.h"
#include "kexec.h"
-#define KEXEC_SEGMENT_MAX 16
+#define KEXEC_SEGMENT_MAX 64
#define BOOT_BLOCK_VERSION 17
#define BOOT_BLOCK_LAST_COMP_VERSION 16
diff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h
index c0d0bea..f84c937 100644
--- a/kexec/kexec-syscall.h
+++ b/kexec/kexec-syscall.h
@@ -115,7 +115,7 @@ static inline long kexec_file_load(int kernel_fd, int initrd_fd,
#define KEXEC_ARCH_MIPS ( 8 << 16)
#define KEXEC_ARCH_CRIS (76 << 16)
-#define KEXEC_MAX_SEGMENTS 16
+#define KEXEC_MAX_SEGMENTS 64
#ifdef __i386__
#define KEXEC_ARCH_NATIVE KEXEC_ARCH_386
Goel, Sameer
2016-11-14 16:23:25 UTC
Permalink
I meant MAX_MEMORY_RANGES. Updated KEXEC_SEGMENT_MAX to just match this.
I can revert KEXEC_SEGMENT_MAX.

Thanks,
Sameer
Post by Xunlei Pang
Post by Sameer Goel
On a newer UEFI based Qualcomm target the number of system ram regions
retrieved from /proc/iomem are ~40. So increasing the current hardcoded
values to 64 from 16.
I am a little confused, memory regions from /proc/iomem should be MAX_MEMORY_RANGES used
as the elfcorehdr, while KEXEC_SEGMENT_MAX stands for the kexec segments passed to the kexec
syscall, like kernel image, initrd image, purgatory, etc.
Do you mean KEXEC_SEGMENT_MAX or MAX_MEMORY_RANGES?
Regards,
Xunlei
Post by Sameer Goel
---
kexec/arch/arm64/kexec-arm64.h | 2 +-
kexec/kexec-syscall.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/kexec/arch/arm64/kexec-arm64.h b/kexec/arch/arm64/kexec-arm64.h
index bac62f8..bd4c20e 100644
--- a/kexec/arch/arm64/kexec-arm64.h
+++ b/kexec/arch/arm64/kexec-arm64.h
@@ -11,7 +11,7 @@
#include "image-header.h"
#include "kexec.h"
-#define KEXEC_SEGMENT_MAX 16
+#define KEXEC_SEGMENT_MAX 64
#define BOOT_BLOCK_VERSION 17
#define BOOT_BLOCK_LAST_COMP_VERSION 16
diff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h
index c0d0bea..f84c937 100644
--- a/kexec/kexec-syscall.h
+++ b/kexec/kexec-syscall.h
@@ -115,7 +115,7 @@ static inline long kexec_file_load(int kernel_fd, int initrd_fd,
#define KEXEC_ARCH_MIPS ( 8 << 16)
#define KEXEC_ARCH_CRIS (76 << 16)
-#define KEXEC_MAX_SEGMENTS 16
+#define KEXEC_MAX_SEGMENTS 64
#ifdef __i386__
#define KEXEC_ARCH_NATIVE KEXEC_ARCH_386
--
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project.
Loading...