[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250131113830.925179-4-sourabhjain@linux.ibm.com>
Date: Fri, 31 Jan 2025 17:08:26 +0530
From: Sourabh Jain <sourabhjain@...ux.ibm.com>
To: linuxppc-dev@...ts.ozlabs.org
Cc: Sourabh Jain <sourabhjain@...ux.ibm.com>,
Andrew Morton <akpm@...ux-foundation.org>, Baoquan he <bhe@...hat.com>,
Hari Bathini <hbathini@...ux.ibm.com>,
Madhavan Srinivasan <maddy@...ux.ibm.com>,
Mahesh Salgaonkar <mahesh@...ux.ibm.com>,
Michael Ellerman <mpe@...erman.id.au>, kexec@...ts.infradead.org,
linux-kernel@...r.kernel.org
Subject: [PATCH v3 3/7] crash: Let arch decide usable memory range in reserved area
Although the crashkernel area is reserved, on architectures like
PowerPC, it is possible for the crashkernel reserved area to contain
components like RTAS, TCE, OPAL, etc. To avoid placing kexec segments
over these components, PowerPC has its own set of APIs to locate holes
in the crashkernel reserved area.
Add an arch hook in the generic locate mem hole APIs so that
architectures can handle such special regions in the crashkernel area
while locating memory holes for kexec segments using generic APIs.
With this, a lot of redundant arch-specific code can be removed, as it
performs the exact same job as the generic APIs.
To keep the generic and arch-specific changes separate, the changes
related to moving PowerPC to use the generic APIs and the removal of
PowerPC-specific APIs for memory hole allocation are done in a
subsequent patch titled "powerpc/crash: Use generic APIs to locate
memory hole for kdump.
Cc: Andrew Morton <akpm@...ux-foundation.org>
Cc: Baoquan he <bhe@...hat.com>
Cc: Hari Bathini <hbathini@...ux.ibm.com>
Cc: Madhavan Srinivasan <maddy@...ux.ibm.com>
Cc: Mahesh Salgaonkar <mahesh@...ux.ibm.com>
Cc: Michael Ellerman <mpe@...erman.id.au>
Cc: kexec@...ts.infradead.org
Cc: linux-kernel@...r.kernel.org
Signed-off-by: Sourabh Jain <sourabhjain@...ux.ibm.com>
---
include/linux/kexec.h | 9 +++++++++
kernel/kexec_file.c | 12 ++++++++++++
2 files changed, 21 insertions(+)
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index f0e9f8eda7a3..407f8b0346aa 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -205,6 +205,15 @@ static inline int arch_kimage_file_post_load_cleanup(struct kimage *image)
}
#endif
+#ifndef arch_check_excluded_range
+static inline int arch_check_excluded_range(struct kimage *image,
+ unsigned long start,
+ unsigned long end)
+{
+ return 0;
+}
+#endif
+
#ifdef CONFIG_KEXEC_SIG
#ifdef CONFIG_SIGNED_PE_FILE_VERIFICATION
int kexec_kernel_verify_pe_sig(const char *kernel, unsigned long kernel_len);
diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
index 3eedb8c226ad..fba686487e3b 100644
--- a/kernel/kexec_file.c
+++ b/kernel/kexec_file.c
@@ -464,6 +464,12 @@ static int locate_mem_hole_top_down(unsigned long start, unsigned long end,
continue;
}
+ /* Make sure this does not conflict with exclude range */
+ if (arch_check_excluded_range(image, temp_start, temp_end)) {
+ temp_start = temp_start - PAGE_SIZE;
+ continue;
+ }
+
/* We found a suitable memory range */
break;
} while (1);
@@ -498,6 +504,12 @@ static int locate_mem_hole_bottom_up(unsigned long start, unsigned long end,
continue;
}
+ /* Make sure this does not conflict with exclude range */
+ if (arch_check_excluded_range(image, temp_start, temp_end)) {
+ temp_start = temp_start + PAGE_SIZE;
+ continue;
+ }
+
/* We found a suitable memory range */
break;
} while (1);
--
2.48.1
Powered by blists - more mailing lists